Mailing List Archive

Move blkif utility functions into xen.util.
ChangeSet 1.1327.2.15, 2005/04/28 14:28:15+01:00, mjw@wray-m-3.hpl.hp.com

Move blkif utility functions into xen.util.
Importing xen.xend.server.blkif from xm create caused
errors.

Signed-off-by: Mike Wray <mike.wray@hp.com>



util/blkif.py | 84 ++++++++++++++++++++++++++++++++++++++++++++
xend/XendDomainInfo.py | 2 -
xend/server/blkif.py | 92 ++-----------------------------------------------
xm/create.py | 2 -
4 files changed, 91 insertions(+), 89 deletions(-)


diff -Nru a/tools/python/xen/util/blkif.py b/tools/python/xen/util/blkif.py
--- /dev/null Wed Dec 31 16:00:00 196900
+++ b/tools/python/xen/util/blkif.py 2005-05-13 16:05:11 -04:00
@@ -0,0 +1,84 @@
+import os
+import re
+import string
+
+from xen.util.ip import _readline, _readlines
+
+def expand_dev_name(name):
+ if not name:
+ return name
+ if re.match( '^/dev/', name ):
+ return name
+ else:
+ return '/dev/' + name
+
+def blkdev_name_to_number(name):
+ """Take the given textual block-device name (e.g., '/dev/sda1',
+ 'hda') and return the device number used by the OS. """
+
+ n = expand_dev_name(name)
+
+ try:
+ return os.stat(n).st_rdev
+ except Exception, ex:
+ log.debug("exception looking up device number for %s: %s", name, ex)
+ pass
+
+ if re.match( '/dev/sd[a-p]([0-9]|1[0-5])', n):
+ return 8 * 256 + 16 * (ord(n[7:8]) - ord('a')) + int(n[8:])
+
+ if re.match( '/dev/hd[a-t]([1-9]|[1-5][0-9]|6[0-3])?', n):
+ ide_majors = [. 3, 22, 33, 34, 56, 57, 88, 89, 90, 91 ]
+ major = ide_majors[(ord(n[7:8]) - ord('a')) / 2]
+ minor = ((ord(n[7:8]) - ord('a')) % 2) * 64 + int(n[8:] or 0)
+ return major * 256 + minor
+
+ # see if this is a hex device number
+ if re.match( '^(0x)?[0-9a-fA-F]+$', name ):
+ return string.atoi(name,16)
+
+ return None
+
+def blkdev_segment(name):
+ """Take the given block-device name (e.g. '/dev/sda1', 'hda')
+ and return a dictionary { device, start_sector,
+ nr_sectors, type }
+ device: Device number of the given partition
+ start_sector: Index of first sector of the partition
+ nr_sectors: Number of sectors comprising this partition
+ type: 'Disk' or identifying name for partition type
+ """
+ val = None
+ n = blkdev_name_to_number(name)
+ if n:
+ val = { 'device' : n,
+ 'start_sector' : long(0),
+ 'nr_sectors' : long(1L<<63),
+ 'type' : 'Disk' }
+ return val
+
+def blkdev_uname_to_file(uname):
+ """Take a blkdev uname and return the corresponding filename."""
+ fn = None
+ if uname.find(":") != -1:
+ (typ, fn) = uname.split(":")
+ if typ == "phy" and not fn.startswith("/dev/"):
+ fn = "/dev/%s" %(fn,)
+ return fn
+
+def mount_mode(name):
+ mode = None
+ name = expand_dev_name(name)
+ lines = _readlines(os.popen('mount 2>/dev/null'))
+ exp = re.compile('^' + name + ' .*[\(,]r(?P<mode>[ow])[,\)]')
+ for line in lines:
+ pm = exp.match(line)
+ if not pm: continue
+ mode = pm.group('mode')
+ break
+ if mode == 'w':
+ return mode
+ if mode == 'o':
+ mode = 'r'
+ return mode
+
diff -Nru a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py 2005-05-13 16:05:11 -04:00
+++ b/tools/python/xen/xend/XendDomainInfo.py 2005-05-13 16:05:11 -04:00
@@ -16,7 +16,7 @@
import xen.util.ip
from xen.util.ip import _readline, _readlines
from xen.xend.server import channel, controller
-from xen.xend.server.blkif import blkdev_uname_to_file
+from xen.util.blkif import blkdev_uname_to_file

from server.channel import channelFactory
import server.SrvDaemon; xend = server.SrvDaemon.instance()
diff -Nru a/tools/python/xen/xend/server/blkif.py b/tools/python/xen/xend/server/blkif.py
--- a/tools/python/xen/xend/server/blkif.py 2005-05-13 16:05:11 -04:00
+++ b/tools/python/xen/xend/server/blkif.py 2005-05-13 16:05:11 -04:00
@@ -1,11 +1,9 @@
# Copyright (C) 2004 Mike Wray <mike.wray@hp.com>
"""Support for virtual block devices.
"""
-
-import os
-import re
import string

