diff options
Diffstat (limited to 'contrib/tcpdump/print-icmp.c')
-rw-r--r-- | contrib/tcpdump/print-icmp.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/contrib/tcpdump/print-icmp.c b/contrib/tcpdump/print-icmp.c index 70139e0..ca2bf07 100644 --- a/contrib/tcpdump/print-icmp.c +++ b/contrib/tcpdump/print-icmp.c @@ -17,11 +17,17 @@ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * $FreeBSD$ */ #ifndef lint static const char rcsid[] = - "@(#) $Header: print-icmp.c,v 1.38 96/09/26 23:36:44 leres Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/print-icmp.c,v 1.43 1999/11/22 04:28:21 fenner Exp $ (LBL)"; +#endif + +#ifdef HAVE_CONFIG_H +#include "config.h" #endif #include <sys/param.h> @@ -43,7 +49,6 @@ struct rtentry; #include <netinet/udp.h> #include <netinet/udp_var.h> #include <netinet/tcp.h> -#include <netinet/tcpip.h> #include <stdio.h> #include <string.h> @@ -163,7 +168,7 @@ struct id_rdiscovery { }; void -icmp_print(register const u_char *bp, register const u_char *bp2) +icmp_print(register const u_char *bp, u_int plen, register const u_char *bp2) { register char *cp; register const struct icmp *dp; @@ -178,9 +183,11 @@ icmp_print(register const u_char *bp, register const u_char *bp2) ip = (struct ip *)bp2; str = buf; +#if 0 (void)printf("%s > %s: ", ipaddr_string(&ip->ip_src), ipaddr_string(&ip->ip_dst)); +#endif TCHECK(dp->icmp_code); switch (dp->icmp_type) { @@ -348,6 +355,19 @@ icmp_print(register const u_char *bp, register const u_char *bp2) break; } (void)printf("icmp: %s", str); + if (vflag) { + if (TTEST2(*bp, plen)) { + if (in_cksum((u_short*)dp, plen, 0)) + printf(" (wrong icmp csum)"); + } + } + if (vflag > 1 && !ICMP_INFOTYPE(dp->icmp_type)) { + bp += 8; + (void)printf(" for "); + ip = (struct ip *)bp; + snaplen = snapend - bp; + ip_print(bp, ntohs(ip->ip_len)); + } return; trunc: fputs("[|icmp]", stdout); |