diff --git a/ldpd/lde_lib.c b/ldpd/lde_lib.c index c72a25985d..43e5f92f2f 100644 --- a/ldpd/lde_lib.c +++ b/ldpd/lde_lib.c @@ -336,6 +336,7 @@ lde_kernel_insert(struct fec *fec, int af, union ldpd_addr *nexthop, fn = fec_add(fec); fnh = fec_nh_find(fn, af, nexthop, priority); if (fnh != NULL) { + lde_send_change_klabel(fn, fnh); fnh->flags |= F_FEC_NH_NEW; return; } diff --git a/zebra/zebra_mpls.c b/zebra/zebra_mpls.c index 977c84d4dd..15e5c330e4 100644 --- a/zebra/zebra_mpls.c +++ b/zebra/zebra_mpls.c @@ -1311,10 +1311,12 @@ mpls_ftn_update (int add, struct zebra_vrf *zvrf, enum lsp_types_t type, return -1; found: - if (add) + if (add && nexthop->nh_label_type == ZEBRA_LSP_NONE) nexthop_add_labels (nexthop, type, 1, &out_label); - else + else if (!add && nexthop->nh_label_type == type) nexthop_del_labels (nexthop); + else + return 0; SET_FLAG (rib->status, RIB_ENTRY_CHANGED); SET_FLAG (rib->status, RIB_ENTRY_NEXTHOPS_CHANGED);