[packages/mtr] Up to 0.96

arekm arekm at pld-linux.org
Mon Jul 7 11:20:08 CEST 2025


commit 6cc0d104b2ba16794ad71c1ab0c56098913f0055
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Mon Jul 7 11:19:53 2025 +0200

    Up to 0.96

 mtr-display.patch         |  12 +-
 mtr-sourceaddr_ipv4.patch | 386 ----------------------------------------------
 mtr.spec                  |  21 ++-
 3 files changed, 15 insertions(+), 404 deletions(-)
---
diff --git a/mtr.spec b/mtr.spec
index c452150..f304bae 100644
--- a/mtr.spec
+++ b/mtr.spec
@@ -9,7 +9,7 @@ Summary(pt_BR.UTF-8):	Ferramenta para diagnóstico da rede, combinando ping/trac
 Summary(ru.UTF-8):	Matt's Traceroute - утилита для диагностики сети
 Summary(uk.UTF-8):	Matt's Traceroute - утиліта для діагностики мережі
 Name:		mtr
-Version:	0.95
+Version:	0.96
 Release:	1
 Epoch:		1
 License:	GPL v2
@@ -18,7 +18,7 @@ Group:		Networking/Utilities
 # TODO: use named tarballs:
 #Source0:	https://github.com/traviscross/mtr/archive/v%{version}/%{name}-%{version}.tar.gz
 Source0:	https://github.com/traviscross/mtr/archive/v%{version}.tar.gz
-# Source0-md5:	130163d10e0624acbbb51189899f6bf2
+# Source0-md5:	3910a53c9dd8e929c86385d495c66e19
 Source1:	%{name}.desktop
 Source2:	%{name}.png
 Patch0:		%{name}-Makefile.patch
@@ -26,9 +26,7 @@ Patch1:		%{name}-mtr6.patch
 Patch2:		%{name}-display.patch
 Patch3:		%{name}-curses-clear_colors.patch
 Patch4:		%{name}-completion.patch
-# https://github.com/TomHetmer/mtr/commit/19a1fbaf4efc232c4f4a29067297cf5c93fb2794.diff
-Patch5:		%{name}-sourceaddr_ipv4.patch
-Patch6:		%{name}-asn_print_fix.patch
+Patch5:		%{name}-asn_print_fix.patch
 URL:		http://www.bitwizard.nl/mtr/
 BuildRequires:	autoconf >= 2.59
 BuildRequires:	automake >= 1:1.7.9
@@ -157,13 +155,12 @@ Pakiet ten dostarcza bashowe uzupełnianie parametrów polecenia mtr.
 
 %prep
 %setup -q
-%patch0 -p1
-%patch1 -p1
-%patch2 -p1
-%patch3 -p1
-%patch4 -p1
-%patch5 -p1
-%patch6 -p1
+%patch -P0 -p1
+%patch -P1 -p1
+%patch -P2 -p1
+%patch -P3 -p1
+%patch -P4 -p1
+%patch -P5 -p1
 
 echo %{version} > .tarball-version
 
