From f026b24ed9a82c2af782ccae7bde2ddecb83427f Mon Sep 17 00:00:00 2001 From: GalaxyGorilla Date: Tue, 15 Dec 2020 11:20:28 +0000 Subject: [PATCH] ospfd: Fix backup path RIB handling * Inject backup paths with proper flags * Add outgoing label on top of the backup label stack * Ignore explicit/implicit outgoing labels * Adjust tests Signed-off-by: GalaxyGorilla --- ospfd/ospf_zebra.c | 27 +++++++++++++------ .../step2/show_ip_route_link_protection.ref | 6 +++-- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c index 3922c44d9c..130108d348 100644 --- a/ospfd/ospf_zebra.c +++ b/ospfd/ospf_zebra.c @@ -210,7 +210,7 @@ static void ospf_zebra_add_nexthop(struct ospf *ospf, struct ospf_path *path, api_nh_backup = &api->backup_nexthops[api->backup_nexthop_num]; api_nh_backup->vrf_id = ospf->vrf_id; - api_nh_backup->type = NEXTHOP_TYPE_IPV4_IFINDEX; + api_nh_backup->type = NEXTHOP_TYPE_IPV4; api_nh_backup->gate.ipv4 = path->srni.backup_nexthop; api_nh_backup->label_num = @@ -579,22 +579,33 @@ void ospf_zebra_update_prefix_sid(const struct sr_prefix *srp) if (zl.nexthop_num >= MULTIPATH_NUM) break; - /* TI-LFA backup path label stack comes first, if - * present */ + /* + * TI-LFA backup path label stack comes first, if + * present. + */ if (path->srni.backup_label_stack) { znh_backup = &zl.backup_nexthops [zl.backup_nexthop_num++]; - znh_backup->type = NEXTHOP_TYPE_IPV4_IFINDEX; + znh_backup->type = NEXTHOP_TYPE_IPV4; znh_backup->gate.ipv4 = path->srni.backup_nexthop; - znh_backup->label_num = - path->srni.backup_label_stack - ->num_labels; memcpy(znh_backup->labels, path->srni.backup_label_stack->label, sizeof(mpls_label_t) - * znh_backup->label_num); + * path->srni.backup_label_stack + ->num_labels); + + znh_backup->label_num = + path->srni.backup_label_stack + ->num_labels; + if (path->srni.label_out + != MPLS_LABEL_IPV4_EXPLICIT_NULL + && path->srni.label_out + != MPLS_LABEL_IMPLICIT_NULL) + znh_backup->labels + [znh_backup->label_num++] = + path->srni.label_out; } znh = &zl.nexthops[zl.nexthop_num++]; diff --git a/tests/topotests/ospf-tilfa-topo1/rt1/step2/show_ip_route_link_protection.ref b/tests/topotests/ospf-tilfa-topo1/rt1/step2/show_ip_route_link_protection.ref index 0ee495ca30..968570e193 100644 --- a/tests/topotests/ospf-tilfa-topo1/rt1/step2/show_ip_route_link_protection.ref +++ b/tests/topotests/ospf-tilfa-topo1/rt1/step2/show_ip_route_link_protection.ref @@ -78,7 +78,8 @@ { "ip":"10.0.2.2", "labels":[ - 16050 + 16050, + 16040 ] } ] @@ -101,7 +102,8 @@ { "ip":"10.0.1.2", "labels":[ - 16040 + 16040, + 16050 ] } ] -- 2.39.5