]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-ip-demux.c
ICMPv6: Delete some remains from drafts for Node Information Queries
[tcpdump] / print-ip-demux.c
index d3f03b66d292ffeb63ff9af41231a4e85e95bb15..c347b8d230da5238bd2050630413195226705904 100644 (file)
 
 /* \summary: IPv4/IPv6 payload printer */
 
-#ifdef HAVE_CONFIG_H
 #include <config.h>
-#endif
 
 #include "netdissect-stdinc.h"
 
-#include <string.h>
-
 #include "netdissect.h"
 #include "addrtoname.h"
 #include "extract.h"
@@ -105,7 +101,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 +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:
@@ -188,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;
 
@@ -196,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;