X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/0bae66a93948c013c59c58e2edbbb8b850e674b4..b717e4dba5930b3a2678c912a891d82cbc92dd9d:/print-ip.c diff --git a/print-ip.c b/print-ip.c index f3471c50..b02427b4 100644 --- a/print-ip.c +++ b/print-ip.c @@ -21,7 +21,7 @@ #ifndef lint static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.125 2003-05-21 08:39:57 hannes Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.128 2003-07-08 01:14:44 guy Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -39,11 +39,7 @@ static const char rcsid[] = #include "extract.h" /* must come after interface.h */ #include "ip.h" - -/* Compatibility */ -#ifndef IPPROTO_ND -#define IPPROTO_ND 77 -#endif +#include "ipproto.h" /* * print the recorded route in an IP RR, LSRR or SSRR option. @@ -367,11 +363,16 @@ ip_print(register const u_char *bp, register u_int length) int advance; struct protoent *proto; u_int16_t sum, ip_sum; - const char *sep = ""; - - printf("IP%s ", (((*bp >> 4) & 0xf) == 4) ? "" : "%u", (*bp >> 4) & 0xf); /* print version if != 4 */ ip = (const struct ip *)bp; + if (IP_V(ip) != 4) { /* print version if != 4 */ + printf("IP%u ", IP_V(ip)); + if (IP_V(ip) == 6) + printf(", wrong link-layer encapsulation"); + } + else + printf("IP "); + if ((u_char *)(ip + 1) > snapend) { printf("[|ip]"); return; @@ -437,10 +438,8 @@ ip_print(register const u_char *bp, register u_int length) sum = in_cksum((const u_short *)ip, hlen, 0); if (sum != 0) { ip_sum = EXTRACT_16BITS(&ip->ip_sum); - (void)printf("%sbad cksum %x (->%x)!", sep, - ip_sum, + (void)printf(", bad cksum %x (->%x)!", ip_sum, in_cksum_shouldbe(ip_sum, sum)); - sep = ", "; } } @@ -455,9 +454,6 @@ ip_print(register const u_char *bp, register u_int length) cp = (const u_char *)ip + hlen; nh = ip->ip_p; -#ifndef IPPROTO_SCTP -#define IPPROTO_SCTP 132 -#endif if (nh != IPPROTO_TCP && nh != IPPROTO_UDP && nh != IPPROTO_SCTP) { (void)printf("%s > %s: ", ipaddr_string(&ip->ip_src), @@ -466,9 +462,6 @@ ip_print(register const u_char *bp, register u_int length) again: switch (nh) { -#ifndef IPPROTO_AH -#define IPPROTO_AH 51 -#endif case IPPROTO_AH: nh = *cp; advance = ah_print(cp); @@ -476,9 +469,6 @@ again: len -= advance; goto again; -#ifndef IPPROTO_ESP -#define IPPROTO_ESP 50 -#endif case IPPROTO_ESP: { int enh, padlen; @@ -491,9 +481,6 @@ again: goto again; } -#ifndef IPPROTO_IPCOMP -#define IPPROTO_IPCOMP 108 -#endif case IPPROTO_IPCOMP: { int enh; @@ -523,9 +510,6 @@ again: icmp_print(cp, len, (const u_char *)ip, (off & 0x3fff)); break; -#ifndef IPPROTO_IGRP -#define IPPROTO_IGRP 9 -#endif case IPPROTO_IGRP: igrp_print(cp, len, (const u_char *)ip); break; @@ -538,21 +522,15 @@ again: egp_print(cp); break; -#ifndef IPPROTO_OSPF -#define IPPROTO_OSPF 89 -#endif case IPPROTO_OSPF: ospf_print(cp, len, (const u_char *)ip); break; -#ifndef IPPROTO_IGMP -#define IPPROTO_IGMP 2 -#endif case IPPROTO_IGMP: igmp_print(cp, len); break; - case 4: + case IPPROTO_IPV4: /* DVMRP multicast tunnel (ip-in-ip encapsulation) */ ip_print(cp, len); if (! vflag) { @@ -562,47 +540,29 @@ again: break; #ifdef INET6 -#ifndef IP6PROTO_ENCAP -#define IP6PROTO_ENCAP 41 -#endif - case IP6PROTO_ENCAP: + case IPPROTO_IPV6: /* ip6-in-ip encapsulation */ ip6_print(cp, len); break; #endif /*INET6*/ -#ifndef IPPROTO_RSVP -#define IPPROTO_RSVP 46 -#endif case IPPROTO_RSVP: rsvp_print(cp, len); break; -#ifndef IPPROTO_GRE -#define IPPROTO_GRE 47 -#endif case IPPROTO_GRE: /* do it */ gre_print(cp, len); break; -#ifndef IPPROTO_MOBILE -#define IPPROTO_MOBILE 55 -#endif case IPPROTO_MOBILE: mobile_print(cp, len); break; -#ifndef IPPROTO_PIM -#define IPPROTO_PIM 103 -#endif case IPPROTO_PIM: pim_print(cp, len); break; -#ifndef IPPROTO_VRRP -#define IPPROTO_VRRP 112 -#endif case IPPROTO_VRRP: vrrp_print(cp, len, ip->ip_ttl); break;