bgpd: Fix crashes when no default bgp instance is configured.

The vnc code assumes that bgp must have a default instance.
This code change checks to make sure that we do before
proceeding.  It makes no assurances that vnc will behave
correctly without a default instance.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
Donald Sharp 2016-12-01 09:11:12 -05:00 committed by David Lamparter
parent 94d95cde35
commit 34620e24b5
2 changed files with 17 additions and 3 deletions

View File

@ -4414,7 +4414,8 @@ rfapiProcessPeerDown (struct peer *peer)
*/ */
bgp = bgp_get_default (); /* assume 1 instance for now */ bgp = bgp_get_default (); /* assume 1 instance for now */
assert (bgp); if (!bgp)
return;
h = bgp->rfapi; h = bgp->rfapi;
assert (h); assert (h);

View File

@ -208,12 +208,17 @@ prefix_bag_free (void *pb)
static void static void
print_rhn_list (const char *tag1, const char *tag2) print_rhn_list (const char *tag1, const char *tag2)
{ {
struct bgp *bgp = bgp_get_default (); struct bgp *bgp;
struct skiplist *sl = bgp->rfapi->resolve_nve_nexthop; struct skiplist *sl;
struct skiplistnode *p; struct skiplistnode *p;
struct prefix_bag *pb; struct prefix_bag *pb;
int count = 0; int count = 0;
bgp = bgp_get_default ();
if (!bgp)
return;
sl = bgp->frapi->resolve_nve_nexthop;
if (!sl) if (!sl)
{ {
zlog_debug ("%s: %s: RHN List is empty", (tag1 ? tag1 : ""), zlog_debug ("%s: %s: RHN List is empty", (tag1 ? tag1 : ""),
@ -251,6 +256,8 @@ vnc_rhnck (char *tag)
struct skiplistnode *p; struct skiplistnode *p;
bgp = bgp_get_default (); bgp = bgp_get_default ();
if (!bgp)
return;
sl = bgp->rfapi->resolve_nve_nexthop; sl = bgp->rfapi->resolve_nve_nexthop;
if (!sl) if (!sl)
@ -1798,6 +1805,9 @@ vnc_import_bgp_exterior_add_route_it (
struct bgp *bgp_default = bgp_get_default (); struct bgp *bgp_default = bgp_get_default ();
afi_t afi = family2afi (prefix->family); afi_t afi = family2afi (prefix->family);
if (!bgp_default)
return;
h = bgp_default->rfapi; h = bgp_default->rfapi;
hc = bgp_default->rfapi_cfg; hc = bgp_default->rfapi_cfg;
@ -1992,6 +2002,9 @@ vnc_import_bgp_exterior_del_route (
afi_t afi = family2afi (prefix->family); afi_t afi = family2afi (prefix->family);
struct bgp *bgp_default = bgp_get_default (); struct bgp *bgp_default = bgp_get_default ();
if (!bgp_default)
return;
memset (&pfx_orig_nexthop, 0, sizeof (struct prefix)); /* keep valgrind happy */ memset (&pfx_orig_nexthop, 0, sizeof (struct prefix)); /* keep valgrind happy */
h = bgp_default->rfapi; h = bgp_default->rfapi;