diff options
| -rw-r--r-- | data/templates/pppoe/peer.j2 | 2 | ||||
| -rw-r--r-- | interface-definitions/interfaces-pppoe.xml.in | 14 | ||||
| -rwxr-xr-x | smoketest/scripts/cli/test_interfaces_pppoe.py | 9 | ||||
| -rwxr-xr-x | src/conf_mode/interfaces-pppoe.py | 5 | 
4 files changed, 29 insertions, 1 deletions
| diff --git a/data/templates/pppoe/peer.j2 b/data/templates/pppoe/peer.j2 index f30cefe63..2a99fcb2a 100644 --- a/data/templates/pppoe/peer.j2 +++ b/data/templates/pppoe/peer.j2 @@ -50,7 +50,7 @@ ifname {{ ifname }}  ipparam {{ ifname }}  debug  mtu {{ mtu }} -mru {{ mtu }} +mru {{ mru }}  {% if authentication is vyos_defined %}  {{ 'user "' + authentication.username + '"' if authentication.username is vyos_defined }} diff --git a/interface-definitions/interfaces-pppoe.xml.in b/interface-definitions/interfaces-pppoe.xml.in index b78f92c85..30fcb8573 100644 --- a/interface-definitions/interfaces-pppoe.xml.in +++ b/interface-definitions/interfaces-pppoe.xml.in @@ -109,6 +109,20 @@            <leafNode name="mtu">              <defaultValue>1492</defaultValue>            </leafNode> +          <leafNode name="mru"> +            <properties> +              <help>Maximum Receive Unit (MRU)</help> +              <valueHelp> +                <format>u32:128-16384</format> +                <description>Maximum Receive Unit in byte</description> +              </valueHelp> +              <constraint> +                <validator name="numeric" argument="--range 128-16384"/> +              </constraint> +              <constraintErrorMessage>MRU must be between 128 and 16384</constraintErrorMessage> +            </properties> +            <defaultValue>1492</defaultValue> +          </leafNode>            #include <include/interface/no-peer-dns.xml.i>            <leafNode name="remote-address">              <properties> diff --git a/smoketest/scripts/cli/test_interfaces_pppoe.py b/smoketest/scripts/cli/test_interfaces_pppoe.py index 0ce5e2fe0..7b702759f 100755 --- a/smoketest/scripts/cli/test_interfaces_pppoe.py +++ b/smoketest/scripts/cli/test_interfaces_pppoe.py @@ -59,10 +59,12 @@ class PPPoEInterfaceTest(VyOSUnitTestSHIM.TestCase):              user = f'VyOS-user-{interface}'              passwd = f'VyOS-passwd-{interface}'              mtu = '1400' +            mru = '1300'              self.cli_set(base_path + [interface, 'authentication', 'username', user])              self.cli_set(base_path + [interface, 'authentication', 'password', passwd])              self.cli_set(base_path + [interface, 'mtu', mtu]) +            self.cli_set(base_path + [interface, 'mru', '9000'])              self.cli_set(base_path + [interface, 'no-peer-dns'])              # check validate() - a source-interface is required @@ -70,6 +72,11 @@ class PPPoEInterfaceTest(VyOSUnitTestSHIM.TestCase):                  self.cli_commit()              self.cli_set(base_path + [interface, 'source-interface', self._source_interface]) +            # check validate() - MRU needs to be less or equal then MTU +            with self.assertRaises(ConfigSessionError): +                self.cli_commit() +            self.cli_set(base_path + [interface, 'mru', mru]) +          # commit changes          self.cli_commit() @@ -80,6 +87,8 @@ class PPPoEInterfaceTest(VyOSUnitTestSHIM.TestCase):              tmp = get_config_value(interface, 'mtu')[1]              self.assertEqual(tmp, mtu) +            tmp = get_config_value(interface, 'mru')[1] +            self.assertEqual(tmp, mru)              tmp = get_config_value(interface, 'user')[1].replace('"', '')              self.assertEqual(tmp, user)              tmp = get_config_value(interface, 'password')[1].replace('"', '') diff --git a/src/conf_mode/interfaces-pppoe.py b/src/conf_mode/interfaces-pppoe.py index fca91253c..0a03a172c 100755 --- a/src/conf_mode/interfaces-pppoe.py +++ b/src/conf_mode/interfaces-pppoe.py @@ -77,6 +77,11 @@ def verify(pppoe):      if {'connect_on_demand', 'vrf'} <= set(pppoe):          raise ConfigError('On-demand dialing and VRF can not be used at the same time') +    # both MTU and MRU have default values, thus we do not need to check +    # if the key exists +    if int(pppoe['mru']) > int(pppoe['mtu']): +        raise ConfigError('PPPoE MRU needs to be lower then MTU!') +      return None  def generate(pppoe): | 
