[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] Implement network.get_VIFs.



# HG changeset patch
# User Ewan Mellor <ewan@xxxxxxxxxxxxx>
# Date 1167308789 0
# Node ID d759e9df902f4a4b0be5b25cd9cb8ef08e5d5174
# Parent  ce49c9d789281c40bbc9d451acca2f539d51b7b1
Implement network.get_VIFs.

Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>
---
 tools/python/xen/xend/XendDomain.py     |   10 ++++++++++
 tools/python/xen/xend/XendDomainInfo.py |    8 ++++++--
 tools/python/xen/xend/XendNetwork.py    |   11 ++++++++++-
 tools/python/xen/xend/XendNode.py       |   16 ++++++++++++++++
 tools/python/xen/xend/XendPIF.py        |    4 ++--
 5 files changed, 44 insertions(+), 5 deletions(-)

diff -r ce49c9d78928 -r d759e9df902f tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py       Wed Dec 27 16:16:10 2006 +0000
+++ b/tools/python/xen/xend/XendDomain.py       Thu Dec 28 12:26:29 2006 +0000
@@ -605,6 +605,16 @@ class XendDomain:
         finally:
             self.domains_lock.release()
 
+    def get_all_vms(self):
+        self.domains_lock.acquire()
+        try:
+            result = self.domains.values()
+            result += [x for x in self.managed_domains.values() if
+                       x not in result]
+            return result
+        finally:
+            self.domains_lock.release()
+
     def get_vm_by_uuid(self, vm_uuid):
         self.domains_lock.acquire()
         try:
diff -r ce49c9d78928 -r d759e9df902f tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Wed Dec 27 16:16:10 2006 +0000
+++ b/tools/python/xen/xend/XendDomainInfo.py   Thu Dec 28 12:26:29 2006 +0000
@@ -1967,8 +1967,12 @@ class XendDomainInfo:
                     config['device'] = 'eth%d' % devid
                 else:
                     config['device'] = ''
-                    
-            config['network'] = '' # Invalid for Xend
+
+            if not config.has_key('network'):
+                config['network'] = \
+                    XendNode.instance().bridge_to_network(
+                    config.get('bridge')).uuid
+
             config['MTU'] = 1500 # TODO
             config['io_read_kbs'] = 0.0
             config['io_write_kbs'] = 0.0
diff -r ce49c9d78928 -r d759e9df902f tools/python/xen/xend/XendNetwork.py
--- a/tools/python/xen/xend/XendNetwork.py      Wed Dec 27 16:16:10 2006 +0000
+++ b/tools/python/xen/xend/XendNetwork.py      Thu Dec 28 12:26:29 2006 +0000
@@ -21,6 +21,7 @@ import struct
 import struct
 import socket
 
+import XendDomain
 import XendNode
 from XendLogging import log
 
@@ -83,7 +84,15 @@ class XendNetwork:
             XendNode.instance().save_networks()
 
     def get_VIF_UUIDs(self):
-        return []
+        result = []
+        vms = XendDomain.instance().get_all_vms()
+        for vm in vms:
+            vifs = vm.get_vifs()
+            for vif in vifs:
+                vif_cfg = vm.get_dev_xenapi_config('vif', vif)
+                if vif_cfg['network'] == self.uuid:
+                    result.append(vif)
+        return result
 
     def get_PIF_UUIDs(self):
         return [x.uuid for x in XendNode.instance().pifs.values()
diff -r ce49c9d78928 -r d759e9df902f tools/python/xen/xend/XendNode.py
--- a/tools/python/xen/xend/XendNode.py Wed Dec 27 16:16:10 2006 +0000
+++ b/tools/python/xen/xend/XendNode.py Thu Dec 28 12:26:29 2006 +0000
@@ -289,6 +289,22 @@ class XendNode:
     def get_network(self, network_ref):
         return self.networks[network_ref]
 
+    def bridge_to_network(self, bridge):
+        if not bridge:
+            rc, bridge = commands.getstatusoutput(
+                'brctl show | cut -d "\n" -f 2 | cut -f 1')
+            if rc != 0 or not bridge:
+                raise Exception(
+                    'Could not find default bridge, and none was specified')
+
+        bridges = Brctl.get_state()
+        if bridge not in bridges:
+            raise Exception('Bridge %s is not up' % bridge)
+        for pif in self.pifs.values():
+            if pif.interface_name() in bridges[bridge]:
+                return pif.network
+        raise Exception('Bridge %s is not connected to a network' % bridge)
+
 
     #
     # Getting host information.
diff -r ce49c9d78928 -r d759e9df902f tools/python/xen/xend/XendPIF.py
--- a/tools/python/xen/xend/XendPIF.py  Wed Dec 27 16:16:10 2006 +0000
+++ b/tools/python/xen/xend/XendPIF.py  Thu Dec 28 12:26:29 2006 +0000
@@ -134,7 +134,7 @@ class XendPIF:
 
 
     def refresh(self, bridges):
-        ifname = self._ifname()
+        ifname = self.interface_name()
         rc, _ = _cmd('ip link show %s', ifname)
         if rc != 0:
             # Interface does not exist.  If it's a physical interface, then
@@ -172,7 +172,7 @@ class XendPIF:
         log.info('Added network interface %s to bridge %s', ifname, brname)
 
 
-    def _ifname(self):
+    def interface_name(self):
         if self.vlan:
             return '%s.%s' % (self.name, self.vlan)
         else:

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.