summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Mangin <thomas.mangin@exa.net.uk>2020-03-24 18:36:46 +0000
committerThomas Mangin <thomas.mangin@exa.net.uk>2020-03-24 18:36:46 +0000
commitbbea850ea5f8ff0402cd276ab63963ece7e0c763 (patch)
tree4f5a4a5fa2a7c94e3051e905cadcefc389046883
parent8ac524b6d12618d696fa883ff78ded8c35c26d05 (diff)
downloadvyos-1x-bbea850ea5f8ff0402cd276ab63963ece7e0c763.tar.gz
vyos-1x-bbea850ea5f8ff0402cd276ab63963ece7e0c763.zip
ifconfig: T2057: remove need for interface-types.json
-rw-r--r--data/interface-types.json19
-rw-r--r--python/vyos/ifconfig/interface.py2
-rw-r--r--python/vyos/interfaces.py36
-rwxr-xr-xsrc/completion/list_interfaces.py33
-rwxr-xr-xsrc/completion/list_openvpn_clients.py4
-rwxr-xr-xsrc/conf_mode/flow_accounting_conf.py9
-rwxr-xr-xsrc/migration-scripts/dns-forwarding/1-to-210
7 files changed, 34 insertions, 79 deletions
diff --git a/data/interface-types.json b/data/interface-types.json
deleted file mode 100644
index f174d3c39..000000000
--- a/data/interface-types.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "loopback": "lo",
- "dummy": "dum",
- "ethernet": "eth",
- "bonding": "bond",
- "bridge": "br",
- "pseudo-ethernet": "peth",
- "openvpn": "vtun",
- "tunnel": "tun",
- "vti": "vti",
- "l2tpv3": "l2tpeth",
- "vxlan": "vxlan",
- "wireguard": "wg",
- "wireless": "wlan",
- "wirelessmodem": "wlm",
- "input": "ifb",
- "pppoe": "pppoe",
- "geneve": "gnv"
-}
diff --git a/python/vyos/ifconfig/interface.py b/python/vyos/ifconfig/interface.py
index 1759e3545..f2b43fd35 100644
--- a/python/vyos/ifconfig/interface.py
+++ b/python/vyos/ifconfig/interface.py
@@ -20,8 +20,6 @@ import glob
import time
from copy import deepcopy
-import vyos.interfaces
-
from vyos.validate import * # should not * include
from vyos.config import Config # not used anymore
from vyos import ConfigError
diff --git a/python/vyos/interfaces.py b/python/vyos/interfaces.py
index 37c093aca..4697c0acc 100644
--- a/python/vyos/interfaces.py
+++ b/python/vyos/interfaces.py
@@ -16,44 +16,10 @@
import re
import json
+from vyos.ifconfig import Interface
import subprocess
import netifaces
-intf_type_data_file = '/usr/share/vyos/interface-types.json'
-
-def list_interfaces():
- interfaces = netifaces.interfaces()
-
- # Remove "fake" interfaces associated with drivers
- for i in ["dummy0", "ip6tnl0", "tunl0", "ip_vti0", "ip6_vti0"]:
- try:
- interfaces.remove(i)
- except ValueError:
- pass
-
- return interfaces
-
-def list_interfaces_of_type(typ):
- with open(intf_type_data_file, 'r') as f:
- types_data = json.load(f)
-
- all_intfs = list_interfaces()
- if not (typ in types_data.keys()):
- raise ValueError("Unknown interface type: {0}".format(typ))
- else:
- r = re.compile('^{0}\d+'.format(types_data[typ]))
- return list(filter(lambda i: re.match(r, i), all_intfs))
-
-def get_type_of_interface(intf):
- with open(intf_type_data_file, 'r') as f:
- types_data = json.load(f)
-
- for key,val in types_data.items():
- r = re.compile('^{0}\d+'.format(val))
- if re.match(r, intf):
- return key
-
- raise ValueError("No type found for interface name: {0}".format(intf))
def wireguard_dump():
"""Dump wireguard data in a python friendly way."""
diff --git a/src/completion/list_interfaces.py b/src/completion/list_interfaces.py
index 8cd59917d..77de4e327 100755
--- a/src/completion/list_interfaces.py
+++ b/src/completion/list_interfaces.py
@@ -3,6 +3,7 @@
import sys
import argparse
import vyos.interfaces
+from vyos.ifconfig import Interface
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
@@ -13,35 +14,39 @@ 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 = vyos.interfaces.list_interfaces_of_type(args.type)
+ interfaces = Interface.listing(args.type)
except ValueError as e:
print(e, file=sys.stderr)
print("")
elif args.broadcast:
- eth = vyos.interfaces.list_interfaces_of_type("ethernet")
- bridge = vyos.interfaces.list_interfaces_of_type("bridge")
- bond = vyos.interfaces.list_interfaces_of_type("bonding")
+ eth = Interface.listing("ethernet")
+ bridge = Interface.listing("bridge")
+ bond = Interface.listing("bonding")
interfaces = eth + bridge + bond
elif args.bridgeable:
- eth = vyos.interfaces.list_interfaces_of_type("ethernet")
- bond = vyos.interfaces.list_interfaces_of_type("bonding")
- l2tpv3 = vyos.interfaces.list_interfaces_of_type("l2tpv3")
- openvpn = vyos.interfaces.list_interfaces_of_type("openvpn")
- wireless = vyos.interfaces.list_interfaces_of_type("wireless")
- tunnel = vyos.interfaces.list_interfaces_of_type("tunnel")
- vxlan = vyos.interfaces.list_interfaces_of_type("vxlan")
- geneve = vyos.interfaces.list_interfaces_of_type("geneve")
+ 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
elif args.bondable:
interfaces = []
- eth = vyos.interfaces.list_interfaces_of_type("ethernet")
+ eth = Interface.listing("ethernet")
# we need to filter out VLAN interfaces identified by a dot (.) in their name
for intf in eth:
@@ -49,6 +54,6 @@ elif args.bondable:
interfaces.append(intf)
else:
- interfaces = vyos.interfaces.list_interfaces()
+ interfaces = Interface.listing()
print(" ".join(interfaces))
diff --git a/src/completion/list_openvpn_clients.py b/src/completion/list_openvpn_clients.py
index 828ce6b5e..17b0c7008 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.interfaces import list_interfaces_of_type
+from vyos.ifconfig import Interface
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 list_interfaces_of_type("openvpn"):
+ for interface in Interface.listing("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 0bc50482c..2e941de0a 100755
--- a/src/conf_mode/flow_accounting_conf.py
+++ b/src/conf_mode/flow_accounting_conf.py
@@ -22,7 +22,6 @@ import subprocess
from vyos.config import Config
from vyos import ConfigError
-import vyos.interfaces
from vyos.ifconfig import Interface
from jinja2 import Template
@@ -129,7 +128,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 vyos.interfaces.list_interfaces():
+ for iface in Interface.listing():
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+$')
@@ -300,7 +299,7 @@ def verify(config):
# check that all configured interfaces exists in the system
for iface in config['interfaces']:
- if not iface in vyos.interfaces.list_interfaces():
+ if not iface in Interface.listing():
# 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))
@@ -328,7 +327,7 @@ def verify(config):
# check if configured sFlow agent-id exist in the system
agent_id_presented = None
- for iface in vyos.interfaces.list_interfaces():
+ for iface in Interface.listing():
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+$')
@@ -348,7 +347,7 @@ def verify(config):
# check if configured netflow source-ip exist in the system
if config['netflow']['source-ip']:
source_ip_presented = None
- for iface in vyos.interfaces.list_interfaces():
+ for iface in Interface.listing():
for address in Interface(iface).get_addr():
# check an IP
regex_filter = re.compile('^(?!(127)|(::1)|(fe80))(?P<ipaddr>[a-f\d\.:]+)/\d+$')
diff --git a/src/migration-scripts/dns-forwarding/1-to-2 b/src/migration-scripts/dns-forwarding/1-to-2
index 31ba5573f..9a50b6aa3 100755
--- a/src/migration-scripts/dns-forwarding/1-to-2
+++ b/src/migration-scripts/dns-forwarding/1-to-2
@@ -23,8 +23,8 @@
import sys
from ipaddress import ip_interface
+from vyos.ifconfig import Interface
from vyos.configtree import ConfigTree
-from vyos.interfaces import get_type_of_interface
if (len(sys.argv) < 1):
print("Must specify file name!")
@@ -41,7 +41,10 @@ base = ['service', 'dns', 'forwarding']
if not config.exists(base):
# Nothing to do
sys.exit(0)
+
else:
+ # XXX: we can remove the else and un-indent this whole block
+
if config.exists(base + ['listen-on']):
listen_intf = config.return_values(base + ['listen-on'])
# Delete node with abandoned command
@@ -60,7 +63,10 @@ else:
# this is a QinQ VLAN interface
intf = intf.split('.')[0] + ' vif-s ' + intf.split('.')[1] + ' vif-c ' + intf.split('.')[2]
- path = ['interfaces', get_type_of_interface(intf), intf, 'address']
+ section = Interface.section(intf)
+ if not section:
+ raise ValueError(f'Invalid interface name {intf}')
+ path = ['interfaces', section, intf, 'address']
# retrieve corresponding interface addresses in CIDR format
# those need to be converted in pure IP addresses without network information