X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/c666659228b605c1cbf789ad4a89d12dd047a64b..d29f3dab95d8b28a62848fcb043b8ba40348bc3d:/print-tcp.c diff --git a/print-tcp.c b/print-tcp.c index b63bc4eb..27620d66 100644 --- a/print-tcp.c +++ b/print-tcp.c @@ -142,8 +142,8 @@ static int tcp_cksum(register const struct ip *ip, register const struct tcphdr *tp, register u_int len) { - return (nextproto4_cksum(ip, (const u_int8_t *)tp, len, - IPPROTO_TCP)); + return nextproto4_cksum(ip, (const u_int8_t *)tp, len, len, + IPPROTO_TCP); } void @@ -258,16 +258,16 @@ tcp_print(register const u_char *bp, register u_int length, if (sport > dport) rev = 1; else if (sport == dport) { - if (memcmp(src, dst, sizeof ip6->ip6_dst) > 0) + if (UNALIGNED_MEMCMP(src, dst, sizeof ip6->ip6_dst) > 0) rev = 1; } if (rev) { - memcpy(&tha.src, dst, sizeof ip6->ip6_dst); - memcpy(&tha.dst, src, sizeof ip6->ip6_src); + UNALIGNED_MEMCPY(&tha.src, dst, sizeof ip6->ip6_dst); + UNALIGNED_MEMCPY(&tha.dst, src, sizeof ip6->ip6_src); tha.port = dport << 16 | sport; } else { - memcpy(&tha.dst, dst, sizeof ip6->ip6_dst); - memcpy(&tha.src, src, sizeof ip6->ip6_src); + UNALIGNED_MEMCPY(&tha.dst, dst, sizeof ip6->ip6_dst); + UNALIGNED_MEMCPY(&tha.src, src, sizeof ip6->ip6_src); tha.port = sport << 16 | dport; } @@ -305,31 +305,25 @@ tcp_print(register const u_char *bp, register u_int length, #endif /*INET6*/ register struct tcp_seq_hash *th; struct tcp_seq_hash *tcp_seq_hash; - const void *src, *dst; + const struct in_addr *src, *dst; struct tha tha; tcp_seq_hash = tcp_seq_hash4; - /* - * We use "void *" to keep the compiler from - * assuming the structures are aligned and - * generating non-unaligned-safe code for - * the copies. - */ - src = (const void *)&ip->ip_src; - dst = (const void *)&ip->ip_dst; + src = &ip->ip_src; + dst = &ip->ip_dst; if (sport > dport) rev = 1; else if (sport == dport) { - if (memcmp(src, dst, sizeof ip->ip_dst) > 0) + if (UNALIGNED_MEMCMP(src, dst, sizeof ip->ip_dst) > 0) rev = 1; } if (rev) { - memcpy(&tha.src, dst, sizeof ip->ip_dst); - memcpy(&tha.dst, src, sizeof ip->ip_src); + UNALIGNED_MEMCPY(&tha.src, dst, sizeof ip->ip_dst); + UNALIGNED_MEMCPY(&tha.dst, src, sizeof ip->ip_src); tha.port = dport << 16 | sport; } else { - memcpy(&tha.dst, dst, sizeof ip->ip_dst); - memcpy(&tha.src, src, sizeof ip->ip_src); + UNALIGNED_MEMCPY(&tha.dst, dst, sizeof ip->ip_dst); + UNALIGNED_MEMCPY(&tha.src, src, sizeof ip->ip_src); tha.port = sport << 16 | dport; } @@ -392,7 +386,8 @@ tcp_print(register const u_char *bp, register u_int length, #ifdef INET6 else if (IP_V(ip) == 6 && ip6->ip6_plen) { if (TTEST2(tp->th_sport, length)) { - sum = nextproto6_cksum(ip6, (const u_int8_t *)tp, length, IPPROTO_TCP); + sum = nextproto6_cksum(ip6, (const u_int8_t *)tp, + length, length, IPPROTO_TCP); tcp_sum = EXTRACT_16BITS(&tp->th_sum); (void)printf(", cksum 0x%04x", tcp_sum); @@ -668,7 +663,7 @@ tcp_print(register const u_char *bp, register u_int length, if (packettype) { switch (packettype) { case PT_ZMTP1: - zmtp1_print(bp, length); + zmtp1_print(gndo, bp, length); break; } return; @@ -688,7 +683,7 @@ tcp_print(register const u_char *bp, register u_int length, smb_tcp_print(bp, length); #endif else if (sport == BEEP_PORT || dport == BEEP_PORT) - beep_print(bp, length); + beep_print(gndo, bp, length); else if (sport == OPENFLOW_PORT || dport == OPENFLOW_PORT) openflow_print(bp, length); else if (length > 2 && @@ -700,7 +695,7 @@ tcp_print(register const u_char *bp, register u_int length, */ ns_print(bp + 2, length - 2, 0); } else if (sport == MSDP_PORT || dport == MSDP_PORT) { - msdp_print(bp, length); + msdp_print(gndo, bp, length); } else if (sport == RPKI_RTR_PORT || dport == RPKI_RTR_PORT) { rpki_rtr_print(bp, length); }