diff options
| -rw-r--r-- | data/templates/frr/bfdd.frr.j2 | 6 | ||||
| -rw-r--r-- | interface-definitions/include/bfd/common.xml.i | 12 | ||||
| -rwxr-xr-x | smoketest/scripts/cli/test_protocols_bfd.py | 10 | ||||
| -rwxr-xr-x | src/conf_mode/protocols_bfd.py | 3 | 
4 files changed, 31 insertions, 0 deletions
| diff --git a/data/templates/frr/bfdd.frr.j2 b/data/templates/frr/bfdd.frr.j2 index c4adeb402..f3303e401 100644 --- a/data/templates/frr/bfdd.frr.j2 +++ b/data/templates/frr/bfdd.frr.j2 @@ -13,6 +13,9 @@ bfd  {%             if profile_config.echo_mode is vyos_defined %}    echo-mode  {%             endif %} +{%             if profile_config.minimum_ttl is vyos_defined %} +  minimum-ttl {{ profile_config.minimum_ttl }} +{%             endif %}  {%             if profile_config.passive is vyos_defined %}    passive-mode  {%             endif %} @@ -38,6 +41,9 @@ bfd  {%             if peer_config.echo_mode is vyos_defined %}    echo-mode  {%             endif %} +{%             if peer_config.minimum_ttl is vyos_defined %} +  minimum-ttl {{ peer_config.minimum_ttl }} +{%             endif %}  {%             if peer_config.passive is vyos_defined %}    passive-mode  {%             endif %} diff --git a/interface-definitions/include/bfd/common.xml.i b/interface-definitions/include/bfd/common.xml.i index 126ab9b9a..8e6999d28 100644 --- a/interface-definitions/include/bfd/common.xml.i +++ b/interface-definitions/include/bfd/common.xml.i @@ -63,6 +63,18 @@      </leafNode>    </children>  </node> +<leafNode name="minimum-ttl"> +  <properties> +    <help>Expect packets with at least this TTL</help> +    <valueHelp> +      <format>u32:1-254</format> +      <description>Minimum TTL expected</description> +    </valueHelp> +    <constraint> +      <validator name="numeric" argument="--range 1-254"/> +    </constraint> +  </properties> +</leafNode>  <leafNode name="passive">    <properties>      <help>Do not attempt to start sessions</help> diff --git a/smoketest/scripts/cli/test_protocols_bfd.py b/smoketest/scripts/cli/test_protocols_bfd.py index f209eae3a..716d0a806 100755 --- a/smoketest/scripts/cli/test_protocols_bfd.py +++ b/smoketest/scripts/cli/test_protocols_bfd.py @@ -32,6 +32,7 @@ peers = {          'multihop'   : '',          'source_addr': '192.0.2.254',          'profile'    : 'foo-bar-baz', +        'minimum_ttl': '20',      },      '192.0.2.20' : {          'echo_mode'  : '', @@ -63,6 +64,7 @@ profiles = {          'intv_rx'    : '222',          'intv_tx'    : '333',          'shutdown'   : '', +        'minimum_ttl': '40',          },      'foo-bar-baz' : {          'intv_mult'  : '4', @@ -109,6 +111,8 @@ class TestProtocolsBFD(VyOSUnitTestSHIM.TestCase):                  self.cli_set(base_path + ['peer', peer, 'interval', 'receive', peer_config["intv_rx"]])              if 'intv_tx' in peer_config:                  self.cli_set(base_path + ['peer', peer, 'interval', 'transmit', peer_config["intv_tx"]]) +            if 'minimum_ttl' in peer_config: +                self.cli_set(base_path + ['peer', peer, 'minimum-ttl', peer_config["minimum_ttl"]])              if 'multihop' in peer_config:                  self.cli_set(base_path + ['peer', peer, 'multihop'])              if 'passive' in peer_config: @@ -152,6 +156,8 @@ class TestProtocolsBFD(VyOSUnitTestSHIM.TestCase):                  self.assertIn(f'receive-interval {peer_config["intv_rx"]}', peerconfig)              if 'intv_tx' in peer_config:                  self.assertIn(f'transmit-interval {peer_config["intv_tx"]}', peerconfig) +            if 'minimum_ttl' in peer_config: +                self.assertIn(f'minimum-ttl {peer_config["minimum_ttl"]}', peerconfig)              if 'passive' in peer_config:                  self.assertIn(f'passive-mode', peerconfig)              if 'shutdown' in peer_config: @@ -173,6 +179,8 @@ class TestProtocolsBFD(VyOSUnitTestSHIM.TestCase):                  self.cli_set(base_path + ['profile', profile, 'interval', 'receive', profile_config["intv_rx"]])              if 'intv_tx' in profile_config:                  self.cli_set(base_path + ['profile', profile, 'interval', 'transmit', profile_config["intv_tx"]]) +            if 'minimum_ttl' in profile_config: +                self.cli_set(base_path + ['profile', profile, 'minimum-ttl', profile_config["minimum_ttl"]])              if 'passive' in profile_config:                  self.cli_set(base_path + ['profile', profile, 'passive'])              if 'shutdown' in profile_config: @@ -210,6 +218,8 @@ class TestProtocolsBFD(VyOSUnitTestSHIM.TestCase):                  self.assertIn(f' receive-interval {profile_config["intv_rx"]}', config)              if 'intv_tx' in profile_config:                  self.assertIn(f' transmit-interval {profile_config["intv_tx"]}', config) +            if 'minimum_ttl' in profile_config: +                self.assertIn(f' minimum-ttl {profile_config["minimum_ttl"]}', config)              if 'passive' in profile_config:                  self.assertIn(f' passive-mode', config)              if 'shutdown' in profile_config: diff --git a/src/conf_mode/protocols_bfd.py b/src/conf_mode/protocols_bfd.py index dab784662..37421efb4 100755 --- a/src/conf_mode/protocols_bfd.py +++ b/src/conf_mode/protocols_bfd.py @@ -72,6 +72,9 @@ def verify(bfd):                  if 'source' in peer_config and 'interface' in peer_config['source']:                      raise ConfigError('BFD multihop and source interface cannot be used together') +            if 'minimum_ttl' in peer_config and 'multihop' not in peer_config: +                raise ConfigError('Minimum TTL is only available for multihop BFD sessions!') +              if 'profile' in peer_config:                  profile_name = peer_config['profile']                  if 'profile' not in bfd or profile_name not in bfd['profile']: | 
