]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
BGP config: Splitting Route Refresh and Enhanced Route Refresh
authorMaria Matejka <mq@ucw.cz>
Wed, 27 Sep 2023 10:51:55 +0000 (12:51 +0200)
committerMaria Matejka <mq@ucw.cz>
Wed, 27 Sep 2023 18:18:46 +0000 (20:18 +0200)
Both toggles are on by default but if some implementation needs one or
another to be switched off separately, then it's possible now.

doc/bird.sgml
proto/bgp/bgp.h
proto/bgp/config.Y
proto/bgp/packets.c

index 449a69deb58e1b7cd8ea7c1ec6b1d99c73e859c2..09da89df5fc36252d05ce6d5f1960a27992e20cb 100644 (file)
@@ -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
index c11433ecc68fd2c5f066aec17e9a49a18eae85cc..1ba3de5e2e4e899d827f7b64a45ee33f9add225e 100644 (file)
@@ -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] */
index d9ff24d82b71f6ccecaab793a77ada3381ce80f1..f589fd8402542fba556fc1caec6f2eb9192acf4b 100644 (file)
@@ -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; }
index dc52e8051de656a712a757b94e331a08d712efa6..fd7828f0c49f9ced5fc5707a57fdf967f5995751 100644 (file)
@@ -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)