mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 18:20:15 +00:00
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 <sascha@netdef.org>
This commit is contained in:
parent
7815c834c7
commit
f026b24ed9
@ -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 = &api->backup_nexthops[api->backup_nexthop_num];
|
||||||
api_nh_backup->vrf_id = ospf->vrf_id;
|
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->gate.ipv4 = path->srni.backup_nexthop;
|
||||||
|
|
||||||
api_nh_backup->label_num =
|
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)
|
if (zl.nexthop_num >= MULTIPATH_NUM)
|
||||||
break;
|
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) {
|
if (path->srni.backup_label_stack) {
|
||||||
znh_backup = &zl.backup_nexthops
|
znh_backup = &zl.backup_nexthops
|
||||||
[zl.backup_nexthop_num++];
|
[zl.backup_nexthop_num++];
|
||||||
znh_backup->type = NEXTHOP_TYPE_IPV4_IFINDEX;
|
znh_backup->type = NEXTHOP_TYPE_IPV4;
|
||||||
znh_backup->gate.ipv4 =
|
znh_backup->gate.ipv4 =
|
||||||
path->srni.backup_nexthop;
|
path->srni.backup_nexthop;
|
||||||
|
|
||||||
|
memcpy(znh_backup->labels,
|
||||||
|
path->srni.backup_label_stack->label,
|
||||||
|
sizeof(mpls_label_t)
|
||||||
|
* path->srni.backup_label_stack
|
||||||
|
->num_labels);
|
||||||
|
|
||||||
znh_backup->label_num =
|
znh_backup->label_num =
|
||||||
path->srni.backup_label_stack
|
path->srni.backup_label_stack
|
||||||
->num_labels;
|
->num_labels;
|
||||||
memcpy(znh_backup->labels,
|
if (path->srni.label_out
|
||||||
path->srni.backup_label_stack->label,
|
!= MPLS_LABEL_IPV4_EXPLICIT_NULL
|
||||||
sizeof(mpls_label_t)
|
&& path->srni.label_out
|
||||||
* znh_backup->label_num);
|
!= MPLS_LABEL_IMPLICIT_NULL)
|
||||||
|
znh_backup->labels
|
||||||
|
[znh_backup->label_num++] =
|
||||||
|
path->srni.label_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
znh = &zl.nexthops[zl.nexthop_num++];
|
znh = &zl.nexthops[zl.nexthop_num++];
|
||||||
|
@ -78,7 +78,8 @@
|
|||||||
{
|
{
|
||||||
"ip":"10.0.2.2",
|
"ip":"10.0.2.2",
|
||||||
"labels":[
|
"labels":[
|
||||||
16050
|
16050,
|
||||||
|
16040
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -101,7 +102,8 @@
|
|||||||
{
|
{
|
||||||
"ip":"10.0.1.2",
|
"ip":"10.0.1.2",
|
||||||
"labels":[
|
"labels":[
|
||||||
16040
|
16040,
|
||||||
|
16050
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
Loading…
Reference in New Issue
Block a user