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:
Donatas Abraitis 2022-02-07 08:05:11 +02:00 committed by GitHub
commit 35b9d2e4ef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 56 additions and 1 deletions

View File

@ -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))

View File

@ -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)
{

View File

@ -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);

View File

@ -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;