diff options
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/tcpdump/print-icmp.c | 13 | ||||
-rw-r--r-- | usr.sbin/tcpdump/print-icmp6.c | 13 | ||||
-rw-r--r-- | usr.sbin/tcpdump/print-ip.c | 11 | ||||
-rw-r--r-- | usr.sbin/tcpdump/print-tcp.c | 22 | ||||
-rw-r--r-- | usr.sbin/tcpdump/print-udp.c | 21 |
5 files changed, 46 insertions, 34 deletions
diff --git a/usr.sbin/tcpdump/print-icmp.c b/usr.sbin/tcpdump/print-icmp.c index fcb51f4478a..14849ba2a61 100644 --- a/usr.sbin/tcpdump/print-icmp.c +++ b/usr.sbin/tcpdump/print-icmp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: print-icmp.c,v 1.22 2014/01/11 04:40:45 lteo Exp $ */ +/* $OpenBSD: print-icmp.c,v 1.23 2014/06/20 04:04:52 lteo Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1991, 1993, 1994, 1995, 1996 @@ -375,15 +375,18 @@ icmp_print(const u_char *bp, u_int length, const u_char *bp2) } (void)printf("icmp: %s", str); if (vflag) { - u_int16_t sum; if (TTEST2(dp->icmp_type, length)) { + u_int16_t sum, icmp_sum; sum = in_cksum((const u_short *)dp, length, 0); - if (sum != 0) - (void)printf(" [bad icmp cksum %x!]", sum); + if (sum != 0) { + icmp_sum = EXTRACT_16BITS(&dp->icmp_cksum); + (void)printf(" [bad icmp cksum %x! -> %x]", icmp_sum, + in_cksum_shouldbe(icmp_sum, sum)); + } else (void)printf(" [icmp cksum ok]"); } - } + } if (vflag > 1 && !ICMP_INFOTYPE(dp->icmp_type) && TTEST(dp->icmp_ip)) { (void)printf(" for "); diff --git a/usr.sbin/tcpdump/print-icmp6.c b/usr.sbin/tcpdump/print-icmp6.c index 0249039d27e..56a9559d87d 100644 --- a/usr.sbin/tcpdump/print-icmp6.c +++ b/usr.sbin/tcpdump/print-icmp6.c @@ -1,4 +1,4 @@ -/* $OpenBSD: print-icmp6.c,v 1.12 2014/01/11 04:41:08 lteo Exp $ */ +/* $OpenBSD: print-icmp6.c,v 1.13 2014/06/20 04:04:52 lteo Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1991, 1993, 1994 @@ -53,6 +53,7 @@ #include "interface.h" #include "addrtoname.h" +#include "extract.h" void icmp6_opt_print(const u_char *, int); void mld6_print(const u_char *); @@ -485,12 +486,14 @@ icmp6_print(const u_char *bp, u_int length, const u_char *bp2) break; } if (vflag) { - u_int16_t sum; if (TTEST2(dp->icmp6_type, length)) { + u_int16_t sum, icmp6_sum; sum = icmp6_cksum(ip, dp, length); - if (sum != 0) - printf(" [bad icmp6 cksum %x!]", sum); - else + if (sum != 0) { + icmp6_sum = EXTRACT_16BITS(&dp->icmp6_cksum); + printf(" [bad icmp6 cksum %x! -> %x]", icmp6_sum, + in_cksum_shouldbe(icmp6_sum, sum)); + } else printf(" [icmp6 cksum ok]"); } } diff --git a/usr.sbin/tcpdump/print-ip.c b/usr.sbin/tcpdump/print-ip.c index c3324980fef..4fd1e8d1394 100644 --- a/usr.sbin/tcpdump/print-ip.c +++ b/usr.sbin/tcpdump/print-ip.c @@ -1,4 +1,4 @@ -/* $OpenBSD: print-ip.c,v 1.37 2014/01/11 04:35:52 lteo Exp $ */ +/* $OpenBSD: print-ip.c,v 1.38 2014/06/20 04:04:52 lteo Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 @@ -627,7 +627,6 @@ ip_print(register const u_char *bp, register u_int length) (void)printf(" [ttl %d]", (int)ip->ip_ttl); if (vflag) { - int sum; char *sep = ""; printf(" ("); @@ -642,12 +641,12 @@ ip_print(register const u_char *bp, register u_int length) (void)printf("%slen %u", sep, ntohs(ip->ip_len)); sep = ", "; if ((u_char *)ip + hlen <= snapend) { + u_int16_t sum, ip_sum; sum = in_cksum((const u_short *)ip, hlen, 0); if (sum != 0) { - (void)printf("%sbad cksum %x!", sep, - ntohs(ip->ip_sum)); - if (vflag > 1) - (void)printf(" differs by %x", htons(sum)); + ip_sum = EXTRACT_16BITS(&ip->ip_sum); + (void)printf("%sbad ip cksum %x! -> %x", sep, ip_sum, + in_cksum_shouldbe(ip_sum, sum)); sep = ", "; } } diff --git a/usr.sbin/tcpdump/print-tcp.c b/usr.sbin/tcpdump/print-tcp.c index a0c46b3bec3..43ee76f2c58 100644 --- a/usr.sbin/tcpdump/print-tcp.c +++ b/usr.sbin/tcpdump/print-tcp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: print-tcp.c,v 1.29 2014/02/05 21:12:19 florian Exp $ */ +/* $OpenBSD: print-tcp.c,v 1.30 2014/06/20 04:04:52 lteo Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 @@ -419,23 +419,27 @@ tcp_print(register const u_char *bp, register u_int length, } if (ip && ip->ip_v == 4 && vflag) { - int sum; if (TTEST2(tp->th_sport, length)) { + u_int16_t sum, tcp_sum; sum = tcp_cksum(ip, tp, length); - if (sum != 0) - (void)printf(" [bad tcp cksum %x!]", sum); - else + if (sum != 0) { + tcp_sum = EXTRACT_16BITS(&tp->th_sum); + (void)printf(" [bad tcp cksum %x! -> %x]", tcp_sum, + in_cksum_shouldbe(tcp_sum, sum)); + } else (void)printf(" [tcp sum ok]"); } } #ifdef INET6 if (ip6 && ip6->ip6_plen && vflag) { - int sum; if (TTEST2(tp->th_sport, length)) { + u_int16_t sum, tcp_sum; sum = tcp6_cksum(ip6, tp, length); - if (sum != 0) - (void)printf(" [bad tcp cksum %x!]", sum); - else + if (sum != 0) { + tcp_sum = EXTRACT_16BITS(&tp->th_sum); + (void)printf(" [bad tcp cksum %x! -> %x]", tcp_sum, + in_cksum_shouldbe(tcp_sum, sum)); + } else (void)printf(" [tcp sum ok]"); } } diff --git a/usr.sbin/tcpdump/print-udp.c b/usr.sbin/tcpdump/print-udp.c index f1ecd7a83ef..dca0c68e93c 100644 --- a/usr.sbin/tcpdump/print-udp.c +++ b/usr.sbin/tcpdump/print-udp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: print-udp.c,v 1.35 2014/01/26 18:03:27 naddy Exp $ */ +/* $OpenBSD: print-udp.c,v 1.36 2014/06/20 04:04:52 lteo Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996 @@ -57,6 +57,7 @@ #include "interface.h" #include "addrtoname.h" +#include "extract.h" #include "appletalk.h" #include "nfsv2.h" @@ -566,27 +567,29 @@ udp_print(register const u_char *bp, u_int length, register const u_char *bp2) #endif if (ip->ip_v == 4 && vflag) { - int sum = up->uh_sum; - if (sum == 0) { - (void)printf(" [no cksum]"); + u_int16_t sum, udp_sum = EXTRACT_16BITS(&up->uh_sum); + if (udp_sum == 0) { + (void)printf(" [no udp cksum]"); } else if (TTEST2(cp[0], length)) { sum = udp_cksum(ip, up, length + sizeof(struct udphdr)); if (sum != 0) - (void)printf(" [bad udp cksum %x!]", sum); + (void)printf(" [bad udp cksum %x! -> %x]", udp_sum, + in_cksum_shouldbe(udp_sum, sum)); else (void)printf(" [udp sum ok]"); } } #ifdef INET6 if (ip->ip_v == 6 && ip6->ip6_plen && vflag) { - int sum = up->uh_sum; + u_int16_t sum, udp_sum = EXTRACT_16BITS(&up->uh_sum); /* for IPv6, UDP checksum is mandatory */ - if (sum == 0) { - (void)printf(" [invalid cksum 0]"); + if (udp_sum == 0) { + (void)printf(" [invalid udp cksum 0]"); } else if (TTEST2(cp[0], length)) { sum = udp6_cksum(ip6, up, length + sizeof(struct udphdr)); if (sum != 0) - (void)printf(" [bad udp cksum %x!]", sum); + (void)printf(" [bad udp cksum %x! -> %x]", udp_sum, + in_cksum_shouldbe(udp_sum, sum)); else (void)printf(" [udp sum ok]"); } |