mirror of
https://git.FreeBSD.org/src.git
synced 2025-02-03 17:11:32 +00:00
Add missing send/recv dtrace probes for TCP.
These missing probe are mostly in the syncache and timewait code. Reviewed by: markj@, rrs@ MFC after: 1 month Sponsored by: Netflix, Inc. Differential Revision: https://reviews.freebsd.org/D16369
This commit is contained in:
parent
2a9ee5fcfe
commit
6138da62a9
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=336932
@ -1145,6 +1145,7 @@ tfo_socket_result:
|
||||
* 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);
|
||||
if (ti_locked == TI_RLOCKED)
|
||||
|
@ -69,6 +69,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>
|
||||
@ -1400,6 +1401,7 @@ syncache_add(struct in_conninfo *inc, struct tcpopt *to, struct tcphdr *th,
|
||||
*/
|
||||
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, "
|
||||
@ -1414,7 +1416,7 @@ syncache_add(struct in_conninfo *inc, struct tcpopt *to, struct tcphdr *th,
|
||||
TCPSTAT_INC(tcps_sndtotal);
|
||||
}
|
||||
SCH_UNLOCK(sch);
|
||||
goto done;
|
||||
goto donenoprobe;
|
||||
}
|
||||
|
||||
if (tfo_cookie_valid) {
|
||||
@ -1566,6 +1568,7 @@ skip_alloc:
|
||||
goto tfo_expanded;
|
||||
}
|
||||
|
||||
TCP_PROBE5(receive, NULL, NULL, m, NULL, th);
|
||||
/*
|
||||
* Do a standard 3-way handshake.
|
||||
*/
|
||||
@ -1581,8 +1584,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);
|
||||
@ -1793,6 +1799,7 @@ syncache_respond(struct syncache *sc, struct syncache_head *sch, int locked,
|
||||
return (error);
|
||||
}
|
||||
#endif
|
||||
TCP_PROBE5(send, NULL, NULL, ip6, NULL, th);
|
||||
error = ip6_output(m, NULL, NULL, 0, NULL, NULL, NULL);
|
||||
}
|
||||
#endif
|
||||
@ -1813,6 +1820,7 @@ syncache_respond(struct syncache *sc, struct syncache_head *sch, int locked,
|
||||
return (error);
|
||||
}
|
||||
#endif
|
||||
TCP_PROBE5(send, NULL, NULL, ip, NULL, th);
|
||||
error = ip_output(m, sc->sc_ipopts, NULL, 0, NULL, NULL);
|
||||
}
|
||||
#endif
|
||||
|
@ -63,6 +63,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 __unused, struct tcphdr *th,
|
||||
* 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);
|
||||
@ -598,6 +604,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);
|
||||
}
|
||||
@ -613,6 +620,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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user