Provided by: freebsd-manpages_12.2-1_all bug


     dtrace_sctp — a DTrace provider for tracing events related to the sctp(4) protocol


     sctp:cwnd::init(uint32_t, uint32_t, uintptr_t, int, int);

     sctp:cwnd::ack(uint32_t, uint32_t, uintptr_t, int, int);

     sctp:cwnd::rttvar(uint64_t, uint64_t, uint64_t, uint64_t, uint64_t);

     sctp:cwnd::rttstep(uint64_t, uint64_t, uint64_t, uint64_t, uint64_t);

     sctp:cwnd::fr(uint32_t, uint32_t, uintptr_t, int, int);

     sctp:cwnd::to(uint32_t, uint32_t, uintptr_t, int, int);

     sctp:cwnd::bl(uint32_t, uint32_t, uintptr_t, int, int);

     sctp:cwnd::ecn(uint32_t, uint32_t, uintptr_t, int, int);

     sctp:cwnd::pd(uint32_t, uint32_t, uintptr_t, int, int);

     sctp:rwnd:assoc:val(uint32_t, uint32_t, int, int);

     sctp:flightsize:net:val(uint32_t, uint32_t, uintptr_t, int, int);

     sctp:flightsize:assoc:val(uint32_t, uint32_t, int, int);

     sctp:::receive(pktinfo_t *, csinfo_t *, ipinfo_t *, sctpsinfo_t *, sctpinfo_t *);

     sctp:::send(pktinfo_t *, csinfo_t *, ipinfo_t *, sctpsinfo_t *, sctpinfo_t *);

     sctp:::state-change(void *, csinfo_t *, void *, sctpsinfo_t *, void *, sctplsinfo_t *);


     The DTrace sctp provider allows users to trace events in the sctp(4) protocol
     implementation.  This provider is similar to the dtrace_ip(4) and dtrace_udp(4) providers,
     but additionally contains probes corresponding to protocol events at a level higher than
     packet reception and transmission.

     The sctp:cwnd::() probes track changes in the congestion window on a netp.  The
     sctp:rwnd::() probes track changes in the receiver window for an assoc.  The
     sctp:flightsize:net:val() probe tracks changes in the flight size on a net or assoc and the
     sctp:flightsize:assoc:val() probe provides the total flight version.

     The arguments of all sctp probes except for sctp:cwnd::rtt*() and sctp::assoc:val() are the
     Vtag for this end, the port number of the local side, the pointer to struct sctp_nets
     *changing, the old value of the cwnd, and the new value of the cwnd.

     The arguments of sctp:::val() are similar to the above except the fourth argument is the
     up/down amount.

     The sctp:cwnd::rtt*() probe arguments are a bitmap of Vtag << 32 | localport << 16 |
     remoteport, a bitmap of obw | nbw, a bitmap of bwrtt | newrtt, flight, and a bitmap of (cwnd
     << 32) | point << 16 | retval(0/1).

     The sctp:cwnd::init() probe fires when a remotely-initiated active SCTP open succeeds.  At
     this point the new connection is in the ESTABLISHED state, and the probe arguments expose
     the headers associated with the final ACK of the four-way handshake.

     The sctp:::send() and sctp:::receive() probes fire when the host sends or receives an SCTP
     packet, respectively.  As with the dtrace_udp(4) provider, sctp probes fire only for packets
     sent by or to the local host; forwarded packets are handled in the IP layer and are only
     visible to the dtrace_ip(4) provider.

     The sctp:::state-change() probe fires upon local SCTP association state transitions.  Its
     first, third and fifth arguments are currently always NULL.  Its last argument describes the
     from-state in the transition, and the to-state can be obtained from args[3]->sctps_state.


     /usr/lib/dtrace/sctp.d  DTrace type and translator definitions for the sctp provider.


     A script that logs SCTP packets in real time:

           #pragma D option quiet
           #pragma D option switchrate=10hz

                   printf(" %3s %15s:%-5s      %15s:%-5s0, "CPU",
                       "LADDR", "LPORT", "RADDR", "RPORT");

                   printf(" %3d %16s:%-5d -> %16s:%-5d0, cpu,
                       args[2]->ip_saddr, args[4]->sctp_sport,
                       args[2]->ip_daddr, args[4]->sctp_dport);

                   printf(" %3d %16s:%-5d <- %16s:%-5d0, cpu,
                       args[2]->ip_daddr, args[4]->sctp_dport,
                       args[2]->ip_saddr, args[4]->sctp_sport);
     A script that logs SCTP association state changes as they occur:

           #pragma D option quiet
           #pragma D option switchrate=10

           int last[int];

                   printf(" %3s %12s  %-25s    %-25s0,
                       "CPU", "DELTA(us)", "OLD", "NEW");

           / last[args[1]->cs_cid] /
                   this->elapsed = (timestamp - last[args[1]->cs_cid]) / 1000;
                   printf(" %3d %12d  %-25s -> %-25s0, cpu, this->elapsed,
                   last[args[1]->cs_cid] = timestamp;

           / last[args[1]->cs_cid] == 0 /
                   printf(" %3d %12s  %-25s -> %-25s0, cpu, "-",
                   last[args[1]->cs_cid] = timestamp;


     The sctp:::send(), sctp:::receive(), and sctp:::state-change() probes are compatible with
     the sctp provider in Solaris.  All other probes are only available in FreeBSD.


     dtrace(1), dtrace_ip(4), dtrace_udp(4), dtrace_udplite(4), sctp(4), SDT(9)


     This manual page was written by Devin Teske <>.