diff --git a/mtr-display.patch b/mtr-display.patch
index a5b417a..d1c5433 100644
--- a/mtr-display.patch
+++ b/mtr-display.patch
@@ -1,9 +1,9 @@
---- mtr-0.92/ui/mtr.c~	2017-08-13 10:34:14.000000000 +0200
-+++ mtr-0.92/ui/mtr.c	2017-08-13 10:34:43.735191142 +0200
-@@ -715,7 +715,7 @@ int main(
-     ctl.probe_timeout = 10 * 1000000;
-     ctl.ipinfo_no = -1;
-     ctl.ipinfo_max = -1;
+--- mtr-0.96/ui/mtr.c~	2025-07-07 11:11:32.000000000 +0200
++++ mtr-0.96/ui/mtr.c	2025-07-07 11:12:26.032549015 +0200
+@@ -763,7 +763,7 @@ int main(
+ #endif
+ #endif
+ 
 -    xstrncpy(ctl.fld_active, "LS NABWV", 2 * MAXFLD);
 +    xstrncpy(ctl.fld_active, "LSR NABWV", 2 * MAXFLD);
  
diff --git a/mtr-sourceaddr_ipv4.patch b/mtr-sourceaddr_ipv4.patch
deleted file mode 100644
index 2817d23..0000000
--- a/mtr-sourceaddr_ipv4.patch
+++ /dev/null
@@ -1,386 +0,0 @@
-diff -ruNp mtr-0.94.orig/packet/construct_unix.c mtr-0.94/packet/construct_unix.c
---- mtr-0.94.orig/packet/construct_unix.c	2020-09-24 10:26:14.000000000 +0200
-+++ mtr-0.94/packet/construct_unix.c	2021-10-23 00:30:26.579107865 +0200
-@@ -71,19 +71,6 @@ uint16_t compute_checksum(
-     return (~sum & 0xffff);
- }
- 
--/*  Encode the IP header length field in the order required by the OS.  */
--static
--uint16_t length_byte_swap(
--    const struct net_state_t *net_state,
--    uint16_t length)
--{
--    if (net_state->platform.ip_length_host_order) {
--        return length;
--    } else {
--        return htons(length);
--    }
--}
--
- /*  Construct a combined sockaddr from a source address and source port  */
- static
- void construct_addr_port(
-@@ -95,38 +82,9 @@ void construct_addr_port(
-     *sockaddr_port_offset(addr_with_port) = htons(port);
- }
- 
--/*  Construct a header for IP version 4  */
--static
--void construct_ip4_header(
--    const struct net_state_t *net_state,
--    const struct probe_t *probe,
--    char *packet_buffer,
--    int packet_size,
--    const struct probe_param_t *param)
--{
--    struct IPHeader *ip;
--
--    ip = (struct IPHeader *) &packet_buffer[0];
--
--    memset(ip, 0, sizeof(struct IPHeader));
--
--    ip->version = 0x45;
--    ip->tos = param->type_of_service;
--    ip->len = length_byte_swap(net_state, packet_size);
--    ip->ttl = param->ttl;
--    ip->protocol = param->protocol;
--//    ip->id = htons(getpid());
--    memcpy(&ip->saddr,
--           sockaddr_addr_offset(&probe->local_addr),
--           sockaddr_addr_size(&probe->local_addr));
--    memcpy(&ip->daddr,
--           sockaddr_addr_offset(&probe->remote_addr),
--           sockaddr_addr_size(&probe->remote_addr));
--}
--
- /*  Construct an ICMP header for IPv4  */
- static
--void construct_icmp4_header(
-+int construct_icmp4_packet(
-     const struct net_state_t *net_state,
-     struct probe_t *probe,
-     char *packet_buffer,
-@@ -134,22 +92,17 @@ void construct_icmp4_header(
-     const struct probe_param_t *param)
- {
-     struct ICMPHeader *icmp;
--    int icmp_size;
- 
--    if (net_state->platform.ip4_socket_raw) {
--        icmp = (struct ICMPHeader *) &packet_buffer[sizeof(struct IPHeader)];
--        icmp_size = packet_size - sizeof(struct IPHeader);
--    } else {
--        icmp = (struct ICMPHeader *) &packet_buffer[0];
--        icmp_size = packet_size;
--    }
-+    icmp = (struct ICMPHeader *) packet_buffer;
- 
-     memset(icmp, 0, sizeof(struct ICMPHeader));
- 
-     icmp->type = ICMP_ECHO;
-     icmp->id = htons(getpid());
-     icmp->sequence = htons(probe->sequence);
--    icmp->checksum = htons(compute_checksum(icmp, icmp_size));
-+    icmp->checksum = htons(compute_checksum(icmp, packet_size));
-+
-+    return 0;
- }
- 
- /*  Construct an ICMP header for IPv6  */
-@@ -238,7 +191,7 @@ int udp4_checksum(void *pheader, void *u
-     with the probe.
- */
- static
--void construct_udp4_header(
-+int construct_udp4_packet(
-     const struct net_state_t *net_state,
-     struct probe_t *probe,
-     char *packet_buffer,
-@@ -248,13 +201,8 @@ void construct_udp4_header(
-     struct UDPHeader *udp;
-     int udp_size;
- 
--    if (net_state->platform.ip4_socket_raw) {
--        udp = (struct UDPHeader *) &packet_buffer[sizeof(struct IPHeader)];
--        udp_size = packet_size - sizeof(struct IPHeader);
--    } else {
--        udp = (struct UDPHeader *) &packet_buffer[0];
--        udp_size = packet_size;
--    }
-+    udp = (struct UDPHeader *) packet_buffer;
-+    udp_size = packet_size;
- 
-     memset(udp, 0, sizeof(struct UDPHeader));
- 
-@@ -283,6 +231,8 @@ void construct_udp4_header(
-     *checksum_off = htons(udp4_checksum(&udph, udp,
-                                         sizeof(struct UDPPseudoHeader),
-                                         udp_size, udp->checksum != 0));
-+
-+    return 0;
- }
- 
- /*  Construct a header for UDPv6 probes  */
-@@ -545,10 +495,10 @@ int construct_ip4_packet(
-     int packet_size,
-     const struct probe_param_t *param)
- {
--    int send_socket = net_state->platform.ip4_send_socket;
-+    int send_socket;
-     bool is_stream_protocol = false;
--    int tos, ttl, socket;
--    bool bind_send_socket = false;
-+    int tos, ttl;
-+    bool bind_send_socket = true;
-     struct sockaddr_storage current_sockaddr;
-     int current_sockaddr_len;
- 
-@@ -558,23 +508,34 @@ int construct_ip4_packet(
-     } else if (param->protocol == IPPROTO_SCTP) {
-         is_stream_protocol = true;
- #endif
--    } else {
-+    } else if (param->protocol == IPPROTO_ICMP) {
-         if (net_state->platform.ip4_socket_raw) {
--            construct_ip4_header(net_state, probe, packet_buffer, packet_size,
--                                  param);
-+            send_socket = net_state->platform.icmp4_send_socket;
-+        } else {
-+            send_socket = net_state->platform.ip4_txrx_icmp_socket;
-+        }
-+
-+        if (construct_icmp4_packet
-+            (net_state, probe, packet_buffer, packet_size, param)) {
-+            return -1;
-         }
--        if (param->protocol == IPPROTO_ICMP) {
--            construct_icmp4_header(net_state, probe, packet_buffer,
--                                   packet_size, param);
--        } else if (param->protocol == IPPROTO_UDP) {
--            construct_udp4_header(net_state, probe, packet_buffer,
--                                  packet_size, param);
-+    } else if (param->protocol == IPPROTO_UDP) {
-+        if (net_state->platform.ip4_socket_raw) {
-+            send_socket = net_state->platform.udp4_send_socket;
-         } else {
--            errno = EINVAL;
-+            send_socket = net_state->platform.ip4_txrx_udp_socket;
-+        }
-+
-+        if (construct_udp4_packet
-+            (net_state, probe, packet_buffer, packet_size, param)) {
-             return -1;
-         }
-+    } else {
-+        errno = EINVAL;
-+        return -1;
-     }
- 
-+
-     if (is_stream_protocol) {
-         send_socket =
-             open_stream_socket(net_state, param->protocol, probe->sequence,
-@@ -608,54 +569,51 @@ int construct_ip4_packet(
- #endif
- 
-     /*
--       Bind src port when not using raw socket to pass in ICMP id, kernel
--       get ICMP id from src_port when using DGRAM socket.
-+       Check the current socket address, and if it is the same
-+       as the source address we intend, we will skip the bind.
-+       This is to accommodate Solaris, which, as of Solaris 11.3,
-+       will return an EINVAL error on bind if the socket is already
-+       bound, even if the same address is used.
-      */
--    if (!net_state->platform.ip4_socket_raw &&
--            param->protocol == IPPROTO_ICMP &&
--            !param->is_probing_byte_order) {
--        current_sockaddr_len = sizeof(struct sockaddr_in);
--        bind_send_socket = true;
--        socket = net_state->platform.ip4_txrx_icmp_socket;
--        if (getsockname(socket, (struct sockaddr *) &current_sockaddr,
--                        &current_sockaddr_len)) {
--            return -1;
--        }
--        struct sockaddr_in *sin_cur =
--            (struct sockaddr_in *) &current_sockaddr;
-+    current_sockaddr_len = sizeof(struct sockaddr_in);
-+    if (getsockname(send_socket, (struct sockaddr *) &current_sockaddr,
-+                    &current_sockaddr_len) == 0) {
-+        struct sockaddr_in *sin_cur = (struct sockaddr_in *) &current_sockaddr;
- 
--        /* avoid double bind */
--        if (sin_cur->sin_port) {
--            bind_send_socket = false;
-+        if (net_state->platform.ip4_socket_raw) {
-+            if (memcmp(&current_sockaddr,
-+                       &probe->local_addr, sizeof(struct sockaddr_in)) == 0) {
-+                bind_send_socket = false;
-+            }
-+        } else {
-+            /* avoid double bind for DGRAM socket */
-+            if (sin_cur->sin_port) {
-+                bind_send_socket = false;
-+            }
-         }
-     }
- 
-     /*  Bind to our local address  */
--    if (bind_send_socket && bind(socket, (struct sockaddr *)&probe->local_addr,
-+    if (bind_send_socket && bind(send_socket, (struct sockaddr *)&probe->local_addr,
-                 sizeof(struct sockaddr_in))) {
-         return -1;
-     }
- 
--    /* set TOS and TTL for non-raw socket */
--    if (!net_state->platform.ip4_socket_raw && !param->is_probing_byte_order) {
--        if (param->protocol == IPPROTO_ICMP) {
--            socket = net_state->platform.ip4_txrx_icmp_socket;
--        } else if (param->protocol == IPPROTO_UDP) {
--            socket = net_state->platform.ip4_txrx_udp_socket;
--        } else {
--            return 0;
--        }
--        tos = param->type_of_service;
--        if (setsockopt(socket, SOL_IP, IP_TOS, &tos, sizeof(int))) {
--            return -1;
--        }
--        ttl = param->ttl;
--        if (setsockopt(socket, SOL_IP, IP_TTL,
--                       &ttl, sizeof(int)) == -1) {
--            return -1;
--        }
-+    /*  Set the type of service  */
-+    tos = param->type_of_service;
-+    if (setsockopt(send_socket, SOL_IP, IP_TOS, &tos, sizeof(int))) {
-+        return -1;
-     }
- 
-+    /*  Set the time-to-live  */
-+    ttl = param->ttl;
-+    if (setsockopt(send_socket, SOL_IP, IP_TTL,
-+                   &ttl, sizeof(int)) == -1) {
-+        return -1;
-+    }
-+
-+
-+
-     return 0;
- }
- 
-diff -ruNp mtr-0.94.orig/packet/probe_unix.c mtr-0.94/packet/probe_unix.c
---- mtr-0.94.orig/packet/probe_unix.c	2020-09-24 10:26:14.000000000 +0200
-+++ mtr-0.94/packet/probe_unix.c	2021-10-23 00:30:26.579107865 +0200
-@@ -87,16 +87,21 @@ int send_packet(
-     } else if (sockaddr->ss_family == AF_INET) {
-         sockaddr_length = sizeof(struct sockaddr_in);
- 
--        if (net_state->platform.ip4_socket_raw) {
--            send_socket = net_state->platform.ip4_send_socket;
--        } else {
--            if (param->protocol == IPPROTO_ICMP) {
--                if (param->is_probing_byte_order) {
--                    send_socket = net_state->platform.ip4_tmp_icmp_socket;;
--                } else {
--                    send_socket = net_state->platform.ip4_txrx_icmp_socket;
--                }
--            } else if (param->protocol == IPPROTO_UDP) {
-+        if (param->protocol == IPPROTO_ICMP) {
-+            if (net_state->platform.ip4_socket_raw) {
-+                send_socket = net_state->platform.icmp4_send_socket;
-+            } else {
-+                send_socket = net_state->platform.ip4_txrx_icmp_socket;
-+            }
-+        } else if (param->protocol == IPPROTO_UDP) {
-+            if (net_state->platform.ip4_socket_raw) {
-+                send_socket = net_state->platform.udp4_send_socket;
-+                /* we got a ipv4 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.ip4_txrx_udp_socket;
-                 if (param->dest_port) {
-                     *sockaddr_port_offset(&dst) = htons(param->dest_port);
-@@ -105,6 +110,7 @@ int send_packet(
-                 }
-             }
-         }
-+
-     }
- 
-     if (send_socket == 0) {
-@@ -236,26 +242,19 @@ static
- int open_ip4_sockets_raw(
-     struct net_state_t *net_state)
- {
--    int send_socket;
-+    int send_socket_icmp;
-+    int send_socket_udp;
-     int recv_socket;
--    int trueopt = 1;
- 
--    send_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
--    if (send_socket == -1) {
--        send_socket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
--        if (send_socket == -1) {
--            return -1;
--        }
-+    send_socket_icmp = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
-+    if (send_socket_icmp == -1) {
-+        return -1;
-     }
- 
--    /*
--       We will be including the IP header in transmitted packets.
--       Linux doesn't require this, but BSD derived network stacks do.
--     */
--    if (setsockopt
--        (send_socket, IPPROTO_IP, IP_HDRINCL, &trueopt, sizeof(int))) {
-+    send_socket_udp = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
-+    if (send_socket_udp == -1) {
-+        close(send_socket_icmp);
- 
--        close(send_socket);
-         return -1;
-     }
- 
-@@ -265,13 +264,15 @@ int open_ip4_sockets_raw(
-      */
-     recv_socket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
-     if (recv_socket == -1) {
--        close(send_socket);
-+        close(send_socket_icmp);
-+        close(send_socket_udp);
-         return -1;
-     }
- 
-     net_state->platform.ip4_present = true;
-     net_state->platform.ip4_socket_raw = true;
--    net_state->platform.ip4_send_socket = send_socket;
-+    net_state->platform.icmp4_send_socket = send_socket_icmp;
-+    net_state->platform.udp4_send_socket = send_socket_udp;
-     net_state->platform.ip4_recv_socket = recv_socket;
- 
-     return 0;
-diff -ruNp mtr-0.94.orig/packet/probe_unix.h mtr-0.94/packet/probe_unix.h
---- mtr-0.94.orig/packet/probe_unix.h	2020-09-24 10:26:14.000000000 +0200
-+++ mtr-0.94/packet/probe_unix.h	2021-10-23 00:31:30.775836399 +0200
-@@ -69,9 +69,15 @@ struct net_state_platform_t {
-     /*  Socket used to send IPv4 udp packets and receive icmp err packets */
-     int ip4_txrx_udp_socket;
- 
-+    /*  Send socket for ICMPv4 packets  */
-+    int icmp4_send_socket;
-+
-     /*  Send socket for ICMPv6 packets  */
-     int icmp6_send_socket;
- 
-+    /*  Send socket for UDPv4 packets  */
-+    int udp4_send_socket;
-+
-     /*  Send socket for UDPv6 packets  */
-     int udp6_send_socket;
- 
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/mtr.git/commitdiff/6cc0d104b2ba16794ad71c1ab0c56098913f0055



More information about the pld-cvs-commit mailing list