mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-09 20:22:36 +00:00
bgpd: attribute-unchanged issues with peer-groups
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
This commit is contained in:
parent
92690ee649
commit
8eeb033552
@ -4201,8 +4201,15 @@ DEFUN (neighbor_attr_unchanged,
|
|||||||
"Med attribute\n")
|
"Med attribute\n")
|
||||||
{
|
{
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
char *peer = argv[1]->arg;
|
char *peer_str = argv[1]->arg;
|
||||||
|
struct peer *peer;
|
||||||
u_int16_t flags = 0;
|
u_int16_t flags = 0;
|
||||||
|
afi_t afi = bgp_node_afi(vty);
|
||||||
|
safi_t safi = bgp_node_safi(vty);
|
||||||
|
|
||||||
|
peer = peer_and_group_lookup_vty(vty, peer_str);
|
||||||
|
if (!peer)
|
||||||
|
return CMD_WARNING_CONFIG_FAILED;
|
||||||
|
|
||||||
if (argv_find(argv, argc, "as-path", &idx))
|
if (argv_find(argv, argc, "as-path", &idx))
|
||||||
SET_FLAG(flags, PEER_FLAG_AS_PATH_UNCHANGED);
|
SET_FLAG(flags, PEER_FLAG_AS_PATH_UNCHANGED);
|
||||||
@ -4213,15 +4220,35 @@ DEFUN (neighbor_attr_unchanged,
|
|||||||
if (argv_find(argv, argc, "med", &idx))
|
if (argv_find(argv, argc, "med", &idx))
|
||||||
SET_FLAG(flags, PEER_FLAG_MED_UNCHANGED);
|
SET_FLAG(flags, PEER_FLAG_MED_UNCHANGED);
|
||||||
|
|
||||||
if (!flags) // no flags means all of them!
|
/* no flags means all of them! */
|
||||||
{
|
if (!flags) {
|
||||||
SET_FLAG(flags, PEER_FLAG_AS_PATH_UNCHANGED);
|
SET_FLAG(flags, PEER_FLAG_AS_PATH_UNCHANGED);
|
||||||
SET_FLAG(flags, PEER_FLAG_NEXTHOP_UNCHANGED);
|
SET_FLAG(flags, PEER_FLAG_NEXTHOP_UNCHANGED);
|
||||||
SET_FLAG(flags, PEER_FLAG_MED_UNCHANGED);
|
SET_FLAG(flags, PEER_FLAG_MED_UNCHANGED);
|
||||||
|
} else {
|
||||||
|
if (!CHECK_FLAG(flags, PEER_FLAG_AS_PATH_UNCHANGED) &&
|
||||||
|
peer_af_flag_check(peer, afi, safi,
|
||||||
|
PEER_FLAG_AS_PATH_UNCHANGED)) {
|
||||||
|
peer_af_flag_unset_vty(vty, peer_str, afi, safi,
|
||||||
|
PEER_FLAG_AS_PATH_UNCHANGED);
|
||||||
}
|
}
|
||||||
|
|
||||||
return peer_af_flag_set_vty(vty, peer, bgp_node_afi(vty),
|
if (!CHECK_FLAG(flags, PEER_FLAG_NEXTHOP_UNCHANGED) &&
|
||||||
bgp_node_safi(vty), flags);
|
peer_af_flag_check(peer, afi, safi,
|
||||||
|
PEER_FLAG_NEXTHOP_UNCHANGED)) {
|
||||||
|
peer_af_flag_unset_vty(vty, peer_str, afi, safi,
|
||||||
|
PEER_FLAG_NEXTHOP_UNCHANGED);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!CHECK_FLAG(flags, PEER_FLAG_MED_UNCHANGED) &&
|
||||||
|
peer_af_flag_check(peer, afi, safi,
|
||||||
|
PEER_FLAG_MED_UNCHANGED)) {
|
||||||
|
peer_af_flag_unset_vty(vty, peer_str, afi, safi,
|
||||||
|
PEER_FLAG_MED_UNCHANGED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return peer_af_flag_set_vty(vty, peer_str, afi, safi, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
ALIAS_HIDDEN(
|
ALIAS_HIDDEN(
|
||||||
|
30
bgpd/bgpd.c
30
bgpd/bgpd.c
@ -6926,35 +6926,33 @@ static void bgp_config_write_peer_af(struct vty *vty, struct bgp *bgp,
|
|||||||
bgp_config_write_filter(vty, peer, afi, safi, write);
|
bgp_config_write_filter(vty, peer, afi, safi, write);
|
||||||
|
|
||||||
/* atribute-unchanged. */
|
/* atribute-unchanged. */
|
||||||
if (CHECK_FLAG(peer->af_flags[afi][safi], PEER_FLAG_AS_PATH_UNCHANGED)
|
if (peer_af_flag_check(peer, afi, safi, PEER_FLAG_AS_PATH_UNCHANGED) ||
|
||||||
|| CHECK_FLAG(peer->af_flags[afi][safi],
|
peer_af_flag_check(peer, afi, safi, PEER_FLAG_NEXTHOP_UNCHANGED) ||
|
||||||
PEER_FLAG_NEXTHOP_UNCHANGED)
|
peer_af_flag_check(peer, afi, safi, PEER_FLAG_MED_UNCHANGED)) {
|
||||||
|| CHECK_FLAG(peer->af_flags[afi][safi], PEER_FLAG_MED_UNCHANGED)) {
|
|
||||||
if (peergroup_af_flag_check(peer, afi, safi,
|
if (!peer_group_active(peer) ||
|
||||||
PEER_FLAG_AS_PATH_UNCHANGED)
|
peergroup_af_flag_check(peer, afi, safi,
|
||||||
&& peergroup_af_flag_check(peer, afi, safi,
|
PEER_FLAG_AS_PATH_UNCHANGED) ||
|
||||||
PEER_FLAG_NEXTHOP_UNCHANGED)
|
peergroup_af_flag_check(peer, afi, safi,
|
||||||
&& peergroup_af_flag_check(peer, afi, safi,
|
PEER_FLAG_NEXTHOP_UNCHANGED) ||
|
||||||
|
peergroup_af_flag_check(peer, afi, safi,
|
||||||
PEER_FLAG_MED_UNCHANGED)) {
|
PEER_FLAG_MED_UNCHANGED)) {
|
||||||
afi_header_vty_out(
|
|
||||||
vty, afi, safi, write,
|
|
||||||
" neighbor %s attribute-unchanged\n", addr);
|
|
||||||
} else {
|
|
||||||
afi_header_vty_out(
|
afi_header_vty_out(
|
||||||
vty, afi, safi, write,
|
vty, afi, safi, write,
|
||||||
" neighbor %s attribute-unchanged%s%s%s\n",
|
" neighbor %s attribute-unchanged%s%s%s\n",
|
||||||
addr,
|
addr,
|
||||||
peergroup_af_flag_check(
|
peer_af_flag_check(
|
||||||
peer, afi, safi,
|
peer, afi, safi,
|
||||||
PEER_FLAG_AS_PATH_UNCHANGED)
|
PEER_FLAG_AS_PATH_UNCHANGED)
|
||||||
? " as-path"
|
? " as-path"
|
||||||
: "",
|
: "",
|
||||||
peergroup_af_flag_check(
|
peer_af_flag_check(
|
||||||
peer, afi, safi,
|
peer, afi, safi,
|
||||||
PEER_FLAG_NEXTHOP_UNCHANGED)
|
PEER_FLAG_NEXTHOP_UNCHANGED)
|
||||||
? " next-hop"
|
? " next-hop"
|
||||||
: "",
|
: "",
|
||||||
peergroup_af_flag_check(peer, afi, safi,
|
peer_af_flag_check(peer, afi, safi,
|
||||||
PEER_FLAG_MED_UNCHANGED)
|
PEER_FLAG_MED_UNCHANGED)
|
||||||
? " med"
|
? " med"
|
||||||
: "");
|
: "");
|
||||||
|
Loading…
Reference in New Issue
Block a user