def _query_running(self, ifaceobjrunning, ifaceobj_getfunc=None): if not self.ipcmd.link_exists(ifaceobjrunning.name): self.logger.debug('iface %s not found' % ifaceobjrunning.name) return dhclientcmd = dhclient() if (dhclientcmd.is_running(ifaceobjrunning.name) or dhclientcmd.is_running6(ifaceobjrunning.name)): # If dhcp is configured on the interface, we skip it return isloopback = self.ipcmd.link_isloopback(ifaceobjrunning.name) if isloopback: default_addrs = ['127.0.0.1/8', '::1/128'] ifaceobjrunning.addr_family.append('inet') ifaceobjrunning.addr_method = 'loopback' else: default_addrs = [] runningaddrsdict = self.ipcmd.addr_get(ifaceobjrunning.name) if runningaddrsdict: [ ifaceobjrunning.update_config('address', addr) for addr, addrattrs in runningaddrsdict.items() if addr not in default_addrs ] mtu = self.ipcmd.link_get_mtu(ifaceobjrunning.name) if (mtu and (ifaceobjrunning.name == 'lo' and mtu != '16436') or (ifaceobjrunning.name != 'lo' and mtu != self.get_mod_subattr('mtu', 'default'))): ifaceobjrunning.update_config('mtu', mtu) alias = self.ipcmd.link_get_alias(ifaceobjrunning.name) if alias: ifaceobjrunning.update_config('alias', alias)
def _init_command_handlers(self): if not self.ipcmd: self.ipcmd = iproute2() if not self.bondcmd: self.bondcmd = bondutil() if not self.dhclientcmd: self.dhclientcmd = dhclient()
def _query_running(self, ifaceobjrunning): if not self.ipcmd.link_exists(ifaceobjrunning.name): self.logger.debug('iface %s not found' %ifaceobjrunning.name) return dhclientcmd = dhclient() if (dhclientcmd.is_running(ifaceobjrunning.name) or dhclientcmd.is_running6(ifaceobjrunning.name)): # If dhcp is configured on the interface, we skip it return isloopback = self.ipcmd.link_isloopback(ifaceobjrunning.name) if isloopback: default_addrs = ['127.0.0.1/8', '::1/128'] ifaceobjrunning.addr_family = 'inet' ifaceobjrunning.addr_method = 'loopback' else: default_addrs = [] runningaddrsdict = self.ipcmd.addr_get(ifaceobjrunning.name) if runningaddrsdict: [ifaceobjrunning.update_config('address', addr) for addr, addrattrs in runningaddrsdict.items() if addr not in default_addrs] mtu = self.ipcmd.link_get_mtu(ifaceobjrunning.name) if (mtu and (ifaceobjrunning.name == 'lo' and mtu != '16436') or (ifaceobjrunning.name != 'lo' and mtu != self.get_mod_subattr('mtu', 'default'))): ifaceobjrunning.update_config('mtu', mtu) alias = self.ipcmd.link_get_alias(ifaceobjrunning.name) if alias: ifaceobjrunning.update_config('alias', alias)
def _up(self, ifaceobj): if not self.ipcmd.link_exists(ifaceobj.name): return addr_method = ifaceobj.addr_method try: # release any stale dhcp addresses if present if (addr_method != "dhcp" and not self.PERFMODE and not (ifaceobj.flags & iface.HAS_SIBLINGS)): # if not running in perf mode and ifaceobj does not have # any sibling iface objects, kill any stale dhclient # processes dhclientcmd = dhclient() if dhclient.is_running(ifaceobj.name): # release any dhcp leases dhclientcmd.release(ifaceobj.name) elif dhclient.is_running6(ifaceobj.name): dhclientcmd.release6(ifaceobj.name) except: pass self.ipcmd.batch_start() if addr_method != "dhcp": self._inet_address_config(ifaceobj) mtu = ifaceobj.get_attr_value_first('mtu') if mtu: self.ipcmd.link_set(ifaceobj.name, 'mtu', mtu) alias = ifaceobj.get_attr_value_first('alias') if alias: self.ipcmd.link_set_alias(ifaceobj.name, alias) hwaddress = self._get_hwaddress(ifaceobj) if hwaddress: self.ipcmd.link_set(ifaceobj.name, 'address', hwaddress) self.ipcmd.batch_commit() try: # Handle special things on a bridge self._process_bridge(ifaceobj, True) except Exception, e: self.log_warn('%s: %s' %(ifaceobj.name, str(e))) pass
def __init__(self, *args, **kargs): moduleBase.__init__(self, *args, **kargs) self.dhclientcmd = dhclient(**kargs) self.ipcmd = None
def _up(self, ifaceobj, ifaceobj_getfunc=None): if not self.ipcmd.link_exists(ifaceobj.name): return alias = ifaceobj.get_attr_value_first('alias') current_alias = self.ipcmd.link_get_alias(ifaceobj.name) if alias and alias != current_alias: self.ipcmd.link_set_alias(ifaceobj.name, alias) elif not alias and current_alias: self.ipcmd.link_set_alias(ifaceobj.name, '') addr_method = ifaceobj.addr_method force_reapply = False try: # release any stale dhcp addresses if present if (addr_method not in ["dhcp", "ppp"] and not ifupdownflags.flags.PERFMODE and not (ifaceobj.flags & iface.HAS_SIBLINGS)): # if not running in perf mode and ifaceobj does not have # any sibling iface objects, kill any stale dhclient # processes dhclientcmd = dhclient() if dhclientcmd.is_running(ifaceobj.name): # release any dhcp leases dhclientcmd.release(ifaceobj.name) force_reapply = True elif dhclientcmd.is_running6(ifaceobj.name): dhclientcmd.release6(ifaceobj.name) force_reapply = True except: pass self.ipcmd.batch_start() if addr_method not in ["dhcp", "ppp"]: self._inet_address_config(ifaceobj, ifaceobj_getfunc, force_reapply) self._process_mtu_config(ifaceobj, ifaceobj_getfunc) try: self.ipcmd.batch_commit() except Exception as e: self.log_error('%s: %s' % (ifaceobj.name, str(e)), ifaceobj, raise_error=False) try: hwaddress = self._get_hwaddress(ifaceobj) if hwaddress: running_hwaddress = None if not ifupdownflags.flags.PERFMODE: # system is clean running_hwaddress = self.ipcmd.link_get_hwaddress( ifaceobj.name) if hwaddress != running_hwaddress: slave_down = False netlink.link_set_updown(ifaceobj.name, "down") if ifaceobj.link_kind & ifaceLinkKind.BOND: # if bond, down all the slaves if ifaceobj.lowerifaces: for l in ifaceobj.lowerifaces: netlink.link_set_updown(l, "down") slave_down = True try: self.ipcmd.link_set(ifaceobj.name, 'address', hwaddress) finally: netlink.link_set_updown(ifaceobj.name, "up") if slave_down: for l in ifaceobj.lowerifaces: netlink.link_set_updown(l, "up") # Handle special things on a bridge self._process_bridge(ifaceobj, True) except Exception, e: self.log_error('%s: %s' % (ifaceobj.name, str(e)), ifaceobj)