summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoachim Wiberg <troglobit@gmail.com>2022-12-30 11:10:16 +0100
committerJoachim Wiberg <troglobit@gmail.com>2022-12-30 11:10:16 +0100
commita8965feb7dbedb614e5d0d3e75001f31a03a55a1 (patch)
tree3b8c1a46dd9cc7fc6763516ab6b9ea2030cc9378
parent2893f8586765d5b2f539d4b760ef525c008a7399 (diff)
downloadlibnet-a8965feb7dbedb614e5d0d3e75001f31a03a55a1.tar.gz
src: simplify and align different libnet_ifaddrlist() backends
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
-rw-r--r--src/libnet_if_addr.c41
1 files changed, 21 insertions, 20 deletions
diff --git a/src/libnet_if_addr.c b/src/libnet_if_addr.c
index 888c5dc..c34e565 100644
--- a/src/libnet_if_addr.c
+++ b/src/libnet_if_addr.c
@@ -117,7 +117,7 @@ libnet_ifaddrlist(struct libnet_ifaddr_list **ipaddrp, char *dev, char *errbuf)
{
struct libnet_ifaddr_list *ifaddrlist = NULL;
struct ifaddrs *ifap, *ifa;
- int i = 0;
+ int nipaddr = 0;
(void)dev; /* unused */
@@ -136,22 +136,24 @@ libnet_ifaddrlist(struct libnet_ifaddr_list **ipaddrp, char *dev, char *errbuf)
for (ifa = ifap; ifa; ifa = ifa->ifa_next)
{
+ struct libnet_ifaddr_list *al = &ifaddrlist[nipaddr];
+
if (ifa->ifa_flags & IFF_LOOPBACK || ifa->ifa_addr == NULL)
continue;
- if (ifa->ifa_addr->sa_family == AF_INET )
+ if (ifa->ifa_addr->sa_family != AF_INET)
+ continue;
+
+ al->device = strdup(ifa->ifa_name);
+ if (al->device == NULL)
{
- ifaddrlist[i].device = strdup(ifa->ifa_name);
- if (ifaddrlist[i].device == NULL)
- {
- snprintf(errbuf, LIBNET_ERRBUF_SIZE, "%s(): OOM", __func__);
- continue;
- }
- ifaddrlist[i].addr = ((struct sockaddr_in *)ifa->ifa_addr)->sin_addr.s_addr;
- ++i;
+ snprintf(errbuf, LIBNET_ERRBUF_SIZE, "%s(): OOM", __func__);
+ continue;
}
+ al->addr = ((struct sockaddr_in *)ifa->ifa_addr)->sin_addr.s_addr;
+ nipaddr++;
- if (i == ip_addr_num) {
+ if (nipaddr == ip_addr_num) {
struct libnet_ifaddr_list *tmp;
/* grow by a factor of 1.5, close enough to golden ratio */
@@ -169,7 +171,7 @@ libnet_ifaddrlist(struct libnet_ifaddr_list **ipaddrp, char *dev, char *errbuf)
freeifaddrs(ifap);
*ipaddrp = ifaddrlist;
- return (i);
+ return (nipaddr);
}
@@ -329,7 +331,7 @@ libnet_ifaddrlist(struct libnet_ifaddr_list **ipaddrp, char *dev, char *errbuf)
goto bad;
}
- ++nipaddr;
+ nipaddr++;
if (nipaddr == ip_addr_num) {
struct libnet_ifaddr_list *tmp;
@@ -362,7 +364,6 @@ libnet_ifaddrlist(struct libnet_ifaddr_list **ipaddrp, char *dev, char *errbuf)
*ipaddrp = ifaddrlist;
return (nipaddr);
-
bad:
if (ifaddrlist)
free(ifaddrlist);
@@ -400,7 +401,6 @@ libnet_ifaddrlist(struct libnet_ifaddr_list **ipaddrp, char *dev_unused, char *e
pcap_if_t *devlist = NULL;
pcap_if_t *dev = NULL;
int nipaddr = 0;
- int i = 0;
/* Retrieve the interfaces list */
if (pcap_findalldevs(&devlist, err) == -1)
@@ -418,11 +418,13 @@ libnet_ifaddrlist(struct libnet_ifaddr_list **ipaddrp, char *dev_unused, char *e
for (dev = devlist; dev; dev = dev->next)
{
- struct pcap_addr* pcapaddr;
+ struct pcap_addr *pcapaddr;
for (pcapaddr = dev->addresses; pcapaddr; pcapaddr = pcapaddr->next)
{
- struct sockaddr* addr = pcapaddr->addr;
+ struct libnet_ifaddr_list *al = &ifaddrlist[nipaddr];
+ struct sockaddr *addr = pcapaddr->addr;
+
#if 0
printf("if name '%s' description '%s' loop? %d\n", dev->name, dev->description, dev->flags);
{
@@ -442,9 +444,8 @@ libnet_ifaddrlist(struct libnet_ifaddr_list **ipaddrp, char *dev_unused, char *e
if (addr->sa_family != AF_INET)
continue;
- ifaddrlist[i].device = strdup(dev->name);
- ifaddrlist[i].addr = ((struct sockaddr_in *)addr)->sin_addr.s_addr;
- ++i;
+ al->device = strdup(dev->name);
+ al->addr = ((struct sockaddr_in *)addr)->sin_addr.s_addr;
++nipaddr;
if (nipaddr == ip_addr_num)