diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/dhcpv4.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/dhcpv4.c b/src/dhcpv4.c index 09cca91..26cd5e1 100644 --- a/src/dhcpv4.c +++ b/src/dhcpv4.c @@ -118,6 +118,21 @@ int setup_dhcpv4_interface(struct interface *iface, bool enable) return -1; } +#ifndef WITH_UBUS + struct ifreq ifreq; + strncpy(ifreq.ifr_name, iface->ifname, sizeof(ifreq.ifr_name)); + + struct sockaddr_in *saddr = (struct sockaddr_in*)&ifreq.ifr_addr; + struct sockaddr_in *smask = (struct sockaddr_in*)&ifreq.ifr_netmask; + + if (!ioctl(sock, SIOCGIFADDR, &ifreq)) { + struct in_addr addr = saddr->sin_addr; + iface->dhcpv4_addr.s_addr = addr.s_addr; + ioctl(sock, SIOCGIFNETMASK, &ifreq); + struct in_addr mask = smask->sin_addr; + iface->dhcpv4_mask.s_addr = mask.s_addr; + } +#else const char* saddr = ubus_get_address4(iface->name); struct in_addr addr; inet_pton(AF_INET,saddr, &addr); @@ -132,11 +147,12 @@ int setup_dhcpv4_interface(struct interface *iface, bool enable) mask.s_addr = ~mask.s_addr; iface->dhcpv4_mask.s_addr = mask.s_addr; +#endif // Create a range if not specified if (!(iface->dhcpv4_start.s_addr & htonl(0xffff0000)) && - !(iface->dhcpv4_end.s_addr & htonl(0xffff0000))) { - + !(iface->dhcpv4_end.s_addr & htonl(0xffff0000)) && + iface->dhcpv4_addr.s_addr) { uint32_t start = ntohl(iface->dhcpv4_start.s_addr); uint32_t end = ntohl(iface->dhcpv4_end.s_addr); @@ -270,7 +286,7 @@ static void handle_dhcpv4(void *addr, void *data, size_t len, int sock = iface->dhcpv4_event.uloop.fd; - syslog(LOG_WARNING, "Got DHCPv4 request"); + syslog(LOG_NOTICE, "Got DHCPv4 request"); struct ifreq ifreq; memcpy(ifreq.ifr_name, iface->ifname, sizeof(ifreq.ifr_name)); |