mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
bitkeeper revision 1.1159.1.260 (417910cfW_IY-z3SknIR-V-82DXZGQ)
Merge freefall.cl.cam.ac.uk:/auto/groups/xeno/users/cl349/BK/xeno.bk-26dom0 into freefall.cl.cam.ac.uk:/local/scratch/cl349/xeno.bk-24dom0
This commit is contained in:
commit
1d3898f261
6 files changed
+26
-19
No files matched your search
@@ -32,8 +32,9 @@ class XendConsole:
|
||||
def consoles(self):
|
||||
return daemon.get_consoles()
|
||||
|
||||
def console_create(self, dom, console_port=None):
|
||||
consinfo = daemon.console_create(dom, console_port=console_port)
|
||||
def console_create(self, dom, console_port=None, remote_port=0):
|
||||
consinfo = daemon.console_create(dom, console_port=console_port,
|
||||
remote_port=remote_port)
|
||||
return consinfo
|
||||
|
||||
def console_get(self, id):
|
||||
|
||||
@@ -757,7 +757,8 @@ class XendDomainInfo:
|
||||
if self.console:
|
||||
self.console.registerChannel()
|
||||
else:
|
||||
self.console = xendConsole.console_create(self.dom, console_port=self.console_port)
|
||||
self.console = xendConsole.console_create(
|
||||
self.dom, console_port=self.console_port, remote_port=1)
|
||||
self.build_domain(ostype, kernel, ramdisk, cmdline)
|
||||
self.image = kernel
|
||||
self.ramdisk = ramdisk
|
||||
|
||||
@@ -669,12 +669,13 @@ class Daemon:
|
||||
def netif_get(self, dom):
|
||||
return self.netifCF.getControllerByDom(dom)
|
||||
|
||||
def console_create(self, dom, console_port=None):
|
||||
def console_create(self, dom, console_port=None, remote_port=0):
|
||||
"""Create a console for a domain.
|
||||
"""
|
||||
console = self.consoleCF.getControllerByDom(dom)
|
||||
if console is None:
|
||||
console = self.consoleCF.createController(dom, console_port)
|
||||
console = self.consoleCF.createController(dom, console_port,
|
||||
remote_port=remote_port)
|
||||
return console
|
||||
|
||||
def consoles(self):
|
||||
|
||||
@@ -45,7 +45,7 @@ class ChannelFactory:
|
||||
del self.channels[idx]
|
||||
self.notifier.unbind(idx)
|
||||
|
||||
def domChannel(self, dom):
|
||||
def domChannel(self, dom, remote_port=0):
|
||||
"""Get the channel for the given domain.
|
||||
Construct if necessary.
|
||||
|
||||
@@ -55,7 +55,7 @@ class ChannelFactory:
|
||||
"""
|
||||
chan = self.getDomChannel(dom)
|
||||
if not chan:
|
||||
chan = Channel(self, dom)
|
||||
chan = Channel(self, dom, remote_port=remote_port)
|
||||
self.addChannel(chan)
|
||||
return chan
|
||||
|
||||
@@ -91,10 +91,10 @@ class ChannelFactory:
|
||||
"""
|
||||
self.delChannel(channel.idx)
|
||||
|
||||
def createPort(self, dom):
|
||||
def createPort(self, dom, remote_port=0):
|
||||
"""Create a port for a channel to the given domain.
|
||||
"""
|
||||
return xu.port(dom)
|
||||
return xu.port(dom, remote_port)
|
||||
|
||||
def channelFactory():
|
||||
"""Singleton constructor for the channel factory.
|
||||
@@ -200,7 +200,7 @@ class Channel(BaseChannel):
|
||||
are multiplexed over the channel (console, block devs, net devs).
|
||||
"""
|
||||
|
||||
def __init__(self, factory, dom):
|
||||
def __init__(self, factory, dom, remote_port=0):
|
||||
"""Create a channel to the given domain using the given factory.
|
||||
|
||||
Do not call directly, use domChannel on the factory.
|
||||
@@ -209,7 +209,7 @@ class Channel(BaseChannel):
|
||||
# Domain.
|
||||
self.dom = int(dom)
|
||||
# Domain port (object).
|
||||
self.port = self.factory.createPort(dom)
|
||||
self.port = self.factory.createPort(dom, remote_port=remote_port)
|
||||
# Channel port (int).
|
||||
self.idx = self.port.local_port
|
||||
# Registered devices.
|
||||
|
||||
@@ -81,13 +81,14 @@ class ConsoleControllerFactory(controller.ControllerFactory):
|
||||
"""Factory for creating console controllers.
|
||||
"""
|
||||
|
||||
def createController(self, dom, console_port=None):
|
||||
def createController(self, dom, console_port=None, remote_port=0):
|
||||
if console_port is None:
|
||||
console_port = CONSOLE_PORT_BASE + dom
|
||||
for c in self.getControllers():
|
||||
if c.console_port == console_port:
|
||||
raise XendError('console port in use: ' + str(console_port))
|
||||
console = ConsoleController(self, dom, console_port)
|
||||
console = ConsoleController(self, dom, console_port,
|
||||
remote_port=remote_port)
|
||||
self.addController(console)
|
||||
log.info("Created console id=%s domain=%d port=%d",
|
||||
console.idx, console.dom, console.console_port)
|
||||
@@ -111,8 +112,9 @@ class ConsoleController(controller.Controller):
|
||||
STATUS_CONNECTED = 'connected'
|
||||
STATUS_LISTENING = 'listening'
|
||||
|
||||
def __init__(self, factory, dom, console_port):
|
||||
controller.Controller.__init__(self, factory, dom)
|
||||
def __init__(self, factory, dom, console_port, remote_port=0):
|
||||
controller.Controller.__init__(self, factory, dom,
|
||||
remote_port=remote_port)
|
||||
self.addMethod(CMSG_CONSOLE, 0, None)
|
||||
self.status = self.STATUS_NEW
|
||||
self.addr = None
|
||||
|
||||
@@ -68,7 +68,7 @@ class CtrlMsgRcvr:
|
||||
@type responders: {int:Responder}
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, remote_port = 0):
|
||||
self.channelFactory = channel.channelFactory()
|
||||
self.majorTypes = {}
|
||||
self.dom = None
|
||||
@@ -76,6 +76,7 @@ class CtrlMsgRcvr:
|
||||
self.idx = None
|
||||
self.responders = {}
|
||||
self.timeout = 10
|
||||
self.remote_port = remote_port
|
||||
|
||||
def setTimeout(self, timeout):
|
||||
self.timeout = timeout
|
||||
@@ -217,7 +218,8 @@ class CtrlMsgRcvr:
|
||||
channel to our domain. Once we have registered, the channel
|
||||
will call requestReceived or responseReceived for our messages.
|
||||
"""
|
||||
self.channel = self.channelFactory.domChannel(self.dom)
|
||||
self.channel = self.channelFactory.domChannel(self.dom,
|
||||
self.remote_port)
|
||||
self.idx = self.channel.getIndex()
|
||||
if self.majorTypes:
|
||||
self.channel.registerDevice(self.getMajorTypes(), self)
|
||||
@@ -362,8 +364,8 @@ class Controller(CtrlMsgRcvr):
|
||||
@type idx: String
|
||||
"""
|
||||
|
||||
def __init__(self, factory, dom):
|
||||
CtrlMsgRcvr.__init__(self)
|
||||
def __init__(self, factory, dom, remote_port=0):
|
||||
CtrlMsgRcvr.__init__(self, remote_port=remote_port)
|
||||
self.factory = factory
|
||||
self.dom = int(dom)
|
||||
self.channel = None
|
||||
|
||||