]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-ip.c
Add test pcap+output for nested and recursive pathdata
[tcpdump] / print-ip.c
index 3dd1edb9b0c5b0d2cf1cec7c04022430f4c970ae..f42276dc71ade61b4413ffb9ba8e3b4a75d51d8f 100644 (file)
@@ -480,7 +480,7 @@ again:
 
        case IPPROTO_IPV4:
                /* DVMRP multicast tunnel (ip-in-ip encapsulation) */
-               ip_print(gndo, ipds->cp, ipds->len);
+               ip_print(ndo, ipds->cp, ipds->len);
                if (! vflag) {
                        ND_PRINT((ndo, " (ipip-proto-4)"));
                        return;
@@ -490,7 +490,7 @@ again:
 #ifdef INET6
        case IPPROTO_IPV6:
                /* ip6-in-ip encapsulation */
-               ip6_print(ipds->cp, ipds->len);
+               ip6_print(ndo, ipds->cp, ipds->len);
                break;
 #endif /*INET6*/
 
@@ -508,7 +508,8 @@ again:
                break;
 
        case IPPROTO_PIM:
-               pim_print(ipds->cp,  ipds->len);
+               pim_print(ipds->cp,  ipds->len,
+                         in_cksum((const u_short*)ipds->cp, ipds->len, 0));
                break;
 
        case IPPROTO_VRRP:
@@ -572,7 +573,7 @@ ip_print(netdissect_options *ndo,
         else if (!eflag)
            printf("IP ");
 
-       if ((u_char *)(ipds->ip + 1) > snapend) {
+       if ((u_char *)(ipds->ip + 1) > ndo->ndo_snapend) {
                printf("[|ip]");
                return;
        }
@@ -610,8 +611,8 @@ ip_print(netdissect_options *ndo,
         * Cut off the snapshot length to the end of the IP payload.
         */
        ipend = bp + ipds->len;
-       if (ipend < snapend)
-               snapend = ipend;
+       if (ipend < ndo->ndo_snapend)
+               ndo->ndo_snapend = ipend;
 
        ipds->len -= hlen;
 
@@ -657,7 +658,7 @@ ip_print(netdissect_options *ndo,
                 printf(")");
             }
 
-           if (!Kflag && (u_char *)ipds->ip + hlen <= snapend) {
+           if (!Kflag && (u_char *)ipds->ip + hlen <= ndo->ndo_snapend) {
                sum = in_cksum((const u_short *)ipds->ip, hlen, 0);
                if (sum != 0) {
                    ip_sum = EXTRACT_16BITS(&ipds->ip->ip_sum);
@@ -721,7 +722,7 @@ ipN_print(register const u_char *bp, register u_int length)
                return;
 #ifdef INET6
        case 6:
-               ip6_print (bp, length);
+               ip6_print (gndo, bp, length);
                return;
 #endif
        default: