From 81ac3bce0157f96fbc31cf6e965eecb170e48c88 Mon Sep 17 00:00:00 2001 From: Hans Dedecker Date: Wed, 13 Mar 2019 14:56:21 +0100 Subject: interface-ip: fix delegate config update on reload (FS#2087) Update the no_delegation parameter on a config reload; in case prefixes are present update the prefix assignments as well according to the no_delegation status Signed-off-by: Hans Dedecker --- interface.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'interface.c') diff --git a/interface.c b/interface.c index b21d234..b8c4ae2 100644 --- a/interface.c +++ b/interface.c @@ -1197,7 +1197,7 @@ static void interface_change_config(struct interface *if_old, struct interface *if_new) { struct blob_attr *old_config = if_old->config; - bool reload = false, reload_ip = false; + bool reload = false, reload_ip = false, update_prefix_delegation = false; #define FIELD_CHANGED_STR(field) \ ((!!if_old->field != !!if_new->field) || \ @@ -1247,6 +1247,11 @@ interface_change_config(struct interface *if_old, struct interface *if_new) if_old->force_link = if_new->force_link; if_old->dns_metric = if_new->dns_metric; + if (if_old->proto_ip.no_delegation != if_new->proto_ip.no_delegation) { + if_old->proto_ip.no_delegation = if_new->proto_ip.no_delegation; + update_prefix_delegation = true; + } + if_old->proto_ip.no_dns = if_new->proto_ip.no_dns; interface_replace_dns(&if_old->config_ip, &if_new->config_ip); @@ -1276,6 +1281,9 @@ interface_change_config(struct interface *if_old, struct interface *if_new) interface_ip_set_enabled(&if_old->config_ip, config_ip_enabled); } + if (update_prefix_delegation) + interface_update_prefix_delegation(&if_old->proto_ip); + interface_write_resolv_conf(); if (if_old->main_dev.dev) interface_check_state(if_old); -- cgit v1.2.1