diff options
| author | Viacheslav Hletenko <v.gletenko@vyos.io> | 2023-02-07 08:45:38 +0000 | 
|---|---|---|
| committer | Viacheslav Hletenko <v.gletenko@vyos.io> | 2023-02-07 08:50:31 +0000 | 
| commit | 53d82ea2b1427ac4668cc1b38544219eae960b86 (patch) | |
| tree | 25b36cffd087f8fbc01d9f23dcb172a97a3b7ba8 | |
| parent | 2622902ac76bc1c3356bb722f63e931119f3eb04 (diff) | |
| download | vyos-1x-53d82ea2b1427ac4668cc1b38544219eae960b86.tar.gz vyos-1x-53d82ea2b1427ac4668cc1b38544219eae960b86.zip | |
T4971: PPPoE server add named ip pool and attr Framed-Pool
Add a new feature to allow to use named pools
Also it can be used with RADIUS attribute 'Framed-Pool'
set service pppoe-server client-ip-pool name POOL1 gateway-address '192.0.2.1'
set service pppoe-server client-ip-pool name POOL1 subnet '192.0.2.0/24'
| -rw-r--r-- | data/templates/accel-ppp/config_ip_pool.j2 | 12 | ||||
| -rw-r--r-- | data/templates/accel-ppp/pppoe.config.j2 | 13 | ||||
| -rw-r--r-- | interface-definitions/include/accel-ppp/client-ip-pool-name.xml.i | 18 | ||||
| -rw-r--r-- | interface-definitions/service-ipoe-server.xml.in | 17 | ||||
| -rw-r--r-- | interface-definitions/service-pppoe-server.xml.in | 1 | ||||
| -rw-r--r-- | python/vyos/configverify.py | 15 | 
6 files changed, 57 insertions, 19 deletions
| diff --git a/data/templates/accel-ppp/config_ip_pool.j2 b/data/templates/accel-ppp/config_ip_pool.j2 index 0bef4ad69..f7511e445 100644 --- a/data/templates/accel-ppp/config_ip_pool.j2 +++ b/data/templates/accel-ppp/config_ip_pool.j2 @@ -11,4 +11,14 @@ gw-ip-address={{ gateway_address }}  {{ subnet }}  {%         endfor %}  {%     endif %} -{% endif %} +{%     if client_ip_pool.name is vyos_defined %} +{%         for pool, pool_config in client_ip_pool.name.items() %} +{%             if pool_config.subnet is vyos_defined %} +{{ pool_config.subnet }},name={{ pool }} +{%             endif %} +{%             if pool_config.gateway_address is vyos_defined %} +gw-ip-address={{ pool_config.gateway_address }} +{%             endif %} +{%         endfor %} +{%     endif %} +{% endif %}
\ No newline at end of file diff --git a/data/templates/accel-ppp/pppoe.config.j2 b/data/templates/accel-ppp/pppoe.config.j2 index f4129d3e2..74a8a53e2 100644 --- a/data/templates/accel-ppp/pppoe.config.j2 +++ b/data/templates/accel-ppp/pppoe.config.j2 @@ -135,6 +135,19 @@ pado-delay={{ pado_delay_param.value }}  called-sid={{ authentication.radius.called_sid_format }}  {% endif %} +{% if authentication.mode is vyos_defined("local") %} +{%     if client_ip_pool.name is vyos_defined %} +{%         for pool, pool_config in client_ip_pool.name.items() %} +{%             if pool_config.subnet is vyos_defined %} +ip-pool={{ pool }} +{%             endif %} +{%             if pool_config.gateway_address is vyos_defined %} +gw-ip-address={{ pool_config.gateway_address }}/{{ pool_config.subnet.split('/')[1] }} +{%             endif %} +{%         endfor %} +{%     endif %} +{% endif %} +  {% if limits is vyos_defined %}  [connlimit]  {%     if limits.connection_limit is vyos_defined %} diff --git a/interface-definitions/include/accel-ppp/client-ip-pool-name.xml.i b/interface-definitions/include/accel-ppp/client-ip-pool-name.xml.i new file mode 100644 index 000000000..654b6727e --- /dev/null +++ b/interface-definitions/include/accel-ppp/client-ip-pool-name.xml.i @@ -0,0 +1,18 @@ +<!-- include start from accel-ppp/client-ip-pool-name.xml.i --> +<tagNode name="name"> +  <properties> +    <help>Pool name</help> +    <valueHelp> +      <format>txt</format> +      <description>Name of IP pool</description> +    </valueHelp> +    <constraint> +      <regex>[-_a-zA-Z0-9.]+</regex> +    </constraint> +  </properties> +  <children> +    #include <include/accel-ppp/gateway-address.xml.i> +    #include <include/accel-ppp/client-ip-pool-subnet-single.xml.i> +  </children> +</tagNode> +<!-- include end --> diff --git a/interface-definitions/service-ipoe-server.xml.in b/interface-definitions/service-ipoe-server.xml.in index d778f9de0..ca4929249 100644 --- a/interface-definitions/service-ipoe-server.xml.in +++ b/interface-definitions/service-ipoe-server.xml.in @@ -108,22 +108,7 @@                <help>Client IP pools and gateway setting</help>              </properties>              <children> -              <tagNode name="name"> -                <properties> -                  <help>Pool name</help> -                  <valueHelp> -                    <format>txt</format> -                    <description>Name of IP pool</description> -                  </valueHelp> -                  <constraint> -                    <regex>[-_a-zA-Z0-9.]+</regex> -                  </constraint> -                </properties> -                <children> -                  #include <include/accel-ppp/gateway-address.xml.i> -                  #include <include/accel-ppp/client-ip-pool-subnet-single.xml.i> -                </children> -              </tagNode> +              #include <include/accel-ppp/client-ip-pool-name.xml.i>              </children>            </node>            #include <include/accel-ppp/client-ipv6-pool.xml.i> diff --git a/interface-definitions/service-pppoe-server.xml.in b/interface-definitions/service-pppoe-server.xml.in index 68592b96b..7cec7fe30 100644 --- a/interface-definitions/service-pppoe-server.xml.in +++ b/interface-definitions/service-pppoe-server.xml.in @@ -56,6 +56,7 @@              <children>                #include <include/accel-ppp/client-ip-pool-start-stop.xml.i>                #include <include/accel-ppp/client-ip-pool-subnet.xml.i> +              #include <include/accel-ppp/client-ip-pool-name.xml.i>              </children>            </node>            #include <include/accel-ppp/client-ipv6-pool.xml.i> diff --git a/python/vyos/configverify.py b/python/vyos/configverify.py index 8e0ce701e..63edacc81 100644 --- a/python/vyos/configverify.py +++ b/python/vyos/configverify.py @@ -1,4 +1,4 @@ -# Copyright 2020-2022 VyOS maintainers and contributors <maintainers@vyos.io> +# Copyright 2020-2023 VyOS maintainers and contributors <maintainers@vyos.io>  #  # This library is free software; you can redistribute it and/or  # modify it under the terms of the GNU Lesser General Public @@ -23,6 +23,7 @@  from vyos import ConfigError  from vyos.util import dict_search +from vyos.util import dict_search_recursive  def verify_mtu(config):      """ @@ -414,7 +415,17 @@ def verify_accel_ppp_base_service(config, local_users=True):              if 'key' not in radius_config:                  raise ConfigError(f'Missing RADIUS secret key for server "{server}"') -    if 'gateway_address' not in config: +    # Check global gateway or gateway in named pool +    gateway = False +    if 'gateway_address' in config: +        gateway = True +    else: +        if dict_search_recursive(config, 'gateway_address', ['client_ip_pool', 'name']): +            for _, v in config['client_ip_pool']['name'].items(): +                if 'gateway_address' in v: +                    gateway = True +                    break +    if not gateway:          raise ConfigError('Server requires gateway-address to be configured!')      if 'name_server_ipv4' in config: | 
