X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/22818232a40ef444d43ccc3ac43e24ce33cfcf11..1f4fe57314dd15decb63a2ee58ca85e6e91784af:/print-ip.c diff --git a/print-ip.c b/print-ip.c index 3dd1edb9..f42276dc 100644 --- a/print-ip.c +++ b/print-ip.c @@ -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: