summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhagbard <vyosdev@derith.de>2019-07-05 10:21:14 -0700
committerhagbard <vyosdev@derith.de>2019-07-08 10:01:15 -0700
commitf17f897a315d3177c0c42dd3d3b7dadf307a33c8 (patch)
tree312efe8ddfb7e4bccfbb2f8994acdef419d1c9d7
parent1564ee137c9ea42d6815114fbc7499626af009e6 (diff)
downloadvyos-1x-f17f897a315d3177c0c42dd3d3b7dadf307a33c8.tar.gz
vyos-1x-f17f897a315d3177c0c42dd3d3b7dadf307a33c8.zip
[PPPoE] - T1489: vlan_mon config options
-rw-r--r--interface-definitions/pppoe-server.xml27
-rwxr-xr-xsrc/conf_mode/accel_pppoe.py19
-rwxr-xr-xsrc/migration-scripts/pppoe-server/1-to-238
3 files changed, 75 insertions, 9 deletions
diff --git a/interface-definitions/pppoe-server.xml b/interface-definitions/pppoe-server.xml
index 18b0e649c..aab830f1e 100644
--- a/interface-definitions/pppoe-server.xml
+++ b/interface-definitions/pppoe-server.xml
@@ -337,15 +337,36 @@
</leafNode>
</children>
</node>
- <leafNode name="interface">
+
+ <tagNode name="interface">
<properties>
<help>interface(s) to listen on</help>
<completionHelp>
<script>${vyos_completion_dir}/list_interfaces.py</script>
</completionHelp>
- <multi/>
</properties>
- </leafNode>
+ <children>
+ <leafNode name="vlan-id">
+ <properties>
+ <help>VLAN monitor for the automatic creation of vlans (user per vlan)</help>
+ <constraint>
+ <validator name="numeric" argument="--range 1-4096"/>
+ </constraint>
+ <constraintErrorMessage>VLAN ID needs to be between 1 and 4096</constraintErrorMessage>
+ <multi />
+ </properties>
+ </leafNode>
+ <leafNode name="vlan-range">
+ <properties>
+ <help>VLAN monitor for the automatic creation of vlans (user per vlan)</help>
+ <constraint>
+ <regex>(409[0-6]|40[0-8][0-9]|[1-3][0-9]{3}|[1-9][0-9]{0,2})-(409[0-6]|40[0-8][0-9]|[1-3][0-9]{3}|[1-9][0-9]{0,2})</regex>
+ </constraint>
+ <multi />
+ </properties>
+ </leafNode>
+ </children>
+ </tagNode>
<leafNode name="local-ip">
<properties>
<help>local gateway address</help>
diff --git a/src/conf_mode/accel_pppoe.py b/src/conf_mode/accel_pppoe.py
index 3c7759b17..9c879502a 100755
--- a/src/conf_mode/accel_pppoe.py
+++ b/src/conf_mode/accel_pppoe.py
@@ -242,13 +242,16 @@ ac-name={{concentrator}}
{% if interface %}
{% for int in interface %}
interface={{int}}
-{% endfor %}
+{% if interface[int]['vlans'] %}
+vlan_mon={{interface[int]['vlans']|join(',')}}
+interface=re:{{int}}\.(409[0-6]|40[0-8][0-9]|[1-3][0-9]{3}|[1-9][0-9]{0,2})
{% endif %}
+{% endfor -%}
+{% endif -%}
{% if svc_name %}
service-name={{svc_name}}
-{% endif %}
+{% endif -%}
pado-delay=0
-# maybe: called-sid, tr101, padi-limit etc.
{% if limits %}
[connlimit]
@@ -338,7 +341,7 @@ def get_config():
'client_ip_pool' : '',
'client_ip_subnets' : [],
'client_ipv6_pool' : {},
- 'interface' : [],
+ 'interface' : {},
'ppp_gw' : '',
'svc_name' : '',
'dns' : [],
@@ -357,7 +360,12 @@ def get_config():
if c.exists('service-name'):
config_data['svc_name'] = c.return_value('service-name')
if c.exists('interface'):
- config_data['interface'] = c.return_values('interface')
+ for intfc in c.list_nodes('interface'):
+ config_data['interface'][intfc] = {'vlans' : []}
+ if c.exists('interface ' + intfc + ' vlan-id'):
+ config_data['interface'][intfc]['vlans'] += c.return_values('interface ' + intfc + ' vlan-id')
+ if c.exists('interface ' + intfc + ' vlan-range'):
+ config_data['interface'][intfc]['vlans'] +=c.return_values('interface ' + intfc + ' vlan-range')
if c.exists('local-ip'):
config_data['ppp_gw'] = c.return_value('local-ip')
if c.exists('dns-servers'):
@@ -491,7 +499,6 @@ def get_config():
if c.exists('authentication radius-settings rate-limit vendor'):
config_data['authentication']['radiusopt']['shaper']['vendor'] = c.return_value('authentication radius-settings rate-limit vendor')
-
if c.exists('mtu'):
config_data['mtu'] = c.return_value('mtu')
diff --git a/src/migration-scripts/pppoe-server/1-to-2 b/src/migration-scripts/pppoe-server/1-to-2
new file mode 100755
index 000000000..fa83896d3
--- /dev/null
+++ b/src/migration-scripts/pppoe-server/1-to-2
@@ -0,0 +1,38 @@
+#!/usr/bin/env python3
+
+# Convert "service pppoe-server interface ethX"
+# to:
+# "service pppoe-server interface ethX {}"
+
+import sys
+
+from vyos.configtree import ConfigTree
+
+if (len(sys.argv) < 1):
+ print("Must specify file name!")
+ sys.exit(1)
+
+file_name = sys.argv[1]
+
+with open(file_name, 'r') as f:
+ config_file = f.read()
+
+ctree = ConfigTree(config_file)
+cbase = ['service', 'pppoe-server','interface']
+
+if not ctree.exists(cbase):
+ sys.exit(0)
+else:
+ nics = ctree.return_values(cbase)
+ # convert leafNode to a tagNode
+ ctree.set(cbase)
+ ctree.set_tag(cbase)
+ for nic in nics:
+ ctree.set(cbase + [nic])
+
+ try:
+ open(file_name,'w').write(ctree.to_string())
+ except OSError as e:
+ print("Failed to save the modified config: {}".format(e))
+ sys.exit(1)
+