diff options
| -rw-r--r-- | zebra/zebra_rib.c | 3 | ||||
| -rw-r--r-- | zebra/zebra_vty.c | 32 |
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; } |
