def _detectType(name): """Returns the LinkType for the specified device.""" # TODO: Add support for virtual functions detectedType = None try: driver = ethtool.driver_name(name) except IOError as ioe: if ioe.errno == errno.EOPNOTSUPP: if name == 'lo': detectedType = LinkType.LOOPBACK else: detectedType = LinkType.DUMMY return detectedType else: raise # Reraise other errors like ENODEV if driver in ( LinkType.BRIDGE, LinkType.MACVLAN, LinkType.TUN, LinkType.OVS, LinkType.TEAM, LinkType.VETH, ): detectedType = driver elif driver == 'bonding': detectedType = LinkType.BOND elif 'VLAN' in driver or 'vlan' in driver: detectedType = LinkType.VLAN elif os.path.exists('/sys/class/net/%s/device/physfn/' % name): detectedType = LinkType.VF else: detectedType = LinkType.NIC return detectedType
def _detectType(name): """Returns the LinkType for the specified device.""" # TODO: Add support for virtual functions detectedType = None try: driver = ethtool.driver_name(name) except IOError as ioe: if ioe.errno == errno.EOPNOTSUPP: if name == 'lo': detectedType = LinkType.LOOPBACK else: detectedType = LinkType.DUMMY return detectedType else: raise # Reraise other errors like ENODEV if driver in (LinkType.BRIDGE, LinkType.MACVLAN, LinkType.TUN, LinkType.OVS, LinkType.TEAM, LinkType.VETH): detectedType = driver elif driver == 'bonding': detectedType = LinkType.BOND elif 'VLAN' in driver or 'vlan' in driver: detectedType = LinkType.VLAN elif os.path.exists('/sys/class/net/%s/device/physfn/' % name): detectedType = LinkType.VF else: detectedType = LinkType.NIC return detectedType
def _ibHackedSpeed(nic_name): """If the nic is an InfiniBand device, return a speed of 10000 Mbps. This is only needed until the kernel reports ib*/speed, see https://bugzilla.redhat.com/show_bug.cgi?id=1101314 """ try: return 10000 if driver_name(nic_name) == 'ib_ipoib' else 0 except IOError: return 0
def get_alternative_type(device): """ Attemt to detect the iface type through alternative means. """ if os.path.exists(os.path.join(NET_PATH, device, 'device/physfn')): return Type.VF try: driver_name = ethtool.driver_name(device) iface_type = Type.NIC if driver_name else None except IOError as ioe: if ioe.errno == errno.EOPNOTSUPP: iface_type = Type.LOOPBACK if device == 'lo' else Type.DUMMY else: raise return iface_type
def _is_vmfex(self): return ethtool.driver_name(self.name) == 'enic'
def testUtf8BridgeEthtoolDrvinfo(self): self.assertEqual(ethtool.driver_name(self._bridge.devName), ipwrapper.LinkType.BRIDGE)
def test_bridge_ethtool_drvinfo(self, bridge0): bridge_name = bridge0.devName assert ethtool.driver_name(bridge_name) == ipwrapper.LinkType.BRIDGE
def test_utf8_bridge_ethtool_drvinfo(self, unicode_bridge): driver_name = ethtool.driver_name(unicode_bridge.devName) assert driver_name == ipwrapper.LinkType.BRIDGE
def test_detect_device_driver(self): with bridge_device() as br: self.assertEqual('bridge', ethtool.driver_name(br.devName))
def testUtf8BridgeEthtoolDrvinfo(self, unicode_bridge): driver_name = ethtool.driver_name(unicode_bridge.devName) assert driver_name == ipwrapper.LinkType.BRIDGE
def testUtf8BridgeEthtoolDrvinfo(self): self.assertEqual( ethtool.driver_name(self._bridge.devName), ipwrapper.LinkType.BRIDGE)
def test_detect_device_driver(self, bridge): assert ethtool.driver_name(bridge) == 'bridge'