summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2017-01-03 14:09:08 +0100
committerHans Dedecker <dedeckeh@gmail.com>2017-01-05 10:36:17 +0100
commit08a93676f4d3d13fa417a1f109b40d6c577dfb76 (patch)
tree8f57b9ab0ecd57a68dfee6ad209ce319b82625a8
parent091d8a94a6b7325309c3354344b96ff37aed52e2 (diff)
config: respect ignore uci option
The odhcpd documentation currently implies that "option ignore 1" in a section of type "dhcp" will disable any services on the referenced interface while the code actually ignores the setting when initializing referenced interfaces. This commonly leads to situations where users think that "option disabled" will prevent any server activity on a given interface while in reality odhcpd effectively acts as rogue DHCPv6 server in its default configuration. To fully inhibit any activity, one has to specify both "option ignore 1" as well as "option ra disabled", "option ndp disabled" and "option dhcpv6 disabled" which is highly counter intuitive at best. A previous commit (5f425ed Respect interface "ignore" settings as documented.) attempted to address the problem by observing the value of i->ignore instead of unconditionally enabling all protocols but broke the ability to use DHCPv6 relay mode while having DHCPv4 disabled. This patch changes ... - the enabling of services on an interface to use the value of the ignore option as default choice instead of hardcoding "true" - the options "ra", "ndp", "dhcpv4" and "dhcpv6" to take precedence over the default "ignore" state to allow selectively enabling services on ignored interfaces - the README to clarify the fact that "ra", "ndp", "dhcpv4" and "dhcpv6" can now override "option ignore" Signed-off-by: Jo-Philipp Wich <jo@mein.io> Acked-by: Karl Palsson <karlp@etactica.com> Tested-by: Stijn Tintel <stijn@linux-ipv6.be> Tested-by: Hans Dedecker <dedeckeh@gmail.com>
-rw-r--r--README4
-rw-r--r--src/config.c8
2 files changed, 7 insertions, 5 deletions
diff --git a/README b/README
index e14f822..4ae5ef2 100644
--- a/README
+++ b/README
@@ -70,7 +70,9 @@ Option Type Default Description
interface string <name of UCI section> logical OpenWrt interface
ifname string <resolved from logical> physical network interface
networkid string same as ifname compat. alias for ifname
-ignore bool 0 ignore this interface
+ignore bool 0 do not serve this interface
+ unless overridden by ra, ndp,
+ dhcpv4 or dhcpv6 options
master bool 0 is a master interface
for relaying
diff --git a/src/config.c b/src/config.c
index e3bf78a..ba51375 100644
--- a/src/config.c
+++ b/src/config.c
@@ -721,10 +721,10 @@ void odhcpd_reload(void)
i->ndp = (master && master->ndp == RELAYD_RELAY) ?
RELAYD_RELAY : RELAYD_DISABLED;
- setup_router_interface(i, true);
- setup_dhcpv6_interface(i, true);
- setup_ndp_interface(i, true);
- setup_dhcpv4_interface(i, true);
+ setup_router_interface(i, !i->ignore || i->ra != RELAYD_DISABLED);
+ setup_dhcpv6_interface(i, !i->ignore || i->dhcpv6 != RELAYD_DISABLED);
+ setup_ndp_interface(i, !i->ignore || i->ndp != RELAYD_DISABLED);
+ setup_dhcpv4_interface(i, !i->ignore || i->dhcpv4 != RELAYD_DISABLED);
} else {
close_interface(i);
}