diff --git a/addons/bridge.py b/addons/bridge.py index 8ee76a4..8ce7fd1 100644 --- a/addons/bridge.py +++ b/addons/bridge.py @@ -15,6 +15,9 @@ import itertools import re import time +class bridgeFlags: + PORT_PROCESSED = 0x1 + class bridge(moduleBase): """ ifupdown2 addon module to configure linux bridges """ @@ -190,14 +193,10 @@ class bridge(moduleBase): 'example' : ['bridge-port-pvids bond0=100 bond1=200']}, }} - # declare some ifaceobj priv_flags. - # XXX: This assumes that the priv_flags is owned by this module - # which it is not. - _BRIDGE_PORT_PROCESSED = 0x1 - def __init__(self, *args, **kargs): moduleBase.__init__(self, *args, **kargs) self.ipcmd = None + self.name = self.__class__.__name__ self.brctlcmd = None self._running_vidinfo = {} self._running_vidinfo_valid = False @@ -788,7 +787,8 @@ class bridge(moduleBase): continue for bportifaceobj in bportifaceobjlist: # Dont process bridge port if it already has been processed - if bportifaceobj.priv_flags & self._BRIDGE_PORT_PROCESSED: + if (bportifaceobj.module_flags.get(self.name,0x0) & \ + bridgeFlags.PORT_PROCESSED): continue try: # Add attributes specific to the vlan aware bridge @@ -817,7 +817,8 @@ class bridge(moduleBase): bridge_vids, bridge_pvid) self._apply_bridge_port_settings(ifaceobj, bridgename=bridgename) - ifaceobj.priv_flags |= self._BRIDGE_PORT_PROCESSED + ifaceobj.module_flags[self.name] = ifaceobj.module_flags.setdefault(self.name,0) | \ + bridgeFlags.PORT_PROCESSED return if not self._is_bridge(ifaceobj): return diff --git a/addons/mstpctl.py b/addons/mstpctl.py index 33ea693..2ac021b 100644 --- a/addons/mstpctl.py +++ b/addons/mstpctl.py @@ -12,6 +12,9 @@ from ifupdownaddons.iproute2 import iproute2 from ifupdownaddons.mstpctlutil import mstpctlutil import traceback +class mstpctlFlags: + PORT_PROCESSED = 0x1 + class mstpctl(moduleBase): """ ifupdown2 addon module to configure mstp attributes """ @@ -161,14 +164,10 @@ class mstpctl(moduleBase): 'mstpctl-portnetwork' : 'portnetwork', 'mstpctl-portbpdufilter' : 'portbpdufilter'} - # declare some ifaceobj priv_flags. - # XXX: This assumes that the priv_flags is owned by this module - # which it is not. - _BRIDGE_PORT_PROCESSED = 0x1 - def __init__(self, *args, **kargs): moduleBase.__init__(self, *args, **kargs) self.ipcmd = None + self.name = self.__class__.__name__ self.brctlcmd = None self.mstpctlcmd = None @@ -342,7 +341,8 @@ class mstpctl(moduleBase): continue for bportifaceobj in bportifaceobjlist: # Dont process bridge port if it already has been processed - if bportifaceobj.priv_flags & self._BRIDGE_PORT_PROCESSED: + if (bportifaceobj.module_flags.get(self.name,0x0) & \ + mstpctlFlags.PORT_PROCESSED): continue try: self._apply_bridge_port_settings(bportifaceobj, @@ -361,7 +361,8 @@ class mstpctl(moduleBase): %bridgename) == '2' else False) self._apply_bridge_port_settings(ifaceobj, bridgename, None, stp_on, mstpd_running) - ifaceobj.priv_flags |= self._BRIDGE_PORT_PROCESSED + ifaceobj.module_flags[self.name] = ifaceobj.module_flags.setdefault(self.name,0) | \ + mstpctlFlags.PORT_PROCESSED return if not self._is_bridge(ifaceobj): return diff --git a/ifupdown/iface.py b/ifupdown/iface.py index 216225e..fdf3b0d 100644 --- a/ifupdown/iface.py +++ b/ifupdown/iface.py @@ -198,6 +198,8 @@ class iface(): **priv_flags** private flags owned by module using this class + **module_flags** module flags owned by module using this class + **refcnt** reference count, indicating number of interfaces dependent on this iface @@ -238,6 +240,8 @@ class iface(): self.flags = 0x0 """iface flags """ self.priv_flags = 0x0 + """iface module flags dictionary with module name: flags""" + self.module_flags = {} """iface priv flags. can be used by the external object manager """ self.refcnt = 0 """iface refcnt (incremented for each dependent this interface has) """ @@ -445,6 +449,7 @@ class iface(): del odict['_config_status'] del odict['flags'] del odict['priv_flags'] + del odict['module_flags'] del odict['raw_config'] del odict['linkstate'] del odict['env'] @@ -465,6 +470,7 @@ class iface(): self.linkstate = None self.env = None self.priv_flags = 0 + self.module_flags = {} self.raw_config = [] self.flags |= self._PICKLED self.link_type = ifaceLinkType.LINK_NA