summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--README2
-rw-r--r--src/config.c20
-rw-r--r--src/odhcpd.h1
3 files changed, 17 insertions, 6 deletions
diff --git a/README b/README
index ebb2d99..9119071 100644
--- a/README
+++ b/README
@@ -60,6 +60,8 @@ Section of type odhcpd
Option Type Default Description
legacy bool 0 Enable DHCPv4 if start but
no dhcpv4 option set
+maindhcp bool 0 Use odhcpd as the main DHCPv4
+ service
leasefile string DHCP/v6 lease/hostfile
leasetrigger string Lease trigger script
loglevel integer 6 Syslog level priority (0-7)
diff --git a/src/config.c b/src/config.c
index 943f243..acf30de 100644
--- a/src/config.c
+++ b/src/config.c
@@ -17,8 +17,9 @@ static struct blob_buf b;
static int reload_pipe[2];
struct list_head leases = LIST_HEAD_INIT(leases);
struct list_head interfaces = LIST_HEAD_INIT(interfaces);
-struct config config = {.legacy = false, .dhcp_cb = NULL,
- .dhcp_statefile = NULL, .log_level = LOG_INFO};
+struct config config = {.legacy = false, .main_dhcpv4 = false,
+ .dhcp_cb = NULL, .dhcp_statefile = NULL,
+ .log_level = LOG_INFO};
enum {
IFACE_ATTR_INTERFACE,
@@ -128,6 +129,7 @@ const struct uci_blob_param_list lease_attr_list = {
};
enum {
+ ODHCPD_ATTR_LEGACY,
ODHCPD_ATTR_MAINDHCP,
ODHCPD_ATTR_LEASEFILE,
ODHCPD_ATTR_LEASETRIGGER,
@@ -136,6 +138,7 @@ enum {
};
static const struct blobmsg_policy odhcpd_attrs[LEASE_ATTR_MAX] = {
+ [ODHCPD_ATTR_LEGACY] = { .name = "legacy", .type = BLOBMSG_TYPE_BOOL },
[ODHCPD_ATTR_MAINDHCP] = { .name = "maindhcp", .type = BLOBMSG_TYPE_BOOL },
[ODHCPD_ATTR_LEASEFILE] = { .name = "leasefile", .type = BLOBMSG_TYPE_STRING },
[ODHCPD_ATTR_LEASETRIGGER] = { .name = "leasetrigger", .type = BLOBMSG_TYPE_STRING },
@@ -249,9 +252,12 @@ static void set_config(struct uci_section *s)
uci_to_blob(&b, s, &odhcpd_attr_list);
blobmsg_parse(odhcpd_attrs, ODHCPD_ATTR_MAX, tb, blob_data(b.head), blob_len(b.head));
- if ((c = tb[ODHCPD_ATTR_MAINDHCP]))
+ if ((c = tb[ODHCPD_ATTR_LEGACY]))
config.legacy = blobmsg_get_bool(c);
+ if ((c = tb[ODHCPD_ATTR_MAINDHCP]))
+ config.main_dhcpv4 = blobmsg_get_bool(c);
+
if ((c = tb[ODHCPD_ATTR_LEASEFILE])) {
free(config.dhcp_statefile);
config.dhcp_statefile = strdup(blobmsg_get_string(c));
@@ -433,7 +439,7 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr
if ((c = tb[IFACE_ATTR_START])) {
iface->dhcpv4_start.s_addr = htonl(blobmsg_get_u32(c));
- if (config.legacy)
+ if (config.main_dhcpv4 && config.legacy)
iface->dhcpv4 = RELAYD_SERVER;
}
@@ -471,8 +477,10 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr
}
if ((c = tb[IFACE_ATTR_DHCPV4])) {
- if ((mode = parse_mode(blobmsg_get_string(c))) >= 0)
- iface->dhcpv4 = mode;
+ if ((mode = parse_mode(blobmsg_get_string(c))) >= 0) {
+ if (config.main_dhcpv4)
+ iface->dhcpv4 = mode;
+ }
else
goto err;
}
diff --git a/src/odhcpd.h b/src/odhcpd.h
index 4ddadbe..334276e 100644
--- a/src/odhcpd.h
+++ b/src/odhcpd.h
@@ -95,6 +95,7 @@ enum odhcpd_assignment_flags {
struct config {
bool legacy;
+ bool main_dhcpv4;
char *dhcp_cb;
char *dhcp_statefile;
int log_level;