- memcpy(&ifaddr, &ifreq.ifr_addr, sizeof(ifaddr));
- if (ioctl(sock, SIOCGIFNETMASK, &ifreq))
- return;
-
- memcpy(&ifnetmask, &ifreq.ifr_netmask, sizeof(ifnetmask));
- uint32_t network = ifaddr.sin_addr.s_addr & ifnetmask.sin_addr.s_addr;
+ struct in_addr *ifaddr = &iface->addr4[0].addr.in;
+ struct in_addr *ifbroadcast = &iface->addr4[0].broadcast;
+ uint32_t mask = iface->addr4[0].prefix ? htonl(~((1 << (32 - iface->addr4[0].prefix)) - 1)) : 0;
+ uint32_t network = iface->addr4[0].addr.in.s_addr & mask;
+ int sock = iface->dhcpv4_event.uloop.fd;