def _functions_accepting_devnames(self, devname): self.assertIsString(devname) scraped = ifconfig.get_device_by_name(devname) try: broadcast = ethtool.get_broadcast(devname) except (OSError, IOError): # Some devices might end up with # [Errno 99] Cannot assign requested address # That's IOError on 2.7, OSError on 3 assignable = False else: assignable = True self.assertIsString(broadcast) # Broadcast is optional in ifconfig output if scraped.broadcast: self.assertEqualIpv4Str(broadcast, scraped.broadcast) self.assertIsStringExceptForLoopback( ethtool.get_businfo, devname, '[Errno 95] Operation not ' 'supported') self.assertIsInt(ethtool.get_flags(devname)) # flagsint cannot be obtained from old ifconfig format if not ifconfig.oldFormat: self.assertEqual(ethtool.get_flags(devname), scraped.flagsint) self.assertIsInt(ethtool.get_gso(devname)) self.assertIsInt(ethtool.get_gro(devname)) self.assertIsString(ethtool.get_hwaddr(devname)) self.assertEqualHwAddr(ethtool.get_hwaddr(devname), scraped.hwaddr) if assignable: self.assertIsString(ethtool.get_ipaddr(devname)) self.assertEqual(ethtool.get_ipaddr(devname), scraped.inet) self.assertIsStringExceptForLoopback( ethtool.get_module, devname, '[Errno 95] Operation not ' 'supported') if assignable: self.assertIsString(ethtool.get_netmask(devname)) self.assertEqual(ethtool.get_netmask(devname), scraped.netmask) # Operation is not supported only on loopback device if devname == 'lo': self.assertRaisesIOError(ethtool.get_ringparam, (devname, ), '[Errno 95] Operation not supported') self.assertIsInt(ethtool.get_sg(devname)) try: self.assertIsInt(ethtool.get_ufo(devname)) except (OSError, IOError): # This test may fail due to insufficient privileges # That's IOError on 2.7, OSError (PermissionError) on 3 pass self.assertIsInt(ethtool.get_tso(devname))
def testTogglePromisc(self): tc.set_promisc(self._bridge.devName, True) self.assertTrue(ethtool.get_flags(self._bridge.devName) & ethtool.IFF_PROMISC, "Could not enable promiscuous mode.") tc.set_promisc(self._bridge.devName, False) self.assertFalse(ethtool.get_flags(self._bridge.devName) & ethtool.IFF_PROMISC, "Could not disable promiscuous mode.")
def lookup(self, name): if encode_value(name) not in map(encode_value, ethtool.get_devices()): raise NotFoundError("KCHIFACE0001E", {'name': name}) ipaddr = '' netmask = '' module = 'unknown' status = 'down' try: ipaddr = ethtool.get_ipaddr(encode_value(name)) netmask = ethtool.get_netmask(encode_value(name)) module = ethtool.get_module(encode_value(name)) flags = ethtool.get_flags(encode_value(name)) status = 'up' if flags & (ethtool.IFF_RUNNING | ethtool.IFF_UP) \ else 'down' except IOError: pass iface_type = netinfo.get_interface_type(name) return {'name': name, 'type': iface_type, 'status': status, 'ipaddr': ipaddr, 'netmask': netmask, 'module': module}
def lookup(self, name): if encode_value(name) not in map(encode_value, ethtool.get_devices()): raise NotFoundError('KCHIFACE0001E', {'name': name}) ipaddr = '' netmask = '' module = 'unknown' status = 'down' try: ipaddr = ethtool.get_ipaddr(encode_value(name)) netmask = ethtool.get_netmask(encode_value(name)) module = ethtool.get_module(encode_value(name)) flags = ethtool.get_flags(encode_value(name)) status = 'up' if flags & (ethtool.IFF_RUNNING | ethtool.IFF_UP) else 'down' except IOError: pass iface_type = netinfo.get_interface_type(name) return { 'name': name, 'type': iface_type, 'status': status, 'ipaddr': ipaddr, 'netmask': netmask, 'module': module, }
def GetInfoString(): active_interfaces = ethtool.get_active_devices() all_interfaces = GetInterfaceList() for i in active_interfaces: if ethtool.get_flags('%s' % i) & ethtool.IFF_POINTOPOINT: active_interfaces.remove(i) ret = '' for inter in active_interfaces: if inter in all_interfaces: all_interfaces.remove(inter) else: continue t = 'Static' if IsInterfaceDHCP(inter): t = 'DHCP' ret = ret + ' %s - Active, %s\n' % (inter, t) ret = ret + ' IP: %s\n' % ethtool.get_ipaddr(inter) ret = ret + ' Netmask: %s\n' % ethtool.get_netmask(inter) ret = ret + ' HWAddr: %s\n' % ethtool.get_hwaddr(inter) for inter in all_interfaces: t = 'Static' if IsInterfaceDHCP(inter): t = 'DHCP' ret = ret + ' %s - Inactive, %s\n' % (inter, t) if t == 'Static': ip, mask, gw, dns = GetInterfaceConf(inter) ret = ret + ' IP: %s\n' % ip ret = ret + ' Netmask: %s\n' % mask ret = ret + ' HWAddr: %s\n' % ethtool.get_hwaddr(inter) return ret
def set_promisc(dev, on=True): flags = ethtool.get_flags(dev) if bool(flags & ethtool.IFF_PROMISC) != on: if on: flags |= ethtool.IFF_PROMISC else: flags &= ~ethtool.IFF_PROMISC set_flags(dev, flags)
def _functions_accepting_devnames(self, devname): self.assertIsString(devname) scraped = ifconfig.get_device_by_name(devname) self.assertIsString(ethtool.get_broadcast(devname)) self.assertEqualIpv4Str(ethtool.get_broadcast(devname), scraped.broadcast) self.assertIsStringExceptForLoopback( ethtool.get_businfo, devname, '[Errno 95] Operation not supported') # ethtool.get_coalesce(devname) # this gives me: # IOError: [Errno 95] Operation not supported # on my test box self.assertIsInt(ethtool.get_flags(devname)) # flagsint cannot be obtained from old ifconfig format if not ifconfig.oldFormat: self.assertEqual(ethtool.get_flags(devname), scraped.flagsint) self.assertIsInt(ethtool.get_gso(devname)) self.assertIsString(ethtool.get_hwaddr(devname)) self.assertEqualHwAddr(ethtool.get_hwaddr(devname), scraped.hwaddr) self.assertIsString(ethtool.get_ipaddr(devname)) self.assertEqual(ethtool.get_ipaddr(devname), scraped.inet) self.assertIsStringExceptForLoopback( ethtool.get_module, devname, '[Errno 95] Operation not supported') self.assertIsString(ethtool.get_netmask(devname)) self.assertEqual(ethtool.get_netmask(devname), scraped.netmask) #self.assertRaisesIOError(ethtool.get_ringparam, (devname, ), # '[Errno 95] Operation not supported') # Disabling until BZ#703089 is investigated #self.assertIsInt(ethtool.get_sg(devname)) #self.assertIsInt(ethtool.get_ufo(devname)) self.assertIsInt(ethtool.get_tso(devname))
def readIfaceOperstate(self, ifid): """ Return the operational state of the interface. :returns: ``'up'`` if interface is up. ``'down'`` or ``0`` id it's down. """ try: flags = ethtool.get_flags(ifid) except IOError: return '0' return 'up' if flags & ethtool.IFF_RUNNING else 'down'
def __getattr__(self, attr): flag = "IFF_%s" % attr[3:].upper() if attr.startswith("is_") and flag in self.IFF_LIST: import ethtool return ethtool.get_flags(self.name) & getattr(ethtool, flag) > 0 if hasattr(self._info, attr): return getattr(self._info, attr) else: raise AttributeError("'%s' object has no attribute '%s'" % (self.__class__.__name__, attr))
def operstate(dev): """Get the operstate status of a device. Args: dev (str): name of the device. Returns: str: "up" or "down" """ flags = ethtool.get_flags(encode_value(dev)) return 'up' if flags & (ethtool.IFF_RUNNING | ethtool.IFF_UP) else 'down'
def _functions_accepting_devnames(self, devname): self.assertIsString(devname) scraped = ifconfig.get_device_by_name(devname) self.assertIsString(ethtool.get_broadcast(devname)) self.assertEqualIpv4Str(ethtool.get_broadcast(devname), scraped.broadcast) self.assertIsStringExceptForLoopback(ethtool.get_businfo, devname, "[Errno 95] Operation not supported") # ethtool.get_coalesce(devname) # this gives me: # IOError: [Errno 95] Operation not supported # on my test box self.assertIsInt(ethtool.get_flags(devname)) # flagsint cannot be obtained from old ifconfig format if not ifconfig.oldFormat: self.assertEqual(ethtool.get_flags(devname), scraped.flagsint) self.assertIsInt(ethtool.get_gso(devname)) self.assertIsString(ethtool.get_hwaddr(devname)) self.assertEqualHwAddr(ethtool.get_hwaddr(devname), scraped.hwaddr) self.assertIsString(ethtool.get_ipaddr(devname)) self.assertEqual(ethtool.get_ipaddr(devname), scraped.inet) self.assertIsStringExceptForLoopback(ethtool.get_module, devname, "[Errno 95] Operation not supported") self.assertIsString(ethtool.get_netmask(devname)) self.assertEqual(ethtool.get_netmask(devname), scraped.netmask) # self.assertRaisesIOError(ethtool.get_ringparam, (devname, ), # '[Errno 95] Operation not supported') # Disabling until BZ#703089 is investigated # self.assertIsInt(ethtool.get_sg(devname)) # self.assertIsInt(ethtool.get_ufo(devname)) self.assertIsInt(ethtool.get_tso(devname))
def getNonLoopbackAddresses(): devices = ethtool.get_active_devices() iplist = [] for device in devices: try: flags = ethtool.get_flags(device) if flags and not (flags & ethtool.IFF_LOOPBACK): iplist.append(ethtool.get_ipaddr(device)) except IOError as e: logging.error("unable to get ipaddr/flags for %s: %s" % (device, e)) return set(iplist)
def show_config(device): ipaddr = ethtool.get_ipaddr(device) netmask = ethtool.get_netmask(device) flags = ethtool.get_flags(device) print '%-9.9s' % device, if not (flags & ethtool.IFF_LOOPBACK): print "HWaddr %s" % ethtool.get_hwaddr(device), print ''' inet addr:%s''' % ipaddr, if not (flags & (ethtool.IFF_LOOPBACK | ethtool.IFF_POINTOPOINT)): print "Bcast:%s" % ethtool.get_broadcast(device), print ''' Mask:%s %s ''' % (netmask, flags2str(flags))
def getAllNetworkInterfaces(self): interfaces = list() try: for dev in ethtool.get_active_devices(): flags = ethtool.get_flags(dev) if not(flags & ethtool.IFF_LOOPBACK): devinfo = ethtool.get_interfaces_info(dev)[0] interfaces.append({ 'name' : dev, 'inet' : [ ethtool.get_ipaddr(dev) ], 'inet6' : map(lambda ip: ip.address, devinfo.get_ipv6_addresses()), 'hw' : ethtool.get_hwaddr(dev) }) except: logging.exception("Error retrieving network interfaces.") return interfaces
def find_suitable_device(): active_devices = ethtool.get_active_devices() for device in active_devices: device_flags = ethtool.get_flags(device) str_flags = pifc.flags2str(device_flags) try: wireless_protocol = ethtool.get_wireless_protocol(device) except Exception: wireless_protocol = None if 'UP' in str_flags and 'RUNNING' in str_flags \ and 'BROADCAST' in str_flags and not wireless_protocol: return device return None
def _getNetworkInterfaces(interfaces=()): if interfaces: devices = interfaces else: devices = ethtool.get_active_devices() info = {} for dev in devices: try: info[dev] = {'ipaddr': ethtool.get_ipaddr(dev), 'flags': ethtool.get_flags(dev)} except IOError as e: logging.error("unable to get ipaddr/flags for %s: %s" % (dev, e)) info[dev] = {'ipaddr': None, 'flags': None} return info
def show_config(device): ipaddr = ethtool.get_ipaddr(device) netmask = ethtool.get_netmask(device) flags = ethtool.get_flags(device) print '%-9.9s' % device, if not (flags & ethtool.IFF_LOOPBACK): print "HWaddr %s" % ethtool.get_hwaddr(device), print ''' inet addr:%s''' % ipaddr, if not (flags & (ethtool.IFF_LOOPBACK | ethtool.IFF_POINTOPOINT)): print "Bcast:%s" % ethtool.get_broadcast(device), print ' Mask:%s' % netmask for info in ethtool.get_interfaces_info(device): for addr in info.get_ipv6_addresses(): print (" inet6 addr: %s/%s Scope: %s" % (addr.address, addr.netmask, addr.scope)) print ' %s' % flags2str(flags) print
def OnVPN(self, event): f = open("/etc/ppp/options.pptp") bufs = f.readlines() f.close() if bufs[-1] == "require-mppe-128\n": pass else: f = open("/etc/ppp/options.pptp", 'a') f.write("require-mppe-128\n") f.close() active_devices = ethtool.get_active_devices() if 'lo' in active_devices: active_devices.remove('lo') #if Setting.getVPNStatus().lower() == 'true': if len(active_devices) < 2: Setting.setVPNStatus('%s' % False) Setting.save() else: for i in active_devices: if ethtool.get_flags('%s' % i) & ethtool.IFF_POINTOPOINT: Setting.setVPNStatus('%s' % True) Setting.save() break elif i == active_devices[-1]: Setting.setVPNStatus('%s' % False) Setting.save() dlg = VPNDialog.VPNDialog(self) if Setting.getVPNAuto().lower() == 'true' and Setting.getVPNStatus().lower() == 'false': dlg.AutoLogin(event) if dlg.ShowModal() == wx.ID_OK: dlg.save() dlg.Destroy()
def _customization(self): nics = ethtool.get_devices() validValues = [] enslaved = set() interfaces = set() for nic in nics: try: flags = ethtool.get_flags(nic) if flags & ethtool.IFF_LOOPBACK: self.logger.debug('Detected loopback device %s' % nic) elif ethtool.get_module(nic) == 'bridge': self.logger.debug('Detected bridge device %s' % nic) if os.path.exists('/sys/class/net/%s/brif' % nic): slaves = os.listdir('/sys/class/net/%s/brif' % nic) self.logger.debug( 'Detected slaves for device %s: %s' % ( nic, ','.join(slaves) ) ) for iface in slaves: if iface in nics: enslaved.update([iface]) elif netinfo.isbonding(nic): slaves = netinfo.slaves(nic) if not slaves: self.logger.debug( 'Detected bond device %s without slaves' % nic ) else: self.logger.debug( 'Detected slaves for device %s: %s' % ( nic, ','.join(slaves) ) ) enslaved.update(slaves) interfaces.update([nic]) else: interfaces.update([nic]) except IOError as ioe: if ioe.errno in (None, errno.EOPNOTSUPP): self.logger.debug('Detected unsupported device %s' % nic) else: raise ioe validValues = list(interfaces - enslaved) self.logger.debug('Nics detected: %s' % ','.join(nics)) self.logger.debug('Nics enslaved: %s' % ','.join(enslaved)) self.logger.debug('Nics valid: %s' % ','.join(validValues)) if not validValues: if enslaved: raise RuntimeError( _( 'The following existing interfaces are not suitable ' 'for vdsm: {enslaved}. You might want to pull out an ' 'interface out of a bridge to be able to use it' ).format( enslaved=','.join(enslaved) ) ) else: raise RuntimeError(_('A Network interface is required')) interactive = self.environment[ ohostedcons.NetworkEnv.BRIDGE_IF ] is None if interactive: default = ohostedcons.Defaults.DEFAULT_BRIDGE_IF if default not in validValues: default = validValues[0] self.environment[ ohostedcons.NetworkEnv.BRIDGE_IF ] = self.dialog.queryString( name='ovehosted_bridge_if', note=_( 'Please indicate a nic to set ' '{bridge} bridge on: (@VALUES@) [@DEFAULT@]: ' ).format( bridge=self.environment[ ohostedcons.NetworkEnv.BRIDGE_NAME ] ), prompt=True, caseSensitive=True, default=default, validValues=validValues, )
__author__ = 'yippee' import ethtool interfaces = [] for dev in ethtool.get_devices(): flags = ethtool.get_flags(dev) if flags & ethtool.IFF_UP and \ not (flags & ethtool.IFF_LOOPBACK): # print dev, flags dev_info = ethtool.get_interfaces_info(dev)[0] # print dev_info.get_ipv4_addresses() interfaces.append( {'name': dev, 'inet': ethtool.get_ipv4_addresses(dev_info), 'inet6': ethtool.get_ipv6_addresses(dev_info), 'hw': ethtool.get_hwaddr(dev)}) import pprint pprint(interfaces)
def _customization(self): nics = ethtool.get_devices() validValues = [] enslaved = set() interfaces = set() for nic in nics: try: flags = ethtool.get_flags(nic) if flags & ethtool.IFF_LOOPBACK: self.logger.debug('Detected loopback device %s' % nic) elif ethtool.get_module(nic) == 'bridge': self.logger.debug('Detected bridge device %s' % nic) if os.path.exists('/sys/class/net/%s/brif' % nic): slaves = os.listdir('/sys/class/net/%s/brif' % nic) self.logger.debug('Detected slaves for device %s: %s' % (nic, ','.join(slaves))) for iface in slaves: if iface in nics: enslaved.update([iface]) elif netinfo.isbonding(nic): slaves = netinfo.slaves(nic) if not slaves: self.logger.debug( 'Detected bond device %s without slaves' % nic) else: self.logger.debug('Detected slaves for device %s: %s' % (nic, ','.join(slaves))) enslaved.update(slaves) interfaces.update([nic]) else: interfaces.update([nic]) except IOError as ioe: if ioe.errno in (None, errno.EOPNOTSUPP): self.logger.debug('Detected unsupported device %s' % nic) else: raise ioe validValues = list(interfaces - enslaved) self.logger.debug('Nics detected: %s' % ','.join(nics)) self.logger.debug('Nics enslaved: %s' % ','.join(enslaved)) self.logger.debug('Nics valid: %s' % ','.join(validValues)) if not validValues: if enslaved: raise RuntimeError( _('The following existing interfaces are not suitable ' 'for vdsm: {enslaved}. You might want to pull out an ' 'interface out of a bridge to be able to use it').format( enslaved=','.join(enslaved))) else: raise RuntimeError(_('A Network interface is required')) interactive = self.environment[ ohostedcons.NetworkEnv.BRIDGE_IF] is None if interactive: default = ohostedcons.Defaults.DEFAULT_BRIDGE_IF if default not in validValues: default = validValues[0] self.environment[ ohostedcons.NetworkEnv.BRIDGE_IF] = self.dialog.queryString( name='ovehosted_bridge_if', note=_( 'Please indicate a nic to set ' '{bridge} bridge on: (@VALUES@) [@DEFAULT@]: ').format( bridge=self.environment[ ohostedcons.NetworkEnv.BRIDGE_NAME]), prompt=True, caseSensitive=True, default=default, validValues=validValues, )