diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2015-12-15 05:22:48 -0800 |
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2015-12-15 05:22:48 -0800 |
| commit | f11b863d69e62d54168d75f3cc2018103b9a7e34 (patch) | |
| tree | f690f32607e7432821bbabeb0cfb622419aaf380 | |
| parent | ca208d065c064692a334dff8612b7049475d4214 (diff) | |
zebra: Fix crash in connected.c due to RA change
Back out original null pointer fix targeted it was the wrong fix.
Basically when a ip address is deleted the RA code was waiting till after
the connected pointer was deleted to set the RA appropriately.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
| -rw-r--r-- | zebra/connected.c | 8 | ||||
| -rw-r--r-- | zebra/interface.c | 3 |
2 files changed, 4 insertions, 7 deletions
diff --git a/zebra/connected.c b/zebra/connected.c index b2fababc1b..f040e9d362 100644 --- a/zebra/connected.c +++ b/zebra/connected.c @@ -67,15 +67,15 @@ connected_withdraw (struct connected *ifc) /* The address is not in the kernel anymore, so clear the flag */ UNSET_FLAG(ifc->conf, ZEBRA_IFC_QUEUED); + /* Enable RA suppression if there are no IPv6 addresses on this interface */ + if (! ipv6_address_configured(ifc->ifp)) + ipv6_nd_suppress_ra_set (ifc->ifp, RA_SUPPRESS); + if (!CHECK_FLAG (ifc->conf, ZEBRA_IFC_CONFIGURED)) { listnode_delete (ifc->ifp->connected, ifc); connected_free (ifc); } - - /* Enable RA suppression if there are no IPv6 addresses on this interface */ - if (! ipv6_address_configured(ifc->ifp)) - ipv6_nd_suppress_ra_set (ifc->ifp, RA_SUPPRESS); } static void diff --git a/zebra/interface.c b/zebra/interface.c index dcbc5a3b95..cb4645c2f1 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -1770,9 +1770,6 @@ ipv6_address_configured (struct interface *ifp) struct connected *connected; struct listnode *node; - if (!ifp) - return 0; - for (ALL_LIST_ELEMENTS_RO (ifp->connected, node, connected)) if (CHECK_FLAG (connected->conf, ZEBRA_IFC_REAL) && (connected->address->family == AF_INET6)) return 1; |
