summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--zebra/zebra_dplane.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c
index d7354024aa..a88b0a38da 100644
--- a/zebra/zebra_dplane.c
+++ b/zebra/zebra_dplane.c
@@ -1573,6 +1573,7 @@ static int dplane_ctx_nexthop_init(struct zebra_dplane_ctx *ctx,
enum dplane_op_e op,
struct nhg_hash_entry *nhe)
{
+ struct zebra_vrf *zvrf = NULL;
struct zebra_ns *zns = NULL;
int ret = EINVAL;
@@ -1597,7 +1598,13 @@ static int dplane_ctx_nexthop_init(struct zebra_dplane_ctx *ctx,
ctx->u.rinfo.nhe.nh_grp_count = zebra_nhg_nhe2grp(
ctx->u.rinfo.nhe.nh_grp, nhe, MULTIPATH_NUM);
- zns = ((struct zebra_vrf *)vrf_info_lookup(nhe->vrf_id))->zns;
+ zvrf = vrf_info_lookup(nhe->vrf_id);
+
+ /*
+ * Fallback to default namespace if the vrf got ripped out from under
+ * us.
+ */
+ zns = zvrf ? zvrf->zns : zebra_ns_lookup(NS_DEFAULT);
/*
* TODO: Might not need to mark this as an update, since