Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 2 Jul 2023 13:32:40 GMT
From:      Michael Tuexen <tuexen@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 2176c9ab71c8 - main - dtrace: improve siftr probe
Message-ID:  <202307021332.362DWe38071271@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by tuexen:

URL: https://cgit.FreeBSD.org/src/commit/?id=2176c9ab71c85efd90a6c7af4a9e04fe8e3d49ca

commit 2176c9ab71c85efd90a6c7af4a9e04fe8e3d49ca
Author:     Michael Tuexen <tuexen@FreeBSD.org>
AuthorDate: 2023-07-02 01:08:51 +0000
Commit:     Michael Tuexen <tuexen@FreeBSD.org>
CommitDate: 2023-07-02 01:08:51 +0000

    dtrace: improve siftr probe
    
    Improve consistency of the field names with tcpsinfo_t:
    * Use mss instead of max_seg_size.
    * Use lport and rport instead of tcp_localport and tcp_foreignport.
    
    Use t_flags instead of flags to improve consistency with t_flags2.
    
    Add laddr and raddr, since the addresses were missing when compared
    to the output of siftr.
    
    Reviewed by:            cc
    Sponsored by:           Netflix, Inc.
    Differential Revision:  https://reviews.freebsd.org/D40834
---
 cddl/lib/libdtrace/siftr.d  | 27 +++++++++++++++++++--------
 share/man/man4/dtrace_tcp.4 | 26 +++++++++++++++-----------
 sys/netinet/siftr.c         | 29 ++++++++++++++++-------------
 3 files changed, 50 insertions(+), 32 deletions(-)

diff --git a/cddl/lib/libdtrace/siftr.d b/cddl/lib/libdtrace/siftr.d
index 791693db7638..ecb307822671 100644
--- a/cddl/lib/libdtrace/siftr.d
+++ b/cddl/lib/libdtrace/siftr.d
@@ -21,6 +21,7 @@
  * $FreeBSD$
  */
 
+#pragma D depends_on library ip.d
 #pragma D depends_on module kernel
 #pragma D depends_on module siftr
 #pragma D depends_on provider tcp
