summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ldpd/lde_lib.c1
-rw-r--r--zebra/zebra_mpls.c6
2 files changed, 5 insertions, 2 deletions
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);