X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/ab22c228c885fd8eee863b1d47eecbf19f96bfb3..282508f16b8fde1bb95fabef1afb2d77c24a306b:/print-ip-demux.c diff --git a/print-ip-demux.c b/print-ip-demux.c index 9d562d77..c347b8d2 100644 --- a/print-ip-demux.c +++ b/print-ip-demux.c @@ -21,14 +21,10 @@ /* \summary: IPv4/IPv6 payload printer */ -#ifdef HAVE_CONFIG_H #include -#endif #include "netdissect-stdinc.h" -#include - #include "netdissect.h" #include "addrtoname.h" #include "extract.h" @@ -161,7 +157,13 @@ again: break; case IPPROTO_IGMP: - igmp_print(ndo, bp, length); + if (ver == 4) + igmp_print(ndo, bp, length); + else { + ND_PRINT("[%s requires IPv4]", + tok2str(ipproto_values,"unknown",nh)); + nd_print_invalid(ndo); + } break; case IPPROTO_IPV4: @@ -194,7 +196,7 @@ again: if (ndo->ndo_packettype == PT_CARP) { carp_print(ndo, bp, length, ttl_hl); } else { - vrrp_print(ndo, bp, length, iph, ttl_hl); + vrrp_print(ndo, bp, length, iph, ttl_hl, ver); } break; @@ -202,6 +204,16 @@ again: pgm_print(ndo, bp, length, iph); break; + case IPPROTO_ETHERNET: + if (ver == 6) + ether_print(ndo, bp, length, ND_BYTES_AVAILABLE_AFTER(bp), NULL, NULL); + else { + ND_PRINT("[%s requires IPv6]", + tok2str(ipproto_values,"unknown",nh)); + nd_print_invalid(ndo); + } + break; + case IPPROTO_NONE: ND_PRINT("no next header"); break;