@@ -44,20 +45,22 @@ typedef struct siftrinfo {
 	struct timeval		tval;
 	uint8_t			direction;
 	uint8_t			ipver;
-	uint16_t		tcp_localport;
-	uint16_t		tcp_foreignport;
+	uint16_t		lport;
+	uint16_t		rport;
+	string 			laddr;
+	string 			raddr;
 	uint32_t		snd_cwnd;
 	uint32_t		snd_wnd;
 	uint32_t		rcv_wnd;
 	uint32_t		t_flags2;
 	uint32_t		snd_ssthresh;
 	int			conn_state;
-	u_int			max_seg_size;
+	uint32_t		mss;
 	uint32_t		srtt;
 	u_char			sack_enabled;
 	u_char			snd_scale;
 	u_char			rcv_scale;
-	u_int			flags;
+	u_int			t_flags;
 	uint32_t		rto;
 	u_int			snd_buf_hiwater;
 	u_int			snd_buf_cc;
@@ -73,20 +76,28 @@ typedef struct siftrinfo {
 translator siftrinfo_t < struct pkt_node *p > {
 	direction = 		p == NULL ? 0 : p->direction;
 	ipver =			p == NULL ? 0 : p->ipver;
-	tcp_localport =		p == NULL ? 0 : ntohs(p->tcp_localport);
-	tcp_foreignport =	p == NULL ? 0 : ntohs(p->tcp_foreignport);
+	lport =			p == NULL ? 0 : ntohs(p->lport);
+	rport =			p == NULL ? 0 : ntohs(p->fport);
+	laddr =			p == NULL ? "<unknown>" :
+	    p->ipver == INP_IPV4 ?
+	    inet_ntoa(&p->laddr.id46_addr.ia46_addr4.s_addr) :
+	    inet_ntoa6(&p->laddr.id6_addr);
+	raddr =			p == NULL ? "<unknown>" :
+	    p->ipver == INP_IPV4 ?
+	    inet_ntoa(&p->faddr.id46_addr.ia46_addr4.s_addr) :
+	    inet_ntoa6(&p->faddr.id6_addr);
 	snd_cwnd =		p == NULL ? 0 : p->snd_cwnd;
 	snd_wnd =		p == NULL ? 0 : p->snd_wnd;
 	rcv_wnd =		p == NULL ? 0 : p->rcv_wnd;
 	t_flags2 =		p == NULL ? 0 : p->t_flags2;
 	snd_ssthresh =		p == NULL ? 0 : p->snd_ssthresh;
 	conn_state =		p == NULL ? 0 : p->conn_state;
-	max_seg_size = 		p == NULL ? 0 : p->max_seg_size;
+	mss = 			p == NULL ? 0 : p->mss;
 	srtt =			p == NULL ? 0 : p->srtt;
 	sack_enabled = 		p == NULL ? 0 : p->sack_enabled;
 	snd_scale =		p == NULL ? 0 : p->snd_scale;
 	rcv_scale =		p == NULL ? 0 : p->rcv_scale;
-	flags =			p == NULL ? 0 : p->flags;
+	t_flags =		p == NULL ? 0 : p->t_flags;
 	rto =			p == NULL ? 0 : p->rto;
 	snd_buf_hiwater =	p == NULL ? 0 : p->snd_buf_hiwater;
 	snd_buf_cc = 		p == NULL ? 0 : p->snd_buf_cc;
diff --git a/share/man/man4/dtrace_tcp.4 b/share/man/man4/dtrace_tcp.4
index 49dd9449d887..0bb5b79169e4 100644
--- a/share/man/man4/dtrace_tcp.4
+++ b/share/man/man4/dtrace_tcp.4
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd July 1, 2023
+.Dd July 2, 2023
 .Dt DTRACE_TCP 4
 .Os
 .Sh NAME
@@ -319,10 +319,14 @@ Either
 for IPv4, or
 .Qq 2
 for IPv6.
-.It Vt uint16_t tcp_localport
+.It Vt uint16_t lport
 The TCP port that the local host is communicating via.
-.It Vt uint16_t tcp_foreignport
-The TCP port that the foreign host is communicating via.
+.It Vt uint16_t rport
+The TCP port that the remote host is communicating via.
+.It Vt string laddr
+The IPv4 or IPv6 address of the local host.
+.It Vt string raddr
+The IPv4 or IPv6 address of the remote host.
 .It Vt uint32_t snd_cwnd
 The current congestion window (CWND) for the flow, in bytes.
 .It Vt uint32_t snd_wnd
@@ -342,8 +346,8 @@ The valid TCP state values are given by the constants prefixed with
 .Ql TCPS_
 in
 .Pa /usr/lib/dtrace/tcp.d .
-.It Vt u_int max_seg_size
-The maximum segment size for the flow, in bytes.
+.It Vt uint32_t mss
+The maximum segment size (MSS) for the flow, in bytes.
 .It Vt uint32_t srtt
 The current smoothed RTT (SRTT) for the flow in microseconds.
 .It Vt u_char sack_enabled
@@ -352,7 +356,7 @@ SACK enabled indicator. 1 if SACK enabled, 0 otherwise.
 The current window scaling factor for the sending window.
 .It Vt u_char rcv_scale
 The current window scaling factor for the receiving window.
-.It Vt u_int flags
+.It Vt u_int t_flags
 The current value of the t_flags for the flow.
 .It Vt uint32_t rto
 The current retransmission timeout (RTO) for the flow in microseconds.
@@ -480,15 +484,15 @@ and SSTHRESH when a packet is sent or received:
 
 dtrace:::BEGIN
 {
-        printf(" %3s %5s %5s %10s %10s\\n",
-               "DIR", "LPORT", "RPORT", "CWND", "SSTHRESH");
+        printf(" %3s %16s:%-5s %16s:%-5s %10s %10s\\n",
+            "DIR", "LADDR", "LPORT", "RADDR", "RPORT", "CWND", "SSTHRESH");
 }
 
 tcp:::siftr
 {
-        printf(" %3s %5d %5d %10d %10d\\n",
+        printf(" %3s %16s:%-5d %16s:%-5d %10u %10u\\n",
             siftr_dir_string[args[0]->direction],
-            args[0]->tcp_localport, args[0]->tcp_foreignport,
+            args[0]->laddr, args[0]->lport, args[0]->raddr, args[0]->rport,
             args[0]->snd_cwnd, args[0]->snd_ssthresh);
 }
 .Ed
diff --git a/sys/netinet/siftr.c b/sys/netinet/siftr.c
index abbb72a05b06..9154f89fba30 100644
--- a/sys/netinet/siftr.c
+++ b/sys/netinet/siftr.c
@@ -163,9 +163,13 @@ struct pkt_node {
 	/* IP version pkt_node relates to; either INP_IPV4 or INP_IPV6. */
 	uint8_t			ipver;
 	/* Local TCP port. */
-	uint16_t		tcp_localport;
+	uint16_t		lport;
 	/* Foreign TCP port. */
-	uint16_t		tcp_foreignport;
+	uint16_t		fport;
+	/* Local address. */
+	union in_dependaddr	laddr;
+	/* Foreign address. */
+	union in_dependaddr	faddr;
 	/* Congestion Window (bytes). */
 	uint32_t		snd_cwnd;
 	/* Sending Window (bytes). */
@@ -179,7 +183,7 @@ struct pkt_node {
 	/* Current state of the TCP FSM. */
 	int			conn_state;
 	/* Max Segment Size (bytes). */
-	u_int			max_seg_size;
+	uint32_t		mss;
 	/* Smoothed RTT (usecs). */
 	uint32_t		srtt;
 	/* Is SACK enabled? */
@@ -189,7 +193,7 @@ struct pkt_node {
 	/* Window scaling for recv window. */
 	u_char			rcv_scale;
 	/* TCP control block flags. */
-	u_int			flags;
+	u_int			t_flags;
 	/* Retransmission timeout (usec). */
 	uint32_t		rto;
 	/* Size of the TCP send buffer in bytes. */
@@ -223,7 +227,6 @@ struct flow_info
 #endif
 	uint16_t	lport;			/* local TCP port */
 	uint16_t	fport;			/* foreign TCP port */
-	uint8_t		ipver;			/* IP version */
 	uint32_t	key;			/* flowid of the connection */
 };
 
@@ -427,10 +430,10 @@ siftr_process_pkt(struct pkt_node * pkt_node)
 	    pkt_node->snd_scale,
 	    pkt_node->rcv_scale,
 	    pkt_node->conn_state,
-	    pkt_node->max_seg_size,
+	    pkt_node->mss,
 	    pkt_node->srtt,
 	    pkt_node->sack_enabled,
-	    pkt_node->flags,
+	    pkt_node->t_flags,
 	    pkt_node->rto,
 	    pkt_node->snd_buf_hiwater,
 	    pkt_node->snd_buf_cc,
@@ -642,8 +645,10 @@ siftr_siftdata(struct pkt_node *pn, struct inpcb *inp, struct tcpcb *tp,
     int ipver, int dir, int inp_locally_locked)
 {
 	pn->ipver = ipver;
-	pn->tcp_localport = inp->inp_lport;
-	pn->tcp_foreignport = inp->inp_fport;
+	pn->lport = inp->inp_lport;
+	pn->fport = inp->inp_fport;
+	pn->laddr = inp->inp_inc.inc_ie.ie_dependladdr;
+	pn->faddr = inp->inp_inc.inc_ie.ie_dependfaddr;
 	pn->snd_cwnd = tp->snd_cwnd;
 	pn->snd_wnd = tp->snd_wnd;
 	pn->rcv_wnd = tp->rcv_wnd;
@@ -652,10 +657,10 @@ siftr_siftdata(struct pkt_node *pn, struct inpcb *inp, struct tcpcb *tp,
 	pn->snd_scale = tp->snd_scale;
 	pn->rcv_scale = tp->rcv_scale;
 	pn->conn_state = tp->t_state;
-	pn->max_seg_size = tp->t_maxseg;
+	pn->mss = tp->t_maxseg;
 	pn->srtt = ((uint64_t)tp->t_srtt * tick) >> TCP_RTT_SHIFT;
 	pn->sack_enabled = (tp->t_flags & TF_SACK_PERMIT) != 0;
-	pn->flags = tp->t_flags;
+	pn->t_flags = tp->t_flags;
 	pn->rto = tp->t_rxtcur * tick;
 	pn->snd_buf_hiwater = inp->inp_socket->so_snd.sb_hiwat;
 	pn->snd_buf_cc = sbused(&inp->inp_socket->so_snd);
@@ -796,7 +801,6 @@ siftr_chkpkt(struct mbuf **m, struct ifnet *ifp, int flags,
 		info.lport = ntohs(inp->inp_lport);
 		info.fport = ntohs(inp->inp_fport);
 		info.key = hash_id;
-		info.ipver = INP_IPV4;
 
 		hash_node = siftr_new_hash_node(info, dir, ss);
 	}
@@ -946,7 +950,6 @@ siftr_chkpkt6(struct mbuf **m, struct ifnet *ifp, int flags,
 		info.lport = ntohs(inp->inp_lport);
 		info.fport = ntohs(inp->inp_fport);
 		info.key = hash_id;
-		info.ipver = INP_IPV6;
 
 		hash_node = siftr_new_hash_node(info, dir, ss);
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202307021332.362DWe38071271>