diff options
Diffstat (limited to 'zebra/connected.c')
-rw-r--r-- | zebra/connected.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/zebra/connected.c b/zebra/connected.c index 7e4f0fc7..39f47805 100644 --- a/zebra/connected.c +++ b/zebra/connected.c @@ -225,7 +225,11 @@ connected_add_ipv4 (struct interface *ifp, int flags, struct in_addr *addr, /* Check same connected route. */ if ((current = connected_check (ifp, (struct prefix *) ifc->address))) - connected_withdraw (current); /* implicit withdraw - freebsd does this */ + { + if (CHECK_FLAG(current->conf, ZEBRA_IFC_CONFIGURED)) + SET_FLAG(ifc->conf, ZEBRA_IFC_CONFIGURED); + connected_withdraw (current); /* implicit withdraw - freebsd does this */ + } connected_announce (ifp, ifc); } @@ -364,7 +368,11 @@ connected_add_ipv6 (struct interface *ifp, struct in6_addr *addr, ifc->label = XSTRDUP (MTYPE_CONNECTED_LABEL, label); if ((current = connected_check (ifp, (struct prefix *) ifc->address))) - connected_withdraw (current); /* implicit update of existing address */ + { + if (CHECK_FLAG(current->conf, ZEBRA_IFC_CONFIGURED)) + SET_FLAG(ifc->conf, ZEBRA_IFC_CONFIGURED); + connected_withdraw (current); /* implicit update of existing address */ + } connected_announce (ifp, ifc); } |