Localip: uses assigned netlink port id on Linux (#2253)

Fixes #2252
This commit is contained in:
Roshan Warrier
2026-03-30 16:09:43 +05:30
committed by GitHub
parent b022babd7e
commit b4e6688dfe
+16 -6
View File
@@ -7,6 +7,18 @@
#include <linux/rtnetlink.h>
#include <net/if.h>
static uint32_t ffNetifGetNetlinkPortId(int sock_fd) {
struct sockaddr_nl addr = {};
socklen_t addrLen = sizeof(addr);
if (getsockname(sock_fd, (struct sockaddr*) &addr, &addrLen) < 0) {
FF_DEBUG("Failed to query netlink socket address (use PID instead): %s", strerror(errno));
return instance.state.platform.pid;
} else {
FF_DEBUG("Netlink port ID: %u", addr.nl_pid);
return addr.nl_pid;
}
}
bool ffNetifGetDefaultRouteImplV4(FFNetifDefaultRouteResult* result) {
FF_DEBUG("Starting IPv4 default route detection");
@@ -17,9 +29,6 @@ bool ffNetifGetDefaultRouteImplV4(FFNetifDefaultRouteResult* result) {
}
FF_DEBUG("Created netlink socket: fd=%d", sock_fd);
uint32_t pid = instance.state.platform.pid;
FF_DEBUG("Process PID: %u", pid);
// Bind socket
struct sockaddr_nl addr = {
.nl_family = AF_NETLINK,
@@ -33,6 +42,8 @@ bool ffNetifGetDefaultRouteImplV4(FFNetifDefaultRouteResult* result) {
}
FF_DEBUG("Successfully bound socket");
uint32_t pid = ffNetifGetNetlinkPortId(sock_fd);
struct __attribute__((__packed__)) {
struct nlmsghdr nlh;
struct rtmsg rtm;
@@ -228,9 +239,6 @@ bool ffNetifGetDefaultRouteImplV6(FFNetifDefaultRouteResult* result) {
}
FF_DEBUG("Created netlink socket: fd=%d", sock_fd);
uint32_t pid = instance.state.platform.pid;
FF_DEBUG("Process PID: %u", pid);
// Bind socket
struct sockaddr_nl addr = {
.nl_family = AF_NETLINK,
@@ -244,6 +252,8 @@ bool ffNetifGetDefaultRouteImplV6(FFNetifDefaultRouteResult* result) {
}
FF_DEBUG("Successfully bound socket");
uint32_t pid = ffNetifGetNetlinkPortId(sock_fd);
struct __attribute__((__packed__)) {
struct nlmsghdr nlh;
struct rtmsg rtm;