mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-06 12:52:49 +00:00
Merge pull request #13955 from opensourcerouting/fix/deprecate_orf_bgpd_130
bgpd: Deprecate Prestandard Outbound Route Filtering capability
This commit is contained in:
commit
684ab69ca2
@ -2258,12 +2258,6 @@ static enum bgp_fsm_state_progress bgp_establish(struct peer *peer)
|
||||
peer, afi, safi, ORF_TYPE_PREFIX,
|
||||
REFRESH_IMMEDIATE, 0,
|
||||
BGP_ROUTE_REFRESH_NORMAL);
|
||||
else if (CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_OLD_RCV))
|
||||
bgp_route_refresh_send(
|
||||
peer, afi, safi, ORF_TYPE_PREFIX_OLD,
|
||||
REFRESH_IMMEDIATE, 0,
|
||||
BGP_ROUTE_REFRESH_NORMAL);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2272,9 +2266,7 @@ static enum bgp_fsm_state_progress bgp_establish(struct peer *peer)
|
||||
if (CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_ADV))
|
||||
if (CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_RCV)
|
||||
|| CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_OLD_RCV))
|
||||
PEER_CAP_ORF_PREFIX_SM_RCV))
|
||||
SET_FLAG(peer->af_sflags[afi][safi],
|
||||
PEER_STATUS_ORF_WAIT_REFRESH);
|
||||
}
|
||||
|
@ -36,7 +36,6 @@ static const struct message capcode_str[] = {
|
||||
{CAPABILITY_CODE_ADDPATH, "AddPath"},
|
||||
{CAPABILITY_CODE_DYNAMIC, "Dynamic"},
|
||||
{CAPABILITY_CODE_ENHE, "Extended Next Hop Encoding"},
|
||||
{CAPABILITY_CODE_ORF_OLD, "ORF (Old)"},
|
||||
{CAPABILITY_CODE_FQDN, "FQDN"},
|
||||
{CAPABILITY_CODE_ENHANCED_RR, "Enhanced Route Refresh"},
|
||||
{CAPABILITY_CODE_EXT_MESSAGE, "BGP Extended Message"},
|
||||
@ -55,7 +54,6 @@ static const size_t cap_minsizes[] = {
|
||||
[CAPABILITY_CODE_ADDPATH] = CAPABILITY_CODE_ADDPATH_LEN,
|
||||
[CAPABILITY_CODE_DYNAMIC] = CAPABILITY_CODE_DYNAMIC_LEN,
|
||||
[CAPABILITY_CODE_ENHE] = CAPABILITY_CODE_ENHE_LEN,
|
||||
[CAPABILITY_CODE_ORF_OLD] = CAPABILITY_CODE_ORF_LEN,
|
||||
[CAPABILITY_CODE_FQDN] = CAPABILITY_CODE_MIN_FQDN_LEN,
|
||||
[CAPABILITY_CODE_ENHANCED_RR] = CAPABILITY_CODE_ENHANCED_LEN,
|
||||
[CAPABILITY_CODE_EXT_MESSAGE] = CAPABILITY_CODE_EXT_MESSAGE_LEN,
|
||||
@ -78,7 +76,6 @@ static const size_t cap_modsizes[] = {
|
||||
[CAPABILITY_CODE_ADDPATH] = 4,
|
||||
[CAPABILITY_CODE_DYNAMIC] = 1,
|
||||
[CAPABILITY_CODE_ENHE] = 6,
|
||||
[CAPABILITY_CODE_ORF_OLD] = 1,
|
||||
[CAPABILITY_CODE_FQDN] = 1,
|
||||
[CAPABILITY_CODE_ENHANCED_RR] = 1,
|
||||
[CAPABILITY_CODE_EXT_MESSAGE] = 1,
|
||||
@ -345,7 +342,6 @@ static void bgp_capability_orf_not_support(struct peer *peer, iana_afi_t afi,
|
||||
static const struct message orf_type_str[] = {
|
||||
{ORF_TYPE_RESERVED, "Reserved"},
|
||||
{ORF_TYPE_PREFIX, "Prefixlist"},
|
||||
{ORF_TYPE_PREFIX_OLD, "Prefixlist (old)"},
|
||||
{0}};
|
||||
|
||||
static const struct message orf_mode_str[] = {{ORF_MODE_RECEIVE, "Receive"},
|
||||
@ -434,22 +430,6 @@ static int bgp_capability_orf_entry(struct peer *peer,
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case CAPABILITY_CODE_ORF_OLD:
|
||||
switch (type) {
|
||||
case ORF_TYPE_RESERVED:
|
||||
if (bgp_debug_neighbor_events(peer))
|
||||
zlog_debug(
|
||||
"%s Addr-family %d/%d has reserved ORF type, ignoring",
|
||||
peer->host, afi, safi);
|
||||
break;
|
||||
case ORF_TYPE_PREFIX_OLD:
|
||||
break;
|
||||
default:
|
||||
bgp_capability_orf_not_support(
|
||||
peer, pkt_afi, pkt_safi, type, mode);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
bgp_capability_orf_not_support(peer, pkt_afi, pkt_safi,
|
||||
type, mode);
|
||||
@ -476,9 +456,6 @@ static int bgp_capability_orf_entry(struct peer *peer,
|
||||
if (hdr->code == CAPABILITY_CODE_ORF) {
|
||||
sm_cap = PEER_CAP_ORF_PREFIX_SM_RCV;
|
||||
rm_cap = PEER_CAP_ORF_PREFIX_RM_RCV;
|
||||
} else if (hdr->code == CAPABILITY_CODE_ORF_OLD) {
|
||||
sm_cap = PEER_CAP_ORF_PREFIX_SM_OLD_RCV;
|
||||
rm_cap = PEER_CAP_ORF_PREFIX_RM_OLD_RCV;
|
||||
} else {
|
||||
bgp_capability_orf_not_support(peer, pkt_afi, pkt_safi,
|
||||
type, mode);
|
||||
@ -1006,7 +983,6 @@ static int bgp_capability_parse(struct peer *peer, size_t length,
|
||||
case CAPABILITY_CODE_MP:
|
||||
case CAPABILITY_CODE_REFRESH:
|
||||
case CAPABILITY_CODE_ORF:
|
||||
case CAPABILITY_CODE_ORF_OLD:
|
||||
case CAPABILITY_CODE_RESTART:
|
||||
case CAPABILITY_CODE_AS4:
|
||||
case CAPABILITY_CODE_ADDPATH:
|
||||
@ -1076,7 +1052,6 @@ static int bgp_capability_parse(struct peer *peer, size_t length,
|
||||
SET_FLAG(peer->cap, PEER_CAP_REFRESH_RCV);
|
||||
} break;
|
||||
case CAPABILITY_CODE_ORF:
|
||||
case CAPABILITY_CODE_ORF_OLD:
|
||||
ret = bgp_capability_orf_entry(peer, &caphdr);
|
||||
break;
|
||||
case CAPABILITY_CODE_RESTART:
|
||||
@ -1486,9 +1461,7 @@ static void bgp_open_capability_orf(struct stream *s, struct peer *peer,
|
||||
/* Address Prefix ORF */
|
||||
if (CHECK_FLAG(peer->af_flags[afi][safi], PEER_FLAG_ORF_PREFIX_SM)
|
||||
|| CHECK_FLAG(peer->af_flags[afi][safi], PEER_FLAG_ORF_PREFIX_RM)) {
|
||||
stream_putc(s, (code == CAPABILITY_CODE_ORF
|
||||
? ORF_TYPE_PREFIX
|
||||
: ORF_TYPE_PREFIX_OLD));
|
||||
stream_putc(s, ORF_TYPE_PREFIX);
|
||||
|
||||
if (CHECK_FLAG(peer->af_flags[afi][safi],
|
||||
PEER_FLAG_ORF_PREFIX_SM)
|
||||
@ -1880,9 +1853,6 @@ uint16_t bgp_open_capability(struct stream *s, struct peer *peer,
|
||||
PEER_FLAG_ORF_PREFIX_SM)
|
||||
|| CHECK_FLAG(peer->af_flags[afi][safi],
|
||||
PEER_FLAG_ORF_PREFIX_RM)) {
|
||||
bgp_open_capability_orf(s, peer, afi, safi,
|
||||
CAPABILITY_CODE_ORF_OLD,
|
||||
ext_opt_params);
|
||||
bgp_open_capability_orf(s, peer, afi, safi,
|
||||
CAPABILITY_CODE_ORF,
|
||||
ext_opt_params);
|
||||
|
@ -38,7 +38,6 @@ struct graceful_restart_af {
|
||||
#define CAPABILITY_CODE_FQDN 73 /* Advertise hostname capability */
|
||||
#define CAPABILITY_CODE_SOFT_VERSION 75 /* Software Version capability */
|
||||
#define CAPABILITY_CODE_ENHE 5 /* Extended Next Hop Encoding */
|
||||
#define CAPABILITY_CODE_ORF_OLD 130 /* Cooperative Route Filtering Capability(cisco) */
|
||||
#define CAPABILITY_CODE_EXT_MESSAGE 6 /* Extended Message Support */
|
||||
#define CAPABILITY_CODE_ROLE 9 /* Role Capability */
|
||||
|
||||
@ -63,7 +62,6 @@ struct graceful_restart_af {
|
||||
/* ORF Type */
|
||||
#define ORF_TYPE_RESERVED 0
|
||||
#define ORF_TYPE_PREFIX 64
|
||||
#define ORF_TYPE_PREFIX_OLD 128
|
||||
|
||||
/* ORF Mode */
|
||||
#define ORF_MODE_RECEIVE 1
|
||||
|
@ -1116,7 +1116,7 @@ void bgp_route_refresh_send(struct peer *peer, afi_t afi, safi_t safi,
|
||||
stream_putc(s, 0);
|
||||
stream_putc(s, pkt_safi);
|
||||
|
||||
if (orf_type == ORF_TYPE_PREFIX || orf_type == ORF_TYPE_PREFIX_OLD)
|
||||
if (orf_type == ORF_TYPE_PREFIX)
|
||||
if (remove || filter->plist[FILTER_IN].plist) {
|
||||
uint16_t orf_len;
|
||||
unsigned long orfp;
|
||||
@ -2375,8 +2375,7 @@ static int bgp_route_refresh_receive(struct peer *peer, bgp_size_t size)
|
||||
/* orf_len in bounds? */
|
||||
if ((stream_pnt(s) + orf_len) > end)
|
||||
break; /* XXX: Notify instead?? */
|
||||
if (orf_type == ORF_TYPE_PREFIX
|
||||
|| orf_type == ORF_TYPE_PREFIX_OLD) {
|
||||
if (orf_type == ORF_TYPE_PREFIX) {
|
||||
uint8_t *p_pnt = stream_pnt(s);
|
||||
uint8_t *p_end = stream_pnt(s) + orf_len;
|
||||
struct orf_prefix orfp;
|
||||
|
@ -2181,10 +2181,8 @@ bool subgroup_announce_check(struct bgp_dest *dest, struct bgp_path_info *pi,
|
||||
}
|
||||
|
||||
/* ORF prefix-list filter check */
|
||||
if (CHECK_FLAG(peer->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_ADV)
|
||||
&& (CHECK_FLAG(peer->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_RCV)
|
||||
|| CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_OLD_RCV)))
|
||||
if (CHECK_FLAG(peer->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_ADV) &&
|
||||
CHECK_FLAG(peer->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_RCV))
|
||||
if (peer->orf_plist[afi][safi]) {
|
||||
if (prefix_list_apply(peer->orf_plist[afi][safi], p)
|
||||
== PREFIX_DENY) {
|
||||
|
@ -420,8 +420,6 @@ static unsigned int updgrp_hash_key_make(const void *p)
|
||||
*/
|
||||
if (CHECK_FLAG(peer->flags, PEER_FLAG_LONESOUL)
|
||||
|| CHECK_FLAG(peer->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_RCV)
|
||||
|| CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_OLD_RCV)
|
||||
|| CHECK_FLAG(peer->af_flags[afi][safi], PEER_FLAG_MAX_PREFIX_OUT))
|
||||
key = jhash_1word(jhash(peer->host, strlen(peer->host), SEED2),
|
||||
key);
|
||||
@ -492,15 +490,12 @@ static unsigned int updgrp_hash_key_make(const void *p)
|
||||
: "(NONE)",
|
||||
peer->shared_network &&
|
||||
peer_afi_active_nego(peer, AFI_IP6));
|
||||
zlog_debug(
|
||||
"%pBP Update Group Hash: Lonesoul: %d ORF prefix: %u ORF old: %u max prefix out: %ju",
|
||||
peer, !!CHECK_FLAG(peer->flags, PEER_FLAG_LONESOUL),
|
||||
CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_RCV),
|
||||
CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_OLD_RCV),
|
||||
(intmax_t)CHECK_FLAG(peer->af_flags[afi][safi],
|
||||
PEER_FLAG_MAX_PREFIX_OUT));
|
||||
zlog_debug("%pBP Update Group Hash: Lonesoul: %d ORF prefix: %u max prefix out: %ju",
|
||||
peer, !!CHECK_FLAG(peer->flags, PEER_FLAG_LONESOUL),
|
||||
CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_RCV),
|
||||
(intmax_t)CHECK_FLAG(peer->af_flags[afi][safi],
|
||||
PEER_FLAG_MAX_PREFIX_OUT));
|
||||
zlog_debug(
|
||||
"%pBP Update Group Hash: local role: %u AIGP: %d SOO: %s",
|
||||
peer, peer->local_role,
|
||||
@ -637,11 +632,9 @@ static bool updgrp_hash_cmp(const void *p1, const void *p2)
|
||||
if ((afi == AFI_IP6) && (pe1->shared_network != pe2->shared_network))
|
||||
return false;
|
||||
|
||||
if ((CHECK_FLAG(pe1->flags, PEER_FLAG_LONESOUL)
|
||||
|| CHECK_FLAG(pe1->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_RCV)
|
||||
|| CHECK_FLAG(pe1->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_OLD_RCV))
|
||||
&& !sockunion_same(&pe1->su, &pe2->su))
|
||||
if ((CHECK_FLAG(pe1->flags, PEER_FLAG_LONESOUL) ||
|
||||
CHECK_FLAG(pe1->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_RCV)) &&
|
||||
!sockunion_same(&pe1->su, &pe2->su))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
@ -55,9 +55,8 @@
|
||||
#define PEER_UPDGRP_CAP_FLAGS (PEER_CAP_AS4_RCV)
|
||||
|
||||
#define PEER_UPDGRP_AF_CAP_FLAGS \
|
||||
(PEER_CAP_ORF_PREFIX_SM_RCV | PEER_CAP_ORF_PREFIX_SM_OLD_RCV \
|
||||
| PEER_CAP_ADDPATH_AF_TX_ADV | PEER_CAP_ADDPATH_AF_RX_RCV \
|
||||
| PEER_CAP_ENHE_AF_NEGO)
|
||||
(PEER_CAP_ORF_PREFIX_SM_RCV | PEER_CAP_ADDPATH_AF_TX_ADV | \
|
||||
PEER_CAP_ADDPATH_AF_RX_RCV | PEER_CAP_ENHE_AF_NEGO)
|
||||
|
||||
enum bpacket_attr_vec_type { BGP_ATTR_VEC_NH = 0, BGP_ATTR_VEC_MAX };
|
||||
|
||||
|
@ -12659,7 +12659,6 @@ static void bgp_show_peer_afi(struct vty *vty, struct peer *p, afi_t afi,
|
||||
int orf_pfx_count;
|
||||
json_object *json_af = NULL;
|
||||
json_object *json_prefA = NULL;
|
||||
json_object *json_prefB = NULL;
|
||||
json_object *json_addr = NULL;
|
||||
json_object *json_advmap = NULL;
|
||||
|
||||
@ -12702,37 +12701,13 @@ static void bgp_show_peer_afi(struct vty *vty, struct peer *p, afi_t afi,
|
||||
json_prefA);
|
||||
}
|
||||
|
||||
if (CHECK_FLAG(p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
|
||||
|| CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_OLD_RCV)
|
||||
|| CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_ADV)
|
||||
|| CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_OLD_RCV)) {
|
||||
json_object_int_add(json_af, "orfOldType",
|
||||
ORF_TYPE_PREFIX_OLD);
|
||||
json_prefB = json_object_new_object();
|
||||
bgp_show_peer_afi_orf_cap(
|
||||
vty, p, afi, safi, PEER_CAP_ORF_PREFIX_SM_ADV,
|
||||
PEER_CAP_ORF_PREFIX_RM_ADV,
|
||||
PEER_CAP_ORF_PREFIX_SM_OLD_RCV,
|
||||
PEER_CAP_ORF_PREFIX_RM_OLD_RCV, use_json,
|
||||
json_prefB);
|
||||
json_object_object_add(json_af, "orfOldPrefixList",
|
||||
json_prefB);
|
||||
}
|
||||
|
||||
if (CHECK_FLAG(p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
|
||||
|| CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_RCV)
|
||||
|| CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_OLD_RCV)
|
||||
|| CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_ADV)
|
||||
|| CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_RCV)
|
||||
|| CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_OLD_RCV))
|
||||
if (CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_ADV) ||
|
||||
CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_RCV) ||
|
||||
CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_ADV) ||
|
||||
CHECK_FLAG(p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_RCV))
|
||||
json_object_object_add(json_addr, "afDependentCap",
|
||||
json_af);
|
||||
else
|
||||
@ -13019,17 +12994,13 @@ static void bgp_show_peer_afi(struct vty *vty, struct peer *p, afi_t afi,
|
||||
} else {
|
||||
vty_out(vty, " Not part of any update group\n");
|
||||
}
|
||||
if (CHECK_FLAG(p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
|
||||
|| CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_RCV)
|
||||
|| CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_OLD_RCV)
|
||||
|| CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_ADV)
|
||||
|| CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_RCV)
|
||||
|| CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_OLD_RCV))
|
||||
if (CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_ADV) ||
|
||||
CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_RCV) ||
|
||||
CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_ADV) ||
|
||||
CHECK_FLAG(p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_RCV))
|
||||
vty_out(vty, " AF-dependant capabilities:\n");
|
||||
|
||||
if (CHECK_FLAG(p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
|
||||
@ -13048,22 +13019,6 @@ static void bgp_show_peer_afi(struct vty *vty, struct peer *p, afi_t afi,
|
||||
PEER_CAP_ORF_PREFIX_SM_RCV,
|
||||
PEER_CAP_ORF_PREFIX_RM_RCV, use_json, NULL);
|
||||
}
|
||||
if (CHECK_FLAG(p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
|
||||
|| CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_OLD_RCV)
|
||||
|| CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_ADV)
|
||||
|| CHECK_FLAG(p->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_OLD_RCV)) {
|
||||
vty_out(vty,
|
||||
" Outbound Route Filter (ORF) type (%d) Prefix-list:\n",
|
||||
ORF_TYPE_PREFIX_OLD);
|
||||
bgp_show_peer_afi_orf_cap(
|
||||
vty, p, afi, safi, PEER_CAP_ORF_PREFIX_SM_ADV,
|
||||
PEER_CAP_ORF_PREFIX_RM_ADV,
|
||||
PEER_CAP_ORF_PREFIX_SM_OLD_RCV,
|
||||
PEER_CAP_ORF_PREFIX_RM_OLD_RCV, use_json, NULL);
|
||||
}
|
||||
|
||||
snprintf(orf_pfx_name, sizeof(orf_pfx_name), "%s.%d.%d",
|
||||
p->host, afi, safi);
|
||||
|
17
bgpd/bgpd.c
17
bgpd/bgpd.c
@ -6964,11 +6964,8 @@ static void peer_prefix_list_update(struct prefix_list *plist)
|
||||
*/
|
||||
if (CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_ADV) &&
|
||||
(CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_RCV) ||
|
||||
CHECK_FLAG(
|
||||
peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_OLD_RCV)))
|
||||
CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_RCV))
|
||||
peer_clear_soft(
|
||||
peer, afi, safi,
|
||||
BGP_CLEAR_SOFT_IN_ORF_PREFIX);
|
||||
@ -7935,19 +7932,15 @@ int peer_clear_soft(struct peer *peer, afi_t afi, safi_t safi,
|
||||
|
||||
if (stype == BGP_CLEAR_SOFT_IN_ORF_PREFIX) {
|
||||
if (CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_SM_ADV)
|
||||
&& (CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_RCV)
|
||||
|| CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_OLD_RCV))) {
|
||||
PEER_CAP_ORF_PREFIX_SM_ADV) &&
|
||||
CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_RCV)) {
|
||||
struct bgp_filter *filter = &peer->filter[afi][safi];
|
||||
uint8_t prefix_type;
|
||||
|
||||
if (CHECK_FLAG(peer->af_cap[afi][safi],
|
||||
PEER_CAP_ORF_PREFIX_RM_RCV))
|
||||
prefix_type = ORF_TYPE_PREFIX;
|
||||
else
|
||||
prefix_type = ORF_TYPE_PREFIX_OLD;
|
||||
|
||||
if (filter->plist[FILTER_IN].plist) {
|
||||
if (CHECK_FLAG(peer->af_sflags[afi][safi],
|
||||
|
@ -1280,8 +1280,6 @@ struct peer {
|
||||
#define PEER_CAP_ORF_PREFIX_RM_ADV (1U << 1) /* receive-mode advertised */
|
||||
#define PEER_CAP_ORF_PREFIX_SM_RCV (1U << 2) /* send-mode received */
|
||||
#define PEER_CAP_ORF_PREFIX_RM_RCV (1U << 3) /* receive-mode received */
|
||||
#define PEER_CAP_ORF_PREFIX_SM_OLD_RCV (1U << 4) /* send-mode received */
|
||||
#define PEER_CAP_ORF_PREFIX_RM_OLD_RCV (1U << 5) /* receive-mode received */
|
||||
#define PEER_CAP_RESTART_AF_RCV (1U << 6) /* graceful restart afi/safi received */
|
||||
#define PEER_CAP_RESTART_AF_PRESERVE_RCV (1U << 7) /* graceful restart afi/safi F-bit received */
|
||||
#define PEER_CAP_ADDPATH_AF_TX_ADV (1U << 8) /* addpath tx advertised */
|
||||
|
Loading…
Reference in New Issue
Block a user