mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 14:05:31 +00:00
Merge pull request #12898 from FRRouting/mergify/bp/dev/8.5/pr-12888
bgpd: Flags fixes (backport #12888)
This commit is contained in:
commit
63b643d1cf
@ -332,7 +332,7 @@ static unsigned int updgrp_hash_key_make(const void *p)
|
|||||||
const struct update_group *updgrp;
|
const struct update_group *updgrp;
|
||||||
const struct peer *peer;
|
const struct peer *peer;
|
||||||
const struct bgp_filter *filter;
|
const struct bgp_filter *filter;
|
||||||
uint32_t flags;
|
uint64_t flags;
|
||||||
uint32_t key;
|
uint32_t key;
|
||||||
afi_t afi;
|
afi_t afi;
|
||||||
safi_t safi;
|
safi_t safi;
|
||||||
@ -516,8 +516,8 @@ static bool updgrp_hash_cmp(const void *p1, const void *p2)
|
|||||||
const struct update_group *grp2;
|
const struct update_group *grp2;
|
||||||
const struct peer *pe1;
|
const struct peer *pe1;
|
||||||
const struct peer *pe2;
|
const struct peer *pe2;
|
||||||
uint32_t flags1;
|
uint64_t flags1;
|
||||||
uint32_t flags2;
|
uint64_t flags2;
|
||||||
const struct bgp_filter *fl1;
|
const struct bgp_filter *fl1;
|
||||||
const struct bgp_filter *fl2;
|
const struct bgp_filter *fl2;
|
||||||
afi_t afi;
|
afi_t afi;
|
||||||
|
@ -5555,7 +5555,7 @@ DEFUN (no_neighbor_capability_enhe,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int peer_af_flag_modify_vty(struct vty *vty, const char *peer_str,
|
static int peer_af_flag_modify_vty(struct vty *vty, const char *peer_str,
|
||||||
afi_t afi, safi_t safi, uint32_t flag,
|
afi_t afi, safi_t safi, uint64_t flag,
|
||||||
int set)
|
int set)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -5574,13 +5574,13 @@ static int peer_af_flag_modify_vty(struct vty *vty, const char *peer_str,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int peer_af_flag_set_vty(struct vty *vty, const char *peer_str,
|
static int peer_af_flag_set_vty(struct vty *vty, const char *peer_str,
|
||||||
afi_t afi, safi_t safi, uint32_t flag)
|
afi_t afi, safi_t safi, uint64_t flag)
|
||||||
{
|
{
|
||||||
return peer_af_flag_modify_vty(vty, peer_str, afi, safi, flag, 1);
|
return peer_af_flag_modify_vty(vty, peer_str, afi, safi, flag, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int peer_af_flag_unset_vty(struct vty *vty, const char *peer_str,
|
static int peer_af_flag_unset_vty(struct vty *vty, const char *peer_str,
|
||||||
afi_t afi, safi_t safi, uint32_t flag)
|
afi_t afi, safi_t safi, uint64_t flag)
|
||||||
{
|
{
|
||||||
return peer_af_flag_modify_vty(vty, peer_str, afi, safi, flag, 0);
|
return peer_af_flag_modify_vty(vty, peer_str, afi, safi, flag, 0);
|
||||||
}
|
}
|
||||||
@ -16912,7 +16912,7 @@ static bool peergroup_af_flag_check(struct peer *peer, afi_t afi, safi_t safi,
|
|||||||
if (CHECK_FLAG(peer->af_flags_invert[afi][safi], flag))
|
if (CHECK_FLAG(peer->af_flags_invert[afi][safi], flag))
|
||||||
return !peer_af_flag_check(peer, afi, safi, flag);
|
return !peer_af_flag_check(peer, afi, safi, flag);
|
||||||
else
|
else
|
||||||
return !!peer_af_flag_check(peer, afi, safi, flag);
|
return peer_af_flag_check(peer, afi, safi, flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
return !!CHECK_FLAG(peer->af_flags_override[afi][safi], flag);
|
return !!CHECK_FLAG(peer->af_flags_override[afi][safi], flag);
|
||||||
|
@ -980,9 +980,10 @@ void peer_flag_inherit(struct peer *peer, uint64_t flag)
|
|||||||
COND_FLAG(peer->flags, flag, group_val);
|
COND_FLAG(peer->flags, flag, group_val);
|
||||||
}
|
}
|
||||||
|
|
||||||
int peer_af_flag_check(struct peer *peer, afi_t afi, safi_t safi, uint32_t flag)
|
bool peer_af_flag_check(struct peer *peer, afi_t afi, safi_t safi,
|
||||||
|
uint64_t flag)
|
||||||
{
|
{
|
||||||
return CHECK_FLAG(peer->af_flags[afi][safi], flag);
|
return !!CHECK_FLAG(peer->af_flags[afi][safi], flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
void peer_af_flag_inherit(struct peer *peer, afi_t afi, safi_t safi,
|
void peer_af_flag_inherit(struct peer *peer, afi_t afi, safi_t safi,
|
||||||
@ -2703,7 +2704,7 @@ struct peer_group *peer_group_get(struct bgp *bgp, const char *name)
|
|||||||
static void peer_group2peer_config_copy(struct peer_group *group,
|
static void peer_group2peer_config_copy(struct peer_group *group,
|
||||||
struct peer *peer)
|
struct peer *peer)
|
||||||
{
|
{
|
||||||
uint32_t flags_tmp;
|
uint64_t flags_tmp;
|
||||||
struct peer *conf;
|
struct peer *conf;
|
||||||
bool config_node = !!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE);
|
bool config_node = !!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE);
|
||||||
|
|
||||||
@ -4448,7 +4449,7 @@ static int peer_flag_action_set(const struct peer_flag_action *action_list,
|
|||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void peer_flag_modify_action(struct peer *peer, uint32_t flag)
|
static void peer_flag_modify_action(struct peer *peer, uint64_t flag)
|
||||||
{
|
{
|
||||||
if (flag == PEER_FLAG_SHUTDOWN) {
|
if (flag == PEER_FLAG_SHUTDOWN) {
|
||||||
if (CHECK_FLAG(peer->flags, flag)) {
|
if (CHECK_FLAG(peer->flags, flag)) {
|
||||||
|
19
bgpd/bgpd.h
19
bgpd/bgpd.h
@ -1435,14 +1435,14 @@ struct peer {
|
|||||||
#define PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE (1ULL << 19)
|
#define PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE (1ULL << 19)
|
||||||
#define PEER_FLAG_AS_OVERRIDE (1ULL << 20)
|
#define PEER_FLAG_AS_OVERRIDE (1ULL << 20)
|
||||||
#define PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE (1ULL << 21)
|
#define PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE (1ULL << 21)
|
||||||
#define PEER_FLAG_WEIGHT (1ULL << 24)
|
#define PEER_FLAG_WEIGHT (1ULL << 22)
|
||||||
#define PEER_FLAG_ALLOWAS_IN_ORIGIN (1ULL << 25)
|
#define PEER_FLAG_ALLOWAS_IN_ORIGIN (1ULL << 23)
|
||||||
#define PEER_FLAG_SEND_LARGE_COMMUNITY (1ULL << 26)
|
#define PEER_FLAG_SEND_LARGE_COMMUNITY (1ULL << 24)
|
||||||
#define PEER_FLAG_MAX_PREFIX_OUT (1ULL << 27)
|
#define PEER_FLAG_MAX_PREFIX_OUT (1ULL << 25)
|
||||||
#define PEER_FLAG_MAX_PREFIX_FORCE (1ULL << 28)
|
#define PEER_FLAG_MAX_PREFIX_FORCE (1ULL << 26)
|
||||||
#define PEER_FLAG_DISABLE_ADDPATH_RX (1ULL << 29)
|
#define PEER_FLAG_DISABLE_ADDPATH_RX (1ULL << 27)
|
||||||
#define PEER_FLAG_SOO (1ULL << 30)
|
#define PEER_FLAG_SOO (1ULL << 28)
|
||||||
#define PEER_FLAG_ACCEPT_OWN (1ULL << 31)
|
#define PEER_FLAG_ACCEPT_OWN (1ULL << 63)
|
||||||
|
|
||||||
enum bgp_addpath_strat addpath_type[AFI_MAX][SAFI_MAX];
|
enum bgp_addpath_strat addpath_type[AFI_MAX][SAFI_MAX];
|
||||||
|
|
||||||
@ -2227,7 +2227,8 @@ extern int peer_af_flag_set(struct peer *peer, afi_t afi, safi_t safi,
|
|||||||
uint64_t flag);
|
uint64_t flag);
|
||||||
extern int peer_af_flag_unset(struct peer *peer, afi_t afi, safi_t safi,
|
extern int peer_af_flag_unset(struct peer *peer, afi_t afi, safi_t safi,
|
||||||
uint64_t flag);
|
uint64_t flag);
|
||||||
extern int peer_af_flag_check(struct peer *, afi_t, safi_t, uint32_t);
|
extern bool peer_af_flag_check(struct peer *peer, afi_t afi, safi_t safi,
|
||||||
|
uint64_t flag);
|
||||||
extern void peer_af_flag_inherit(struct peer *peer, afi_t afi, safi_t safi,
|
extern void peer_af_flag_inherit(struct peer *peer, afi_t afi, safi_t safi,
|
||||||
uint64_t flag);
|
uint64_t flag);
|
||||||
extern void peer_change_action(struct peer *peer, afi_t afi, safi_t safi,
|
extern void peer_change_action(struct peer *peer, afi_t afi, safi_t safi,
|
||||||
|
@ -176,9 +176,9 @@ struct test_peer_attr {
|
|||||||
|
|
||||||
enum test_peer_attr_type type;
|
enum test_peer_attr_type type;
|
||||||
union {
|
union {
|
||||||
uint32_t flag;
|
uint64_t flag;
|
||||||
struct {
|
struct {
|
||||||
uint32_t flag;
|
uint64_t flag;
|
||||||
size_t direct;
|
size_t direct;
|
||||||
} filter;
|
} filter;
|
||||||
} u;
|
} u;
|
||||||
@ -640,6 +640,14 @@ static struct test_peer_attr test_peer_attrs[] = {
|
|||||||
.u.flag = PEER_FLAG_WEIGHT,
|
.u.flag = PEER_FLAG_WEIGHT,
|
||||||
.handlers[0] = TEST_HANDLER(weight),
|
.handlers[0] = TEST_HANDLER(weight),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.cmd = "accept-own",
|
||||||
|
.peer_cmd = "accept-own",
|
||||||
|
.group_cmd = "accept-own",
|
||||||
|
.families[0] = {.afi = AFI_IP, .safi = SAFI_MPLS_VPN},
|
||||||
|
.families[1] = {.afi = AFI_IP6, .safi = SAFI_MPLS_VPN},
|
||||||
|
.u.flag = PEER_FLAG_ACCEPT_OWN,
|
||||||
|
},
|
||||||
{NULL}
|
{NULL}
|
||||||
};
|
};
|
||||||
/* clang-format on */
|
/* clang-format on */
|
||||||
@ -651,21 +659,14 @@ static const char *str_from_afi(afi_t afi)
|
|||||||
return "ipv4";
|
return "ipv4";
|
||||||
case AFI_IP6:
|
case AFI_IP6:
|
||||||
return "ipv6";
|
return "ipv6";
|
||||||
default:
|
case AFI_L2VPN:
|
||||||
return "<unknown AFI>";
|
return "l2vpn";
|
||||||
}
|
case AFI_MAX:
|
||||||
|
case AFI_UNSPEC:
|
||||||
|
return "bad-value";
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *str_from_safi(safi_t safi)
|
assert(!"Reached end of function we should never reach");
|
||||||
{
|
|
||||||
switch (safi) {
|
|
||||||
case SAFI_UNICAST:
|
|
||||||
return "unicast";
|
|
||||||
case SAFI_MULTICAST:
|
|
||||||
return "multicast";
|
|
||||||
default:
|
|
||||||
return "<unknown SAFI>";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *str_from_attr_type(enum test_peer_attr_type at)
|
static const char *str_from_attr_type(enum test_peer_attr_type at)
|
||||||
@ -1151,7 +1152,7 @@ static void test_peer_attr(struct test *test, struct test_peer_attr *pa)
|
|||||||
test_log(test, "prepare: switch address-family to [%s]",
|
test_log(test, "prepare: switch address-family to [%s]",
|
||||||
get_afi_safi_str(pa->afi, pa->safi, false));
|
get_afi_safi_str(pa->afi, pa->safi, false));
|
||||||
test_execute(test, "address-family %s %s",
|
test_execute(test, "address-family %s %s",
|
||||||
str_from_afi(pa->afi), str_from_safi(pa->safi));
|
str_from_afi(pa->afi), safi2str(pa->safi));
|
||||||
test_execute(test, "neighbor %s activate", g->name);
|
test_execute(test, "neighbor %s activate", g->name);
|
||||||
test_execute(test, "neighbor %s activate", p->host);
|
test_execute(test, "neighbor %s activate", p->host);
|
||||||
}
|
}
|
||||||
@ -1218,7 +1219,7 @@ static void test_peer_attr(struct test *test, struct test_peer_attr *pa)
|
|||||||
test_log(test, "prepare: switch address-family to [%s]",
|
test_log(test, "prepare: switch address-family to [%s]",
|
||||||
get_afi_safi_str(pa->afi, pa->safi, false));
|
get_afi_safi_str(pa->afi, pa->safi, false));
|
||||||
test_execute(test, "address-family %s %s",
|
test_execute(test, "address-family %s %s",
|
||||||
str_from_afi(pa->afi), str_from_safi(pa->safi));
|
str_from_afi(pa->afi), safi2str(pa->safi));
|
||||||
test_execute(test, "neighbor %s activate", g->name);
|
test_execute(test, "neighbor %s activate", g->name);
|
||||||
test_execute(test, "neighbor %s activate", p->host);
|
test_execute(test, "neighbor %s activate", p->host);
|
||||||
}
|
}
|
||||||
@ -1266,7 +1267,7 @@ static void test_peer_attr(struct test *test, struct test_peer_attr *pa)
|
|||||||
test_log(test, "prepare: switch address-family to [%s]",
|
test_log(test, "prepare: switch address-family to [%s]",
|
||||||
get_afi_safi_str(pa->afi, pa->safi, false));
|
get_afi_safi_str(pa->afi, pa->safi, false));
|
||||||
test_execute(test, "address-family %s %s",
|
test_execute(test, "address-family %s %s",
|
||||||
str_from_afi(pa->afi), str_from_safi(pa->safi));
|
str_from_afi(pa->afi), safi2str(pa->safi));
|
||||||
test_execute(test, "neighbor %s activate", g->name);
|
test_execute(test, "neighbor %s activate", g->name);
|
||||||
test_execute(test, "neighbor %s activate", p->host);
|
test_execute(test, "neighbor %s activate", p->host);
|
||||||
}
|
}
|
||||||
@ -1465,7 +1466,7 @@ int main(void)
|
|||||||
if (pa->afi && pa->safi)
|
if (pa->afi && pa->safi)
|
||||||
desc = asprintfrr(MTYPE_TMP, "peer\\%s-%s\\%s",
|
desc = asprintfrr(MTYPE_TMP, "peer\\%s-%s\\%s",
|
||||||
str_from_afi(pa->afi),
|
str_from_afi(pa->afi),
|
||||||
str_from_safi(pa->safi), pa->cmd);
|
safi2str(pa->safi), pa->cmd);
|
||||||
else
|
else
|
||||||
desc = asprintfrr(MTYPE_TMP, "peer\\%s", pa->cmd);
|
desc = asprintfrr(MTYPE_TMP, "peer\\%s", pa->cmd);
|
||||||
|
|
||||||
|
@ -196,3 +196,5 @@ TestFlag.okfail("peer\\ipv4-unicast\\weight")
|
|||||||
TestFlag.okfail("peer\\ipv4-multicast\\weight")
|
TestFlag.okfail("peer\\ipv4-multicast\\weight")
|
||||||
TestFlag.okfail("peer\\ipv6-unicast\\weight")
|
TestFlag.okfail("peer\\ipv6-unicast\\weight")
|
||||||
TestFlag.okfail("peer\\ipv6-multicast\\weight")
|
TestFlag.okfail("peer\\ipv6-multicast\\weight")
|
||||||
|
TestFlag.okfail("peer\\ipv4-vpn\\accept-own")
|
||||||
|
TestFlag.okfail("peer\\ipv6-vpn\\accept-own")
|
||||||
|
Loading…
Reference in New Issue
Block a user