Merge pull request #13955 from opensourcerouting/fix/deprecate_orf_bgpd_130

bgpd: Deprecate Prestandard Outbound Route Filtering capability
This commit is contained in:
Russ White 2023-07-11 10:18:19 -04:00 committed by GitHub
commit 684ab69ca2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 36 additions and 141 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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],

View File

@ -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 */