]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-ip.c
Don't do IPv6 stuff if INET6 isn't defined.
[tcpdump] / print-ip.c
index 362465e698defc7804718061be1acbb7d494c54e..5d17b391a926eb6e078b1dc55475184d32d727be 100644 (file)
@@ -324,7 +324,6 @@ ip_print_demux(netdissect_options *ndo,
               struct ip_print_demux_state *ipds)
 {
        struct protoent *proto;
-       struct cksum_vec vec[1];
 
 again:
        switch (ipds->nh) {
@@ -436,12 +435,10 @@ again:
                }
                break;
 
-#ifdef INET6
        case IPPROTO_IPV6:
                /* ip6-in-ip encapsulation */
                ip6_print(ndo, ipds->cp, ipds->len);
                break;
-#endif /*INET6*/
 
        case IPPROTO_RSVP:
                rsvp_print(ndo, ipds->cp, ipds->len);
@@ -457,9 +454,7 @@ again:
                break;
 
        case IPPROTO_PIM:
-               vec[0].ptr = ipds->cp;
-               vec[0].len = ipds->len;
-               pim_print(ndo, ipds->cp, ipds->len, in_cksum(vec, 1));
+               pim_print(ndo, ipds->cp, ipds->len, (const u_char *)ipds->ip);
                break;
 
        case IPPROTO_VRRP:
@@ -529,18 +524,17 @@ ip_print(netdissect_options *ndo,
        struct protoent *proto;
 
        ipds->ip = (const struct ip *)bp;
+       ND_TCHECK(ipds->ip->ip_vhl);
        if (IP_V(ipds->ip) != 4) { /* print version if != 4 */
-           ND_PRINT((ndo, "IP%u ", IP_V(ipds->ip)));
            if (IP_V(ipds->ip) == 6)
-             ND_PRINT((ndo, ", wrong link-layer encapsulation"));
+             ND_PRINT((ndo, "IP6, wrong link-layer encapsulation "));
+           else
+             ND_PRINT((ndo, "IP%u ", IP_V(ipds->ip)));
        }
        else if (!ndo->ndo_eflag)
                ND_PRINT((ndo, "IP "));
 
-       if ((u_char *)(ipds->ip + 1) > ndo->ndo_snapend) {
-               ND_PRINT((ndo, "%s", tstr));
-               return;
-       }
+       ND_TCHECK(*ipds->ip);
        if (length < sizeof (struct ip)) {
                ND_PRINT((ndo, "truncated-ip %u", length));
                return;
@@ -669,6 +663,11 @@ ip_print(netdissect_options *ndo,
                                ND_PRINT((ndo, " ip-proto-%d", ipds->ip->ip_p));
                }
        }
+       return;
+
+trunc:
+       ND_PRINT((ndo, "%s", tstr));
+       return;
 }
 
 void
@@ -685,11 +684,9 @@ ipN_print(netdissect_options *ndo, register const u_char *bp, register u_int len
        case 4:
                ip_print (ndo, bp, length);
                return;
-#ifdef INET6
        case 6:
                ip6_print (ndo, bp, length);
                return;
-#endif
        default:
                ND_PRINT((ndo, "unknown ip %d", IP_V(&hdr)));
                return;