{
int ret = 0;
- if (iface->dhcpv4_event.uloop.fd > 0) {
+ if (iface->dhcpv4_event.uloop.fd >= 0) {
uloop_fd_delete(&iface->dhcpv4_event.uloop);
close(iface->dhcpv4_event.uloop.fd);
iface->dhcpv4_event.uloop.fd = -1;
}
out:
- if (ret < 0 && iface->dhcpv4_event.uloop.fd > 0) {
+ if (ret < 0 && iface->dhcpv4_event.uloop.fd >= 0) {
close(iface->dhcpv4_event.uloop.fd);
iface->dhcpv4_event.uloop.fd = -1;
}
}
if (!iface->addr4_len) {
- syslog(LOG_WARNING, "No network(s) available on %s", iface->name);
+ syslog(LOG_ERR, "No network(s) available on %s", iface->name);
return -1;
}
/* Don't allocate IP range for subnets bigger than 28 */
if (iface->addr4[0].prefix > 28) {
- syslog(LOG_WARNING, "Auto allocation of DHCP range fails on %s", iface->name);
+ syslog(LOG_ERR, "Auto allocation of DHCP range fails on %s", iface->name);
return -1;
}
syslog(LOG_ERR, "Failed to send %s to %s - %s: %m", dhcpv4_msg_to_string(msg),
odhcpd_print_mac(a->hwaddr, sizeof(a->hwaddr)), inet_ntoa(dest.sin_addr));
else
- syslog(LOG_WARNING, "Sent %s to %s - %s", dhcpv4_msg_to_string(msg),
+ syslog(LOG_NOTICE, "Sent %s to %s - %s", dhcpv4_msg_to_string(msg),
odhcpd_print_mac(a->hwaddr, sizeof(a->hwaddr)), inet_ntoa(dest.sin_addr));
}
syslog(LOG_NOTICE, "Got DHCPv4 request on %s", iface->name);
if (!iface->dhcpv4_start_ip.s_addr && !iface->dhcpv4_end_ip.s_addr) {
- syslog(LOG_WARNING, "No DHCP range available on %s", iface->name);
+ syslog(LOG_ERR, "No DHCP range available on %s", iface->name);
return;
}
req->ciaddr.s_addr = INADDR_ANY;
}
- syslog(LOG_WARNING, "Received %s from %s on %s", dhcpv4_msg_to_string(reqmsg),
+ syslog(LOG_NOTICE, "Received %s from %s on %s", dhcpv4_msg_to_string(reqmsg),
odhcpd_print_mac(req->chaddr, req->hlen), iface->name);
#ifdef WITH_UBUS
"ff:ff:ff:ff:ff:ff": odhcpd_print_mac(req->chaddr, req->hlen),
inet_ntoa(dest.sin_addr));
else
- syslog(LOG_ERR, "Sent %s to %s - %s",
+ syslog(LOG_NOTICE, "Sent %s to %s - %s",
dhcpv4_msg_to_string(msg),
dest.sin_addr.s_addr == INADDR_BROADCAST ?
"ff:ff:ff:ff:ff:ff": odhcpd_print_mac(req->chaddr, req->hlen),
}
list_for_each_entry(c, &iface->dhcpv4_assignments, head) {
- if (ntohl(c->addr) > ntohl(raddr)) {
- list_add_tail(&a->head, &c->head);
+ if (ntohl(raddr) == ntohl(c->addr))
+ break;
+
+ if (ntohl(c->addr) > ntohl(raddr) || list_is_last(&c->head, &iface->dhcpv4_assignments)) {
+ list_add_tail(&a->head,
+ ntohl(c->addr) > ntohl(raddr) ? &c->head : &iface->dhcpv4_assignments);
raddr_out:
a->addr = raddr;
((uint8_t *)&a->addr)[2], ((uint8_t *)&a->addr)[3]);
return true;
- } else if (ntohl(raddr) == ntohl(c->addr))
- break;
+ }
}
}
}
list_for_each_entry(c, &iface->dhcpv4_assignments, head) {
- if (ntohl(c->addr) > try) {
- list_add_tail(&a->head, &c->head);
+ if (try == ntohl(c->addr))
+ break;
+
+ if (ntohl(c->addr) > try || list_is_last(&c->head, &iface->dhcpv4_assignments)) {
+ list_add_tail(&a->head,
+ ntohl(c->addr) > try ? &c->head : &iface->dhcpv4_assignments);
a->addr = htonl(try);
- syslog(LOG_DEBUG, "Assigning mapped IP: %u.%u.%u.%u (try %u of %u)",
+ syslog(LOG_INFO, "Assigning mapped IP: %u.%u.%u.%u (try %u of %u)",
((uint8_t *)&a->addr)[0], ((uint8_t *)&a->addr)[1],
((uint8_t *)&a->addr)[2], ((uint8_t *)&a->addr)[3],
i, count);
return true;
- } else if (try == ntohl(c->addr))
- break;
+ }
}
}