Re: [PATCH 18/20] doc: Add TCP provider documentation

Alan Maguire <[email protected]>
Newsgroups dev.linux.lists.dtrace
Message-ID <[email protected]>
On 26/09/2025 20:05, [email protected] wrote:
> From: Eugene Loh <[email protected]>
> 
> Signed-off-by: Eugene Loh <[email protected]>

Reviewed-by: Alan Maguire <[email protected]>

Future work we should think about; add a few examples to each provider
doc. But getting the core documentation is a massive step!

> ---
>  doc/userguide/index.md                        |   7 +
>  doc/userguide/reference/dtrace_providers.md   |   2 +
>  .../reference/dtrace_providers_tcp.md         | 128 ++++++++++++++++++
>  3 files changed, 137 insertions(+)
>  create mode 100644 doc/userguide/reference/dtrace_providers_tcp.md
> 
> diff --git a/doc/userguide/index.md b/doc/userguide/index.md
> index 18b9bcd68..d47df094b 100644
> --- a/doc/userguide/index.md
> +++ b/doc/userguide/index.md
> @@ -259,6 +259,13 @@
>          -   [syscall Probes](reference/dtrace_providers_syscall.md#syscall-probes)
>          -   [syscall Probe Arguments](reference/dtrace_providers_syscall.md#syscall-probe-arguments)
>          -   [syscall Stability](reference/dtrace_providers_syscall.md#syscall-stability)
> +    -   [TCP Provider](reference/dtrace_providers_tcp.md)
> +        -   [tcp Probes](reference/dtrace_providers_tcp.md#tcp-probes)
> +        -   [tcp Probe Arguments](reference/dtrace_providers_tcp.md#tcp-probe-arguments)
> +            -   [tcpinfo\_t](reference/dtrace_providers_tcp.md#tcpinfo_t)
> +            -   [tcpsinfo\_t](reference/dtrace_providers_tcp.md#tcpsinfo_t)
> +            -   [tcplsinfo\_t](reference/dtrace_providers_tcp.md#tcplsinfo_t)
> +        -   [tcp Stability](reference/dtrace_providers_tcp.md#tcp-stability)
>      -   [USDT Provider](reference/dtrace-ref-StaticallyDefinedTracingofUserApplications.md)
>          -   [Defining USDT Providers and Probes](reference/dtrace-ref-StaticallyDefinedTracingofUserApplications.md#defining-usdt-providers-and-probes)
>          -   [Adding USDT Probes to Application Code](reference/dtrace-ref-StaticallyDefinedTracingofUserApplications.md#adding-usdt-probes-to-application-code)
> diff --git a/doc/userguide/reference/dtrace_providers.md b/doc/userguide/reference/dtrace_providers.md
> index 54a018d5c..029f62c54 100644
> --- a/doc/userguide/reference/dtrace_providers.md
> +++ b/doc/userguide/reference/dtrace_providers.md
> @@ -29,5 +29,7 @@ The `sched` provider makes available probes related to CPU scheduling.
>  The Statically Defined Tracing \(SDT\) provider \(`sdt`\) creates probes at sites that a software programmer has formally designated. Thus, the SDT provider is chiefly of interest only to developers of new providers. Most users access SDT only indirectly by using other providers.
>  -   **[Syscall Provider](../reference/dtrace_providers_syscall.md)**  
>  The `syscall` provider makes available a probe at the entry to and return from every system call in the system.
> +-   **[TCP Provider](../reference/dtrace_providers_tcp.md)**  
> +The `tcp` provider makes available probe at different phases of TCP processing.
>  -   **[USDT Provider](../reference/dtrace-ref-StaticallyDefinedTracingofUserApplications.md)**
>  Use the USDT provider, for user space statically defined tracing, to instrument user space code with probes that are meaningful for an application.
> diff --git a/doc/userguide/reference/dtrace_providers_tcp.md b/doc/userguide/reference/dtrace_providers_tcp.md
> new file mode 100644
> index 000000000..9f6e4928c
> --- /dev/null
> +++ b/doc/userguide/reference/dtrace_providers_tcp.md
> @@ -0,0 +1,128 @@
> +
> +# TCP Provider
> +
> +The `tcp` provider makes available probes that mark different
> +phases of tcp processing.
> +
> +**Parent topic:**[DTrace Provider Reference](../reference/dtrace_providers.md)
> +
> +## tcp Probes
> +
> +`tcp` provides a probe for each of TCP accept (established or refused), connect
> +(request, established, refused), send, receive, and state-change:
> +
> +- `accept-established`
> +- `accept-refused`
> +- `connect-request`
> +- `connect-established`
> +- `connect-refused`
> +- `send`
> +- `receive`
> +- `state-change`
> +
> +The module name is always `vmlinux` and the function name is empty.
> +
> +## tcp Probe Arguments
> +
> +The following table lists the argument types for `tcp` probes.
> +
> +| probe                 | `args[0]`     | `args[1]`    | `args[2]`    | `args[3]`      | `args[4]`     | `args[5]`       |
> +| :---                  | :---          | :---         | :---         | :---           | :---          | :---            |
> +| `accept-established`  | `pktinfo_t *` | `csinfo_t *` | `ipinfo_t *` | `tcpsinfo_t *` | `tcpinfo_t *` | `void`          |
> +| `accept-refused`      | `pktinfo_t *` | `csinfo_t *` | `ipinfo_t *` | `tcpsinfo_t *` | `tcpinfo_t *` | `void`          |
> +| `connect-request`     | `pktinfo_t *` | `csinfo_t *` | `ipinfo_t *` | `tcpsinfo_t *` | `tcpinfo_t *` | `void`          |
> +| `connect-established` | `pktinfo_t *` | `csinfo_t *` | `ipinfo_t *` | `tcpsinfo_t *` | `tcpinfo_t *` | `void`          |
> +| `connect-refused`     | `pktinfo_t *` | `csinfo_t *` | `ipinfo_t *` | `tcpsinfo_t *` | `tcpinfo_t *` | `void`          |
> +| `send`                | `pktinfo_t *` | `csinfo_t *` | `ipinfo_t *` | `tcpsinfo_t *` | `tcpinfo_t *` | `void`          |
> +| `receive`             | `pktinfo_t *` | `csinfo_t *` | `ipinfo_t *` | `tcpsinfo_t *` | `tcpinfo_t *` | `void`          |
> +| `state-change`        | `void`        | `csinfo_t *` | `void`       | `tcpsinfo_t *` | `void`        | `tcplsinfo_t *` |
> +
> +The `pktinfo_t`, `csinfo_t`, and `ipinfo_t` structures are described in [IP Provider](dtrace_providers_ip.md).
> +


this is the table format we should standardize across provider docs IMO;
having a standard format will help the LLMs likely.


> +### tcpinfo\_t
> +
> +The `tcpinfo_t` structure contains TCP header fields.
> +Detailed information about this data structure can be found in `/usr/lib64/dtrace/*version*/tcp.d`.
> +The definition of `tcpinfo_t` is as follows:
> +
> +```nocopybutton
> +typedef struct tcpinfo {
> +        uint16_t tcp_sport;      /* source port */
> +        uint16_t tcp_dport;      /* destination port */
> +        uint32_t tcp_seq;        /* sequence number */
> +        uint32_t tcp_ack;        /* acknowledgment number */
> +        uint8_t tcp_offset;      /* data offset, in bytes */
> +        uint8_t tcp_flags;       /* flags */
> +        uint16_t tcp_window;     /* window size */
> +        uint16_t tcp_checksum;   /* checksum */
> +        uint16_t tcp_urgent;     /* urgent data pointer */
> +        uintptr_t tcp_hdr;       /* raw TCP header */
> +} tcpinfo_t;
> +```
> +
> +**Note:**
> +
> +DTrace translates the members of `tcpinfo_t` from a `struct tcphdr *`.
> +
> +### tcpsinfo\_t
> +
> +The `tcpsinfo_t` structure contains stable TCP details from tcp_t.
> +Detailed information about this data structure can be found in `/usr/lib64/dtrace/*version*/tcp.d`.
> +The definition of `tcpsinfo_t` is as follows:
> +
> +```nocopybutton
> +typedef struct tcpsinfo {
> +        uintptr_t tcps_addr;
> +        int tcps_local;              /* is delivered locally, boolean */
> +        uint16_t tcps_lport;         /* local port */
> +        uint16_t tcps_rport;         /* remote port */
> +        string tcps_laddr;           /* local address, as a string */
> +        string tcps_raddr;           /* remote address, as a string */
> +        int tcps_state;              /* TCP state */
> +        uint32_t tcps_iss;           /* Initial sequence # sent */
> +        uint32_t tcps_suna;          /* sequence # sent but unacked */
> +        uint32_t tcps_snxt;          /* next sequence # to send */
> +        uint32_t tcps_rnxt;          /* next sequence # expected */
> +        uint32_t tcps_swnd;          /* send window size */
> +        int32_t tcps_snd_ws;         /* send window scaling */
> +        uint32_t tcps_rwnd;          /* receive window size */
> +        int32_t tcps_rcv_ws;         /* receive window scaling */
> +        uint32_t tcps_cwnd;          /* congestion window */
> +        uint32_t tcps_cwnd_ssthresh; /* threshold for congestion avoidance */
> +        uint32_t tcps_sack_snxt;     /* next SACK seq # for retransmission */
> +        uint32_t tcps_rto;           /* round-trip timeout, msec */
> +        uint32_t tcps_mss;           /* max segment size */
> +        int tcps_retransmit;         /* retransmit send event, boolean */
> +        uint32_t tcps_rtt;           /* smoothed avg round-trip time, msec */
> +        uint32_t tcps_rtt_sd;        /* standard deviation of RTT */
> +        uint32_t tcps_irs;           /* Initial recv sequence # */
> +} tcpsinfo_t;
> +```
> +
> +**Note:**
> +
> +DTrace translates the members of `tcpsinfo_t` from a `struct tcp_sock *`.
> +
> +### tcplsinfo\_t> +
> +The `tcplsinfo_t` structure has the old tcp state for state changes.
> +Detailed information about this data structure can be found in `/usr/lib64/dtrace/*version*/tcp.d`.
> +The definition of `tcplsinfo_t` is as follows:
> +
> +```nocopybutton
> +typedef struct tcplsinfo {
> +        int tcps_state;        /* previous TCP state */
> +} tcplsinfo_t;
> +```
> +
> +## tcp Stability
> +
> +The `tcp` provider uses DTrace's stability mechanism to describe its stabilities. These stability values are listed in the following table.
> +
> +| Element   | Name Stability | Data Stability | Dependency Class |
> +| :---      | :---           | :---           | :---             |
> +| Provider  | Evolving       | Evolving       | ISA              |
> +| Module    | Private        | Private        | Unknown          |
> +| Function  | Private        | Private        | Unknown          |
> +| Name      | Evolving       | Evolving       | ISA              |
> +| Arguments | Evolving       | Evolving       | ISA              |
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.