1
0
mirror of https://github.com/mfontanini/libtins synced 2026-01-23 02:35:57 +01:00

Only use IFF_POINTOPOINT on BSD when getting broadcast address

Fixes #232
This commit is contained in:
Matias Fontanini
2017-08-05 19:05:16 -07:00
parent a17ec89332
commit ecacd4aee5

View File

@@ -78,6 +78,7 @@ struct InterfaceInfoCollector {
using Tins::IPv4Address;
#if defined(BSD) || defined(__FreeBSD_kernel__)
#define TINS_BROADCAST_ADDR(addr) (addr->ifa_dstaddr)
#define TINS_BROADCAST_FLAGS (IFF_BROADCAST | IFF_POINTOPOINT)
const struct sockaddr_dl* addr_ptr = ((struct sockaddr_dl*)addr->ifa_addr);
if (addr->ifa_addr->sa_family == AF_LINK && addr_ptr->sdl_index == iface_id) {
@@ -87,6 +88,7 @@ struct InterfaceInfoCollector {
}
#else
#define TINS_BROADCAST_ADDR(addr) (addr->ifa_broadaddr)
#define TINS_BROADCAST_FLAGS (IFF_BROADCAST)
const struct sockaddr_ll* addr_ptr = ((struct sockaddr_ll*)addr->ifa_addr);
if (!addr->ifa_addr) {
@@ -102,7 +104,7 @@ struct InterfaceInfoCollector {
if (addr->ifa_addr->sa_family == AF_INET) {
info->ip_addr = IPv4Address(((struct sockaddr_in *)addr->ifa_addr)->sin_addr.s_addr);
info->netmask = IPv4Address(((struct sockaddr_in *)addr->ifa_netmask)->sin_addr.s_addr);
if ((addr->ifa_flags & (IFF_BROADCAST | IFF_POINTOPOINT))) {
if ((addr->ifa_flags & (TINS_BROADCAST_FLAGS))) {
info->bcast_addr = IPv4Address(
((struct sockaddr_in *)TINS_BROADCAST_ADDR(addr))->sin_addr.s_addr);
}
@@ -134,6 +136,7 @@ struct InterfaceInfoCollector {
}
}
#undef TINS_BROADCAST_ADDR
#undef TINS_BROADCAST_FLAGS
return found_ip && found_hw;
}
#else // _WIN32