From c87fa1b3cde586538efb3276f7501bdd0950054e Mon Sep 17 00:00:00 2001 From: yangl777 Date: Fri, 24 Nov 2023 17:18:38 +0800 Subject: [PATCH] fix ipv6 udp error --- ...fix-probes-with-local-or-remote-port.patch | 78 +++++++++++++++++++ mtr.spec | 12 ++- 2 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 backport-ip6-udp-fix-probes-with-local-or-remote-port.patch diff --git a/backport-ip6-udp-fix-probes-with-local-or-remote-port.patch b/backport-ip6-udp-fix-probes-with-local-or-remote-port.patch new file mode 100644 index 0000000..e02828c --- /dev/null +++ b/backport-ip6-udp-fix-probes-with-local-or-remote-port.patch @@ -0,0 +1,78 @@ +From 513c04b02ff0632ad9c84b2d9b0f3dbf3a25c0b2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Markus=20K=C3=B6tter?= +Date: Wed, 15 Jan 2020 15:42:58 +0100 +Subject: [PATCH] ip6 udp - fix probes with local or remote port + +only set the remote port in raw packet, not as sendto parameter + +does not fix local and remote port, seq number is checksum then, +payload has to be adjusted as with ipv4 + +Conflict: NA +Reference:https://github.com/traviscross/mtr/pull/331/commits/513c04b02ff0632ad9c84b2d9b0f3dbf3a25c0b2 + +--- + packet/probe_unix.c | 18 +++++++++++++----- + 1 file changed, 13 insertions(+), 5 deletions(-) + +diff --git a/packet/probe_unix.c b/packet/probe_unix.c +index bf1e2c9..a749f7d 100644 +--- a/packet/probe_unix.c ++++ b/packet/probe_unix.c +@@ -52,9 +52,12 @@ int send_packet( + int packet_size, + const struct sockaddr_storage *sockaddr) + { ++ struct sockaddr_storage dst; + int send_socket = 0; + int sockaddr_length; + ++ memcpy(&dst, sockaddr, sizeof(struct sockaddr_storage)); ++ + if (sockaddr->ss_family == AF_INET6) { + sockaddr_length = sizeof(struct sockaddr_in6); + +@@ -67,12 +70,17 @@ int send_packet( + } else if (param->protocol == IPPROTO_UDP) { + if (net_state->platform.ip6_socket_raw) { + send_socket = net_state->platform.udp6_send_socket; ++ /* we got a ipv6 udp raw socket ++ * the remote port is in the payload ++ * we do not set in the sockaddr ++ */ ++ *sockaddr_port_offset(&dst) = 0; + } else { + send_socket = net_state->platform.ip6_txrx_udp_socket; + if (param->dest_port) { +- *sockaddr_port_offset(sockaddr) = htons(param->dest_port); ++ *sockaddr_port_offset(&dst) = htons(param->dest_port); + } else { +- *sockaddr_port_offset(sockaddr) = sequence; ++ *sockaddr_port_offset(&dst) = sequence; + } + } + } +@@ -91,9 +99,9 @@ int send_packet( + } else if (param->protocol == IPPROTO_UDP) { + send_socket = net_state->platform.ip4_txrx_udp_socket; + if (param->dest_port) { +- *sockaddr_port_offset(sockaddr) = htons(param->dest_port); ++ *sockaddr_port_offset(&dst) = htons(param->dest_port); + } else { +- *sockaddr_port_offset(sockaddr) = sequence; ++ *sockaddr_port_offset(&dst) = sequence; + } + } + } +@@ -105,7 +113,7 @@ int send_packet( + } + + return sendto(send_socket, packet, packet_size, 0, +- (struct sockaddr *) sockaddr, sockaddr_length); ++ (struct sockaddr *) &dst, sockaddr_length); + } + + /* +-- +2.30.0 + diff --git a/mtr.spec b/mtr.spec index 67b8283..bcc90d4 100644 --- a/mtr.spec +++ b/mtr.spec @@ -2,7 +2,7 @@ Name: mtr Version: 0.93 -Release: 2 +Release: 3 Epoch: 2 Summary: Ping and Traceroute Network Diagnostic Tool License: GPLv2 and BSD @@ -11,6 +11,8 @@ Source0: https://github.com/traviscross/mtr/archive/v%{version}/%{name}-%{ Source1: net-x%{name}.desktop Source2: mtr-gtk-pkexec-wrapper.sh +Patch6000: backport-ip6-udp-fix-probes-with-local-or-remote-port.patch + BuildRequires: git autoconf automake libtool ncurses-devel gtk2-devel desktop-file-utils Provides: %{name}-gtk = %{epoch}:%{version}-%{release} @@ -25,7 +27,7 @@ and percentage for all network hops between the systems. %package_help %prep -%autosetup -n %{name}-%{version} +%autosetup -n %{name}-%{version} -p1 %build export CFLAGS="%{optflags} -fPIE" @@ -68,6 +70,12 @@ make test %{_mandir}/man8/* %changelog +* Fri Nov 24 2023 yanglu - 2:0.93-3 +- Type:bugfix +- ID:NA +- SUG:NA +- DESC:fix ipv6 udp error + * Mon Oct 24 2022 xingwei - 2:0.93-2 - Type:bugfix - ID:NA -- Gitee