summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraapostoliuk <a.apostoliuk@vyos.io>2024-03-22 16:10:59 +0200
committeraapostoliuk <a.apostoliuk@vyos.io>2024-03-26 17:48:07 +0200
commit9d34c488251c0d5111b4a3c880f2291548645db3 (patch)
treede8affb4a205ae68a217dfe50abbd0e586e40f41
parent713b2f3702134abd9a34c539019a83d0e354eb22 (diff)
downloadvyos-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.tmpl29
-rw-r--r--interface-definitions/include/accel-ppp/gateway-address-multi.xml.i17
-rw-r--r--interface-definitions/service_ipoe-server.xml.in1
-rwxr-xr-xsrc/conf_mode/service_ipoe-server.py13
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