diff options
Diffstat (limited to 'tools/xenmgr/lib/server')
-rw-r--r-- | tools/xenmgr/lib/server/SrvConsoleServer.py | 8 | ||||
-rw-r--r-- | tools/xenmgr/lib/server/SrvServer.py | 11 | ||||
-rwxr-xr-x | tools/xenmgr/lib/server/blkif.py | 14 | ||||
-rwxr-xr-x | tools/xenmgr/lib/server/netif.py | 44 |
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 |