summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-03-25 09:57:21 +0100
committerGitHub <noreply@github.com>2020-03-25 09:57:21 +0100
commit6e7739e0b69e1d3371ebe36218604cbb1aca18b1 (patch)
treec745b79a378c75e928931073bfddbf8cc76ca730 /src
parent7c4d21639d9594ba4a0d96a5d6d90f25189c2817 (diff)
parentbbea850ea5f8ff0402cd276ab63963ece7e0c763 (diff)
downloadvyos-1x-6e7739e0b69e1d3371ebe36218604cbb1aca18b1.tar.gz
vyos-1x-6e7739e0b69e1d3371ebe36218604cbb1aca18b1.zip
Merge pull request #265 from thomas-mangin/2057-dhcp-vlan
ifconfig: T2057: break down DHCP, add register, STP and VLAN as adapters
Diffstat (limited to 'src')
-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/conf_mode/interfaces-bridge.py6
-rwxr-xr-xsrc/conf_mode/interfaces-openvpn.py6
-rwxr-xr-xsrc/migration-scripts/dns-forwarding/1-to-210
6 files changed, 40 insertions, 28 deletions
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/conf_mode/interfaces-bridge.py b/src/conf_mode/interfaces-bridge.py
index f8f20bf5c..c45ab13a8 100755
--- a/src/conf_mode/interfaces-bridge.py
+++ b/src/conf_mode/interfaces-bridge.py
@@ -20,7 +20,8 @@ from copy import deepcopy
from sys import exit
from netifaces import interfaces
-from vyos.ifconfig import BridgeIf, STPIf
+from vyos.ifconfig import BridgeIf
+from vyos.ifconfig.stp import STP
from vyos.configdict import list_diff
from vyos.config import Config
from vyos import ConfigError
@@ -322,9 +323,10 @@ def apply(bridge):
for addr in bridge['address']:
br.add_addr(addr)
+ STPBridgeIf = STP.enable(BridgeIf)
# configure additional bridge member options
for member in bridge['member']:
- i = STPIf(member['name'])
+ i = STPBridgeIf(member['name'])
# configure ARP cache timeout
i.set_arp_cache_tmo(bridge['arp_cache_tmo'])
# ignore link state changes
diff --git a/src/conf_mode/interfaces-openvpn.py b/src/conf_mode/interfaces-openvpn.py
index 55f9aa67d..9313e339b 100755
--- a/src/conf_mode/interfaces-openvpn.py
+++ b/src/conf_mode/interfaces-openvpn.py
@@ -32,7 +32,7 @@ from shutil import rmtree
from vyos import ConfigError
from vyos.config import Config
-from vyos.ifconfig import Interface
+from vyos.ifconfig import VTunIf
from vyos.validate import is_addr_assigned
user = 'openvpn'
@@ -1036,14 +1036,14 @@ def apply(openvpn):
try:
# we need to catch the exception if the interface is not up due to
# reason stated above
- Interface(openvpn['intf']).set_alias(openvpn['description'])
+ VTunIf(openvpn['intf']).set_alias(openvpn['description'])
except:
pass
# TAP interface needs to be brought up explicitly
if openvpn['type'] == 'tap':
if not openvpn['disable']:
- Interface(openvpn['intf']).set_state('up')
+ VTunIf(openvpn['intf']).set_state('up')
return None
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