!39 fix ipv6 udp error

From: @yangl777 
Reviewed-by: @robertxw 
Signed-off-by: @robertxw
This commit is contained in:
openeuler-ci-bot 2023-11-27 07:32:03 +00:00 committed by Gitee
commit acc257a7bb
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 88 additions and 2 deletions

View File

@ -0,0 +1,78 @@
From 513c04b02ff0632ad9c84b2d9b0f3dbf3a25c0b2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Markus=20K=C3=B6tter?= <koetter@luis.uni-hannover.de>
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

View File

@ -2,7 +2,7 @@
Name: mtr
Version: 0.93
Release: 3
Release: 4
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 <yanglu72@h-partners.cn> - 2:0.93-4
- Type:bugfix
- ID:NA
- SUG:NA
- DESC:fix ipv6 udp error
* Mon Jul 18 2022 liyunqing <liyunqing@kylinos.cn> - 2:0.93-3
- modify fix xmtr cannot start in Xface4 environment