X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/b6303af682e72841f79ac6847f93b0cb0a49c549..refs/pull/440/head:/print-ip.c diff --git a/print-ip.c b/print-ip.c index 252584da..ceea5363 100644 --- a/print-ip.c +++ b/print-ip.c @@ -28,8 +28,8 @@ #include -#include "addrtoname.h" #include "interface.h" +#include "addrtoname.h" #include "extract.h" /* must come after interface.h */ #include "ip.h" @@ -71,7 +71,7 @@ ip_printroute(netdissect_options *ndo, ND_PRINT((ndo, " [bad ptr %u]", cp[2])); for (len = 3; len < length; len += 4) { - ND_PRINT((ndo, " %s", ipaddr_string(&cp[len]))); + ND_PRINT((ndo, " %s", ipaddr_string(ndo, &cp[len]))); if (ptr > len) ND_PRINT((ndo, ",")); } @@ -84,14 +84,14 @@ ip_printroute(netdissect_options *ndo, * This is used for UDP and TCP pseudo-header in the checksum * calculation. */ -static u_int32_t +static uint32_t ip_finddst(netdissect_options *ndo, const struct ip *ip) { int length; int len; const u_char *cp; - u_int32_t retval; + uint32_t retval; cp = (const u_char *)(ip + 1); length = (IP_HL(ip) << 2) - sizeof(struct ip); @@ -123,7 +123,7 @@ ip_finddst(netdissect_options *ndo, } } trunc: - UNALIGNED_MEMCPY(&retval, &ip->ip_dst.s_addr, sizeof(u_int32_t)); + UNALIGNED_MEMCPY(&retval, &ip->ip_dst.s_addr, sizeof(uint32_t)); return retval; } @@ -132,29 +132,29 @@ trunc: */ int nextproto4_cksum(netdissect_options *ndo, - const struct ip *ip, const u_int8_t *data, + const struct ip *ip, const uint8_t *data, u_int len, u_int covlen, u_int next_proto) { struct phdr { - u_int32_t src; - u_int32_t dst; + uint32_t src; + uint32_t dst; u_char mbz; u_char proto; - u_int16_t len; + uint16_t len; } ph; struct cksum_vec vec[2]; /* pseudo-header.. */ - ph.len = htons((u_int16_t)len); + ph.len = htons((uint16_t)len); ph.mbz = 0; ph.proto = next_proto; - UNALIGNED_MEMCPY(&ph.src, &ip->ip_src.s_addr, sizeof(u_int32_t)); + UNALIGNED_MEMCPY(&ph.src, &ip->ip_src.s_addr, sizeof(uint32_t)); if (IP_HL(ip) == 5) - UNALIGNED_MEMCPY(&ph.dst, &ip->ip_dst.s_addr, sizeof(u_int32_t)); + UNALIGNED_MEMCPY(&ph.dst, &ip->ip_dst.s_addr, sizeof(uint32_t)); else ph.dst = ip_finddst(ndo, ip); - vec[0].ptr = (const u_int8_t *)(void *)&ph; + vec[0].ptr = (const uint8_t *)(void *)&ph; vec[0].len = sizeof(ph); vec[1].ptr = data; vec[1].len = covlen; @@ -211,7 +211,7 @@ ip_printts(netdissect_options *ndo, if (ptr == len) type = " ^ "; ND_PRINT((ndo, "%s%d@%s", type, EXTRACT_32BITS(&cp[len+hoplen-4]), - hoplen!=8 ? "" : ipaddr_string(&cp[len]))); + hoplen!=8 ? "" : ipaddr_string(ndo, &cp[len]))); type = " "; } @@ -374,7 +374,7 @@ again: case IPPROTO_TCP: /* pass on the MF bit plus the offset to detect fragments */ - tcp_print(ipds->cp, ipds->len, (const u_char *)ipds->ip, + tcp_print(ndo, ipds->cp, ipds->len, (const u_char *)ipds->ip, ipds->off & (IP_MF|IP_OFFMASK)); break; @@ -420,7 +420,7 @@ again: break; case IPPROTO_OSPF: - ospf_print(ipds->cp, ipds->len, (const u_char *)ipds->ip); + ospf_print(ndo, ipds->cp, ipds->len, (const u_char *)ipds->ip); break; case IPPROTO_IGMP: @@ -436,15 +436,13 @@ 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(ipds->cp, ipds->len); + rsvp_print(ndo, ipds->cp, ipds->len); break; case IPPROTO_GRE: @@ -466,14 +464,14 @@ again: if (ndo->ndo_packettype == PT_CARP) { if (ndo->ndo_vflag) ND_PRINT((ndo, "carp %s > %s: ", - ipaddr_string(&ipds->ip->ip_src), - ipaddr_string(&ipds->ip->ip_dst))); + ipaddr_string(ndo, &ipds->ip->ip_src), + ipaddr_string(ndo, &ipds->ip->ip_dst))); carp_print(ndo, ipds->cp, ipds->len, ipds->ip->ip_ttl); } else { if (ndo->ndo_vflag) ND_PRINT((ndo, "vrrp %s > %s: ", - ipaddr_string(&ipds->ip->ip_src), - ipaddr_string(&ipds->ip->ip_dst))); + ipaddr_string(ndo, &ipds->ip->ip_src), + ipaddr_string(ndo, &ipds->ip->ip_dst))); vrrp_print(ndo, ipds->cp, ipds->len, (const u_char *)ipds->ip, ipds->ip->ip_ttl); } @@ -525,22 +523,21 @@ ip_print(netdissect_options *ndo, const u_char *ipend; u_int hlen; struct cksum_vec vec[1]; - u_int16_t sum, ip_sum; + uint16_t sum, ip_sum; 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; @@ -623,7 +620,7 @@ ip_print(netdissect_options *ndo, } if (!ndo->ndo_Kflag && (u_char *)ipds->ip + hlen <= ndo->ndo_snapend) { - vec[0].ptr = (const u_int8_t *)(void *)ipds->ip; + vec[0].ptr = (const uint8_t *)(void *)ipds->ip; vec[0].len = hlen; sum = in_cksum(vec, 1); if (sum != 0) { @@ -647,8 +644,8 @@ ip_print(netdissect_options *ndo, if (ipds->nh != IPPROTO_TCP && ipds->nh != IPPROTO_UDP && ipds->nh != IPPROTO_SCTP && ipds->nh != IPPROTO_DCCP) { ND_PRINT((ndo, "%s > %s: ", - ipaddr_string(&ipds->ip->ip_src), - ipaddr_string(&ipds->ip->ip_dst))); + ipaddr_string(ndo, &ipds->ip->ip_src), + ipaddr_string(ndo, &ipds->ip->ip_dst))); } ip_print_demux(ndo, ipds); } else { @@ -661,14 +658,19 @@ ip_print(netdissect_options *ndo, * and the protocol. */ if (ipds->off & 0x1fff) { - ND_PRINT((ndo, "%s > %s:", ipaddr_string(&ipds->ip->ip_src), - ipaddr_string(&ipds->ip->ip_dst))); + ND_PRINT((ndo, "%s > %s:", ipaddr_string(ndo, &ipds->ip->ip_src), + ipaddr_string(ndo, &ipds->ip->ip_dst))); if (!ndo->ndo_nflag && (proto = getprotobynumber(ipds->ip->ip_p)) != NULL) ND_PRINT((ndo, " %s", proto->p_name)); else ND_PRINT((ndo, " ip-proto-%d", ipds->ip->ip_p)); } } + return; + +trunc: + ND_PRINT((ndo, "%s", tstr)); + return; } void @@ -685,11 +687,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;