mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-24 16:33:40 +00:00
Merge pull request #10508 from FRRouting/mergify/bp/dev/8.2/pr-10432
pbrd: pbr route maps get addr family of nhgs (backport #10432)
This commit is contained in:
commit
35b9d2e4ef
@ -792,6 +792,12 @@ void pbr_map_check_nh_group_change(const char *nh_group)
|
||||
if (found_name) {
|
||||
bool original = pbrm->valid;
|
||||
|
||||
/* Set data we were waiting on */
|
||||
if (pbrms->nhgrp_name)
|
||||
pbr_nht_set_seq_nhg_data(
|
||||
pbrms,
|
||||
nhgc_find(pbrms->nhgrp_name));
|
||||
|
||||
pbr_map_check_valid_internal(pbrm);
|
||||
|
||||
if (pbrm->valid && (original != pbrm->valid))
|
||||
|
@ -522,6 +522,49 @@ char *pbr_nht_nexthop_make_name(char *name, size_t l,
|
||||
return buffer;
|
||||
}
|
||||
|
||||
/* Set data derived from nhg in pbrms */
|
||||
void pbr_nht_set_seq_nhg_data(struct pbr_map_sequence *pbrms,
|
||||
const struct nexthop_group_cmd *nhgc)
|
||||
{
|
||||
const struct nexthop_group *nhg;
|
||||
|
||||
if (!nhgc)
|
||||
return;
|
||||
|
||||
nhg = &nhgc->nhg;
|
||||
if (!nhg->nexthop)
|
||||
return;
|
||||
|
||||
switch (nhg->nexthop->type) {
|
||||
case NEXTHOP_TYPE_IPV6:
|
||||
case NEXTHOP_TYPE_IPV6_IFINDEX:
|
||||
pbrms->family = AF_INET6;
|
||||
break;
|
||||
case NEXTHOP_TYPE_IPV4:
|
||||
case NEXTHOP_TYPE_IPV4_IFINDEX:
|
||||
pbrms->family = AF_INET;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Configure a routemap sequence to use a given nexthop group */
|
||||
void pbr_nht_set_seq_nhg(struct pbr_map_sequence *pbrms, const char *name)
|
||||
{
|
||||
struct nexthop_group_cmd *nhgc;
|
||||
|
||||
if (!name)
|
||||
return;
|
||||
|
||||
pbrms->nhgrp_name = XSTRDUP(MTYPE_TMP, name);
|
||||
|
||||
nhgc = nhgc_find(name);
|
||||
if (!nhgc)
|
||||
return;
|
||||
|
||||
pbr_nht_set_seq_nhg_data(pbrms, nhgc);
|
||||
}
|
||||
|
||||
void pbr_nht_add_individual_nexthop(struct pbr_map_sequence *pbrms,
|
||||
const struct nexthop *nhop)
|
||||
{
|
||||
|
@ -109,6 +109,11 @@ extern struct pbr_nexthop_group_cache *pbr_nht_add_group(const char *name);
|
||||
extern void pbr_nht_change_group(const char *name);
|
||||
extern void pbr_nht_delete_group(const char *name);
|
||||
|
||||
extern void pbr_nht_set_seq_nhg_data(struct pbr_map_sequence *pbrms,
|
||||
const struct nexthop_group_cmd *nhgc);
|
||||
extern void pbr_nht_set_seq_nhg(struct pbr_map_sequence *pbrms,
|
||||
const char *name);
|
||||
|
||||
extern void pbr_nht_add_individual_nexthop(struct pbr_map_sequence *pbrms,
|
||||
const struct nexthop *nhop);
|
||||
extern void pbr_nht_delete_individual_nexthop(struct pbr_map_sequence *pbrms);
|
||||
|
@ -506,7 +506,8 @@ DEFPY(pbr_map_nexthop_group, pbr_map_nexthop_group_cmd,
|
||||
/* This is new/replacement config */
|
||||
pbrms_clear_set_config(pbrms);
|
||||
|
||||
pbrms->nhgrp_name = XSTRDUP(MTYPE_TMP, name);
|
||||
pbr_nht_set_seq_nhg(pbrms, name);
|
||||
|
||||
pbr_map_check(pbrms, true);
|
||||
|
||||
return CMD_SUCCESS;
|
||||
|
Loading…
Reference in New Issue
Block a user