summaryrefslogtreecommitdiffstats
path: root/sys/netinet/tcp_debug.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netinet/tcp_debug.c')
-rw-r--r--sys/netinet/tcp_debug.c63
1 files changed, 39 insertions, 24 deletions
diff --git a/sys/netinet/tcp_debug.c b/sys/netinet/tcp_debug.c
index 89f6b6567bd..8997019dabd 100644
--- a/sys/netinet/tcp_debug.c
+++ b/sys/netinet/tcp_debug.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tcp_debug.c,v 1.26 2018/05/10 13:30:25 bluhm Exp $ */
+/* $OpenBSD: tcp_debug.c,v 1.27 2018/06/11 07:40:26 bluhm Exp $ */
/* $NetBSD: tcp_debug.c,v 1.10 1996/02/13 23:43:36 christos Exp $ */
/*
@@ -110,18 +110,19 @@ int tcp_debx;
* Tcp debug routines
*/
void
-tcp_trace(short act, short ostate, struct tcpcb *tp, caddr_t headers,
- int req, int len)
+tcp_trace(short act, short ostate, struct tcpcb *tp, struct tcpcb *otp,
+ caddr_t headers, int req, int len)
{
#ifdef TCPDEBUG
tcp_seq seq, ack;
int flags;
#endif
+ int pf = PF_UNSPEC;
struct tcp_debug *td = &tcp_debug[tcp_debx++];
struct tcpiphdr *ti = (struct tcpiphdr *)headers;
struct tcphdr *th;
#ifdef INET6
- struct tcpipv6hdr *ti6 = (struct tcpipv6hdr *)ti;
+ struct tcpipv6hdr *ti6 = (struct tcpipv6hdr *)headers;
#endif
if (tcp_debx == TCP_NDEBUG)
@@ -129,40 +130,54 @@ tcp_trace(short act, short ostate, struct tcpcb *tp, caddr_t headers,
td->td_time = iptime();
td->td_act = act;
td->td_ostate = ostate;
- td->td_tcb = (caddr_t)tp;
- if (tp)
+ td->td_tcb = (caddr_t)otp;
+ if (tp) {
+ pf = tp->pf;
td->td_cb = *tp;
- else
+ } else
bzero((caddr_t)&td->td_cb, sizeof (*tp));
- switch (tp->pf) {
+
+ bzero(&td->td_ti6, sizeof(struct tcpipv6hdr));
+ bzero(&td->td_ti, sizeof(struct tcpiphdr));
+ if (headers) {
+ /* The address family may be in tcpcb or ip header. */
+ if (pf == PF_UNSPEC) {
+ switch (ti6->ti6_i.ip6_vfc & IPV6_VERSION_MASK) {
#ifdef INET6
- case PF_INET6:
- if (ti6) {
+ case IPV6_VERSION:
+ pf = PF_INET6;
+ break;
+#endif /* INET6 */
+ case IPVERSION:
+ pf = PF_INET;
+ break;
+ }
+ }
+ switch (pf) {
+#ifdef INET6
+ case PF_INET6:
th = &ti6->ti6_t;
td->td_ti6 = *ti6;
td->td_ti6.ti6_plen = len;
- } else
- bzero(&td->td_ti6, sizeof(struct tcpipv6hdr));
- break;
+ break;
#endif /* INET6 */
- case PF_INET:
- if (ti) {
+ case PF_INET:
th = &ti->ti_t;
td->td_ti = *ti;
td->td_ti.ti_len = len;
- } else
- bzero(&td->td_ti, sizeof(struct tcpiphdr));
- break;
- default:
- return;
+ break;
+ default:
+ headers = NULL;
+ break;
+ }
}
td->td_req = req;
#ifdef TCPDEBUG
if (tcpconsdebug == 0)
return;
- if (tp)
- printf("%p %s:", tp, tcpstates[ostate]);
+ if (otp)
+ printf("%p %s:", otp, tcpstates[ostate]);
else
printf("???????? ");
printf("%s ", tanames[act]);
@@ -171,7 +186,7 @@ tcp_trace(short act, short ostate, struct tcpcb *tp, caddr_t headers,
case TA_INPUT:
case TA_OUTPUT:
case TA_DROP:
- if (ti == 0)
+ if (headers == NULL)
break;
seq = th->th_seq;
ack = th->th_ack;
@@ -205,7 +220,7 @@ tcp_trace(short act, short ostate, struct tcpcb *tp, caddr_t headers,
printf(" -> %s", tcpstates[tp->t_state]);
/* print out internal state of tp !?! */
printf("\n");
- if (tp == 0)
+ if (tp == NULL)
return;
printf("\trcv_(nxt,wnd,up) (%x,%lx,%x) snd_(una,nxt,max) (%x,%x,%x)\n",
tp->rcv_nxt, tp->rcv_wnd, tp->rcv_up, tp->snd_una, tp->snd_nxt,