diff options
author | Simon Kelley <simon@thekelleys.org.uk> | 2013-05-14 11:28:47 +0100 |
---|---|---|
committer | Simon Kelley <simon@thekelleys.org.uk> | 2013-05-14 11:28:47 +0100 |
commit | 3f2873d42c4d7e7dba32b6e64a3687d43928bc8e (patch) | |
tree | 8b45021585faa7d82776f6b2084aed4f11465edb /src/netlink.c | |
parent | ab915f837c1db9b8b095158b41028ea71246d68d (diff) | |
download | dnsmasq-3f2873d42c4d7e7dba32b6e64a3687d43928bc8e.tar.gz |
Handle IPv4 interface-address labels in Linux.v2.67test4
Diffstat (limited to 'src/netlink.c')
-rw-r--r-- | src/netlink.c | 7 |
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 |