diff options
| -rw-r--r-- | data/templates/frr/bgpd.frr.j2 | 14 | ||||
| -rw-r--r-- | interface-definitions/include/bgp/neighbor-capability.xml.i | 6 | ||||
| -rw-r--r-- | interface-definitions/include/bgp/neighbor-path-attribute.xml.i | 12 | ||||
| -rwxr-xr-x | smoketest/scripts/cli/test_protocols_bgp.py | 16 | 
4 files changed, 43 insertions, 5 deletions
| diff --git a/data/templates/frr/bgpd.frr.j2 b/data/templates/frr/bgpd.frr.j2 index e1c102e16..d724dbd79 100644 --- a/data/templates/frr/bgpd.frr.j2 +++ b/data/templates/frr/bgpd.frr.j2 @@ -29,13 +29,14 @@   neighbor {{ neighbor }} bfd profile {{ config.bfd.profile }}  {%     endif %}  {% endif %} -{% if config.capability is vyos_defined %} -{%     if config.capability.dynamic is vyos_defined %} +{% if config.capability.dynamic is vyos_defined %}   neighbor {{ neighbor }} capability dynamic -{%     endif %} -{%     if config.capability.extended_nexthop is vyos_defined %} +{% endif %} +{% if config.capability.extended_nexthop is vyos_defined %}   neighbor {{ neighbor }} capability extended-nexthop -{%     endif %} +{% endif %} +{% if config.capability.software_version is vyos_defined %} + neighbor {{ neighbor }} capability software-version  {% endif %}  {% if config.description is vyos_defined %}   neighbor {{ neighbor }} description {{ config.description }} @@ -77,6 +78,9 @@  {% if config.path_attribute.discard is vyos_defined %}   neighbor {{ neighbor }} path-attribute discard {{ config.path_attribute.discard }}  {% endif %} +{% if config.path_attribute.treat_as_withdraw is vyos_defined %} + neighbor {{ neighbor }} path-attribute treat-as-withdraw {{ config.path_attribute.treat_as_withdraw }} +{% endif %}  {% if config.port is vyos_defined %}   neighbor {{ neighbor }} port {{ config.port }}  {% endif %} diff --git a/interface-definitions/include/bgp/neighbor-capability.xml.i b/interface-definitions/include/bgp/neighbor-capability.xml.i index 2bbfadf1f..c5ed3c840 100644 --- a/interface-definitions/include/bgp/neighbor-capability.xml.i +++ b/interface-definitions/include/bgp/neighbor-capability.xml.i @@ -16,6 +16,12 @@          <valueless/>        </properties>      </leafNode> +    <leafNode name="software-version"> +      <properties> +        <help>Advertise Software Version capability to the peer</help> +        <valueless/> +      </properties> +    </leafNode>    </children>  </node>  <!-- include end --> diff --git a/interface-definitions/include/bgp/neighbor-path-attribute.xml.i b/interface-definitions/include/bgp/neighbor-path-attribute.xml.i index f4f2fcfa9..30568d8c6 100644 --- a/interface-definitions/include/bgp/neighbor-path-attribute.xml.i +++ b/interface-definitions/include/bgp/neighbor-path-attribute.xml.i @@ -16,6 +16,18 @@          </constraint>        </properties>      </leafNode> +    <leafNode name="treat-as-withdraw"> +      <properties> +        <help>Treat-as-withdraw any incoming BGP UPDATE messages that contain the specified attribute</help> +        <valueHelp> +          <format>u32:1-255</format> +          <description>Attribute number</description> +        </valueHelp> +        <constraint> +          <validator name="numeric" argument="--range 1-255"/> +        </constraint> +      </properties> +    </leafNode>    </children>  </node>  <!-- include end --> diff --git a/smoketest/scripts/cli/test_protocols_bgp.py b/smoketest/scripts/cli/test_protocols_bgp.py index 77952d8d9..967958cab 100755 --- a/smoketest/scripts/cli/test_protocols_bgp.py +++ b/smoketest/scripts/cli/test_protocols_bgp.py @@ -44,6 +44,7 @@ neighbor_config = {          'bfd'              : '',          'cap_dynamic'      : '',          'cap_ext_next'     : '', +        'cap_ext_sver'     : '',          'remote_as'        : '100',          'adv_interv'       : '400',          'passive'          : '', @@ -71,6 +72,7 @@ neighbor_config = {          'pfx_list_out'     : prefix_list_out,          'no_send_comm_std' : '',          'local_role'       : 'rs-client', +        'p_attr_taw'       : '200',          },      '192.0.2.3' : {          'advertise_map'    : route_map_in, @@ -87,6 +89,7 @@ neighbor_config = {          'exist_map'        : route_map_out,          'cap_dynamic'      : '',          'cap_ext_next'     : '', +        'cap_ext_sver'     : '',          'remote_as'        : '123',          'adv_interv'       : '400',          'passive'          : '', @@ -137,6 +140,7 @@ peer_group_config = {          'remote_as'        : '111',          'graceful_rst_no'  : '',          'port'             : '667', +        'p_attr_taw'       : '126',          },      'foo-bar' : {          'advertise_map'    : route_map_in, @@ -217,6 +221,8 @@ class TestProtocolsBGP(VyOSUnitTestSHIM.TestCase):              self.assertIn(f' neighbor {peer} capability dynamic', frrconfig)          if 'cap_ext_next' in peer_config:              self.assertIn(f' neighbor {peer} capability extended-nexthop', frrconfig) +        if 'cap_ext_sver' in peer_config: +            self.assertIn(f' neighbor {peer} capability software-version', frrconfig)          if 'description' in peer_config:              self.assertIn(f' neighbor {peer} description {peer_config["description"]}', frrconfig)          if 'no_cap_nego' in peer_config: @@ -264,6 +270,8 @@ class TestProtocolsBGP(VyOSUnitTestSHIM.TestCase):              self.assertIn(f' neighbor {peer} addpath-tx-all-paths', frrconfig)          if 'p_attr_discard' in peer_config:              self.assertIn(f' neighbor {peer} path-attribute discard {peer_config["p_attr_discard"]}', frrconfig) +        if 'p_attr_taw' in peer_config: +            self.assertIn(f' neighbor {peer} path-attribute treat-as-withdraw {peer_config["p_attr_taw"]}', frrconfig)          if 'addpath_per_as' in peer_config:              self.assertIn(f' neighbor {peer} addpath-tx-bestpath-per-AS', frrconfig)          if 'advertise_map' in peer_config: @@ -390,6 +398,8 @@ class TestProtocolsBGP(VyOSUnitTestSHIM.TestCase):                  self.cli_set(base_path + ['neighbor', peer, 'capability', 'dynamic'])              if 'cap_ext_next' in peer_config:                  self.cli_set(base_path + ['neighbor', peer, 'capability', 'extended-nexthop']) +            if 'cap_ext_sver' in peer_config: +                self.cli_set(base_path + ['neighbor', peer, 'capability', 'software-version'])              if 'description' in peer_config:                  self.cli_set(base_path + ['neighbor', peer, 'description', peer_config["description"]])              if 'no_cap_nego' in peer_config: @@ -424,6 +434,8 @@ class TestProtocolsBGP(VyOSUnitTestSHIM.TestCase):                  self.cli_set(base_path + ['neighbor', peer, 'update-source', peer_config["update_src"]])              if 'p_attr_discard' in peer_config:                  self.cli_set(base_path + ['neighbor', peer, 'path-attribute', 'discard', peer_config["p_attr_discard"]]) +            if 'p_attr_taw' in peer_config: +                self.cli_set(base_path + ['neighbor', peer, 'path-attribute', 'treat-as-withdraw', peer_config["p_attr_taw"]])              if 'route_map_in' in peer_config:                  self.cli_set(base_path + ['neighbor', peer, 'address-family', afi, 'route-map', 'import', peer_config["route_map_in"]])              if 'route_map_out' in peer_config: @@ -490,6 +502,8 @@ class TestProtocolsBGP(VyOSUnitTestSHIM.TestCase):                  self.cli_set(base_path + ['peer-group', peer_group, 'capability', 'dynamic'])              if 'cap_ext_next' in config:                  self.cli_set(base_path + ['peer-group', peer_group, 'capability', 'extended-nexthop']) +            if 'cap_ext_sver' in config: +                self.cli_set(base_path + ['peer-group', peer_group, 'capability', 'software-version'])              if 'description' in config:                  self.cli_set(base_path + ['peer-group', peer_group, 'description', config["description"]])              if 'no_cap_nego' in config: @@ -544,6 +558,8 @@ class TestProtocolsBGP(VyOSUnitTestSHIM.TestCase):                  self.cli_set(base_path + ['peer-group', peer_group, 'disable-connected-check'])              if 'p_attr_discard' in config:                  self.cli_set(base_path + ['peer-group', peer_group, 'path-attribute', 'discard', config["p_attr_discard"]]) +            if 'p_attr_taw' in config: +                self.cli_set(base_path + ['peer-group', peer_group, 'path-attribute', 'treat-as-withdraw', config["p_attr_taw"]])              # Conditional advertisement              if 'advertise_map' in config: | 
