X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/e3b8b6f5cb34b8a39f7bb105ca42b9589e454593..3b46f347ca330d3a063aeede8e96e00265dfaab6:/print-ip-demux.c diff --git a/print-ip-demux.c b/print-ip-demux.c index d3f03b66..8b53187c 100644 --- a/print-ip-demux.c +++ b/print-ip-demux.c @@ -105,7 +105,13 @@ again: break; case IPPROTO_ICMP: - icmp_print(ndo, bp, length, iph, fragmented); + if (ver == 4) + icmp_print(ndo, bp, length, iph, fragmented); + else { + ND_PRINT("[%s requires IPv4]", + tok2str(ipproto_values,"unknown",nh)); + nd_print_invalid(ndo); + } break; case IPPROTO_ICMPV6: @@ -155,7 +161,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: @@ -196,6 +208,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;