summaryrefslogtreecommitdiff
path: root/src/netlink.c
diff options
context:
space:
mode:
authorSimon Kelley <simon@thekelleys.org.uk>2013-05-14 11:28:47 +0100
committerSimon Kelley <simon@thekelleys.org.uk>2013-05-14 11:28:47 +0100
commit3f2873d42c4d7e7dba32b6e64a3687d43928bc8e (patch)
tree8b45021585faa7d82776f6b2084aed4f11465edb /src/netlink.c
parentab915f837c1db9b8b095158b41028ea71246d68d (diff)
downloaddnsmasq-3f2873d42c4d7e7dba32b6e64a3687d43928bc8e.tar.gz
Handle IPv4 interface-address labels in Linux.v2.67test4
Diffstat (limited to 'src/netlink.c')
-rw-r--r--src/netlink.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/netlink.c b/src/netlink.c
index 0881b71..78d0926 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -215,7 +215,8 @@ int iface_enumerate(int family, void *parm, int (*callback)())
if (ifa->ifa_family == AF_INET)
{
struct in_addr netmask, addr, broadcast;
-
+ char *label = NULL;
+
netmask.s_addr = htonl(0xffffffff << (32 - ifa->ifa_prefixlen));
addr.s_addr = 0;
broadcast.s_addr = 0;
@@ -226,12 +227,14 @@ int iface_enumerate(int family, void *parm, int (*callback)())
addr = *((struct in_addr *)(rta+1));
else if (rta->rta_type == IFA_BROADCAST)
broadcast = *((struct in_addr *)(rta+1));
+ else if (rta->rta_type == IFA_LABEL)
+ label = RTA_DATA(rta);
rta = RTA_NEXT(rta, len1);
}
if (addr.s_addr && callback_ok)
- if (!((*callback)(addr, ifa->ifa_index, netmask, broadcast, parm)))
+ if (!((*callback)(addr, ifa->ifa_index, label, netmask, broadcast, parm)))
callback_ok = 0;
}
#ifdef HAVE_IPV6