mirror of
https://github.com/CumulusNetworks/ifupdown2.git
synced 2024-05-06 15:54:50 +00:00
cleanup (mostly cosmetic)
Ticket: CM-1438 Reviewed By: Testing Done: sanity test
This commit is contained in:
265
pkg/iface.py
265
pkg/iface.py
@ -6,20 +6,35 @@
|
||||
# iface --
|
||||
# interface object
|
||||
#
|
||||
|
||||
"""ifupdown2 network interface object
|
||||
|
||||
It closely resembles the 'iface' object in /etc/network/interfaces
|
||||
file. But can be extended to include any other network interface format
|
||||
|
||||
|
||||
The module contains the following public classes:
|
||||
|
||||
- ifaceState -- enumerates iface object state
|
||||
|
||||
- ifaceStatus -- enumerates iface object status (success/error)
|
||||
|
||||
- ifaceJsonEncoder -- Json encoder for the iface object
|
||||
|
||||
- iface -- network in terface object class
|
||||
|
||||
"""
|
||||
|
||||
from collections import OrderedDict
|
||||
#from json import *
|
||||
import json
|
||||
import logging
|
||||
|
||||
tickmark = ' (' + u'\u2713'.encode('utf8') + ')'
|
||||
crossmark = ' (' + u'\u2717'.encode('utf8') + ')'
|
||||
|
||||
class ifaceFlags():
|
||||
NONE = 0x1
|
||||
FOLLOW_DEPENDENTS = 0x2
|
||||
_tickmark = ' (' + u'\u2713'.encode('utf8') + ')'
|
||||
_crossmark = ' (' + u'\u2717'.encode('utf8') + ')'
|
||||
|
||||
class ifaceStatus():
|
||||
"""iface status """
|
||||
"""Enumerates iface status """
|
||||
|
||||
UNKNOWN = 0x1
|
||||
SUCCESS = 0x2
|
||||
ERROR = 0x3
|
||||
@ -46,8 +61,8 @@ class ifaceStatus():
|
||||
return cls.ERROR
|
||||
|
||||
class ifaceState():
|
||||
"""Enumerates iface state """
|
||||
|
||||
""" iface states """
|
||||
UNKNOWN = 0x1
|
||||
NEW = 0x2
|
||||
PRE_UP = 0x3
|
||||
@ -124,9 +139,34 @@ class ifaceJsonEncoder(json.JSONEncoder):
|
||||
'config' : retconfig})
|
||||
|
||||
class iface():
|
||||
""" flags """
|
||||
""" ifupdown2 interface object class
|
||||
|
||||
Attributes:
|
||||
name Name of the interface
|
||||
addr_family Address family eg, inet, inet6. Can be None to indicate both address families
|
||||
addr_method Address method eg, static, manual or None for static
|
||||
address method
|
||||
config dictionary of config lines for this interface
|
||||
state Configuration state of an interface as defined by
|
||||
ifaceState
|
||||
status Configuration status of an interface as defined by
|
||||
ifaceStatus
|
||||
flags Internal flags used by iface processing
|
||||
priv_flags private flags owned by module using this class
|
||||
refcnt reference count, indicating number of interfaces
|
||||
dependent on this iface
|
||||
lowerifaces list of interface names lower to this interface or
|
||||
this interface depends on
|
||||
upperifaces list of interface names upper to this interface or
|
||||
the interfaces that depend on this interface
|
||||
auto True if interface belongs to the auto class
|
||||
classes List of classes the interface belongs to
|
||||
env shell environment the interface needs during execution
|
||||
raw_config raw interface config from file
|
||||
"""
|
||||
|
||||
# flag to indicate that the object was created from pickled state
|
||||
PICKLED = 0x1
|
||||
_PICKLED = 0x1
|
||||
|
||||
version = '0.1'
|
||||
|
||||
@ -135,7 +175,7 @@ class iface():
|
||||
self.addr_family = None
|
||||
self.addr_method = None
|
||||
self.config = OrderedDict()
|
||||
self.config_status = {}
|
||||
self._config_status = {}
|
||||
self.state = ifaceState.NEW
|
||||
self.status = ifaceStatus.UNKNOWN
|
||||
self.flags = 0x0
|
||||
@ -146,7 +186,7 @@ class iface():
|
||||
self.auto = False
|
||||
self.classes = []
|
||||
self.env = None
|
||||
self.raw_lines = []
|
||||
self.raw_config = []
|
||||
self.linkstate = None
|
||||
|
||||
def inc_refcnt(self):
|
||||
@ -155,38 +195,8 @@ class iface():
|
||||
def dec_refcnt(self):
|
||||
self.refcnt -= 1
|
||||
|
||||
def get_refcnt(self):
|
||||
return self.refcnt
|
||||
|
||||
def set_refcnt(self, cnt):
|
||||
self.refcnt = 0
|
||||
|
||||
def set_name(self, name):
|
||||
self.name = name
|
||||
|
||||
def get_name(self):
|
||||
return self.name
|
||||
|
||||
def set_addr_family(self, family):
|
||||
self.addr_family = family
|
||||
|
||||
def get_addr_family(self):
|
||||
return self.addr_family
|
||||
|
||||
def set_addr_method(self, method):
|
||||
self.addr_method = method
|
||||
|
||||
def get_addr_method(self):
|
||||
return self.addr_method
|
||||
|
||||
def set_config(self, config_dict):
|
||||
self.config = config_dict
|
||||
|
||||
def get_config(self):
|
||||
return self.config
|
||||
|
||||
def is_config_present(self):
|
||||
addr_method = self.get_addr_method()
|
||||
addr_method = self.addr_method
|
||||
if addr_method:
|
||||
if (addr_method.find('dhcp') != -1 or
|
||||
addr_method.find('dhcp6') != -1):
|
||||
@ -196,77 +206,20 @@ class iface():
|
||||
else:
|
||||
return True
|
||||
|
||||
def get_auto(self):
|
||||
return self.auto
|
||||
|
||||
def set_auto(self):
|
||||
self.auto = True
|
||||
|
||||
def reset_auto(self):
|
||||
self.auto = False
|
||||
|
||||
def get_classes(self):
|
||||
return self.classes
|
||||
|
||||
def set_classes(self, classes):
|
||||
""" sets interface class list to the one passed as arg """
|
||||
self.classes = classes
|
||||
|
||||
def set_class(self, classname):
|
||||
""" Appends a class to the list """
|
||||
self.classes.append(classname)
|
||||
|
||||
def belongs_to_class(self, intfclass):
|
||||
if intfclass in self.classes:
|
||||
return True
|
||||
return False
|
||||
|
||||
def set_priv_flags(self, priv_flags):
|
||||
self.priv_flags = priv_flags
|
||||
|
||||
def get_priv_flags(self):
|
||||
return self.priv_flags
|
||||
|
||||
def get_state(self):
|
||||
return self.state
|
||||
|
||||
def get_state_str(self):
|
||||
return ifaceState.to_str(self.state)
|
||||
|
||||
def set_state(self, state):
|
||||
self.state = state
|
||||
|
||||
def get_status(self):
|
||||
return self.status
|
||||
|
||||
def get_status_str(self):
|
||||
return ifaceStatus.to_str(self.status)
|
||||
|
||||
def set_status(self, status):
|
||||
self.status = status
|
||||
|
||||
def set_state_n_status(self, state, status):
|
||||
self.state = state
|
||||
self.status = status
|
||||
|
||||
def state_str_to_hex(self, state_str):
|
||||
return self.state_str_map.get(state_str)
|
||||
|
||||
def set_flag(self, flag):
|
||||
self.flags |= flag
|
||||
|
||||
def clear_flag(self, flag):
|
||||
self.flags &= ~flag
|
||||
|
||||
def set_lowerifaces(self, dlist):
|
||||
self.lowerifaces = dlist
|
||||
|
||||
def get_lowerifaces(self):
|
||||
return self.lowerifaces
|
||||
|
||||
def set_upperifaces(self, dlist):
|
||||
self.upperifaces = dlist
|
||||
|
||||
def add_to_upperifaces(self, upperifacename):
|
||||
if self.upperifaces:
|
||||
if upperifacename not in self.upperifaces:
|
||||
@ -274,31 +227,17 @@ class iface():
|
||||
else:
|
||||
self.upperifaces = [upperifacename]
|
||||
|
||||
def get_upperifaces(self):
|
||||
return self.upperifaces
|
||||
|
||||
def set_linkstate(self, l):
|
||||
self.linkstate = l
|
||||
|
||||
def get_linkstate(self):
|
||||
return self.linkstate
|
||||
|
||||
def get_attr_value(self, attr_name):
|
||||
config = self.get_config()
|
||||
|
||||
return config.get(attr_name)
|
||||
return self.config.get(attr_name)
|
||||
|
||||
def get_attr_value_first(self, attr_name):
|
||||
config = self.get_config()
|
||||
attr_value_list = config.get(attr_name)
|
||||
attr_value_list = self.config.get(attr_name)
|
||||
if attr_value_list:
|
||||
return attr_value_list[0]
|
||||
return None
|
||||
|
||||
def get_attr_value_n(self, attr_name, attr_index):
|
||||
config = self.get_config()
|
||||
|
||||
attr_value_list = config.get(attr_name)
|
||||
attr_value_list = self.config.get(attr_name)
|
||||
if attr_value_list:
|
||||
try:
|
||||
return attr_value_list[attr_index]
|
||||
@ -306,30 +245,24 @@ class iface():
|
||||
return None
|
||||
return None
|
||||
|
||||
@property
|
||||
def get_env(self):
|
||||
if not self.env:
|
||||
self.generate_env()
|
||||
return self.env
|
||||
|
||||
def set_env(self, env):
|
||||
self.env = env
|
||||
|
||||
def generate_env(self):
|
||||
env = {}
|
||||
config = self.get_config()
|
||||
env['IFACE'] = self.get_name()
|
||||
config = self.config
|
||||
env['IFACE'] = self.name
|
||||
for attr, attr_value in config.items():
|
||||
attr_env_name = 'IF_%s' %attr.upper()
|
||||
env[attr_env_name] = attr_value[0]
|
||||
|
||||
if env:
|
||||
self.set_env(env)
|
||||
self.env = env
|
||||
|
||||
def update_config(self, attr_name, attr_value):
|
||||
if not self.config.get(attr_name):
|
||||
self.config[attr_name] = [attr_value]
|
||||
else:
|
||||
self.config[attr_name].append(attr_value)
|
||||
self.config.setdefault(attr_name, []).append(attr_value)
|
||||
|
||||
def update_config_dict(self, attrdict):
|
||||
self.config.update(attrdict)
|
||||
@ -338,29 +271,25 @@ class iface():
|
||||
if not attr_value:
|
||||
attr_value = ''
|
||||
|
||||
if self.config.get(attr_name):
|
||||
self.config[attr_name].append(attr_value)
|
||||
self.config_status[attr_name].append(attr_status)
|
||||
else:
|
||||
self.config[attr_name] = [attr_value]
|
||||
self.config_status[attr_name] = [attr_status]
|
||||
self.config.setdefault(attr_name, []).append(attr_value)
|
||||
self._config_status.setdefault(attr_name, []).append(attr_status)
|
||||
|
||||
# set global iface state
|
||||
if attr_status:
|
||||
self.set_status(ifaceStatus.ERROR)
|
||||
elif self.get_status() != ifaceStatus.ERROR:
|
||||
self.status = ifaceStatus.ERROR
|
||||
elif self.status != ifaceStatus.ERROR:
|
||||
# Not already error, mark success
|
||||
self.set_status(ifaceStatus.SUCCESS)
|
||||
self.status = ifaceStatus.SUCCESS
|
||||
|
||||
def get_config_attr_status(self, attr_name, idx=0):
|
||||
self.config_status.get(attr_name, [])[idx]
|
||||
return self._config_status.get(attr_name, [])[idx]
|
||||
|
||||
def get_config_attr_status_str(self, attr_name, idx=0):
|
||||
ret = self.config_status.get(attr_name, [])[idx]
|
||||
ret = self.get_config_attr_status(attr_name, idx)
|
||||
if ret:
|
||||
return crossmark
|
||||
return _crossmark
|
||||
else:
|
||||
return tickmark
|
||||
return _tickmark
|
||||
|
||||
def is_different(self, dstiface):
|
||||
if self.name != dstiface.name: return True
|
||||
@ -368,13 +297,10 @@ class iface():
|
||||
if self.addr_method != dstiface.addr_method: return True
|
||||
if self.auto != dstiface.auto: return True
|
||||
if self.classes != dstiface.classes: return True
|
||||
|
||||
if any(True for k in self.config if k not in dstiface.config):
|
||||
return True
|
||||
|
||||
if any(True for k,v in self.config.items()
|
||||
if v != dstiface.config.get(k)): return True
|
||||
|
||||
return False
|
||||
|
||||
def __getstate__(self):
|
||||
@ -384,17 +310,17 @@ class iface():
|
||||
del odict['lowerifaces']
|
||||
del odict['upperifaces']
|
||||
del odict['refcnt']
|
||||
del odict['config_status']
|
||||
del odict['_config_status']
|
||||
del odict['flags']
|
||||
del odict['priv_flags']
|
||||
del odict['raw_lines']
|
||||
del odict['raw_config']
|
||||
del odict['linkstate']
|
||||
del odict['env']
|
||||
return odict
|
||||
|
||||
def __setstate__(self, dict):
|
||||
self.__dict__.update(dict)
|
||||
self.config_status = {}
|
||||
self._config_status = {}
|
||||
self.state = ifaceState.NEW
|
||||
self.status = ifaceStatus.UNKNOWN
|
||||
self.refcnt = 0
|
||||
@ -404,34 +330,34 @@ class iface():
|
||||
self.linkstate = None
|
||||
self.env = None
|
||||
self.priv_flags = 0
|
||||
self.raw_lines = []
|
||||
self.flags |= self.PICKLED
|
||||
self.raw_config = []
|
||||
self.flags |= self._PICKLED
|
||||
|
||||
def dump_raw(self, logger):
|
||||
indent = ' '
|
||||
print (self.raw_lines[0])
|
||||
for i in range(1, len(self.raw_lines)):
|
||||
print (indent + self.raw_lines[i])
|
||||
print (self.raw_config[0])
|
||||
for i in range(1, len(self.raw_config)):
|
||||
print (indent + self.raw_config[i])
|
||||
|
||||
def dump(self, logger):
|
||||
indent = '\t'
|
||||
logger.info(self.get_name() + ' : {')
|
||||
logger.info(indent + 'family: %s' %self.get_addr_family())
|
||||
logger.info(indent + 'method: %s' %self.get_addr_method())
|
||||
logger.info(self.name + ' : {')
|
||||
logger.info(indent + 'family: %s' %self.addr_family)
|
||||
logger.info(indent + 'method: %s' %self.addr_method)
|
||||
logger.info(indent + 'flags: %x' %self.flags)
|
||||
logger.info(indent + 'state: %s'
|
||||
%ifaceState.to_str(self.get_state()))
|
||||
%ifaceState.to_str(self.state))
|
||||
logger.info(indent + 'status: %s'
|
||||
%ifaceStatus.to_str(self.get_status()))
|
||||
logger.info(indent + 'refcnt: %d' %self.get_refcnt())
|
||||
d = self.get_lowerifaces()
|
||||
%ifaceStatus.to_str(self.status))
|
||||
logger.info(indent + 'refcnt: %d' %self.refcnt)
|
||||
d = self.lowerifaces
|
||||
if d:
|
||||
logger.info(indent + 'lowerdevs: %s' %str(d))
|
||||
else:
|
||||
logger.info(indent + 'lowerdevs: None')
|
||||
|
||||
logger.info(indent + 'config: ')
|
||||
config = self.get_config()
|
||||
config = self.config
|
||||
if config:
|
||||
logger.info(indent + indent + str(config))
|
||||
logger.info('}')
|
||||
@ -439,15 +365,15 @@ class iface():
|
||||
def dump_pretty(self, with_status=False):
|
||||
indent = '\t'
|
||||
outbuf = ''
|
||||
if self.get_auto():
|
||||
outbuf += 'auto %s\n' %self.get_name()
|
||||
outbuf += 'iface %s' %self.get_name()
|
||||
if self.get_addr_family():
|
||||
outbuf += ' %s' %self.get_addr_family()
|
||||
if self.get_addr_method():
|
||||
outbuf += ' %s' %self.get_addr_method()
|
||||
if self.auto:
|
||||
outbuf += 'auto %s\n' %self.name
|
||||
outbuf += 'iface %s' %self.name
|
||||
if self.addr_family:
|
||||
outbuf += ' %s' %self.addr_family
|
||||
if self.addr_method:
|
||||
outbuf += ' %s' %self.addr_method
|
||||
outbuf += '\n'
|
||||
config = self.get_config()
|
||||
config = self.config
|
||||
if config:
|
||||
for cname, cvaluelist in config.items():
|
||||
idx = 0
|
||||
@ -458,7 +384,6 @@ class iface():
|
||||
else:
|
||||
outbuf += indent + '%s %s\n' %(cname, cv)
|
||||
idx += 1
|
||||
|
||||
print outbuf
|
||||
|
||||
def dump_json(self, with_status=False):
|
||||
|
@ -79,12 +79,12 @@ class ifupdownMain(ifupdownBase):
|
||||
|
||||
# Handlers for ops that ifupdown2 owns
|
||||
def run_up(self, ifaceobj):
|
||||
ifacename = ifaceobj.get_name()
|
||||
ifacename = ifaceobj.name
|
||||
if self.link_exists(ifacename):
|
||||
self.link_up(ifacename)
|
||||
|
||||
def run_down(self, ifaceobj):
|
||||
ifacename = ifaceobj.get_name()
|
||||
ifacename = ifaceobj.name
|
||||
if self.link_exists(ifacename):
|
||||
self.link_down(ifacename)
|
||||
|
||||
@ -225,15 +225,15 @@ class ifupdownMain(ifupdownBase):
|
||||
return self.ifaceobjdict.get(ifacename)[-1]
|
||||
|
||||
def create_n_save_ifaceobjcurr(self, ifaceobj):
|
||||
ifacename = ifaceobj.get_name()
|
||||
ifacename = ifaceobj.name
|
||||
ifaceobjcurr = self.get_ifaceobjcurr(ifacename)
|
||||
if ifaceobjcurr:
|
||||
return ifaceobjcurr
|
||||
|
||||
ifaceobjcurr = iface()
|
||||
ifaceobjcurr.set_name(ifacename)
|
||||
ifaceobjcurr.set_lowerifaces(ifaceobj.get_lowerifaces())
|
||||
ifaceobjcurr.set_priv_flags(ifaceobj.get_priv_flags())
|
||||
ifaceobjcurr.name = ifacename
|
||||
ifaceobjcurr.lowerifaces = ifaceobj.lowerifaces
|
||||
ifaceobjcurr.priv_flags = ifaceobj.priv_flags
|
||||
self.ifaceobjcurrdict[ifacename] = ifaceobjcurr
|
||||
|
||||
return ifaceobjcurr
|
||||
@ -247,8 +247,8 @@ class ifupdownMain(ifupdownBase):
|
||||
def get_iface_status(self, ifacename):
|
||||
ifaceobjs = self.get_ifaceobjs(ifacename)
|
||||
for i in ifaceobjs:
|
||||
if i.get_status() != ifaceStatus.SUCCESS:
|
||||
return i.get_status()
|
||||
if i.status != ifaceStatus.SUCCESS:
|
||||
return i.status
|
||||
return ifaceStatus.SUCCESS
|
||||
|
||||
def get_iface_refcnt(self, ifacename):
|
||||
@ -257,8 +257,8 @@ class ifupdownMain(ifupdownBase):
|
||||
if not ifaceobjs:
|
||||
return 0
|
||||
for i in ifaceobjs:
|
||||
if i.get_refcnt() > max:
|
||||
max = i.get_refcnt()
|
||||
if i.refcnt > max:
|
||||
max = i.refcnt
|
||||
return max
|
||||
|
||||
def create_n_save_ifaceobj(self, ifacename, priv_flags=None,
|
||||
@ -268,9 +268,9 @@ class ifupdownMain(ifupdownBase):
|
||||
devices without any user specified configuration.
|
||||
"""
|
||||
ifaceobj = iface()
|
||||
ifaceobj.set_name(ifacename)
|
||||
ifaceobj.name = ifacename
|
||||
ifaceobj.priv_flags = priv_flags
|
||||
ifaceobj.set_auto()
|
||||
ifaceobj.auto = True
|
||||
if increfcnt:
|
||||
ifaceobj.inc_refcnt()
|
||||
self.ifaceobjdict[ifacename] = [ifaceobj]
|
||||
@ -365,7 +365,7 @@ class ifupdownMain(ifupdownBase):
|
||||
dlist = module.get_dependent_ifacenames(ifaceobj,
|
||||
self.ifaceobjdict.keys())
|
||||
if dlist:
|
||||
self.logger.debug('%s: ' %ifaceobj.get_name() +
|
||||
self.logger.debug('%s: ' %ifaceobj.name +
|
||||
'got lowerifaces/dependents: %s' %str(dlist))
|
||||
break
|
||||
return dlist
|
||||
@ -385,26 +385,26 @@ class ifupdownMain(ifupdownBase):
|
||||
ifaceobj = self.get_ifaceobj_first(i)
|
||||
if not ifaceobj:
|
||||
continue
|
||||
dlist = ifaceobj.get_lowerifaces()
|
||||
dlist = ifaceobj.lowerifaces
|
||||
if not dlist:
|
||||
dlist = self.query_dependents(ifaceobj, ops)
|
||||
else:
|
||||
continue
|
||||
if dlist:
|
||||
self.preprocess_dependency_list(ifaceobj.get_name(),
|
||||
self.preprocess_dependency_list(ifaceobj.name,
|
||||
dlist, ops)
|
||||
self.logger.debug('%s: lowerifaces/dependents after processing: %s'
|
||||
%(i, str(dlist)))
|
||||
ifaceobj.set_lowerifaces(dlist)
|
||||
ifaceobj.lowerifaces = dlist
|
||||
[iqueue.append(d) for d in dlist]
|
||||
if not self.dependency_graph.get(i):
|
||||
self.dependency_graph[i] = dlist
|
||||
|
||||
def _save_iface(self, ifaceobj):
|
||||
if not self.ifaceobjdict.get(ifaceobj.get_name()):
|
||||
self.ifaceobjdict[ifaceobj.get_name()] = [ifaceobj]
|
||||
if not self.ifaceobjdict.get(ifaceobj.name):
|
||||
self.ifaceobjdict[ifaceobj.name] = [ifaceobj]
|
||||
else:
|
||||
self.ifaceobjdict[ifaceobj.get_name()].append(ifaceobj)
|
||||
self.ifaceobjdict[ifaceobj.name].append(ifaceobj)
|
||||
|
||||
def _module_syntax_checker(self, attrname, attrval):
|
||||
for m, mdict in self.module_attrs.items():
|
||||
@ -618,15 +618,15 @@ class ifupdownMain(ifupdownBase):
|
||||
# We check classes first
|
||||
if allow_classes:
|
||||
for i in ifaceobjs:
|
||||
if i.get_classes():
|
||||
if i.classes:
|
||||
common = Set([allow_classes]).intersection(
|
||||
Set(i.get_classes()))
|
||||
Set(i.classes))
|
||||
if common:
|
||||
return True
|
||||
return False
|
||||
if auto:
|
||||
for i in ifaceobjs:
|
||||
if i.get_auto():
|
||||
if i.auto:
|
||||
return True
|
||||
return False
|
||||
return True
|
||||
@ -637,8 +637,8 @@ class ifupdownMain(ifupdownBase):
|
||||
"""
|
||||
|
||||
cenv = None
|
||||
iface_env = ifaceobj.get_env()
|
||||
if iface_env is not None:
|
||||
iface_env = ifaceobj.env
|
||||
if iface_env:
|
||||
cenv = os.environ
|
||||
if cenv:
|
||||
cenv.update(iface_env)
|
||||
@ -667,7 +667,7 @@ class ifupdownMain(ifupdownBase):
|
||||
|
||||
try:
|
||||
self.read_iface_config()
|
||||
except Exception, e:
|
||||
except Exception:
|
||||
raise
|
||||
|
||||
if ifacenames:
|
||||
@ -936,7 +936,7 @@ class ifupdownMain(ifupdownBase):
|
||||
ifaceobj.dump_raw(self.logger)
|
||||
print '\n'
|
||||
if self.WITH_DEPENDS:
|
||||
dlist = ifaceobj.get_lowerifaces()
|
||||
dlist = ifaceobj.lowerifaces
|
||||
if not dlist: continue
|
||||
self.print_ifaceobjs_pretty(dlist, format)
|
||||
|
||||
@ -950,7 +950,7 @@ class ifupdownMain(ifupdownBase):
|
||||
else:
|
||||
ifaceobj.dump_pretty()
|
||||
if self.WITH_DEPENDS:
|
||||
dlist = ifaceobj.get_lowerifaces()
|
||||
dlist = ifaceobj.lowerifaces
|
||||
if not dlist: continue
|
||||
self.print_ifaceobjs_pretty(dlist, format)
|
||||
|
||||
@ -971,12 +971,12 @@ class ifupdownMain(ifupdownBase):
|
||||
for i in ifacenames:
|
||||
ifaceobj = self.get_ifaceobjcurr(i)
|
||||
if not ifaceobj: continue
|
||||
if ifaceobj.get_status() == ifaceStatus.NOTFOUND:
|
||||
print 'iface %s %s\n' %(ifaceobj.get_name(),
|
||||
if ifaceobj.status == ifaceStatus.NOTFOUND:
|
||||
print 'iface %s (%s)\n' %(ifaceobj.name,
|
||||
ifaceStatus.to_str(ifaceStatus.NOTFOUND))
|
||||
ret = 1
|
||||
continue
|
||||
elif ifaceobj.get_status() == ifaceStatus.ERROR:
|
||||
elif ifaceobj.status == ifaceStatus.ERROR:
|
||||
ret = 1
|
||||
|
||||
if (self.is_ifaceobj_noconfig(ifaceobj)):
|
||||
@ -988,7 +988,7 @@ class ifupdownMain(ifupdownBase):
|
||||
ifaceobj.dump_pretty(with_status=True)
|
||||
|
||||
if self.WITH_DEPENDS:
|
||||
dlist = ifaceobj.get_lowerifaces()
|
||||
dlist = ifaceobj.lowerifaces
|
||||
if not dlist: continue
|
||||
self.print_ifaceobjscurr_pretty(dlist, format)
|
||||
return ret
|
||||
@ -996,8 +996,8 @@ class ifupdownMain(ifupdownBase):
|
||||
def print_ifaceobjsrunning_pretty(self, ifacenames, format='native'):
|
||||
for i in ifacenames:
|
||||
ifaceobj = self.get_ifaceobj_first(i)
|
||||
if ifaceobj.get_status() == ifaceStatus.NOTFOUND:
|
||||
print 'iface %s' %ifaceobj.get_name() + ' (not found)\n'
|
||||
if ifaceobj.status == ifaceStatus.NOTFOUND:
|
||||
print 'iface %s' %ifaceobj.name + ' (not found)\n'
|
||||
continue
|
||||
if not ifaceobj.is_config_present():
|
||||
continue
|
||||
@ -1006,7 +1006,7 @@ class ifupdownMain(ifupdownBase):
|
||||
else:
|
||||
ifaceobj.dump_pretty()
|
||||
if self.WITH_DEPENDS:
|
||||
dlist = ifaceobj.get_lowerifaces()
|
||||
dlist = ifaceobj.lowerifaces
|
||||
if not dlist: continue
|
||||
self.print_ifaceobjsrunning_pretty(dlist, format)
|
||||
return
|
||||
|
@ -54,7 +54,7 @@ class networkInterfaces():
|
||||
allow_class = words[0].split('-')[1]
|
||||
ifacenames = words[1:]
|
||||
|
||||
if self.allow_classes.get(allow_class) is not None:
|
||||
if self.allow_classes.get(allow_class):
|
||||
for i in ifacenames:
|
||||
self.allow_classes[allow_class].append(i)
|
||||
else:
|
||||
@ -65,7 +65,7 @@ class networkInterfaces():
|
||||
# Support regex
|
||||
self.logger.debug('processing sourced line ..\'%s\'' %lines[cur_idx])
|
||||
sourced_file = lines[cur_idx].split(' ', 2)[1]
|
||||
if sourced_file is not None:
|
||||
if sourced_file:
|
||||
for f in glob.glob(sourced_file):
|
||||
self.read_file(f)
|
||||
else:
|
||||
@ -112,7 +112,7 @@ class networkInterfaces():
|
||||
iface_attrs = iface_line.split()
|
||||
ifacename = iface_attrs[1]
|
||||
|
||||
ifaceobj.raw_lines.append(iface_line)
|
||||
ifaceobj.raw_config.append(iface_line)
|
||||
|
||||
iface_config = collections.OrderedDict()
|
||||
for line_idx in range(cur_idx + 1, len(lines)):
|
||||
@ -125,7 +125,7 @@ class networkInterfaces():
|
||||
line_idx -= 1
|
||||
break
|
||||
|
||||
ifaceobj.raw_lines.append(l)
|
||||
ifaceobj.raw_config.append(l)
|
||||
|
||||
# preprocess vars (XXX: only preprocesses $IFACE for now)
|
||||
l = re.sub(r'\$IFACE', ifacename, l)
|
||||
@ -149,24 +149,22 @@ class networkInterfaces():
|
||||
|
||||
# Create iface object
|
||||
if ifacename.find(':') != -1:
|
||||
ifaceobj.set_name(ifacename.split(':')[0])
|
||||
ifaceobj.name = ifacename.split(':')[0]
|
||||
else:
|
||||
ifaceobj.set_name(ifacename)
|
||||
ifaceobj.name = ifacename
|
||||
|
||||
ifaceobj.set_config(iface_config)
|
||||
ifaceobj.config = iface_config
|
||||
ifaceobj.generate_env()
|
||||
if len(iface_attrs) > 2:
|
||||
ifaceobj.set_addr_family(iface_attrs[2])
|
||||
ifaceobj.set_addr_method(iface_attrs[3])
|
||||
ifaceobj.addr_family = iface_attrs[2]
|
||||
ifaceobj.addr_method = iface_attrs[3]
|
||||
|
||||
if ifaceobj.get_name() in self.auto_ifaces:
|
||||
ifaceobj.set_auto()
|
||||
if ifaceobj.name in self.auto_ifaces:
|
||||
ifaceobj.auto = True
|
||||
|
||||
classes = ifaceobj.set_classes(
|
||||
self.get_allow_classes_for_iface(ifaceobj.get_name()))
|
||||
classes = self.get_allow_classes_for_iface(ifaceobj.name)
|
||||
if classes:
|
||||
for c in classes:
|
||||
ifaceobj.set_class(c)
|
||||
[ifaceobj.set_class(c) for c in classes]
|
||||
|
||||
# Call iface found callback
|
||||
self.callbacks.get('iface_found')(ifaceobj)
|
||||
@ -179,7 +177,6 @@ class networkInterfaces():
|
||||
'auto' : process_auto,
|
||||
'iface' : process_iface}
|
||||
|
||||
|
||||
def is_keyword(self, str):
|
||||
|
||||
# The additional split here is for allow- keyword
|
||||
@ -207,8 +204,8 @@ class networkInterfaces():
|
||||
line_idx = 0
|
||||
lines_consumed = 0
|
||||
|
||||
raw_lines = filedata.split('\n')
|
||||
lines = [l.strip(' \n') for l in raw_lines]
|
||||
raw_config = filedata.split('\n')
|
||||
lines = [l.strip(' \n') for l in raw_config]
|
||||
|
||||
while (line_idx < len(lines)):
|
||||
lineno = lineno + 1
|
||||
|
@ -38,19 +38,19 @@ class ifaceScheduler():
|
||||
@classmethod
|
||||
def run_iface_op(cls, ifupdownobj, ifaceobj, op, cenv):
|
||||
""" Runs sub operation on an interface """
|
||||
ifacename = ifaceobj.get_name()
|
||||
ifacename = ifaceobj.name
|
||||
|
||||
if (cls._STATE_CHECK and
|
||||
(ifaceobj.get_state() >= ifaceState.from_str(op)) and
|
||||
(ifaceobj.get_status() == ifaceStatus.SUCCESS)):
|
||||
(ifaceobj.state >= ifaceState.from_str(op)) and
|
||||
(ifaceobj.status == ifaceStatus.SUCCESS)):
|
||||
ifupdownobj.logger.debug('%s: already in state %s' %(ifacename, op))
|
||||
return
|
||||
|
||||
# first run ifupdownobj handlers
|
||||
handler = ifupdownobj.ops_handlers.get(op)
|
||||
if handler:
|
||||
addr_method = ifaceobj.get_addr_method()
|
||||
if not addr_method or (addr_method and addr_method != 'manual'):
|
||||
if not ifaceobj.addr_method or (ifaceobj.addr_method and
|
||||
ifaceobj.addr_method != 'manual'):
|
||||
handler(ifupdownobj, ifaceobj)
|
||||
|
||||
if not ifupdownobj.ADDONS_ENABLE: return
|
||||
@ -96,7 +96,7 @@ class ifaceScheduler():
|
||||
@classmethod
|
||||
def run_iface_ops(cls, ifupdownobj, ifaceobj, ops):
|
||||
""" Runs all operations on an interface """
|
||||
ifacename = ifaceobj.get_name()
|
||||
ifacename = ifaceobj.name
|
||||
# minor optimization. If operation is 'down', proceed only
|
||||
# if interface exists in the system
|
||||
if 'down' in ops[0] and not ifupdownobj.link_exists(ifacename):
|
||||
@ -122,9 +122,9 @@ class ifaceScheduler():
|
||||
if 'up' in ops[0] and followdependents:
|
||||
return True
|
||||
|
||||
ifacename = ifaceobj.get_name()
|
||||
ifacename = ifaceobj.name
|
||||
# Deal with upperdevs first
|
||||
ulist = ifaceobj.get_upperifaces()
|
||||
ulist = ifaceobj.upperifaces
|
||||
if ulist:
|
||||
tmpulist = ([u for u in ulist if u != parent] if parent
|
||||
else ulist)
|
||||
@ -170,7 +170,7 @@ class ifaceScheduler():
|
||||
cls.run_iface_ops(ifupdownobj, ifaceobj, ops)
|
||||
|
||||
# Run lowerifaces or dependents
|
||||
dlist = ifaceobj.get_lowerifaces()
|
||||
dlist = ifaceobj.lowerifaces
|
||||
if dlist:
|
||||
ifupdownobj.logger.debug('%s:' %ifacename +
|
||||
' found dependents: %s' %str(dlist))
|
||||
@ -243,7 +243,7 @@ class ifaceScheduler():
|
||||
cls.run_iface_ops(ifupdownobj, ifaceobj, ops)
|
||||
|
||||
# Run upperifaces
|
||||
ulist = ifaceobj.get_upperifaces()
|
||||
ulist = ifaceobj.upperifaces
|
||||
if ulist:
|
||||
ifupdownobj.logger.debug('%s:' %ifacename +
|
||||
' found upperifaces: %s' %str(ulist))
|
||||
@ -454,7 +454,7 @@ class ifaceScheduler():
|
||||
|
||||
for ifaceobj in ifaceobjs:
|
||||
# Run dependents
|
||||
dlist = ifaceobj.get_lowerifaces()
|
||||
dlist = ifaceobj.lowerifaces
|
||||
if dlist:
|
||||
ifupdownobj.logger.debug('%s:' %ifacename +
|
||||
' found dependents: %s' %str(dlist))
|
||||
|
@ -54,7 +54,7 @@ class stateManager():
|
||||
self.state_file = self.state_dir + self.state_filename
|
||||
|
||||
def save_ifaceobj(self, ifaceobj):
|
||||
self.ifaceobjdict.setdefault(ifaceobj.get_name(),
|
||||
self.ifaceobjdict.setdefault(ifaceobj.name,
|
||||
[]).append(ifaceobj)
|
||||
|
||||
def read_saved_state(self, filename=None):
|
||||
@ -78,8 +78,8 @@ class stateManager():
|
||||
return self.ifaceobjdict.get(ifacename)
|
||||
|
||||
def compare_iface_state(ifaceobj1, ifaceobj2):
|
||||
ifaceobj1_state = ifaceobj1.get_state()
|
||||
ifaceobj2_state = ifaceobj2.get_state()
|
||||
ifaceobj1_state = ifaceobj1.state
|
||||
ifaceobj2_state = ifaceobj2.state
|
||||
|
||||
if ifaceobj1_state < ifaceobj2_state:
|
||||
return -1
|
||||
@ -94,54 +94,54 @@ class stateManager():
|
||||
state_arg = ifaceState.from_str(operation)
|
||||
if state_arg == ifaceState.UP:
|
||||
old_ifaceobj = self.ifaceobjdict.get(ifacename)
|
||||
if old_ifaceobj != None:
|
||||
if old_ifaceobj:
|
||||
# found old state for iface
|
||||
# Check its state
|
||||
if (old_ifaceobj.get_state() == state_arg and
|
||||
old_ifaceobj.get_status() == ifaceStatus.SUCCESS):
|
||||
if (old_ifaceobj.state == state_arg and
|
||||
old_ifaceobj.status == ifaceStatus.SUCCESS):
|
||||
self.statemsg = 'iface already up'
|
||||
return 0
|
||||
elif state_arg == ifaceState.DOWN:
|
||||
old_ifaceobj = self.ifaceobjdict.get(ifname)
|
||||
if old_ifaceobj != None:
|
||||
if old_ifaceobj:
|
||||
# found old state for iface
|
||||
# Check its state
|
||||
if (old_ifaceobj.get_state() == state_arg and
|
||||
old_ifaceobj.get_status() == ifaceStatus.SUCCESS):
|
||||
if (old_ifaceobj.state == state_arg and
|
||||
old_ifaceobj.status == ifaceStatus.SUCCESS):
|
||||
self.statemsg = 'iface already down'
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
def ifaceobj_compare(self, ifaceobj_a, ifaceobj_b):
|
||||
if ifaceobj_a.get_name() != ifaceobj_b.get_name():
|
||||
if ifaceobj_a.name != ifaceobj_b.name:
|
||||
return False
|
||||
|
||||
if (ifaceobj_a.get_addr_family() is None and
|
||||
ifaceobj_b.get_addr_family() is not None):
|
||||
if (not ifaceobj_a.addr_family and
|
||||
ifaceobj_b.addr_family):
|
||||
return False
|
||||
|
||||
if (ifaceobj_a.get_addr_family() is not None and
|
||||
ifaceobj_b.get_addr_family() is None):
|
||||
if (ifaceobj_a.addr_family and
|
||||
not ifaceobj_b.addr_family):
|
||||
return False
|
||||
|
||||
if (ifaceobj_a.get_addr_family() is None and
|
||||
ifaceobj_b.get_addr_family() is None):
|
||||
if (not ifaceobj_a.addr_family and
|
||||
not ifaceobj_b.addr_family):
|
||||
return True
|
||||
|
||||
if ifaceobj_a.get_addr_family() != ifaceobj_b.get_addr_family():
|
||||
if ifaceobj_a.addr_family != ifaceobj_b.addr_family:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def ifaceobj_sync(self, ifaceobj):
|
||||
ifacename = ifaceobj.get_name()
|
||||
ifacename = ifaceobj.name
|
||||
self.logger.debug('%s: statemanager sync state' %ifacename)
|
||||
old_ifaceobjs = self.ifaceobjdict.get(ifacename)
|
||||
if not old_ifaceobjs:
|
||||
self.ifaceobjdict[ifacename] = [ifaceobj]
|
||||
else:
|
||||
if old_ifaceobjs[0].flags & iface.PICKLED:
|
||||
if old_ifaceobjs[0].flags & iface._PICKLED:
|
||||
del self.ifaceobjdict[ifacename]
|
||||
self.ifaceobjdict[ifacename] = [ifaceobj]
|
||||
else:
|
||||
|
Reference in New Issue
Block a user