0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-22 17:51:53 +00:00

BGP: Add 'allow bgp_med' option for EBGP sessions

This option allows to treat bgp_med as regular transitive attribute
on EBGP sessions (without hacks in filters).

Minor changes from committer.
This commit is contained in:
Trisha Biswas 2023-04-14 04:28:37 +02:00 committed by Ondrej Zajicek
parent dc139fb643
commit 9e44ace392
4 changed files with 14 additions and 5 deletions

View File

@ -2625,12 +2625,19 @@ using the following configuration parameters:
keeps MED attribute). Default: disabled. keeps MED attribute). Default: disabled.
<tag><label id="bgp-allow-local-pref">allow bgp_local_pref <m/switch/</tag> <tag><label id="bgp-allow-local-pref">allow bgp_local_pref <m/switch/</tag>
A standard BGP implementation do not send the Local Preference attribute Standard BGP implementations do not send the Local Preference attribute
to eBGP neighbors and ignore this attribute if received from eBGP to EBGP neighbors and ignore this attribute if received from EBGP
neighbors, as per <rfc id="4271">. When this option is enabled on an neighbors, as per <rfc id="4271">. When this option is enabled on an
eBGP session, this attribute will be sent to and accepted from the peer, EBGP session, this attribute will be sent to and accepted from the peer,
which is useful for example if you have a setup like in <rfc id="7938">. which is useful for example if you have a setup like in <rfc id="7938">.
The option does not affect iBGP sessions. Default: off. The option does not affect IBGP sessions. Default: off.
<tag><label id="bgp-allow-med">allow bgp_med <m/switch/</tag>
Standard BGP implementations do not propagate the MULTI_EXIT_DESC
attribute unless it is configured locally. When this option is enabled
on an EBGP session, this attribute will be sent to the peer regardless,
which is useful for example if you have a setup like in <rfc id="7938">.
The option does not affect IBGP sessions. Default: off.
<tag><label id="bgp-allow-local-as">allow local as [<m/number/]</tag> <tag><label id="bgp-allow-local-as">allow local as [<m/number/]</tag>
BGP prevents routing loops by rejecting received routes with the local BGP prevents routing loops by rejecting received routes with the local

View File

@ -1834,7 +1834,7 @@ bgp_update_attrs(struct bgp_proto *p, struct bgp_channel *c, rte *e, ea_list *at
/* MULTI_EXIT_DESC attribute - accept only if set in export filter */ /* MULTI_EXIT_DESC attribute - accept only if set in export filter */
a = bgp_find_attr(attrs0, BA_MULTI_EXIT_DISC); a = bgp_find_attr(attrs0, BA_MULTI_EXIT_DISC);
if (a && !(a->fresh)) if (a && !a->fresh && !p->cf->allow_med)
bgp_unset_attr(&attrs, pool, BA_MULTI_EXIT_DISC); bgp_unset_attr(&attrs, pool, BA_MULTI_EXIT_DISC);
} }

View File

@ -108,6 +108,7 @@ struct bgp_config {
int interpret_communities; /* Hardwired handling of well-known communities */ int interpret_communities; /* Hardwired handling of well-known communities */
int allow_local_as; /* Allow that number of local ASNs in incoming AS_PATHs */ int allow_local_as; /* Allow that number of local ASNs in incoming AS_PATHs */
int allow_local_pref; /* Allow LOCAL_PREF in EBGP sessions */ int allow_local_pref; /* Allow LOCAL_PREF in EBGP sessions */
int allow_med; /* Allow BGP_MED in EBGP sessions */
int allow_as_sets; /* Allow AS_SETs in incoming AS_PATHs */ int allow_as_sets; /* Allow AS_SETs in incoming AS_PATHs */
int enforce_first_as; /* Enable check for neighbor AS as first AS in AS_PATH */ int enforce_first_as; /* Enable check for neighbor AS as first AS in AS_PATH */
int gr_mode; /* Graceful restart mode (BGP_GR_*) */ int gr_mode; /* Graceful restart mode (BGP_GR_*) */

View File

@ -199,6 +199,7 @@ bgp_proto:
| bgp_proto ALLOW LOCAL AS ';' { BGP_CFG->allow_local_as = -1; } | bgp_proto ALLOW LOCAL AS ';' { BGP_CFG->allow_local_as = -1; }
| bgp_proto ALLOW LOCAL AS expr ';' { BGP_CFG->allow_local_as = $5; } | bgp_proto ALLOW LOCAL AS expr ';' { BGP_CFG->allow_local_as = $5; }
| bgp_proto ALLOW BGP_LOCAL_PREF bool ';' { BGP_CFG->allow_local_pref = $4; } | bgp_proto ALLOW BGP_LOCAL_PREF bool ';' { BGP_CFG->allow_local_pref = $4; }
| bgp_proto ALLOW BGP_MED bool ';' { BGP_CFG->allow_med = $4; }
| bgp_proto ALLOW AS SETS bool ';' { BGP_CFG->allow_as_sets = $5; } | bgp_proto ALLOW AS SETS bool ';' { BGP_CFG->allow_as_sets = $5; }
| bgp_proto GRACEFUL RESTART bool ';' { BGP_CFG->gr_mode = $4; } | bgp_proto GRACEFUL RESTART bool ';' { BGP_CFG->gr_mode = $4; }
| bgp_proto GRACEFUL RESTART AWARE ';' { BGP_CFG->gr_mode = BGP_GR_AWARE; } | bgp_proto GRACEFUL RESTART AWARE ';' { BGP_CFG->gr_mode = BGP_GR_AWARE; }