From 8a75e92d9172309f76b3a292f4419d68b5ed5eb8 Mon Sep 17 00:00:00 2001 From: Kyle McClammy Date: Sat, 4 Feb 2023 00:54:35 +0000 Subject: T4817 added support for RFC 9234 --- data/templates/frr/bgpd.frr.j2 | 5 +++ .../include/bgp/neighbor-local-role.xml.i | 42 ++++++++++++++++++++++ .../include/bgp/protocol-common-config.xml.i | 1 + src/conf_mode/protocols_bgp.py | 5 +++ 4 files changed, 53 insertions(+) create mode 100644 interface-definitions/include/bgp/neighbor-local-role.xml.i diff --git a/data/templates/frr/bgpd.frr.j2 b/data/templates/frr/bgpd.frr.j2 index 85c3339bf..18192deef 100644 --- a/data/templates/frr/bgpd.frr.j2 +++ b/data/templates/frr/bgpd.frr.j2 @@ -9,6 +9,11 @@ {% if config.remote_as is vyos_defined %} neighbor {{ neighbor }} remote-as {{ config.remote_as }} {% endif %} +{% if config.local_role is vyos_defined %} +{% for role, strict in config.local_role.items() %} + neighbor {{ neighbor }} local-role {{ role }} {{ 'strict-mode' if strict }} +{% endfor %} +{% endif %} {% if config.interface.remote_as is vyos_defined %} neighbor {{ neighbor }} interface remote-as {{ config.interface.remote_as }} {% endif %} diff --git a/interface-definitions/include/bgp/neighbor-local-role.xml.i b/interface-definitions/include/bgp/neighbor-local-role.xml.i new file mode 100644 index 000000000..3f15802b1 --- /dev/null +++ b/interface-definitions/include/bgp/neighbor-local-role.xml.i @@ -0,0 +1,42 @@ + + + + Local role for this bgp session. + + customer peer provider rs-client rs-server + + + customer + Using Transit + + + peer + Public/Private Peering + + + provider + Providing Transit + + + rs-client + RS Client + + + rs-server + Route Server + + + (provider|rs-server|rs-client|customer|peer) + + Invalid Option + + + + + Your neighbor must send you Capability with the value of his role. Otherwise, a Role Mismatch Notification will be sent. + + + + + + diff --git a/interface-definitions/include/bgp/protocol-common-config.xml.i b/interface-definitions/include/bgp/protocol-common-config.xml.i index 366630f78..d88c29276 100644 --- a/interface-definitions/include/bgp/protocol-common-config.xml.i +++ b/interface-definitions/include/bgp/protocol-common-config.xml.i @@ -1004,6 +1004,7 @@ #include + #include #include diff --git a/src/conf_mode/protocols_bgp.py b/src/conf_mode/protocols_bgp.py index c410258ee..4f05957fa 100755 --- a/src/conf_mode/protocols_bgp.py +++ b/src/conf_mode/protocols_bgp.py @@ -235,6 +235,11 @@ def verify(bgp): raise ConfigError(f'Specified peer-group "{peer_group}" for '\ f'neighbor "{neighbor}" does not exist!') + if 'local_role' in peer_config: + #Ensure Local Role has only one value. + if len(peer_config['local_role']) > 1: + raise ConfigError(f'Only one local role can be specified for peer "{peer}"!') + if 'local_as' in peer_config: if len(peer_config['local_as']) > 1: raise ConfigError(f'Only one local-as number can be specified for peer "{peer}"!') -- cgit v1.2.3 From 55bf752570019e1b3b756b25f500cd9bf17efb01 Mon Sep 17 00:00:00 2001 From: Kyle McClammy Date: Sat, 4 Feb 2023 02:09:39 +0000 Subject: T4817, Corrected formatting. --- data/templates/frr/bgpd.frr.j2 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/data/templates/frr/bgpd.frr.j2 b/data/templates/frr/bgpd.frr.j2 index 18192deef..b8692f344 100644 --- a/data/templates/frr/bgpd.frr.j2 +++ b/data/templates/frr/bgpd.frr.j2 @@ -9,10 +9,10 @@ {% if config.remote_as is vyos_defined %} neighbor {{ neighbor }} remote-as {{ config.remote_as }} {% endif %} -{% if config.local_role is vyos_defined %} -{% for role, strict in config.local_role.items() %} - neighbor {{ neighbor }} local-role {{ role }} {{ 'strict-mode' if strict }} -{% endfor %} +{% if config.local_role is vyos_defined %} +{% for role, strict in config.local_role.items() %} + neighbor {{ neighbor }} local-role {{ role }} {{ 'strict-mode' if strict }} +{% endfor %} {% endif %} {% if config.interface.remote_as is vyos_defined %} neighbor {{ neighbor }} interface remote-as {{ config.interface.remote_as }} -- cgit v1.2.3