summaryrefslogtreecommitdiff
path: root/interface-ip.c
diff options
context:
space:
mode:
authorHans Dedecker <dedeckeh@gmail.com>2015-09-09 15:45:50 +0200
committerFelix Fietkau <nbd@openwrt.org>2015-09-10 22:50:17 +0200
commit75cbc687b51ea986c2d2a33e826aedd430d950be (patch)
tree06eac82dbbe54e4b3078415503299708d14ff41a /interface-ip.c
parenta02462c6845051ec531026a998670ebd01fd7108 (diff)
downloadnetifd-75cbc687b51ea986c2d2a33e826aedd430d950be.tar.gz
interface-ip: Insert network and address ip rules for external addresses as well
Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
Diffstat (limited to 'interface-ip.c')
-rw-r--r--interface-ip.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/interface-ip.c b/interface-ip.c
index 6c152b6..43b63c7 100644
--- a/interface-ip.c
+++ b/interface-ip.c
@@ -500,9 +500,7 @@ interface_update_proto_addr(struct vlist_tree *tree,
}
if (node_old) {
- if (!(a_old->flags & DEVADDR_EXTERNAL) && a_old->enabled && !keep) {
- interface_handle_subnet_route(iface, a_old, false);
-
+ if (a_old->enabled && !keep) {
if ((a_old->flags & DEVADDR_FAMILY) == DEVADDR_INET6)
v6 = true;
@@ -519,7 +517,10 @@ interface_update_proto_addr(struct vlist_tree *tree,
a_old->mask, table, NULL, NULL);
}
- system_del_address(dev, a_old);
+ if (!(a_old->flags & DEVADDR_EXTERNAL)) {
+ interface_handle_subnet_route(iface, a_old, false);
+ system_del_address(dev, a_old);
+ }
}
free(a_old->pclass);
free(a_old);
@@ -527,9 +528,14 @@ interface_update_proto_addr(struct vlist_tree *tree,
if (node_new) {
a_new->enabled = true;
- if (!(a_new->flags & DEVADDR_EXTERNAL) && (!keep || replace)) {
- if (system_add_address(dev, a_new))
- a_new->failed = true;
+ if (!keep || replace) {
+ if (!(a_new->flags & DEVADDR_EXTERNAL)) {
+ if (system_add_address(dev, a_new))
+ a_new->failed = true;
+
+ if (iface->metric)
+ interface_handle_subnet_route(iface, a_new, true);
+ }
if (!keep) {
if ((a_new->flags & DEVADDR_FAMILY) == DEVADDR_INET6)
@@ -544,9 +550,6 @@ interface_update_proto_addr(struct vlist_tree *tree,
a_new->mask, table, NULL, NULL);
}
}
-
- if (iface->metric)
- interface_handle_subnet_route(iface, a_new, true);
}
}
}