From ae8d5227344aa09191fe3cc636ccbbae9b9e001c Mon Sep 17 00:00:00 2001 From: Yoshinobu Inoue Date: Sat, 29 Jan 2000 11:49:07 +0000 Subject: Sorry in this just befor code freeze commit. This is fix to usr.sbin/trpt and tcp_debug.[ch] I think of putting this after 4.0 but,,, -There was bug that when INET6 is defined, IPv4 socket is not traced by trpt. -I received request from a person who distribute a program which use tcp_debug interface and print performance statistics, that -leave comptibility with old program as much as possible -use same interface with other OSes So, I talked with itojun, and synced API with netbsd IPv6 extension. makeworld check, kernel build check(includes GENERIC) is done. But if there happen to any problem, please let me know and I soon backout this change. --- sys/netinet/tcp_debug.c | 62 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 52 insertions(+), 10 deletions(-) (limited to 'sys/netinet/tcp_debug.c') diff --git a/sys/netinet/tcp_debug.c b/sys/netinet/tcp_debug.c index 9cf03349af30..d84c37afe56d 100644 --- a/sys/netinet/tcp_debug.c +++ b/sys/netinet/tcp_debug.c @@ -53,6 +53,7 @@ #include #include #include +#include #include #include @@ -96,6 +97,11 @@ tcp_trace(act, ostate, tp, ipgen, th, req) #ifdef INET6 isipv6 = (ipgen != NULL && ((struct ip *)ipgen)->ip_v == 6) ? 1 : 0; #endif /* INET6 */ + td->td_family = +#ifdef INET6 + (isipv6 != 0) ? AF_INET6 : +#endif + AF_INET; if (tcp_debx == TCP_NDEBUG) tcp_debx = 0; td->td_time = iptime(); @@ -106,18 +112,54 @@ tcp_trace(act, ostate, tp, ipgen, th, req) td->td_cb = *tp; else bzero((caddr_t)&td->td_cb, sizeof (*tp)); - if (ipgen) - bcopy((caddr_t)ipgen, td->td_ipgen, + if (ipgen) { + switch (td->td_family) { + case AF_INET: + bcopy((caddr_t)ipgen, (caddr_t)&td->td_ti.ti_i, + sizeof(td->td_ti.ti_i)); + bzero((caddr_t)td->td_ip6buf, sizeof(td->td_ip6buf)); + break; #ifdef INET6 - isipv6 ? sizeof(struct ip6_hdr) : + case AF_INET6: + bcopy((caddr_t)ipgen, (caddr_t)td->td_ip6buf, + sizeof(td->td_ip6buf)); + bzero((caddr_t)&td->td_ti.ti_i, + sizeof(td->td_ti.ti_i)); + break; #endif - sizeof(struct ip)); - else - bzero((caddr_t)td->td_ipgen, sizeof (td->td_ipgen)); - if (th) - td->td_th = *th; - else - bzero((caddr_t)&td->td_th, sizeof (td->td_th)); + default: + bzero((caddr_t)td->td_ip6buf, sizeof(td->td_ip6buf)); + bzero((caddr_t)&td->td_ti.ti_i, + sizeof(td->td_ti.ti_i)); + break; + } + } else { + bzero((caddr_t)&td->td_ti.ti_i, sizeof(td->td_ti.ti_i)); + bzero((caddr_t)td->td_ip6buf, sizeof(td->td_ip6buf)); + } + if (th) { + switch (td->td_family) { + case AF_INET: + td->td_ti.ti_t = *th; + bzero((caddr_t)&td->td_ti6.th, sizeof(td->td_ti6.th)); + break; +#ifdef INET6 + case AF_INET6: + td->td_ti6.th = *th; + bzero((caddr_t)&td->td_ti.ti_t, + sizeof(td->td_ti.ti_t)); + break; +#endif + default: + bzero((caddr_t)&td->td_ti.ti_t, + sizeof(td->td_ti.ti_t)); + bzero((caddr_t)&td->td_ti6.th, sizeof(td->td_ti6.th)); + break; + } + } else { + bzero((caddr_t)&td->td_ti.ti_t, sizeof(td->td_ti.ti_t)); + bzero((caddr_t)&td->td_ti6.th, sizeof(td->td_ti6.th)); + } td->td_req = req; #ifdef TCPDEBUG if (tcpconsdebug == 0) -- cgit v1.2.3