void list_interface_addresses(BNetworkInterface& interface, uint32 flags) { int32 count = interface.CountAddresses(); for (int32 i = 0; i < count; i++) { BNetworkInterfaceAddress address; if (interface.GetAddressAt(i, address) != B_OK) break; const address_family* family = address_family_for(address.Address().sa_family); printf("\t%s addr: %s", family->name, BNetworkAddress(address.Address()).ToString().String()); if ((flags & IFF_BROADCAST) != 0) { printf(", Bcast: %s", BNetworkAddress(address.Broadcast()).ToString().String()); } switch (family->preferred_format) { case PREFER_OUTPUT_MASK: printf(", Mask: %s", BNetworkAddress(address.Mask()).ToString().String()); break; case PREFER_OUTPUT_PREFIX_LENGTH: printf(", Prefix Length: %zu", BNetworkAddress(address.Mask()).PrefixLength()); break; } putchar('\n'); } }
bool BNetworkAddress::IsLocal() const { BNetworkRoster& roster = BNetworkRoster::Default(); BNetworkInterface interface; uint32 cookie = 0; while (roster.GetNextInterface(&cookie, interface) == B_OK) { int32 count = interface.CountAddresses(); for (int32 j = 0; j < count; j++) { BNetworkInterfaceAddress address; if (interface.GetAddressAt(j, address) != B_OK) break; if (Equals(address.Address(), false)) return true; } } return false; }