summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-04-11 20:36:04 +0200
committerGitHub <noreply@github.com>2020-04-11 20:36:04 +0200
commit7ae606605e2f86288e0c76f440872d9eb2fcc46c (patch)
treec4dff573a8262022515247f802c667988e2d30a9 /src
parent867fc8d75380fee36dab7d495b835b19e7dafd58 (diff)
parent8bc12847568582d3b34f3859946470af1344f9ea (diff)
downloadvyos-1x-7ae606605e2f86288e0c76f440872d9eb2fcc46c.tar.gz
vyos-1x-7ae606605e2f86288e0c76f440872d9eb2fcc46c.zip
Merge pull request #331 from thomas-mangin/T2223-register
completion: T2238: use interface data
Diffstat (limited to 'src')
-rwxr-xr-xsrc/completion/list_interfaces.py44
-rwxr-xr-xsrc/completion/list_openvpn_clients.py4
-rwxr-xr-xsrc/conf_mode/flow_accounting_conf.py7
3 files changed, 20 insertions, 35 deletions
diff --git a/src/completion/list_interfaces.py b/src/completion/list_interfaces.py
index 98b32797a..e27281433 100755
--- a/src/completion/list_interfaces.py
+++ b/src/completion/list_interfaces.py
@@ -2,7 +2,14 @@
import sys
import argparse
-from vyos.ifconfig import Interface
+from vyos.ifconfig import Section
+
+
+def matching(feature):
+ for section in Section.feature(feature):
+ for intf in Section.interfaces(section):
+ yield intf
+
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
@@ -13,46 +20,23 @@ group.add_argument("-bo", "--bondable", action="store_true", help="List all bond
args = parser.parse_args()
-# XXX: Need to be rewritten using the data in the class definition
-# XXX: It can be done once vti and input are moved into vyos
-# XXX: We store for each class what type they are (broadcast, bridgeabe, ...)
-
if args.type:
try:
- interfaces = Interface.listing(args.type)
-
+ interfaces = Section.interfaces(args.type)
+ print(" ".join(interfaces))
except ValueError as e:
print(e, file=sys.stderr)
print("")
elif args.broadcast:
- eth = Interface.listing("ethernet")
- bridge = Interface.listing("bridge")
- bond = Interface.listing("bonding")
- interfaces = eth + bridge + bond
+ print(" ".join(matching("broadcast")))
elif args.bridgeable:
- eth = Interface.listing("ethernet")
- bond = Interface.listing("bonding")
- l2tpv3 = Interface.listing("l2tpv3")
- openvpn = Interface.listing("openvpn")
- wireless = Interface.listing("wireless")
- tunnel = Interface.listing("tunnel")
- vxlan = Interface.listing("vxlan")
- geneve = Interface.listing("geneve")
-
- interfaces = eth + bond + l2tpv3 + openvpn + vxlan + tunnel + wireless + geneve
+ print(" ".join(matching("bridgeable")))
elif args.bondable:
- interfaces = []
- eth = Interface.listing("ethernet")
-
# we need to filter out VLAN interfaces identified by a dot (.) in their name
- for intf in eth:
- if not '.' in intf:
- interfaces.append(intf)
+ print(" ".join([intf for intf in matching("bondable") if '.' not in intf]))
else:
- interfaces = Interface.listing()
-
-print(" ".join(interfaces))
+ print(" ".join(Section.interfaces()))
diff --git a/src/completion/list_openvpn_clients.py b/src/completion/list_openvpn_clients.py
index 17b0c7008..177ac90c9 100755
--- a/src/completion/list_openvpn_clients.py
+++ b/src/completion/list_openvpn_clients.py
@@ -18,7 +18,7 @@ import os
import sys
import argparse
-from vyos.ifconfig import Interface
+from vyos.ifconfig import Section
def get_client_from_interface(interface):
clients = []
@@ -50,7 +50,7 @@ if __name__ == "__main__":
if args.interface:
clients = get_client_from_interface(args.interface)
elif args.all:
- for interface in Interface.listing("openvpn"):
+ for interface in Section.interfaces("openvpn"):
clients += get_client_from_interface(interface)
print(" ".join(clients))
diff --git a/src/conf_mode/flow_accounting_conf.py b/src/conf_mode/flow_accounting_conf.py
index 1008f3fae..eef32687e 100755
--- a/src/conf_mode/flow_accounting_conf.py
+++ b/src/conf_mode/flow_accounting_conf.py
@@ -22,6 +22,7 @@ from ipaddress import ip_address
from jinja2 import FileSystemLoader, Environment
from sys import exit
+from vyos.ifconfig import Section
from vyos.ifconfig import Interface
from vyos.config import Config
from vyos.defaults import directories as vyos_data_dir
@@ -60,7 +61,7 @@ def _sflow_default_agentip(config):
return config.return_value('protocols ospfv3 parameters router-id')
# if router-id was not found, use first available ip of any interface
- for iface in Interface.listing():
+ for iface in Section.interfaces():
for address in Interface(iface).get_addr():
# return an IP, if this is not loopback
regex_filter = re.compile('^(?!(127)|(::1)|(fe80))(?P<ipaddr>[a-f\d\.:]+)/\d+$')
@@ -234,7 +235,7 @@ def verify(config):
# check that all configured interfaces exists in the system
for iface in config['interfaces']:
- if not iface in Interface.listing():
+ if not iface in Section.interfaces():
# chnged from error to warning to allow adding dynamic interfaces and interface templates
# raise ConfigError("The {} interface is not presented in the system".format(iface))
print("Warning: the {} interface is not presented in the system".format(iface))
@@ -262,7 +263,7 @@ def verify(config):
# check if configured sFlow agent-id exist in the system
agent_id_presented = None
- for iface in Interface.listing():
+ for iface in Section.interfaces():
for address in Interface(iface).get_addr():
# check an IP, if this is not loopback
regex_filter = re.compile('^(?!(127)|(::1)|(fe80))(?P<ipaddr>[a-f\d\.:]+)/\d+$')