From 39f6a04ca42af0f167b67c1a66ce3df6d2385c75 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Wed, 9 Jan 2013 19:57:47 +0000 Subject: [PATCH] Better fix for interfaces without broadcast address on *BSD. --- src/bpf.c | 7 +++++-- 1 file 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; }