summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaria Matejka <mq@ucw.cz>2023-09-27 12:51:55 +0200
committerMaria Matejka <mq@ucw.cz>2023-09-27 20:18:46 +0200
commit8ad9c4bb339172d445d1346876b2c9f3c27199c1 (patch)
tree680654b1b25895b89ec685496bebeb44cbe2f703
parenta4adb09f5a5c3806488fb121eafc0e6c969135e7 (diff)
BGP config: Splitting Route Refresh and Enhanced Route Refresh
Both toggles are on by default but if some implementation needs one or another to be switched off separately, then it's possible now.
-rw-r--r--doc/bird.sgml19
-rw-r--r--proto/bgp/bgp.h1
-rw-r--r--proto/bgp/config.Y4
-rw-r--r--proto/bgp/packets.c2
4 files changed, 18 insertions, 8 deletions
diff --git a/doc/bird.sgml b/doc/bird.sgml
index 449a69de..09da89df 100644
--- a/doc/bird.sgml
+++ b/doc/bird.sgml
@@ -2799,13 +2799,20 @@ using the following configuration parameters:
changes its import filter, or if there is suspicion of inconsistency) it
is necessary to do a new complete route exchange. BGP protocol extension
Route Refresh (<rfc id="2918">) allows BGP speaker to request
- re-advertisement of all routes from its neighbor. BGP protocol
- extension Enhanced Route Refresh (<rfc id="7313">) specifies explicit
- begin and end for such exchanges, therefore the receiver can remove
- stale routes that were not advertised during the exchange. This option
- specifies whether BIRD advertises these capabilities and supports
+ re-advertisement of all routes from its neighbor. This option
+ specifies whether BIRD advertises this capability and supports
related procedures. Note that even when disabled, BIRD can send route
- refresh requests. Default: on.
+ refresh requests. Disabling Route Refresh also disables Enhanced Route Refresh.
+ Default: on.
+
+ <tag><label id="bgp-enable-enhanced-route-refresh">enable enhanced route refresh <m/switch/</tag>
+ BGP protocol extension Enhanced Route Refresh (<rfc id="7313">) specifies explicit
+ begin and end for Route Refresh (see previous option),
+ therefore the receiver can remove
+ stale routes that were not advertised during the exchange. This option
+ specifies whether BIRD advertises this capability and supports
+ related procedures.
+ Default: on.
<tag><label id="bgp-graceful-restart">graceful restart <m/switch/|aware</tag>
When a BGP speaker restarts or crashes, neighbors will discard all
diff --git a/proto/bgp/bgp.h b/proto/bgp/bgp.h
index c11433ec..1ba3de5e 100644
--- a/proto/bgp/bgp.h
+++ b/proto/bgp/bgp.h
@@ -96,6 +96,7 @@ struct bgp_config {
u32 default_med; /* Default value for MULTI_EXIT_DISC attribute */
int capabilities; /* Enable capability handshake [RFC 5492] */
int enable_refresh; /* Enable local support for route refresh [RFC 2918] */
+ int enable_enhanced_refresh; /* Enable local support for enhanced route refresh [RFC 7313] */
int enable_as4; /* Enable local support for 4B AS numbers [RFC 6793] */
int enable_extended_messages; /* Enable local support for extended messages [RFC 8654] */
int enable_hostname; /* Enable local support for hostname [draft] */
diff --git a/proto/bgp/config.Y b/proto/bgp/config.Y
index d9ff24d8..f589fd84 100644
--- a/proto/bgp/config.Y
+++ b/proto/bgp/config.Y
@@ -24,7 +24,7 @@ CF_KEYWORDS(BGP, LOCAL, NEIGHBOR, AS, HOLD, TIME, CONNECT, RETRY, KEEPALIVE,
BGP_AGGREGATOR, BGP_COMMUNITY, BGP_EXT_COMMUNITY, BGP_LARGE_COMMUNITY,
SOURCE, ADDRESS, PASSWORD, RR, RS, CLIENT, CLUSTER, ID, AS4, ADVERTISE,
IPV4, CAPABILITIES, LIMIT, PASSIVE, PREFER, OLDER, MISSING, LLADDR,
- DROP, IGNORE, ROUTE, REFRESH, INTERPRET, COMMUNITIES, BGP_ORIGINATOR_ID,
+ DROP, IGNORE, ENHANCED, ROUTE, REFRESH, INTERPRET, COMMUNITIES, BGP_ORIGINATOR_ID,
BGP_CLUSTER_LIST, IGP, TABLE, GATEWAY, DIRECT, RECURSIVE, MED, TTL,
SECURITY, DETERMINISTIC, SECONDARY, ALLOW, BFD, ADD, PATHS, RX, TX,
GRACEFUL, RESTART, AWARE, CHECK, LINK, PORT, EXTENDED, MESSAGES, SETKEY,
@@ -62,6 +62,7 @@ bgp_proto_start: proto_start BGP {
BGP_CFG->error_delay_time_min = 60;
BGP_CFG->error_delay_time_max = 300;
BGP_CFG->enable_refresh = 1;
+ BGP_CFG->enable_enhanced_refresh = 1;
BGP_CFG->enable_as4 = 1;
BGP_CFG->enable_hostname = 0;
BGP_CFG->capabilities = 2;
@@ -185,6 +186,7 @@ bgp_proto:
| bgp_proto DISABLE AFTER ERROR bool ';' { BGP_CFG->disable_after_error = $5; }
| bgp_proto DISABLE AFTER CEASE bgp_cease_mask ';' { BGP_CFG->disable_after_cease = $5; }
| bgp_proto ENABLE ROUTE REFRESH bool ';' { BGP_CFG->enable_refresh = $5; }
+ | bgp_proto ENABLE ENHANCED ROUTE REFRESH bool ';' { BGP_CFG->enable_enhanced_refresh = $6; }
| bgp_proto ENABLE AS4 bool ';' { BGP_CFG->enable_as4 = $4; }
| bgp_proto ENABLE EXTENDED MESSAGES bool ';' { BGP_CFG->enable_extended_messages = $5; }
| bgp_proto ADVERTISE HOSTNAME bool ';' { BGP_CFG->enable_hostname = $4; }
diff --git a/proto/bgp/packets.c b/proto/bgp/packets.c
index dc52e805..fd7828f0 100644
--- a/proto/bgp/packets.c
+++ b/proto/bgp/packets.c
@@ -245,7 +245,7 @@ bgp_prepare_capabilities(struct bgp_conn *conn)
caps->as4_support = p->cf->enable_as4;
caps->ext_messages = p->cf->enable_extended_messages;
caps->route_refresh = p->cf->enable_refresh;
- caps->enhanced_refresh = p->cf->enable_refresh;
+ caps->enhanced_refresh = p->cf->enable_refresh && p->cf->enable_enhanced_refresh;
caps->role = p->cf->local_role;
if (caps->as4_support)