diff options
author | aapostoliuk <a.apostoliuk@vyos.io> | 2024-03-22 16:10:59 +0200 |
---|---|---|
committer | aapostoliuk <a.apostoliuk@vyos.io> | 2024-03-26 17:48:07 +0200 |
commit | 9d34c488251c0d5111b4a3c880f2291548645db3 (patch) | |
tree | de8affb4a205ae68a217dfe50abbd0e586e40f41 | |
parent | 713b2f3702134abd9a34c539019a83d0e354eb22 (diff) | |
download | vyos-1x-9d34c488251c0d5111b4a3c880f2291548645db3.tar.gz vyos-1x-9d34c488251c0d5111b4a3c880f2291548645db3.zip |
T6150: Fixed setting a static IP address by Radius in IPoE
Fixed setting a static IP address by Radius in IPoE
Allowing using named pools by default
Allowed adding 'gateway-address' without named pool.
-rw-r--r-- | data/templates/accel-ppp/ipoe.config.tmpl | 29 | ||||
-rw-r--r-- | interface-definitions/include/accel-ppp/gateway-address-multi.xml.i | 17 | ||||
-rw-r--r-- | interface-definitions/service_ipoe-server.xml.in | 1 | ||||
-rwxr-xr-x | src/conf_mode/service_ipoe-server.py | 13 |
4 files changed, 50 insertions, 10 deletions
diff --git a/data/templates/accel-ppp/ipoe.config.tmpl b/data/templates/accel-ppp/ipoe.config.tmpl index 0599b5501..976cddd52 100644 --- a/data/templates/accel-ppp/ipoe.config.tmpl +++ b/data/templates/accel-ppp/ipoe.config.tmpl @@ -32,20 +32,29 @@ interface={{ ifname }},shared={{ interface.shared }},mode={{ interface.mode }},i {% endfor %} {% if auth_mode == 'noauth' %} noauth=1 -{% if client_named_ip_pool %} -{% for pool in client_named_ip_pool %} -{% if pool.subnet is defined %} -ip-pool={{ pool.name }} -{% endif %} -{% if pool.gateway_address is defined %} -gw-ip-address={{ pool.gateway_address }}/{{ pool.subnet.split('/')[1] }} -{% endif %} -{% endfor%} -{% endif %} {% elif auth_mode == 'local' %} username=ifname password=csid +{% elif auth_mode == 'radius' %} +attr-dhcp-client-ip=Framed-IP-Address +attr-dhcp-mask=Framed-IP-Netmask +{% endif %} +{% if gateway_address %} +{% for gw in gateway_address %} +gw-ip-address={{ gw }} +{% endfor %} +{% endif %} +{% if client_named_ip_pool %} +{% for pool in client_named_ip_pool %} +{% if pool.subnet is defined %} +ip-pool={{ pool.name }} +{% endif %} +{% if pool.gateway_address is defined %} +gw-ip-address={{ pool.gateway_address }}/{{ pool.subnet.split('/')[1] }} +{% endif %} +{% endfor%} {% endif %} + proxy-arp=1 {% for interface in interfaces %} diff --git a/interface-definitions/include/accel-ppp/gateway-address-multi.xml.i b/interface-definitions/include/accel-ppp/gateway-address-multi.xml.i new file mode 100644 index 000000000..dcc58b97a --- /dev/null +++ b/interface-definitions/include/accel-ppp/gateway-address-multi.xml.i @@ -0,0 +1,17 @@ +<!-- include start from accel-ppp/gateway-address-multi.xml.i --> +<leafNode name="gateway-address"> + <properties> + <help>Gateway IP address</help> + <constraintErrorMessage>invalid IPv4 address</constraintErrorMessage> + <valueHelp> + <format>ipv4net</format> + <description>Default Gateway, mask send to the client</description> + </valueHelp> + <constraint> + <validator name="ipv4-prefix"/> + <validator name="ipv4-host"/> + </constraint> + <multi/> + </properties> +</leafNode> +<!-- include end --> diff --git a/interface-definitions/service_ipoe-server.xml.in b/interface-definitions/service_ipoe-server.xml.in index d81ec99f9..a084d8c07 100644 --- a/interface-definitions/service_ipoe-server.xml.in +++ b/interface-definitions/service_ipoe-server.xml.in @@ -121,6 +121,7 @@ </children> </node> #include <include/accel-ppp/client-ipv6-pool.xml.i> + #include <include/accel-ppp/gateway-address-multi.xml.i> <node name="authentication"> <properties> <help>Client authentication methods</help> diff --git a/src/conf_mode/service_ipoe-server.py b/src/conf_mode/service_ipoe-server.py index 42cfd0f12..86185f37f 100755 --- a/src/conf_mode/service_ipoe-server.py +++ b/src/conf_mode/service_ipoe-server.py @@ -44,6 +44,7 @@ default_config_data = { 'client_named_ip_pool': [], 'client_ipv6_pool': [], 'client_ipv6_delegate_prefix': [], + 'gateway_address':[], 'radius_server': [], 'radius_acct_inter_jitter': '', 'radius_acct_tmo': '3', @@ -275,9 +276,14 @@ def get_config(config=None): ipoe['client_ipv6_delegate_prefix'].append(tmp) + if conf.exists(['gateway-address']): + for gw in conf.return_values(['gateway-address']): + ipoe['gateway_address'].append(gw) + return ipoe + def verify(ipoe): if not ipoe: return None @@ -303,6 +309,13 @@ def verify(ipoe): if ipoe['client_ipv6_delegate_prefix'] and not ipoe['client_ipv6_pool']: raise ConfigError('IPoE IPv6 deletate-prefix requires IPv6 prefix to be configured!') + if ipoe['gateway_address']: + if ipoe['client_named_ip_pool']: + ipoe_gateways = ' '.join(ipoe['gateway_address']) + for pool in ipoe['client_named_ip_pool']: + if f'{pool["gateway_address"]}/' in ipoe_gateways: + raise ConfigError( + 'IPoE "gateway-address" exists in IPoE "client-ip-pool"!') return None |