aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2007-12-19 14:51:02 +0000
committerKeir Fraser <keir.fraser@citrix.com>2007-12-19 14:51:02 +0000
commitf28baafaafbf79b286344f302e04ad8659efba89 (patch)
tree4b259d73a2b0e67c39af98090b2e605f01504d24
parentadd89911d28507257f2cbc22ab3cde1dd5278a77 (diff)
downloadxen-f28baafaafbf79b286344f302e04ad8659efba89.tar.gz
xen-f28baafaafbf79b286344f302e04ad8659efba89.tar.bz2
xen-f28baafaafbf79b286344f302e04ad8659efba89.zip
xend: Fix device duplicate check.
Signed-off-by: Yosuke Iwamatsu <y-iwamatsu@ab.jp.nec.com>
-rw-r--r--tools/python/xen/xend/XendConfig.py17
1 files changed, 10 insertions, 7 deletions
diff --git a/tools/python/xen/xend/XendConfig.py b/tools/python/xen/xend/XendConfig.py
index 76f52b6e41..2ca65a525c 100644
--- a/tools/python/xen/xend/XendConfig.py
+++ b/tools/python/xen/xend/XendConfig.py
@@ -31,7 +31,7 @@ from xen.xend.XendConstants import DOM_STATE_HALTED
from xen.xend.xenstore.xstransact import xstransact
from xen.xend.server.BlktapController import blktap_disk_types
from xen.xend.server.netif import randomMAC
-from xen.util.blkif import blkdev_name_to_number
+from xen.util.blkif import blkdev_name_to_number, blkdev_uname_to_file
from xen.util import xsconstants
import xen.util.auxbin
@@ -981,7 +981,7 @@ class XendConfig(dict):
def device_duplicate_check(self, dev_type, dev_info, defined_config):
defined_devices_sxpr = self.all_devices_sxpr(target = defined_config)
- if dev_type == 'vbd':
+ if dev_type == 'vbd' or dev_type == 'tap':
dev_uname = dev_info.get('uname')
blkdev_name = dev_info.get('dev')
devid = self._blkdev_name_to_number(blkdev_name)
@@ -989,10 +989,13 @@ class XendConfig(dict):
return
for o_dev_type, o_dev_info in defined_devices_sxpr:
- if dev_type == o_dev_type:
- if dev_uname == sxp.child_value(o_dev_info, 'uname'):
- raise XendConfigError('The uname "%s" is already defined' %
- dev_uname)
+ if o_dev_type == 'vbd' or o_dev_type == 'tap':
+ blkdev_file = blkdev_uname_to_file(dev_uname)
+ o_dev_uname = sxp.child_value(o_dev_info, 'uname')
+ o_blkdev_file = blkdev_uname_to_file(o_dev_uname)
+ if blkdev_file == o_blkdev_file:
+ raise XendConfigError('The file "%s" is already used' %
+ blkdev_file)
o_blkdev_name = sxp.child_value(o_dev_info, 'dev')
o_devid = self._blkdev_name_to_number(o_blkdev_name)
if o_devid != None and devid == o_devid:
@@ -1004,7 +1007,7 @@ class XendConfig(dict):
for o_dev_type, o_dev_info in defined_devices_sxpr:
if dev_type == o_dev_type:
- if dev_mac == sxp.child_value(o_dev_info, 'mac'):
+ if dev_mac.lower() == sxp.child_value(o_dev_info, 'mac').lower():
raise XendConfigError('The mac "%s" is already defined' %
dev_mac)