diff options
author | Simon Kelley <simon@thekelleys.org.uk> | 2013-01-09 19:57:47 +0000 |
---|---|---|
committer | Simon Kelley <simon@thekelleys.org.uk> | 2013-01-09 19:57:47 +0000 |
commit | 39f6a04ca42af0f167b67c1a66ce3df6d2385c75 (patch) | |
tree | c00a7fcf2ba7a1aeacad1a614fa05d3956900d93 | |
parent | 37c9ccebd1261b5d44b30bad035f1cf8a4d3f540 (diff) | |
download | dnsmasq-39f6a04ca42af0f167b67c1a66ce3df6d2385c75.tar.gz |
Better fix for interfaces without broadcast address on *BSD.v2.66test7
-rw-r--r-- | src/bpf.c | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -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; } |