.dhcp_cb = NULL, .dhcp_statefile = NULL,
.log_level = LOG_WARNING};
+#define START_DEFAULT 100
+#define LIMIT_DEFAULT 150
+
enum {
IFACE_ATTR_INTERFACE,
IFACE_ATTR_IFNAME,
{
iface->learn_routes = 1;
iface->dhcpv4_leasetime = 43200;
+ iface->dhcpv4_start.s_addr = htonl(START_DEFAULT);
+ iface->dhcpv4_end.s_addr = htonl(START_DEFAULT + LIMIT_DEFAULT - 1);
iface->dhcpv6_assignall = true;
iface->dhcpv6_pd = true;
iface->dhcpv6_na = true;
if ((c = tb[IFACE_ATTR_START])) {
iface->dhcpv4_start.s_addr = htonl(blobmsg_get_u32(c));
+ iface->dhcpv4_end.s_addr = htonl(ntohl(iface->dhcpv4_start.s_addr) +
+ LIMIT_DEFAULT - 1);
if (config.main_dhcpv4 && config.legacy)
iface->dhcpv4 = MODE_SERVER;
}
if ((c = tb[IFACE_ATTR_LIMIT]))
- iface->dhcpv4_end.s_addr = htonl(
- ntohl(iface->dhcpv4_start.s_addr) + blobmsg_get_u32(c));
+ iface->dhcpv4_end.s_addr = htonl(ntohl(iface->dhcpv4_start.s_addr) +
+ blobmsg_get_u32(c) - 1);
if ((c = tb[IFACE_ATTR_MASTER]))
iface->master = blobmsg_get_bool(c);
end = start = iface->dhcpv4_local.s_addr & iface->dhcpv4_mask.s_addr;
/* Auto allocate ranges */
- if (ntohl(iface->dhcpv4_mask.s_addr) <= 0xffffff00) {
+ if (ntohl(iface->dhcpv4_mask.s_addr) <= 0xffffff00) { /* /24, 150 of 256, [100..249] */
iface->dhcpv4_start_ip.s_addr = start | htonl(100);
- iface->dhcpv4_end_ip.s_addr = end | htonl(250);
- } else if (ntohl(iface->dhcpv4_mask.s_addr) <= 0xffffffc0) {
+ iface->dhcpv4_end_ip.s_addr = end | htonl(100 + 150 - 1);
+ } else if (ntohl(iface->dhcpv4_mask.s_addr) <= 0xffffff80) { /* /25, 100 of 128, [20..119] */
+ iface->dhcpv4_start_ip.s_addr = start | htonl(20);
+ iface->dhcpv4_end_ip.s_addr = end | htonl(20 + 100 - 1);
+ } else if (ntohl(iface->dhcpv4_mask.s_addr) <= 0xffffffc0) { /* /26, 50 of 64, [10..59] */
iface->dhcpv4_start_ip.s_addr = start | htonl(10);
- iface->dhcpv4_end_ip.s_addr = end | htonl(60);
- } else if (ntohl(iface->dhcpv4_mask.s_addr) <= 0xffffffe0) {
+ iface->dhcpv4_end_ip.s_addr = end | htonl(10 + 50 - 1);
+ } else if (ntohl(iface->dhcpv4_mask.s_addr) <= 0xffffffe0) { /* /27, 20 of 32, [10..29] */
iface->dhcpv4_start_ip.s_addr = start | htonl(10);
- iface->dhcpv4_end_ip.s_addr = end | htonl(30);
- } else {
+ iface->dhcpv4_end_ip.s_addr = end | htonl(10 + 20 - 1);
+ } else { /* /28, 10 of 16, [3..12] */
iface->dhcpv4_start_ip.s_addr = start | htonl(3);
- iface->dhcpv4_end_ip.s_addr = end | htonl(12);
+ iface->dhcpv4_end_ip.s_addr = end | htonl(3 + 10 - 1);
}
return 0;