summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--zebra/zebra_rib.c3
-rw-r--r--zebra/zebra_vty.c32
2 files changed, 23 insertions, 12 deletions
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c
index c200e2dbb3..b7b4a159da 100644
--- a/zebra/zebra_rib.c
+++ b/zebra/zebra_rib.c
@@ -2098,6 +2098,9 @@ void rib_unlink(struct route_node *rn, struct route_entry *re)
dest->routes = re->next;
}
+ if (dest->selected_fib == re)
+ dest->selected_fib = NULL;
+
/* free RE and nexthops */
zebra_deregister_rnh_static_nexthops(re->vrf_id, re->nexthop, rn);
nexthops_free(re->nexthop);
diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c
index f0be862221..62869b7eec 100644
--- a/zebra/zebra_vty.c
+++ b/zebra/zebra_vty.c
@@ -2013,17 +2013,21 @@ DEFPY(ipv6_route_address_interface,
struct zebra_vrf *zvrf;
struct zebra_vrf *nh_zvrf;
- nh_zvrf = zebra_vrf_lookup_by_name(nexthop_vrf);
- if (!nh_zvrf) {
- vty_out(vty, "%% nexthop vrf %s is not defined\n",
- nexthop_vrf);
+ zvrf = zebra_vrf_lookup_by_name(vrf);
+ if (!zvrf) {
+ vty_out(vty, "%% vrf %s is not defined\n",
+ vrf);
return CMD_WARNING_CONFIG_FAILED;
}
- zvrf = zebra_vrf_lookup_by_name(vrf);
+ if (nexthop_vrf)
+ nh_zvrf = zebra_vrf_lookup_by_name(nexthop_vrf);
+ else
+ nh_zvrf = zvrf;
+
if (!nh_zvrf) {
vty_out(vty, "%% nexthop vrf %s is not defined\n",
- vrf);
+ nexthop_vrf);
return CMD_WARNING_CONFIG_FAILED;
}
@@ -2104,17 +2108,21 @@ DEFPY(ipv6_route,
struct zebra_vrf *zvrf;
struct zebra_vrf *nh_zvrf;
- nh_zvrf = zebra_vrf_lookup_by_name(nexthop_vrf);
- if (!nh_zvrf) {
- vty_out(vty, "%% nexthop vrf %s is not defined\n",
- nexthop_vrf);
+ zvrf = zebra_vrf_lookup_by_name(vrf);
+ if (!zvrf) {
+ vty_out(vty, "%% vrf %s is not defined\n",
+ vrf);
return CMD_WARNING_CONFIG_FAILED;
}
- zvrf = zebra_vrf_lookup_by_name(vrf);
+ if (nexthop_vrf)
+ nh_zvrf = zebra_vrf_lookup_by_name(nexthop_vrf);
+ else
+ nh_zvrf = zvrf;
+
if (!nh_zvrf) {
vty_out(vty, "%% nexthop vrf %s is not defined\n",
- vrf);
+ nexthop_vrf);
return CMD_WARNING_CONFIG_FAILED;
}