xend: Allow off-line NIC removal
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 12 Mar 2009 10:59:53 +0000 (10:59 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 12 Mar 2009 10:59:53 +0000 (10:59 +0000)
Match a MAC address so device_destroy can remove off-line NICs.

Signed-off-by: John Levon <john.levon@sun.com>
tools/python/xen/xend/server/netif.py

index 469818e8c9c68ece787420651da8c6f5c84701e5..1f0d2a047ba41d3ad397f72d1e2f4f92726c0440 100644 (file)
@@ -24,7 +24,7 @@ import os
 import random
 import re
 
-from xen.xend import XendOptions
+from xen.xend import XendOptions, sxp
 from xen.xend.server.DevController import DevController
 from xen.xend.XendError import VmError
 from xen.xend.XendXSPolicyAdmin import XSPolicyAdminInstance
@@ -196,3 +196,23 @@ class NetifController(DevController):
                 result[x] = y
 
         return result
+
+    # match a VIF ID from xenstore, or a MAC address stored in the domain config
+    def convertToDeviceNumber(self, devid):
+        try:
+            return int(devid)
+        except ValueError:
+            if type(devid) is not str:
+                raise VmError("devid %s is wrong type" % str(devid))
+            try:
+                dev = devid.split('/')[-1]
+                return (int(dev))
+            except ValueError:
+                devs = [d for d in self.vm.info.all_devices_sxpr()
+                    if d[0] == 'vif']
+                for nr in range(len(devs)):
+                    dev_type, dev_info = devs[nr]
+                    if (sxp.child_value(dev_info, 'mac').lower() ==
+                        devid.lower()):
+                        return nr
+                raise VmError("unknown devid %s" % str(devid))