Пример #1
0
 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)
Пример #2
0
 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()
Пример #3
0
 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)
Пример #4
0
    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
Пример #5
0
 def __init__(self, *args, **kargs):
     moduleBase.__init__(self, *args, **kargs)
     self.dhclientcmd = dhclient(**kargs)
     self.ipcmd = None
Пример #6
0
    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)
Пример #7
0
 def __init__(self, *args, **kargs):
     moduleBase.__init__(self, *args, **kargs)
     self.dhclientcmd = dhclient(**kargs)
     self.ipcmd = None