X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/00a6f199f0c6a708a8746d750bf54a757e28ba18..fe0fcd92e3ae841f7ccf84b250df1ec4afdaecbc:/print-udp.c?ds=inline diff --git a/print-udp.c b/print-udp.c index 2bf77d4b..27441c25 100644 --- a/print-udp.c +++ b/print-udp.c @@ -20,8 +20,8 @@ */ #ifndef lint -static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/print-udp.c,v 1.123 2003-10-27 22:44:37 hannes Exp $ (LBL)"; +static const char rcsid[] _U_ = + "@(#) $Header: /tcpdump/master/tcpdump/print-udp.c,v 1.129 2003-11-19 00:19:56 guy Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -285,7 +285,7 @@ rtcp_print(const u_char *hdr, const u_char *ep) static int udp_cksum(register const struct ip *ip, register const struct udphdr *up, - register int len) + register u_int len) { union phu { struct phdr { @@ -300,7 +300,7 @@ static int udp_cksum(register const struct ip *ip, register const u_int16_t *sp; /* pseudo-header.. */ - phu.ph.len = htons(len); + phu.ph.len = htons((u_int16_t)len); phu.ph.mbz = 0; phu.ph.proto = IPPROTO_UDP; memcpy(&phu.ph.src, &ip->ip_src.s_addr, sizeof(u_int32_t)); @@ -316,9 +316,9 @@ static int udp_cksum(register const struct ip *ip, #ifdef INET6 static int udp6_cksum(const struct ip6_hdr *ip6, const struct udphdr *up, - int len) + u_int len) { - int i, tlen; + size_t i; register const u_int16_t *sp; u_int32_t sum; union { @@ -332,14 +332,11 @@ static int udp6_cksum(const struct ip6_hdr *ip6, const struct udphdr *up, u_int16_t pa[20]; } phu; - tlen = EXTRACT_16BITS(&ip6->ip6_plen) + sizeof(struct ip6_hdr) - - ((const char *)up - (const char*)ip6); - /* pseudo-header */ memset(&phu, 0, sizeof(phu)); phu.ph.ph_src = ip6->ip6_src; phu.ph.ph_dst = ip6->ip6_dst; - phu.ph.ph_len = htonl(tlen); + phu.ph.ph_len = htonl(len); phu.ph.ph_nxt = IPPROTO_UDP; sum = 0; @@ -348,10 +345,10 @@ static int udp6_cksum(const struct ip6_hdr *ip6, const struct udphdr *up, sp = (const u_int16_t *)up; - for (i = 0; i < (tlen & ~1); i += 2) + for (i = 0; i < (len & ~1); i += 2) sum += *sp++; - if (tlen & 1) + if (len & 1) sum += htons((*(const u_int8_t *)sp) << 8); while (sum > 0xffff) @@ -588,7 +585,7 @@ udp_print(register const u_char *bp, u_int length, int sum = up->uh_sum; /* for IPv6, UDP checksum is mandatory */ if (TTEST2(cp[0], length)) { - sum = udp6_cksum(ip6, up, length); + sum = udp6_cksum(ip6, up, length + sizeof(struct udphdr)); if (sum != 0) (void)printf("[bad udp cksum %x!] ", sum); else @@ -599,8 +596,10 @@ udp_print(register const u_char *bp, u_int length, if (!qflag) { #define ISPORT(p) (dport == (p) || sport == (p)) - if (ISPORT(NAMESERVER_PORT) || ISPORT(MULTICASTDNS_PORT)) - ns_print((const u_char *)(up + 1), length); + if (ISPORT(NAMESERVER_PORT)) + ns_print((const u_char *)(up + 1), length, 0); + else if (ISPORT(MULTICASTDNS_PORT)) + ns_print((const u_char *)(up + 1), length, 1); else if (ISPORT(TIMED_PORT)) timed_print((const u_char *)(up + 1)); else if (ISPORT(TFTP_PORT)) @@ -652,8 +651,7 @@ udp_print(register const u_char *bp, u_int length, else if (ISPORT(RIPNG_PORT)) ripng_print((const u_char *)(up + 1), length); else if (ISPORT(DHCP6_SERV_PORT) || ISPORT(DHCP6_CLI_PORT)) { - dhcp6_print((const u_char *)(up + 1), length, - sport, dport); + dhcp6_print((const u_char *)(up + 1), length); } #endif /*INET6*/ /*