summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cddl/lib/libdtrace/tcp.d14
-rw-r--r--share/dtrace/Makefile1
-rwxr-xr-xshare/dtrace/tcpdebug6
3 files changed, 19 insertions, 2 deletions
diff --git a/cddl/lib/libdtrace/tcp.d b/cddl/lib/libdtrace/tcp.d
index da55c1d..ec73503 100644
--- a/cddl/lib/libdtrace/tcp.d
+++ b/cddl/lib/libdtrace/tcp.d
@@ -102,6 +102,7 @@ typedef struct tcpsinfo {
string tcps_raddr; /* remote address, as a string */
int32_t tcps_state; /* TCP state */
uint32_t tcps_iss; /* Initial sequence # sent */
+ uint32_t tcps_irs; /* Initial sequence # received */
uint32_t tcps_suna; /* sequence # sent but unacked */
uint32_t tcps_smax; /* highest sequence number sent */
uint32_t tcps_snxt; /* next sequence # to send */
@@ -112,10 +113,12 @@ typedef struct tcpsinfo {
uint32_t tcps_swl1; /* window update seg seq number */
uint32_t tcps_swl2; /* window update seg ack number */
uint32_t tcps_rup; /* receive urgent pointer */
+ uint32_t tcps_radv; /* advertised window */
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_srecover; /* for use in NewReno Fast Recovery */
uint32_t tcps_sack_fack; /* SACK sequence # we have acked */
uint32_t tcps_sack_snxt; /* next SACK seq # for retransmission */
uint32_t tcps_rto; /* round-trip timeout, msec */
@@ -123,6 +126,10 @@ typedef struct tcpsinfo {
int tcps_retransmit; /* retransmit send event, boolean */
int tcps_srtt; /* smoothed RTT in units of (TCP_RTT_SCALE*hz) */
int tcps_debug; /* socket has SO_DEBUG set */
+ int32_t tcps_dupacks; /* consecutive dup acks received */
+ uint32_t tcps_rtttime; /* RTT measurement start time */
+ uint32_t tcps_rtseq; /* sequence # being timed */
+ uint32_t tcps_ts_recent; /* timestamp echo data */
} tcpsinfo_t;
/*
@@ -192,6 +199,7 @@ translator tcpsinfo_t < struct tcpcb *p > {
inet_ntoa6(&p->t_inpcb->inp_inc.inc_ie.ie_dependfaddr.ie6_foreign);
tcps_state = p == NULL ? -1 : p->t_state;
tcps_iss = p == NULL ? 0 : p->iss;
+ tcps_irs = p == NULL ? 0 : p->irs;
tcps_suna = p == NULL ? 0 : p->snd_una;
tcps_smax = p == NULL ? 0 : p->snd_max;
tcps_snxt = p == NULL ? 0 : p->snd_nxt;
@@ -201,11 +209,13 @@ translator tcpsinfo_t < struct tcpcb *p > {
tcps_snd_ws = p == NULL ? -1 : p->snd_scale;
tcps_swl1 = p == NULL ? -1 : p->snd_wl1;
tcps_swl2 = p == NULL ? -1 : p->snd_wl2;
+ tcps_radv = p == NULL ? -1 : p->rcv_adv;
tcps_rwnd = p == NULL ? -1 : p->rcv_wnd;
tcps_rup = p == NULL ? -1 : p->rcv_up;
tcps_rcv_ws = p == NULL ? -1 : p->rcv_scale;
tcps_cwnd = p == NULL ? -1 : p->snd_cwnd;
tcps_cwnd_ssthresh = p == NULL ? -1 : p->snd_ssthresh;
+ tcps_srecover = p == NULL ? -1 : p->snd_recover;
tcps_sack_fack = p == NULL ? 0 : p->snd_fack;
tcps_sack_snxt = p == NULL ? 0 : p->sack_newdata;
tcps_rto = p == NULL ? -1 : (p->t_rxtcur * 1000) / `hz;
@@ -214,6 +224,10 @@ translator tcpsinfo_t < struct tcpcb *p > {
tcps_srtt = p == NULL ? -1 : p->t_srtt; /* smoothed RTT in units of (TCP_RTT_SCALE*hz) */
tcps_debug = p == NULL ? 0 :
p->t_inpcb->inp_socket->so_options & 1;
+ tcps_dupacks = p == NULL ? -1 : p->t_dupacks;
+ tcps_rtttime = p == NULL ? -1 : p->t_rtttime;
+ tcps_rtseq = p == NULL ? -1 : p->t_rtseq;
+ tcps_ts_recent = p == NULL ? -1 : p->ts_recent;
};
#pragma D binding "1.6.3" translator
diff --git a/share/dtrace/Makefile b/share/dtrace/Makefile
index 83bc48e..8daa75b 100644
--- a/share/dtrace/Makefile
+++ b/share/dtrace/Makefile
@@ -20,6 +20,7 @@ SCRIPTS= blocking \
nfsclienttime \
siftr \
tcpconn \
+ tcpdebug \
tcpstate \
tcptrack \
udptrack \
diff --git a/share/dtrace/tcpdebug b/share/dtrace/tcpdebug
index 411aaf3..9158c39 100755
--- a/share/dtrace/tcpdebug
+++ b/share/dtrace/tcpdebug
@@ -83,7 +83,8 @@ tcp:kernel::debug-output
{
seq = args[1]->tcp_seq;
ack = args[1]->tcp_ack;
- len = args[2]->ip_plength - 20;
+ len = args[2]->ip_plength - sizeof(struct tcphdr);
+ flags = args[1]->tcp_flags;
printf("%p %s: output [%x..%x]", arg0,
tcp_state_string[args[0]->tcps_state], seq, seq + len);
@@ -120,7 +121,8 @@ tcp:kernel::debug-drop
seq = args[1]->tcp_seq;
ack = args[1]->tcp_ack;
- len = args[2]->ip_plength;
+ len = args[2]->ip_plength - sizeof(struct tcphdr);
+ flags = args[1]->tcp_flags;
printf("%p %s: drop [%x..%x]", arg0,
tcp_state_string[args[0]->tcps_state], seq, seq + len);
OpenPOWER on IntegriCloud