Change in vdsm[master]: mastapatch

asegurap at redhat.com asegurap at redhat.com
Mon Nov 25 10:11:12 UTC 2013


Antoni Segura Puimedon has uploaded a new change for review.

Change subject: mastapatch
......................................................................

mastapatch

Change-Id: I8c53f64e2c1851adf5ed510728bf486340a34882
Signed-off-by: Antoni S. Puimedon <asegurap at redhat.com>
---
M lib/vdsm/ipwrapper.py
M lib/vdsm/netinfo.py
2 files changed, 64 insertions(+), 34 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/14/21614/1

diff --git a/lib/vdsm/ipwrapper.py b/lib/vdsm/ipwrapper.py
index 5b7a549..e27f189 100644
--- a/lib/vdsm/ipwrapper.py
+++ b/lib/vdsm/ipwrapper.py
@@ -70,6 +70,15 @@
     TEAM = 'team'
     VETH = 'veth'
 
+    def fakeNicTypes(cls):
+        return (cls.DUMMY, cls.VETH)
+
+    def nicTypes(cls):
+        return (cls.NIC, cls.DUMMY, cls.VETH)
+
+    def types(cls):
+        return [linkType for linkType in vars(cls) if not callable(linkType)]
+
 
 @equals
 class Link(object):
@@ -99,6 +108,17 @@
     def __repr__(self):
         return '%s: %s(%s) %s' % (self.index, self.name, self.type,
                                   self.address)
+
+    def __hash__(self):
+        return hash((self.index, self.name))
+
+    def __eq__(self, other):
+        for key in vars(self):
+            if callable(self.__dict__[key]):
+                continue
+            if self.__dict__[key] != getattr(other, key, None):
+                return False
+        return True
 
     @staticmethod
     def _parse(text):
@@ -203,7 +223,7 @@
         Returns True iff vdsm config marks the DUMMY or VETH dev to be reported
         as NIC.
         """
-        if self.isDUMMY() or self.isVETH():
+        if self.type in LinkType.fakeNicTypes():
             return anyFnmatch(self.name, self._fakeNics)
         return False
 
diff --git a/lib/vdsm/netinfo.py b/lib/vdsm/netinfo.py
index 1dc7455..bcca487 100644
--- a/lib/vdsm/netinfo.py
+++ b/lib/vdsm/netinfo.py
@@ -34,6 +34,7 @@
 from .config import config
 from . import constants
 from .ipwrapper import getLink, getLinks
+from .ipwrapper import LinkType
 from .ipwrapper import Route
 from .ipwrapper import routeShowAllDefaultGateways
 from . import libvirtconnection
@@ -67,41 +68,52 @@
 OPERSTATE_UP = 'up'
 
 
+class DevicePool(object):
+    _hiddenFilter = lambda x: not x.isHidden()
+
+    def __init__(self, *linkTypes):
+        self.devs = dict((linkType, set()) for linkType in linkTypes)
+
+    def __iter__(self):
+        return self.devs.__iter__()
+
+    def __getitem__(self, key):
+        return self.devs.__getitem__(key)
+
+    def __setitem__(self, key, value):
+        self.devs.__setitem__(key, value)
+
+    def iterDevices(self, hidden=False):
+        return self.iterLinkTypes(self.devs.keys(), hidden)
+
+    def iterLinkTypes(self, linkTypes, hidden=False):
+        for dev in chain(*(self.devs[linkType] for linkType in linkTypes)):
+            if hidden or not dev.isHidden():
+                yield dev
+
+
+devicePool = DevicePool(*LinkType.types())
+
+
 def nics():
     """Returns a list of nics and fake nics devices available (not hidden) to
     be used by vdsm."""
-    return [dev.name for dev in getLinks() if dev.isNICLike() and
-            not dev.isHidden()]
+    return [dev.name for dev in self.iterLinkTypes(LinkType.nicTypes())]
 
 
 def bondings():
     """
     Returns list of available bonds managed by vdsm.
     """
-
-    hidden_bonds = config.get('vars', 'hidden_bonds').split(',')
-    res = []
-    try:
-        for bond in open(BONDING_MASTERS).readline().split():
-            if not anyFnmatch(bond, hidden_bonds):
-                res.append(bond)
-    except IOError as e:
-        if e.errno == os.errno.ENOENT:
-            return res
-        else:
-            raise
-
-    return res
+    return [dev.name for dev in devicePool.iterLinkTypes([LinkType.BOND])]
 
 
 def vlans():
-    return [link.name for link in getLinks() if link.isVLAN() and
-            not link.isHidden()]
+    return [dev.name for dev in devicePool.iterLinkTypes([LinkType.VLAN])]
 
 
 def bridges():
-    return [b.split('/')[-2] for b in iglob('/sys/class/net/*/bridge')
-            if b.split('/')[-2] != DUMMY_BRIDGE]
+    return [dev.name for dev in devicePool.iterLinkTypes([LinkType.BRIDGE])]
 
 
 def networks():
@@ -222,10 +234,6 @@
 
 def isvirtio(dev):
     return 'virtio' in os.readlink('/sys/class/net/%s/device' % dev)
-
-
-def isbonding(dev):
-    return os.path.exists('/sys/class/net/%s/bonding' % dev)
 
 
 def operstate(dev):
@@ -542,12 +550,11 @@
         except KeyError:
             continue  # Do not report missing libvirt networks.
 
-    links = filter(lambda x: not x.isHidden(), getLinks())
-    d['bridges'] = dict(_bridgeinfo(dev, gateways, ipv6routes) for dev
-                        in links if dev.isBRIDGE())
-    d['nics'] = dict(_nicinfo(dev, paddr) for dev in links if dev.isNICLike())
-    d['bondings'] = dict(_bondinfo(dev) for dev in links if dev.isBOND())
-    d['vlans'] = dict(_vlaninfo(dev) for dev in links if dev.isVLAN())
+    d['bridges'] = dict(_bridgeinfo(dev, gateways, ipv6routes) for
+                        dev in devicePool[LinkType.BRIDGE])
+    d['bondings'] = dict(_bondinfo(dev) for dev in devicePool[LinkType.BOND])
+    d['vlans'] = dict(_vlaninfo(dev) for dev in devicePool[LinkType.VLAN])
+    d['nics'] = dict(_nicinfo(dev, paddr) for dev in devicePool[LinkType.NIC])
     return d
 
 
@@ -564,10 +571,13 @@
     return str(out).split(':')[1].strip().split('@')[1]
 
 
-def getVlanID(vlan):
+def getVlanID(vlanName):
     """ Return the ID of the given VLAN. """
-    vlanLink = getLink(vlan)
-    return int(vlanLink.vlanid)
+    with open(PROC_NET_VLAN + vlanName) as vlanProcFile:
+        tokens = vlanProcFile.readline().split(' ')
+        for index, token in enumerate(tokens):
+            if token == 'VID:':
+                return int(tokens[index+1])
 
 
 def getIpAddresses():


-- 
To view, visit http://gerrit.ovirt.org/21614
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8c53f64e2c1851adf5ed510728bf486340a34882
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Antoni Segura Puimedon <asegurap at redhat.com>


More information about the vdsm-patches mailing list