svn commit: r347157 - stable/11/sys/netinet

Michael Tuexen tuexen at FreeBSD.org
Sun May 5 14:14:07 UTC 2019


Author: tuexen
Date: Sun May  5 14:14:05 2019
New Revision: 347157
URL: https://svnweb.freebsd.org/changeset/base/347157

Log:
  MFC r336932:
  Add missing send/recv dtrace probes for TCP.
  
  These missing probe are mostly in the syncache and timewait code.
  
  Reviewed by:		markj@, rrs@
  Sponsored by:		Netflix, Inc.
  Differential Revision:	https://reviews.freebsd.org/D16369

Modified:
  stable/11/sys/netinet/tcp_input.c
  stable/11/sys/netinet/tcp_syncache.c
  stable/11/sys/netinet/tcp_timewait.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/netinet/tcp_input.c
==============================================================================
--- stable/11/sys/netinet/tcp_input.c	Sun May  5 12:34:32 2019	(r347156)
+++ stable/11/sys/netinet/tcp_input.c	Sun May  5 14:14:05 2019	(r347157)
@@ -1178,6 +1178,7 @@ new_tfo_socket:
 			 * contains.  tcp_do_segment() consumes
 			 * the mbuf chain and unlocks the inpcb.
 			 */
+			TCP_PROBE5(receive, NULL, tp, m, tp, th);
 			tp->t_fb->tfb_tcp_do_segment(m, th, so, tp, drop_hdrlen, tlen,
 			    iptos, ti_locked);
 			INP_INFO_UNLOCK_ASSERT(&V_tcbinfo);

Modified: stable/11/sys/netinet/tcp_syncache.c
==============================================================================
--- stable/11/sys/netinet/tcp_syncache.c	Sun May  5 12:34:32 2019	(r347156)
+++ stable/11/sys/netinet/tcp_syncache.c	Sun May  5 14:14:05 2019	(r347157)
@@ -67,6 +67,7 @@ __FBSDID("$FreeBSD$");
 #include <net/vnet.h>
 
 #include <netinet/in.h>
+#include <netinet/in_kdtrace.h>
 #include <netinet/in_systm.h>
 #include <netinet/ip.h>
 #include <netinet/in_var.h>
@@ -1393,6 +1394,7 @@ syncache_add(struct in_conninfo *inc, struct tcpopt *t
 		 */
 		mac_syncache_destroy(&maclabel);
 #endif
+		TCP_PROBE5(receive, NULL, NULL, m, NULL, th);
 		/* Retransmit SYN|ACK and reset retransmit count. */
 		if ((s = tcp_log_addrs(&sc->sc_inc, th, NULL, NULL))) {
 			log(LOG_DEBUG, "%s; %s: Received duplicate SYN, "
@@ -1407,7 +1409,7 @@ syncache_add(struct in_conninfo *inc, struct tcpopt *t
 			TCPSTAT_INC(tcps_sndtotal);
 		}
 		SCH_UNLOCK(sch);
-		goto done;
+		goto donenoprobe;
 	}
 
 #ifdef TCP_RFC7413
@@ -1565,6 +1567,7 @@ skip_alloc:
 	}
 #endif
 
+	TCP_PROBE5(receive, NULL, NULL, m, NULL, th);
 	/*
 	 * Do a standard 3-way handshake.
 	 */
@@ -1580,8 +1583,11 @@ skip_alloc:
 			syncache_free(sc);
 		TCPSTAT_INC(tcps_sc_dropped);
 	}
+	goto donenoprobe;
 
 done:
+	TCP_PROBE5(receive, NULL, NULL, m, NULL, th);
+donenoprobe:
 	if (m) {
 		*lsop = NULL;
 		m_freem(m);
@@ -1787,6 +1793,7 @@ syncache_respond(struct syncache *sc, struct syncache_
 			return (error);
 		}
 #endif
+		TCP_PROBE5(send, NULL, NULL, ip6, NULL, th);
 		error = ip6_output(m, NULL, NULL, 0, NULL, NULL, NULL);
 	}
 #endif
@@ -1807,6 +1814,7 @@ syncache_respond(struct syncache *sc, struct syncache_
 			return (error);
 		}
 #endif
+		TCP_PROBE5(send, NULL, NULL, ip, NULL, th);
 		error = ip_output(m, sc->sc_ipopts, NULL, 0, NULL, NULL);
 	}
 #endif

Modified: stable/11/sys/netinet/tcp_timewait.c
==============================================================================
--- stable/11/sys/netinet/tcp_timewait.c	Sun May  5 12:34:32 2019	(r347156)
+++ stable/11/sys/netinet/tcp_timewait.c	Sun May  5 14:14:05 2019	(r347157)
@@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$");
 #include <net/vnet.h>
 
 #include <netinet/in.h>
+#include <netinet/in_kdtrace.h>
 #include <netinet/in_pcb.h>
 #include <netinet/in_systm.h>
 #include <netinet/in_var.h>
@@ -450,9 +451,14 @@ tcp_twcheck(struct inpcb *inp, struct tcpopt *to __unu
 	 * Acknowledge the segment if it has data or is not a duplicate ACK.
 	 */
 	if (thflags != TH_ACK || tlen != 0 ||
-	    th->th_seq != tw->rcv_nxt || th->th_ack != tw->snd_nxt)
+	    th->th_seq != tw->rcv_nxt || th->th_ack != tw->snd_nxt) {
+		TCP_PROBE5(receive, NULL, NULL, m, NULL, th);
 		tcp_twrespond(tw, TH_ACK);
+		goto dropnoprobe;
+	}
 drop:
+	TCP_PROBE5(receive, NULL, NULL, m, NULL, th);
+dropnoprobe:
 	INP_WUNLOCK(inp);
 	m_freem(m);
 	return (0);
@@ -599,6 +605,7 @@ tcp_twrespond(struct tcptw *tw, int flags)
 		th->th_sum = in6_cksum_pseudo(ip6,
 		    sizeof(struct tcphdr) + optlen, IPPROTO_TCP, 0);
 		ip6->ip6_hlim = in6_selecthlim(inp, NULL);
+		TCP_PROBE5(send, NULL, NULL, ip6, NULL, th);
 		error = ip6_output(m, inp->in6p_outputopts, NULL,
 		    (tw->tw_so_options & SO_DONTROUTE), NULL, NULL, inp);
 	}
@@ -614,6 +621,7 @@ tcp_twrespond(struct tcptw *tw, int flags)
 		ip->ip_len = htons(m->m_pkthdr.len);
 		if (V_path_mtu_discovery)
 			ip->ip_off |= htons(IP_DF);
+		TCP_PROBE5(send, NULL, NULL, ip, NULL, th);
 		error = ip_output(m, inp->inp_options, NULL,
 		    ((tw->tw_so_options & SO_DONTROUTE) ? IP_ROUTETOIF : 0),
 		    NULL, inp);


More information about the svn-src-all mailing list