+from xen.util import blkif
from xen.xend.XendError import XendError, VmError
from xen.xend import XendRoot
from xen.xend.XendLogging import log
@@ -16,86 +14,6 @@
from controller import CtrlMsgRcvr, Dev, DevController
from messages import *

-from xen.util.ip import _readline, _readlines
-
-def expand_dev_name(name):
- if not name:
- return name
- if re.match( '^/dev/', name ):
- return name
- else:
- return '/dev/' + name
-
-def blkdev_name_to_number(name):
- """Take the given textual block-device name (e.g., '/dev/sda1',
- 'hda') and return the device number used by the OS. """
-
- n = expand_dev_name(name)
-
- try:
- return os.stat(n).st_rdev
- except Exception, ex:
- log.debug("exception looking up device number for %s: %s", name, ex)
- pass
-
- if re.match( '/dev/sd[a-p]([0-9]|1[0-5])', n):
- return 8 * 256 + 16 * (ord(n[7:8]) - ord('a')) + int(n[8:])
-
- if re.match( '/dev/hd[a-t]([1-9]|[1-5][0-9]|6[0-3])?', n):
- ide_majors = [. 3, 22, 33, 34, 56, 57, 88, 89, 90, 91 ]
- major = ide_majors[(ord(n[7:8]) - ord('a')) / 2]
- minor = ((ord(n[7:8]) - ord('a')) % 2) * 64 + int(n[8:] or 0)
- return major * 256 + minor
-
- # see if this is a hex device number
- if re.match( '^(0x)?[0-9a-fA-F]+$', name ):
- return string.atoi(name,16)
-
- return None
-
-def blkdev_segment(name):
- """Take the given block-device name (e.g. '/dev/sda1', 'hda')
- and return a dictionary { device, start_sector,
- nr_sectors, type }
- device: Device number of the given partition
- start_sector: Index of first sector of the partition
- nr_sectors: Number of sectors comprising this partition
- type: 'Disk' or identifying name for partition type
- """
- val = None
- n = blkdev_name_to_number(name)
- if n:
- val = { 'device' : n,
- 'start_sector' : long(0),
- 'nr_sectors' : long(1L<<63),
- 'type' : 'Disk' }
- return val
-
-def blkdev_uname_to_file(uname):
- """Take a blkdev uname and return the corresponding filename."""
- fn = None
- if uname.find(":") != -1:
- (typ, fn) = uname.split(":")
- if typ == "phy" and not fn.startswith("/dev/"):
- fn = "/dev/%s" %(fn,)
- return fn
-
-def mount_mode(name):
- mode = None
- name = expand_dev_name(name)
- lines = _readlines(os.popen('mount 2>/dev/null'))
- exp = re.compile('^' + name + ' .*[\(,]r(?P<mode>[ow])[,\)]')
- for line in lines:
- pm = exp.match(line)
- if not pm: continue
- mode = pm.group('mode')
- break
- if mode == 'w':
- return mode
- if mode == 'o':
- mode = 'r'
- return mode
-
class BlkifBackend:
""" Handler for the 'back-end' channel to a block device driver domain
on behalf of a front-end domain.
@@ -280,7 +198,7 @@
raise VmError('vbd: Missing dev')
self.mode = sxp.child_value(config, 'mode', 'r')

- self.vdev = blkdev_name_to_number(self.dev)
+ self.vdev = blkif.blkdev_name_to_number(self.dev)
if not self.vdev:
raise VmError('vbd: Device not found: %s' % self.dev)

@@ -333,7 +251,7 @@
raise VmError("vbd: Segment %s is in read-only use" %
self.uname)

- segment = blkdev_segment(node)
+ segment = blkif.blkdev_segment(node)
if not segment:
raise VmError("vbd: Segment not found: uname=%s" % self.uname)
self.node = node
@@ -342,14 +260,14 @@
self.nr_sectors = segment['nr_sectors']

def check_mounted(self, name):
- mode = mount_mode(name)
+ mode = blkif.mount_mode(name)
xd = XendRoot.get_component('xen.xend.XendDomain')
for vm in xd.domains():
ctrl = vm.getDeviceController(self.getType(), error=False)
if (not ctrl): continue
for dev in ctrl.getDevices():
if dev is self: continue
- if dev.type == 'phy' and name == expand_dev_name(dev.params):
+ if dev.type == 'phy' and name == blkif.expand_dev_name(dev.params):
mode = dev.mode
if 'w' in mode:
return 'w'
diff -Nru a/tools/python/xen/xm/create.py b/tools/python/xen/xm/create.py
--- a/tools/python/xen/xm/create.py 2005-05-13 16:05:11 -04:00
+++ b/tools/python/xen/xm/create.py 2005-05-13 16:05:11 -04:00
@@ -11,7 +11,7 @@
from xen.xend import PrettyPrint
from xen.xend.XendClient import server, XendError
from xen.xend.XendBootloader import bootloader
-from xen.xend.server import blkif
+from xen.util import blkif

from xen.util import console_client


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