mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 18:21:39 +01:00
Merge.
This commit is contained in:
commit
b37f6a2f57
119 files changed
+5644
-4525
No files matched your search
@@ -844,7 +844,7 @@ static PyObject *xu_message_new(PyObject *self, PyObject *args)
|
||||
case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_CONNECT):
|
||||
P2C(blkif_be_connect_t, domid, u32);
|
||||
P2C(blkif_be_connect_t, blkif_handle, u32);
|
||||
P2C(blkif_be_connect_t, shmem_frame, memory_t);
|
||||
P2C(blkif_be_connect_t, shmem_frame, unsigned long);
|
||||
P2C(blkif_be_connect_t, shmem_ref, u32);
|
||||
P2C(blkif_be_connect_t, evtchn, u16);
|
||||
break;
|
||||
@@ -906,9 +906,9 @@ static PyObject *xu_message_new(PyObject *self, PyObject *args)
|
||||
case TYPE(CMSG_NETIF_BE, CMSG_NETIF_BE_CONNECT):
|
||||
P2C(netif_be_connect_t, domid, u32);
|
||||
P2C(netif_be_connect_t, netif_handle, u32);
|
||||
P2C(netif_be_connect_t, tx_shmem_frame, memory_t);
|
||||
P2C(netif_be_connect_t, tx_shmem_frame, unsigned long);
|
||||
P2C(netif_be_connect_t, tx_shmem_ref, u32);
|
||||
P2C(netif_be_connect_t, rx_shmem_frame, memory_t);
|
||||
P2C(netif_be_connect_t, rx_shmem_frame, unsigned long);
|
||||
P2C(netif_be_connect_t, rx_shmem_ref, u32);
|
||||
P2C(netif_be_connect_t, evtchn, u16);
|
||||
break;
|
||||
@@ -942,7 +942,7 @@ static PyObject *xu_message_new(PyObject *self, PyObject *args)
|
||||
P2C(usbif_fe_driver_status_changed_t, status, u32);
|
||||
break;
|
||||
case TYPE(CMSG_USBIF_FE, CMSG_USBIF_FE_INTERFACE_CONNECT):
|
||||
P2C(usbif_fe_interface_connect_t, shmem_frame, memory_t);
|
||||
P2C(usbif_fe_interface_connect_t, shmem_frame, unsigned long);
|
||||
break;
|
||||
case TYPE(CMSG_USBIF_FE, CMSG_USBIF_FE_INTERFACE_DISCONNECT):
|
||||
break;
|
||||
@@ -956,7 +956,7 @@ static PyObject *xu_message_new(PyObject *self, PyObject *args)
|
||||
break;
|
||||
case TYPE(CMSG_USBIF_BE, CMSG_USBIF_BE_CONNECT):
|
||||
P2C(usbif_be_connect_t, domid, domid_t);
|
||||
P2C(usbif_be_connect_t, shmem_frame, memory_t);
|
||||
P2C(usbif_be_connect_t, shmem_frame, unsigned long);
|
||||
P2C(usbif_be_connect_t, evtchn, u32);
|
||||
P2C(usbif_be_connect_t, bandwidth, u32);
|
||||
P2C(usbif_be_connect_t, status, u32);
|
||||
|
||||
@@ -36,8 +36,10 @@ from xen.xend.server import controller
|
||||
from xen.xend.server import SrvDaemon; xend = SrvDaemon.instance()
|
||||
from xen.xend.server import messages
|
||||
from xen.xend.server.channel import EventChannel, channelFactory
|
||||
from xen.util.blkif import blkdev_name_to_number, expand_dev_name
|
||||
|
||||
from xen.xend import sxp
|
||||
from xen.xend import Blkctl
|
||||
from xen.xend.PrettyPrint import prettyprintstring
|
||||
from xen.xend.XendBootloader import bootloader
|
||||
from xen.xend.XendLogging import log
|
||||
@@ -380,6 +382,39 @@ class XendDomainInfo:
|
||||
return ctrl
|
||||
|
||||
def createDevice(self, type, devconfig, change=False):
|
||||
if type == 'vbd':
|
||||
|
||||
backdom = domain_exists(sxp.child_value(devconfig, 'backend', '0'))
|
||||
|
||||
devnum = blkdev_name_to_number(sxp.child_value(devconfig, 'dev'))
|
||||
|
||||
# create backend db
|
||||
backdb = backdom.db.addChild("/backend/%s/%s/%d" %
|
||||
(type, self.uuid, devnum))
|
||||
|
||||
# create frontend db
|
||||
db = self.db.addChild("/device/%s/%d" % (type, devnum))
|
||||
|
||||
db['virtual-device'] = "%i" % devnum
|
||||
#db['backend'] = sxp.child_value(devconfig, 'backend', '0')
|
||||
db['backend'] = backdb.getPath()
|
||||
db['backend-id'] = "%i" % int(sxp.child_value(devconfig,
|
||||
'backend', '0'))
|
||||
|
||||
backdb['frontend'] = db.getPath()
|
||||
(type, params) = string.split(sxp.child_value(devconfig, 'uname'), ':', 1)
|
||||
node = Blkctl.block('bind', type, params)
|
||||
backdb['frontend-id'] = "%i" % self.id
|
||||
backdb['physical-device'] = "%li" % blkdev_name_to_number(node)
|
||||
backdb.saveDB(save=True)
|
||||
|
||||
# Ok, super gross, this really doesn't belong in the frontend db...
|
||||
db['type'] = type
|
||||
db['node'] = node
|
||||
db['params'] = params
|
||||
db.saveDB(save=True)
|
||||
|
||||
return
|
||||
ctrl = self.findDeviceController(type)
|
||||
return ctrl.createDevice(devconfig, recreate=self.recreate,
|
||||
change=change)
|
||||
@@ -671,6 +706,16 @@ class XendDomainInfo:
|
||||
for ctrl in self.getDeviceControllers():
|
||||
if ctrl.isDestroyed(): continue
|
||||
ctrl.destroyController(reboot=reboot)
|
||||
ddb = self.db.addChild("/device")
|
||||
for type in ddb.keys():
|
||||
if type == 'vbd':
|
||||
typedb = ddb.addChild(type)
|
||||
for dev in typedb.keys():
|
||||
devdb = typedb.addChild(str(dev))
|
||||
Blkctl.block('unbind', devdb['type'].getData(),
|
||||
devdb['node'].getData())
|
||||
typedb[dev].delete()
|
||||
typedb.saveDB(save=True)
|
||||
|
||||
def show(self):
|
||||
"""Print virtual machine info.
|
||||
@@ -926,6 +971,7 @@ class XendDomainInfo:
|
||||
at creation time, for example when it uses NFS root.
|
||||
|
||||
"""
|
||||
return
|
||||
blkif = self.getDeviceController("vbd", error=False)
|
||||
if not blkif:
|
||||
blkif = self.createDeviceController("vbd")
|
||||
|
||||
@@ -50,7 +50,7 @@ class EventProtocol(protocol.Protocol):
|
||||
def dataReceived(self, data):
|
||||
try:
|
||||
self.parser.input(data)
|
||||
if self.parser.ready():
|
||||
while(self.parser.ready()):
|
||||
val = self.parser.get_val()
|
||||
res = self.dispatch(val)
|
||||
self.send_result(res)
|
||||
|
||||
@@ -42,7 +42,7 @@ class RelocationProtocol(protocol.Protocol):
|
||||
def dataReceived(self, data):
|
||||
try:
|
||||
self.parser.input(data)
|
||||
if self.parser.ready():
|
||||
while(self.parser.ready()):
|
||||
val = self.parser.get_val()
|
||||
res = self.dispatch(val)
|
||||
self.send_result(res)
|
||||
|
||||