Merge pull request #4245 from mjstapp/fix_vrf_lsps

zebra: remove vrf LSPs when vrf is deleted
This commit is contained in:
Renato Westphal 2019-05-10 15:23:58 -03:00 committed by GitHub
commit 3409538e6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2874,7 +2874,11 @@ void zebra_mpls_print_lsp_table(struct vty *vty, struct zebra_vrf *zvrf,
ifp = if_lookup_by_index_per_ns(
zns,
nexthop->ifindex);
vty_out(vty, "%15s", ifp->name);
if (ifp)
vty_out(vty, "%15s", ifp->name);
else
vty_out(vty, "%15s", "Null");
break;
}
case NEXTHOP_TYPE_IPV4:
@ -2999,11 +3003,30 @@ int zebra_mpls_write_label_block_config(struct vty *vty, struct zebra_vrf *zvrf)
/*
* Called when VRF becomes inactive, cleans up information but keeps
* the table itself.
* NOTE: Currently supported only for default VRF.
*/
void zebra_mpls_cleanup_tables(struct zebra_vrf *zvrf)
{
hash_iterate(zvrf->lsp_table, lsp_uninstall_from_kernel, NULL);
struct zebra_vrf *def_zvrf;
afi_t afi;
if (zvrf_id(zvrf) == VRF_DEFAULT)
hash_iterate(zvrf->lsp_table, lsp_uninstall_from_kernel, NULL);
else {
/*
* For other vrfs, we try to remove associated LSPs; we locate
* the LSPs in the default vrf.
*/
def_zvrf = zebra_vrf_lookup_by_id(VRF_DEFAULT);
/* At shutdown, the default may be gone already */
if (def_zvrf == NULL)
return;
for (afi = AFI_IP; afi < AFI_MAX; afi++) {
if (zvrf->label[afi] != MPLS_LABEL_NONE)
lsp_uninstall(def_zvrf, zvrf->label[afi]);
}
}
}
/*