summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--python/vyos/ifconfig/section.py30
-rwxr-xr-xsrc/completion/list_interfaces.py30
-rwxr-xr-xsrc/conf_mode/flow_accounting_conf.py7
3 files changed, 44 insertions, 23 deletions
diff --git a/python/vyos/ifconfig/section.py b/python/vyos/ifconfig/section.py
index eeec1968a..4f76258a7 100644
--- a/python/vyos/ifconfig/section.py
+++ b/python/vyos/ifconfig/section.py
@@ -26,6 +26,11 @@ class Section:
@classmethod
def register(cls, klass):
+ """
+ A function to use as decorator the interfaces classes
+ It register the prefix for the interface (eth, dum, vxlan, ...)
+ with the class which can handle it (EthernetIf, DummyIf,VXLANIf, ...)
+ """
if not klass.definition.get('prefixes',[]):
raise RuntimeError(f'valid interface prefixes not defined for {klass.__name__}')
@@ -38,7 +43,11 @@ class Section:
@classmethod
def _basename (cls, name, vlan):
- # remove number from interface name
+ """
+ remove the number at the end of interface name
+ name: name of the interface
+ vlan: if vlan is True, do not stop at the vlan number
+ """
name = name.rstrip('0123456789')
name = name.rstrip('.')
if vlan:
@@ -47,7 +56,11 @@ class Section:
@classmethod
def section(cls, name, vlan=True):
- # return the name of a section an interface should be under
+ """
+ return the name of a section an interface should be under
+ name: name of the interface (eth0, dum1, ...)
+ vlan: should we try try to remove the VLAN from the number
+ """
name = cls._basename(name, vlan)
# XXX: To leave as long as vti and input are not moved to vyos
@@ -68,7 +81,10 @@ class Section:
raise ValueError(f'No type found for interface name: {name}')
@classmethod
- def _listing (cls,section=''):
+ def _intf_under_section (cls,section=''):
+ """
+ return a generator with the name of the interface which are under a section
+ """
interfaces = netifaces.interfaces()
for ifname in interfaces:
@@ -87,8 +103,12 @@ class Section:
yield ifname
@classmethod
- def listing(cls, section=''):
- return list(cls._listing(section))
+ def interfaces(cls, section=''):
+ """
+ return a list of the name of the interface which are under a section
+ if no section is provided, then it returns all configured interfaces
+ """
+ return list(cls._intf_under_section(section))
# XXX: TODO - limit name for VRF interfaces
diff --git a/src/completion/list_interfaces.py b/src/completion/list_interfaces.py
index 98b32797a..64aecef60 100755
--- a/src/completion/list_interfaces.py
+++ b/src/completion/list_interfaces.py
@@ -2,7 +2,7 @@
import sys
import argparse
-from vyos.ifconfig import Interface
+from vyos.ifconfig import Section
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
@@ -19,33 +19,33 @@ args = parser.parse_args()
if args.type:
try:
- interfaces = Interface.listing(args.type)
+ interfaces = Section.interfaces(args.type)
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")
+ eth = Section.interfaces("ethernet")
+ bridge = Section.interfaces("bridge")
+ bond = Section.interfaces("bonding")
interfaces = eth + bridge + bond
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")
+ eth = Section.interfaces("ethernet")
+ bond = Section.interfaces("bonding")
+ l2tpv3 = Section.interfaces("l2tpv3")
+ openvpn = Section.interfaces("openvpn")
+ wireless = Section.interfaces("wireless")
+ tunnel = Section.interfaces("tunnel")
+ vxlan = Section.interfaces("vxlan")
+ geneve = Section.interfaces("geneve")
interfaces = eth + bond + l2tpv3 + openvpn + vxlan + tunnel + wireless + geneve
elif args.bondable:
interfaces = []
- eth = Interface.listing("ethernet")
+ eth = Section.interfaces("ethernet")
# we need to filter out VLAN interfaces identified by a dot (.) in their name
for intf in eth:
@@ -53,6 +53,6 @@ elif args.bondable:
interfaces.append(intf)
else:
- interfaces = Interface.listing()
+ interfaces = Section.interfaces()
print(" ".join(interfaces))
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+$')