Index: libnetutil/netutil.cc =================================================================== --- libnetutil/netutil.cc (revision 20225) +++ libnetutil/netutil.cc (working copy) @@ -1188,6 +1188,23 @@ } memcpy(devs[count].mac, ethaddr.data, 6); #endif /*SIOCGIFHWADDR*/ + +#ifdef SIOCGIFBRDADDR + memcpy(&tmpifr.ifr_addr, sin, + MIN(sizeof(tmpifr.ifr_addr), sizeof(*sin))); + rc = ioctl(sd, SIOCGIFBRDADDR, &tmpifr); + if (rc < 0 && errno != EADDRNOTAVAIL) { + if (errstr) + Snprintf(errstr, errstrlen, + "Failed to determine the broadcast address of %s!", tmpifr.ifr_name); + *howmany=-1; + return NULL; + } + else if (rc >= 0) + memcpy(&(devs[count].broadaddr), &tmpifr.ifr_broadaddr, + MIN(sizeof(devs[count].broadaddr), sizeof(tmpifr.ifr_broadaddr))); +#endif /*SIOCGIFBRDADDR*/ + } else if (ifflags & IFF_POINTOPOINT) { devs[count].device_type = devt_p2p; } else { Index: libnetutil/netutil.h =================================================================== --- libnetutil/netutil.h (revision 20225) +++ libnetutil/netutil.h (working copy) @@ -230,6 +230,7 @@ int device_up; /* True if the device is up (enabled) */ int mtu; /* Interface's MTU size */ u8 mac[6]; /* Interface MAC address if device_type is devt_ethernet */ + struct sockaddr_storage broadaddr; /* Interface broadcast address (only IPv4) */ }; struct route_nfo {