From 36bf5f4d5ad114115feac91e5ffc726c5a3423d8 Mon Sep 17 00:00:00 2001 From: Christian Breunig Date: Mon, 23 Jan 2023 06:42:33 +0100 Subject: pppoe: T4948: add CLI option to allow definition of host-uniq flag Some ISPs seem to use the host-uniq flag to authenticate client equipment. Add CLI option in VyOS to allow specification of the host-uniq flag. set interfaces pppoe pppoeN host-uniq (cherry-picked from commit 38bab79324087df5a9057c23b85a0a784c09540a) --- data/templates/pppoe/peer.tmpl | 7 ++++-- interface-definitions/interfaces-pppoe.xml.in | 13 +++++++++++ smoketest/scripts/cli/test_interfaces_pppoe.py | 32 ++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/data/templates/pppoe/peer.tmpl b/data/templates/pppoe/peer.tmpl index f416f9947..b681bea77 100644 --- a/data/templates/pppoe/peer.tmpl +++ b/data/templates/pppoe/peer.tmpl @@ -36,10 +36,13 @@ maxfail 0 plugin rp-pppoe.so {{ source_interface }} {% if access_concentrator is defined and access_concentrator is not none %} -rp_pppoe_ac '{{ access_concentrator }}' +rp_pppoe_ac "{{ access_concentrator }}" {% endif %} {% if service_name is defined and service_name is not none %} -rp_pppoe_service '{{ service_name }}' +rp_pppoe_service "{{ service_name }}" +{% endif %} +{% if host_uniq is defined and host_uniq is not none %} +host-uniq "{{ host_uniq }}" {% endif %} persist diff --git a/interface-definitions/interfaces-pppoe.xml.in b/interface-definitions/interfaces-pppoe.xml.in index 198a53c90..581a8a59c 100644 --- a/interface-definitions/interfaces-pppoe.xml.in +++ b/interface-definitions/interfaces-pppoe.xml.in @@ -61,6 +61,19 @@ Timeout must be in range 0 to 86400 + + + PPPoE RFC2516 host-uniq tag + + txt + Host-uniq tag as byte string in HEX + + + ([a-fA-F0-9][a-fA-F0-9]){1,18} + + Host-uniq must be specified as hex-adecimal byte-string (even number of HEX characters) + + IPv4 routing parameters diff --git a/smoketest/scripts/cli/test_interfaces_pppoe.py b/smoketest/scripts/cli/test_interfaces_pppoe.py index 402fb4af5..8dcac4d7d 100755 --- a/smoketest/scripts/cli/test_interfaces_pppoe.py +++ b/smoketest/scripts/cli/test_interfaces_pppoe.py @@ -192,5 +192,37 @@ class PPPoEInterfaceTest(VyOSUnitTestSHIM.TestCase): self.cli_set(base_path + [interface, 'authentication', 'password', 'vyos']) self.cli_commit() + def test_pppoe_options(self): + # Check if PPPoE dialer can be configured with DHCPv6-PD + for interface in self._interfaces: + user = f'VyOS-user-{interface}' + passwd = f'VyOS-passwd-{interface}' + ac_name = f'AC{interface}' + service_name = f'SRV{interface}' + host_uniq = 'cafebeefBABE123456' + + self.cli_set(base_path + [interface, 'authentication', 'user', user]) + self.cli_set(base_path + [interface, 'authentication', 'password', passwd]) + self.cli_set(base_path + [interface, 'source-interface', self._source_interface]) + + self.cli_set(base_path + [interface, 'access-concentrator', ac_name]) + self.cli_set(base_path + [interface, 'service-name', service_name]) + self.cli_set(base_path + [interface, 'host-uniq', host_uniq]) + + # commit changes + self.cli_commit() + + for interface in self._interfaces: + ac_name = f'AC{interface}' + service_name = f'SRV{interface}' + host_uniq = 'cafebeefBABE123456' + + tmp = get_config_value(interface, 'rp_pppoe_ac')[1] + self.assertEqual(tmp, f'"{ac_name}"') + tmp = get_config_value(interface, 'rp_pppoe_service')[1] + self.assertEqual(tmp, f'"{service_name}"') + tmp = get_config_value(interface, 'host-uniq')[1] + self.assertEqual(tmp, f'"{host_uniq}"') + if __name__ == '__main__': unittest.main(verbosity=2) -- cgit v1.2.3