79 lines
2.8 KiB
Diff
79 lines
2.8 KiB
Diff
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
|
|
|