diff options
-rw-r--r-- | python/vyos/ifconfig/section.py | 30 | ||||
-rwxr-xr-x | src/completion/list_interfaces.py | 30 | ||||
-rwxr-xr-x | src/conf_mode/flow_accounting_conf.py | 7 |
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+$') |