aboutsummaryrefslogtreecommitdiffstats
path: root/tools/xenmgr/lib/server
diff options
context:
space:
mode:
Diffstat (limited to 'tools/xenmgr/lib/server')
-rw-r--r--tools/xenmgr/lib/server/SrvConsoleServer.py8
-rw-r--r--tools/xenmgr/lib/server/SrvServer.py11
-rwxr-xr-xtools/xenmgr/lib/server/blkif.py14
-rwxr-xr-xtools/xenmgr/lib/server/netif.py44
4 files changed, 67 insertions, 10 deletions
diff --git a/tools/xenmgr/lib/server/SrvConsoleServer.py b/tools/xenmgr/lib/server/SrvConsoleServer.py
index 21d39140b2..7179a0d1d4 100644
--- a/tools/xenmgr/lib/server/SrvConsoleServer.py
+++ b/tools/xenmgr/lib/server/SrvConsoleServer.py
@@ -549,7 +549,7 @@ class Daemon:
self.listenEvent()
self.listenNotifier()
self.listenVirq()
- SrvServer.create()
+ SrvServer.create(bridge=1)
reactor.run()
def createFactories(self):
@@ -602,6 +602,9 @@ class Daemon:
d = self.blkifCF.createInstance(dom)
return d
+ def blkif_dev(self, dom, vdev):
+ return self.blkifCF.getDomainDevice(dom, vdev)
+
def blkif_dev_create(self, dom, vdev, mode, segment):
"""Create a block device.
@@ -641,6 +644,9 @@ class Daemon:
d = ctrl.attach_device(vif, vmac)
return d
+ def netif_dev(self, dom, vif):
+ return self.netifCF.getDomainDevice(dom, vif)
+
def console_create(self, dom, console_port=None):
"""Create a console for a domain.
"""
diff --git a/tools/xenmgr/lib/server/SrvServer.py b/tools/xenmgr/lib/server/SrvServer.py
index a42219b620..d507c2002b 100644
--- a/tools/xenmgr/lib/server/SrvServer.py
+++ b/tools/xenmgr/lib/server/SrvServer.py
@@ -32,17 +32,24 @@ from twisted.internet import reactor
from xenmgr import XendRoot
xroot = XendRoot.instance()
+from xenmgr import XendBridge
+
from SrvRoot import SrvRoot
-def create(port=None, interface=None):
+def create(port=None, interface=None, bridge=0):
if port is None: port = 8000
if interface is None: interface = ''
+ if bridge or xroot.rebooted:
+ init_bridge()
root = resource.Resource()
xend = SrvRoot()
root.putChild('xend', xend)
site = server.Site(root)
reactor.listenTCP(port, site, interface=interface)
-
+
+def init_bridge():
+ XendBridge.bridge_create()
+ XendBridge.reconfigure()
def main(port=None, interface=None):
create(port, interface)
diff --git a/tools/xenmgr/lib/server/blkif.py b/tools/xenmgr/lib/server/blkif.py
index 7ffa35179d..8da827baa9 100755
--- a/tools/xenmgr/lib/server/blkif.py
+++ b/tools/xenmgr/lib/server/blkif.py
@@ -33,6 +33,14 @@ class BlkifControllerFactory(controller.ControllerFactory):
blkif.send_be_create()
return d
+ def getDomainDevices(self, dom):
+ blkif = self.getInstanceByDom(dom)
+ return (blkif and blkif.getDevices()) or []
+
+ def getDomainDevice(self, dom, vdev):
+ blkif = self.getInstanceByDom(dom)
+ return (blkif and blkif.getDevice(vdev)) or None
+
def setControlDomain(self, dom):
if self.dom == dom: return
self.deregisterChannel()
@@ -146,6 +154,12 @@ class BlkifController(controller.Controller):
self.registerChannel()
#print 'BlkifController<', 'dom=', self.dom, 'idx=', self.idx
+ def getDevices(self):
+ return self.devices.values()
+
+ def getDevice(self, vdev):
+ return self.devices.get(vdev)
+
def attach_device(self, vdev, mode, segment):
"""Attach a device to the specified interface.
"""
diff --git a/tools/xenmgr/lib/server/netif.py b/tools/xenmgr/lib/server/netif.py
index 13bdd96486..f3da86ba82 100755
--- a/tools/xenmgr/lib/server/netif.py
+++ b/tools/xenmgr/lib/server/netif.py
@@ -31,6 +31,14 @@ class NetifControllerFactory(controller.ControllerFactory):
netif = NetifController(self, dom)
self.addInstance(netif)
return netif
+
+ def getDomainDevices(self, dom):
+ netif = self.getInstanceByDom(dom)
+ return (netif and netif.getDevices()) or []
+
+ def getDomainDevice(self, dom, vif):
+ netif = self.getInstanceByDom(dom)
+ return (netif and netif.getDevice(vif)) or None
def setControlDomain(self, dom):
"""Set the 'back-end' device driver domain.
@@ -98,6 +106,11 @@ class NetDev:
self.vif = vif
self.mac = mac
self.evtchn = None
+
+ def sxpr(self):
+ vif = str(self.vif)
+ mac = ':'.join(map(lambda x: "%x" % x, self.mac))
+ return ['netif', ['vif', vif], ['mac', mac]]
class NetifController(controller.Controller):
"""Network interface controller. Handles all network devices for a domain.
@@ -135,20 +148,37 @@ class NetifController(controller.Controller):
random.randint(0x00, 0xff) ]
return mac
- def attach_device(self, vif, vmac):
- """Attach a network device.
- If vmac is None a random mac address is assigned.
+ def lostChannel(self):
+ print 'NetifController>lostChannel>', 'dom=', self.dom
+ #for vif in self.devices:
+ # self.send_be_destroy(vif)
+ controller.Controller.lostChannel(self)
- @param vif interface index
- @param vmac mac address (string)
- """
+ def getDevices(self):
+ return self.devices.values()
+
+ def getDevice(self, vif):
+ return self.devices.get(vif)
+
+ def addDevice(self, vif, vmac):
if vmac is None:
mac = self.randomMAC()
else:
mac = [ int(x, 16) for x in vmac.split(':') ]
if len(mac) != 6: raise ValueError("invalid mac")
#print "attach_device>", "vif=", vif, "mac=", mac
- self.devices[vif] = NetDev(vif, mac)
+ dev = NetDev(vif, mac)
+ self.devices[vif] = dev
+ return dev
+
+ def attach_device(self, vif, vmac):
+ """Attach a network device.
+ If vmac is None a random mac address is assigned.
+
+ @param vif interface index
+ @param vmac mac address (string)
+ """
+ self.addDevice(vif, vmac)
d = self.factory.addDeferred()
self.send_be_create(vif)
return d