summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoachim Wiberg <troglobit@gmail.com>2022-12-30 13:07:50 +0100
committerJoachim Wiberg <troglobit@gmail.com>2022-12-30 13:07:50 +0100
commit4296f30d3f36fc062586de189900bab365dbb96a (patch)
tree72c57530106496da5d3d255d170a37083c092b63
parent36e96bfce52fdbcff944d1f9f519677fc0d3b172 (diff)
downloadlibnet-4296f30d3f36fc062586de189900bab365dbb96a.tar.gz
src: alllow returning lo when dev i set also on Linux and OpenBSD
The other (older) implementations of libnet_ifaddrlist() explicitly check if dev is unset before discarding any loopback interface. This patch adds the same behavior to the Linux and OpeBSD backends for consistency. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
-rw-r--r--src/libnet_if_addr.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/src/libnet_if_addr.c b/src/libnet_if_addr.c
index acd2dbc..b07ca74 100644
--- a/src/libnet_if_addr.c
+++ b/src/libnet_if_addr.c
@@ -119,8 +119,6 @@ libnet_ifaddrlist(struct libnet_ifaddr_list **ipaddrp, char *dev, char *errbuf)
struct ifaddrs *ifap, *ifa;
size_t nipaddr = 0;
- (void)dev; /* unused */
-
if (getifaddrs(&ifap) != 0)
{
snprintf(errbuf, LIBNET_ERRBUF_SIZE, "%s(): getifaddrs: %s", __func__, strerror(errno));
@@ -138,10 +136,10 @@ libnet_ifaddrlist(struct libnet_ifaddr_list **ipaddrp, char *dev, char *errbuf)
{
struct libnet_ifaddr_list *al = &ifaddrlist[nipaddr];
- if (ifa->ifa_flags & IFF_LOOPBACK || ifa->ifa_addr == NULL)
+ if (dev == NULL && (ifa->ifa_flags & IFF_LOOPBACK))
continue;
- if (ifa->ifa_addr->sa_family != AF_INET)
+ if (ifa->ifa_addr == NULL || ifa->ifa_addr->sa_family != AF_INET)
continue;
al->device = strdup(ifa->ifa_name);