From 7766dd280d9a4a7ffdfcec58224d0985cfd4169b Mon Sep 17 00:00:00 2001 From: laanwj <126646+laanwj@users.noreply.github.com> Date: Sun, 28 Apr 2024 11:35:27 +0200 Subject: [PATCH 1/2] net: Replace ifname check with IFF_LOOPBACK in Discover Checking the interface name is kind of brittle. In the age of network namespaces and containers, there is no reason a loopback interface can't be called differently. Check for the `IFF_LOOPBACK` flag to detect loopback interface instead. --- src/net.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index 4801f5c1f9c..7e60ef6df5d 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -3077,8 +3077,7 @@ void Discover() { if (ifa->ifa_addr == nullptr) continue; if ((ifa->ifa_flags & IFF_UP) == 0) continue; - if (strcmp(ifa->ifa_name, "lo") == 0) continue; - if (strcmp(ifa->ifa_name, "lo0") == 0) continue; + if ((ifa->ifa_flags & IFF_LOOPBACK) != 0) continue; if (ifa->ifa_addr->sa_family == AF_INET) { struct sockaddr_in* s4 = (struct sockaddr_in*)(ifa->ifa_addr); From a68fed111be393ddbbcd7451f78bc63601253ee0 Mon Sep 17 00:00:00 2001 From: laanwj <126646+laanwj@users.noreply.github.com> Date: Sun, 28 Apr 2024 11:40:19 +0200 Subject: [PATCH 2/2] net: Fix misleading comment for Discover All network addresses are being iterated over and added, not just the first one per interface. --- src/net.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/net.h b/src/net.h index 46d94226952..55209324b1e 100644 --- a/src/net.h +++ b/src/net.h @@ -137,8 +137,7 @@ struct CSerializedNetMsg { /** * Look up IP addresses from all interfaces on the machine and add them to the * list of local addresses to self-advertise. - * The loopback interface is skipped and only the first address from each - * interface is used. + * The loopback interface is skipped. */ void Discover();