summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2021-09-04 10:18:19 +0200
committerChristian Poessinger <christian@poessinger.com>2021-09-04 10:21:28 +0200
commitdd210c92beeffae07f26dc72ab51d9a93219b582 (patch)
treeb00879af93b5e71fd8b7acaa69f650b69c25f6c5
parent0f6e1c99c7d5a38006542b074f0718f8f2e01cec (diff)
downloadvyos-1x-dd210c92beeffae07f26dc72ab51d9a93219b582.tar.gz
vyos-1x-dd210c92beeffae07f26dc72ab51d9a93219b582.zip
bgp: T3798: "replace-as" option can only be used when "no-prepend" is defined
Commit 5f1c1ae4 ("bgp: T3798: add support for neighbor local-as <n> replace-as") added support for a new CLI option when the local-as is changed for a specified neighbor or peer-group. There was an error in the CLI / design as the "replace-as" option can only be used when "no-prepend" is defined. Thus "no-prepend" became a <node> and the new "replace-as" leafNode is now a child of "no-prepend".
-rw-r--r--data/templates/frr/bgpd.frr.tmpl4
-rw-r--r--interface-definitions/include/bgp/neighbor-local-as.xml.i19
-rwxr-xr-xsmoketest/scripts/cli/test_protocols_bgp.py6
-rwxr-xr-xsrc/conf_mode/protocols_bgp.py4
4 files changed, 16 insertions, 17 deletions
diff --git a/data/templates/frr/bgpd.frr.tmpl b/data/templates/frr/bgpd.frr.tmpl
index 4ac2127cb..987b922da 100644
--- a/data/templates/frr/bgpd.frr.tmpl
+++ b/data/templates/frr/bgpd.frr.tmpl
@@ -46,9 +46,9 @@
neighbor {{ neighbor }} {{ graceful_restart }}
{% endif %}
{% if config.local_as is defined and config.local_as is not none %}
-{% for local_asn, local_asn_config in config.local_as.items() %}
+{% for local_as, local_as_config in config.local_as.items() %}
{# There can be only one local-as value, this is checked in the Python code #}
- neighbor {{ neighbor }} local-as {{ local_asn }} {{ 'no-prepend' if local_asn_config.no_prepend is defined }} {{ 'replace-as' if local_asn_config.replace_as is defined }}
+ neighbor {{ neighbor }} local-as {{ local_as }} {{ 'no-prepend' if local_as_config.no_prepend is defined }} {{ 'replace-as' if local_as_config.no_prepend is defined and local_as_config.no_prepend.replace_as is defined }}
{% endfor %}
{% endif %}
{% if config.override_capability is defined %}
diff --git a/interface-definitions/include/bgp/neighbor-local-as.xml.i b/interface-definitions/include/bgp/neighbor-local-as.xml.i
index 8cf0167fd..8868e3093 100644
--- a/interface-definitions/include/bgp/neighbor-local-as.xml.i
+++ b/interface-definitions/include/bgp/neighbor-local-as.xml.i
@@ -11,18 +11,19 @@
</constraint>
</properties>
<children>
- <leafNode name="no-prepend">
+ <node name="no-prepend">
<properties>
<help>Disable prepending local-as from/to updates for eBGP peers</help>
- <valueless/>
</properties>
- </leafNode>
- <leafNode name="replace-as">
- <properties>
- <help>Prepend only local-as from/to updates for eBGP peers</help>
- <valueless/>
- </properties>
- </leafNode>
+ <children>
+ <leafNode name="replace-as">
+ <properties>
+ <help>Prepend only local-as from/to updates for eBGP peers</help>
+ <valueless/>
+ </properties>
+ </leafNode>
+ </children>
+ </node>
</children>
</tagNode>
<!-- include end -->
diff --git a/smoketest/scripts/cli/test_protocols_bgp.py b/smoketest/scripts/cli/test_protocols_bgp.py
index 05919abbc..29b5aa9d1 100755
--- a/smoketest/scripts/cli/test_protocols_bgp.py
+++ b/smoketest/scripts/cli/test_protocols_bgp.py
@@ -284,8 +284,7 @@ class TestProtocolsBGP(VyOSUnitTestSHIM.TestCase):
if 'multi_hop' in peer_config:
self.cli_set(base_path + ['neighbor', peer, 'ebgp-multihop', peer_config["multi_hop"]])
if 'local_as' in peer_config:
- self.cli_set(base_path + ['neighbor', peer, 'local-as', peer_config["local_as"], 'no-prepend'])
- self.cli_set(base_path + ['neighbor', peer, 'local-as', peer_config["local_as"], 'replace-as'])
+ self.cli_set(base_path + ['neighbor', peer, 'local-as', peer_config["local_as"], 'no-prepend', 'replace-as'])
if 'cap_over' in peer_config:
self.cli_set(base_path + ['neighbor', peer, 'override-capability'])
if 'passive' in peer_config:
@@ -354,8 +353,7 @@ class TestProtocolsBGP(VyOSUnitTestSHIM.TestCase):
if 'multi_hop' in config:
self.cli_set(base_path + ['peer-group', peer_group, 'ebgp-multihop', config["multi_hop"]])
if 'local_as' in config:
- self.cli_set(base_path + ['peer-group', peer_group, 'local-as', config["local_as"], 'no-prepend'])
- self.cli_set(base_path + ['peer-group', peer_group, 'local-as', config["local_as"], 'replace-as'])
+ self.cli_set(base_path + ['peer-group', peer_group, 'local-as', config["local_as"], 'no-prepend', 'replace-as'])
if 'cap_over' in config:
self.cli_set(base_path + ['peer-group', peer_group, 'override-capability'])
if 'passive' in config:
diff --git a/src/conf_mode/protocols_bgp.py b/src/conf_mode/protocols_bgp.py
index e24fcef14..68284e0f9 100755
--- a/src/conf_mode/protocols_bgp.py
+++ b/src/conf_mode/protocols_bgp.py
@@ -140,7 +140,7 @@ def verify(bgp):
# ttl-security and ebgp-multihop can't be used in the same configration
if 'ebgp_multihop' in peer_config and 'ttl_security' in peer_config:
- raise ConfigError('You can\'t set both ebgp-multihop and ttl-security hops')
+ raise ConfigError('You can not set both ebgp-multihop and ttl-security hops')
# Check if neighbor has both override capability and strict capability match configured at the same time.
if 'override_capability' in peer_config and 'strict_capability_match' in peer_config:
@@ -148,7 +148,7 @@ def verify(bgp):
# Check spaces in the password
if 'password' in peer_config and ' ' in peer_config['password']:
- raise ConfigError('You can\'t use spaces in the password')
+ raise ConfigError('Whitespace is not allowed in passwords!')
# Some checks can/must only be done on a neighbor and not a peer-group
if neighbor == 'neighbor':