# HG changeset patch
# User emellor@ewan
# Node ID 82e8a1d7230fbbbd3128880e0914aef11658a432
# Parent b9e5573785bb3ceca1f72fcc8a6e9704677cd926
Added DevController.configuration and configurations methods. These parse the
store for the current device configuration, and convert it back into the
s-expression used in the config files and the save files. This means that we
can bring the devices up properly on restore.
Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>
diff -r b9e5573785bb -r 82e8a1d7230f
tools/python/xen/xend/server/DevController.py
--- a/tools/python/xen/xend/server/DevController.py Thu Sep 29 15:57:23 2005
+++ b/tools/python/xen/xend/server/DevController.py Fri Sep 30 09:48:49 2005
@@ -75,10 +75,26 @@
"""
frontpath = self.frontendPath(devid)
- backpath = xstransact.Read("%s/backend" % frontpath)
+ backpath = xstransact.Read(frontpath, "backend")
xstransact.Remove(frontpath)
xstransact.Remove(backpath)
+
+
+ def configurations(self):
+ return map(lambda x: self.configuration(int(x)),
+ xstransact.List(self.frontendRoot()))
+
+
+ def configuration(self, devid):
+ """@return an s-expression giving the current configuration of the
+ specified device. This would be suitable for giving to {@link
+ #createDevice} in order to recreate that device."""
+
+ backdomid = int(xstransact.Read(self.frontendPath(devid),
+ "backend-id"))
+
+ return [self.deviceClass, ['backend', backdomid]]
def sxprs(self):
@@ -150,6 +166,12 @@
raise
+ def readBackend(self, devid, *args):
+ frontpath = self.frontendPath(devid)
+ backpath = xstransact.Read(frontpath, "backend")
+ return xstransact.Read(backpath, *args)
+
+
## private:
def writeDetails(self, config, devid, backDetails, frontDetails):
@@ -211,4 +233,5 @@
def frontendMiscPath(self):
- return "%s/device-misc/%s" % (self.vm.getPath(), self.deviceClass)
+ return "%s/device-misc/%s" % (self.vm.getPath(),
+ self.deviceClass)
diff -r b9e5573785bb -r 82e8a1d7230f tools/python/xen/xend/server/blkif.py
--- a/tools/python/xen/xend/server/blkif.py Thu Sep 29 15:57:23 2005
+++ b/tools/python/xen/xend/server/blkif.py Fri Sep 30 09:48:49 2005
@@ -40,14 +40,15 @@
def getDeviceDetails(self, config):
"""@see DevController.getDeviceDetails"""
- typedev = sxp.child_value(config, 'dev')
- if re.match('^ioemu:', typedev):
+ dev = sxp.child_value(config, 'dev')
+ if re.match('^ioemu:', dev):
return (0,{},{})
- devid = blkif.blkdev_name_to_number(sxp.child_value(config, 'dev'))
+ devid = blkif.blkdev_name_to_number(dev)
(typ, params) = string.split(sxp.child_value(config, 'uname'), ':', 1)
- back = { 'type' : typ,
+ back = { 'dev' : dev,
+ 'type' : typ,
'params' : params
}
@@ -57,3 +58,22 @@
front = { 'virtual-device' : "%i" % devid }
return (devid, back, front)
+
+
+ def configuration(self, devid):
+ """@see DevController.configuration"""
+
+ result = DevController.configuration(self, devid)
+
+ (dev, typ, params, ro) = self.readBackend(devid,
+ 'dev', 'type', 'params',
+ 'read-only')
+
+ result.append(['dev', dev])
+ result.append(['uname', typ + ":" + params])
+ if ro:
+ result.append(['mode', 'r'])
+ else:
+ result.append(['mode', 'w'])
+
+ return result
diff -r b9e5573785bb -r 82e8a1d7230f tools/python/xen/xend/server/netif.py
--- a/tools/python/xen/xend/server/netif.py Thu Sep 29 15:57:23 2005
+++ b/tools/python/xen/xend/server/netif.py Fri Sep 30 09:48:49 2005
@@ -23,8 +23,12 @@
import os
from xen.xend import sxp
+from xen.xend import XendRoot
from xen.xend.server.DevController import DevController
+
+
+xroot = XendRoot.instance()
class NetifController(DevController):
@@ -37,9 +41,6 @@
def getDeviceDetails(self, config):
"""@see DevController.getDeviceDetails"""
-
- from xen.xend import XendRoot
- xroot = XendRoot.instance()
def _get_config_ipaddr(config):
val = []
@@ -68,3 +69,22 @@
'mac' : mac }
return (devid, back, front)
+
+
+ def configuration(self, devid):
+ """@see DevController.configuration"""
+
+ result = DevController.configuration(self, devid)
+
+ (script, ip, bridge, mac) = self.readBackend(devid,
+ 'script', 'ip', 'bridge',
+ 'mac')
+
+ result.append(['script',
+ script.replace(xroot.network_script_dir + os.sep, "")])
+ if ip:
+ result.append(['ip', ip.split(" ")])
+ result.append(['bridge', bridge])
+ result.append(['mac', mac])
+
+ return result
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|