summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Kelley <simon@thekelleys.org.uk>2013-01-09 19:57:47 +0000
committerSimon Kelley <simon@thekelleys.org.uk>2013-01-09 19:57:47 +0000
commit39f6a04ca42af0f167b67c1a66ce3df6d2385c75 (patch)
treec00a7fcf2ba7a1aeacad1a614fa05d3956900d93
parent37c9ccebd1261b5d44b30bad035f1cf8a4d3f540 (diff)
downloaddnsmasq-39f6a04ca42af0f167b67c1a66ce3df6d2385c75.tar.gz
Better fix for interfaces without broadcast address on *BSD.v2.66test7
-rw-r--r--src/bpf.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/bpf.c b/src/bpf.c
index 5702cf8..d7158cd 100644
--- a/src/bpf.c
+++ b/src/bpf.c
@@ -111,7 +111,7 @@ int iface_enumerate(int family, void *parm, int (*callback)())
{
int iface_index = if_nametoindex(addrs->ifa_name);
- if (iface_index == 0 || !addrs->ifa_addr || !addrs->ifa_netmask || !addrs->ifa_broadaddr)
+ if (iface_index == 0 || !addrs->ifa_addr || !addrs->ifa_netmask)
continue;
if (family == AF_INET)
@@ -119,7 +119,10 @@ int iface_enumerate(int family, void *parm, int (*callback)())
struct in_addr addr, netmask, broadcast;
addr = ((struct sockaddr_in *) addrs->ifa_addr)->sin_addr;
netmask = ((struct sockaddr_in *) addrs->ifa_netmask)->sin_addr;
- broadcast = ((struct sockaddr_in *) addrs->ifa_broadaddr)->sin_addr;
+ if (addrs->ifa_broadaddr)
+ broadcast = ((struct sockaddr_in *) addrs->ifa_broadaddr)->sin_addr;
+ else
+ broadcast.s_addr = 0;
if (!((*callback)(addr, iface_index, netmask, broadcast, parm)))
goto err;
}