diff options
author | Andrew J. Schorr <ajschorr@alumni.princeton.edu> | 2006-05-19 13:53:23 +0000 |
---|---|---|
committer | Andrew J. Schorr <ajschorr@alumni.princeton.edu> | 2006-05-19 13:53:23 +0000 |
commit | 0f38dc4d4729b562551f8f53e7343f5a53b2dbf5 (patch) | |
tree | e6d4f73e30c3d6e0859f3bc4e4867fb2323284bf | |
parent | 55196042ac8def6f0057039017eb6a400d7f73fb (diff) |
[interface configuration] Preserve flag indicating address was set by quagga.
2006-05-19 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* connected.c: (connected_add_ipv4,connected_add_ipv6) If the
new struct connected matches an already existing one
(that will consequently be removed by connected_withdraw),
then be sure to preserve the ZEBRA_IFC_CONFIGURED flag.
-rw-r--r-- | zebra/ChangeLog | 7 | ||||
-rw-r--r-- | zebra/connected.c | 12 |
2 files changed, 17 insertions, 2 deletions
diff --git a/zebra/ChangeLog b/zebra/ChangeLog index 6235071f..3ad0e83f 100644 --- a/zebra/ChangeLog +++ b/zebra/ChangeLog @@ -1,3 +1,10 @@ +2006-05-19 Andrew J. Schorr <ajschorr@alumni.princeton.edu> + + * connected.c: (connected_add_ipv4,connected_add_ipv6) If the + new struct connected matches an already existing one + (that will consequently be removed by connected_withdraw), + then be sure to preserve the ZEBRA_IFC_CONFIGURED flag. + 2006-05-17 Andrew J. Schorr <ajschorr@alumni.princeton.edu> * kernel_socket.c: (ifam_read_mesg) Improve debug message 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); } |