]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
BGP: Minor improvements to BGP roles
authorOndrej Zajicek <santiago@crfreenet.org>
Tue, 12 Jul 2022 13:03:17 +0000 (15:03 +0200)
committerOndrej Zajicek <santiago@crfreenet.org>
Tue, 12 Jul 2022 13:03:17 +0000 (15:03 +0200)
Add support for bgp_otc in filters and warning for configuration
inside confederations.

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

index c1ce1b91857a60b4a3e75e01442bad0710481dd7..a0d9c405cb0846b535e68898c95084b8b4621cd2 100644 (file)
@@ -2829,7 +2829,8 @@ using the following configuration parameters:
        leaks created by third parties.
 
        This option is valid for EBGP sessions, but it is not recommended to be
-       used within AS confederations.
+       used within AS confederations (which would require manual filtering of
+       <cf/bgp_otc/ attribute on confederation boundaries).
 
        Possible <cf><m/role-name/</cf> values are: <cf/provider/,
        <cf/rs_server/, <cf/rs_client/, <cf/customer/ and <cf/peer/.
index 3b28a338e1769c44d36cb7415fa208ad5d060567..0f06746f65e2d8e618795b482e5cbe417c6d98ab 100644 (file)
@@ -1987,6 +1987,9 @@ bgp_postconfig(struct proto_config *CF)
   if (internal && (cf->local_role != BGP_ROLE_UNDEFINED))
     cf_error("Local role cannot be set on IBGP sessions");
 
+  if (interior && (cf->local_role != BGP_ROLE_UNDEFINED))
+    log(L_WARN "BGP roles are not recommended to be used within AS confederations");
+
   if (cf->require_roles && (cf->local_role == BGP_ROLE_UNDEFINED))
     cf_error("Local role must be set if roles are required");
 
@@ -2357,7 +2360,7 @@ bgp_format_role_name(u8 role)
 {
   static const char *bgp_role_names[] = { "provider", "rs_server", "rs_client", "customer", "peer" };
   if (role == BGP_ROLE_UNDEFINED) return "undefined";
-  if (role < 5) return bgp_role_names[role];
+  if (role < ARRAY_SIZE(bgp_role_names)) return bgp_role_names[role];
   return "?";
 }
 
index a00aa156b959912738b85ac6126aad7f03a70f5f..cb410a5e85c266155d8b9f755b1a0882a34c8753 100644 (file)
@@ -32,7 +32,7 @@ CF_KEYWORDS(BGP, LOCAL, NEIGHBOR, AS, HOLD, TIME, CONNECT, RETRY, KEEPALIVE,
        LIVED, STALE, IMPORT, IBGP, EBGP, MANDATORY, INTERNAL, EXTERNAL, SETS,
        DYNAMIC, RANGE, NAME, DIGITS, BGP_AIGP, AIGP, ORIGINATE, COST, ENFORCE,
        FIRST, FREE, VALIDATE, BASE, ROLE, ROLES, PEER, PROVIDER, CUSTOMER,
-       RS_SERVER, RS_CLIENT, REQUIRE)
+       RS_SERVER, RS_CLIENT, REQUIRE, BGP_OTC)
 
 %type <i> bgp_nh
 %type <i32> bgp_afi
@@ -355,6 +355,8 @@ dynamic_attr: BGP_AIGP
        { $$ = f_new_dynamic_attr(EAF_TYPE_OPAQUE, T_ENUM_EMPTY, EA_CODE(PROTOCOL_BGP, BA_AIGP)); } ;
 dynamic_attr: BGP_LARGE_COMMUNITY
        { $$ = f_new_dynamic_attr(EAF_TYPE_LC_SET, T_LCLIST, EA_CODE(PROTOCOL_BGP, BA_LARGE_COMMUNITY)); } ;
+dynamic_attr: BGP_OTC
+       { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(PROTOCOL_BGP, BA_ONLY_TO_CUSTOMER)); } ;