mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
bitkeeper revision 1.1108.1.11 (40ffedd53In0viK6nHqcjQ7ZlYdFkw)
Filling-in vnet support.
This commit is contained in:
1 parent
20cd16c058
commit
10cd0830a1
2 files changed
+112
-1
No files matched your search
@@ -1,9 +1,116 @@
|
||||
# Copyright (C) 2004 Mike Wray <mike.wray@hp.com>
|
||||
|
||||
from xen.xend import sxp
|
||||
from xen.xend.Args import FormFn
|
||||
from xen.xend import PrettyPrint
|
||||
from xen.xend import XendVnet
|
||||
|
||||
from SrvDir import SrvDir
|
||||
|
||||
class SrvVnet(SrvDir):
|
||||
|
||||
def __init__(self, vnetinfo):
|
||||
SrvDir.__init__(self)
|
||||
self.vnetinfo = vnetinfo
|
||||
self.xvnet = XendVnet.instance()
|
||||
|
||||
def op_delete(self, op, req):
|
||||
val = self.xvnet.vnet_delete(self.vnetinfo.id)
|
||||
return val
|
||||
|
||||
def render_POST(self, req):
|
||||
return self.perform(req)
|
||||
|
||||
def render_GET(self, req):
|
||||
if self.use_sxp(req):
|
||||
req.setHeader("Content-Type", sxp.mime_type)
|
||||
sxp.show(self.vnetinfo.sxpr(), out=req)
|
||||
else:
|
||||
req.write('<html><head></head><body>')
|
||||
self.print_path(req)
|
||||
req.write('<p>Vnet %s</p>' % self.vnetinfo.id)
|
||||
req.write("<code><pre>")
|
||||
PrettyPrint.prettyprint(self.vnetinfo.sxpr(), out=req)
|
||||
req.write("</pre></code>")
|
||||
self.form(req)
|
||||
req.write('</body></html>')
|
||||
return ''
|
||||
|
||||
def form(self, req):
|
||||
url = req.prePathURL()
|
||||
req.write('<form method="post" action="%s">' % url)
|
||||
req.write('<input type="submit" name="op" value="delete">')
|
||||
req.write('</form>')
|
||||
|
||||
class SrvVnetDir(SrvDir):
|
||||
"""Vnet directory.
|
||||
"""
|
||||
|
||||
pass
|
||||
def __init__(self):
|
||||
SrvDir.__init__(self)
|
||||
self.xvnet = XendVnet.instance()
|
||||
|
||||
def vnet(self, x):
|
||||
val = None
|
||||
vnetinfo = self.xvnet.vnet_get(x)
|
||||
if not vnetinfo:
|
||||
raise XendError('No such vnet ' + str(x))
|
||||
val = SrvVnet(vnetinfo)
|
||||
return val
|
||||
|
||||
def get(self, x):
|
||||
v = SrvDir.get(self, x)
|
||||
if v is not None:
|
||||
return v
|
||||
v = self.vnet(x)
|
||||
return v
|
||||
|
||||
def op_create(self, op, req):
|
||||
fn = FormFn(self.xvnet.vnet_create,
|
||||
[['config', 'sxpr']])
|
||||
val = fn(req.args, {})
|
||||
return val
|
||||
|
||||
def render_POST(self, req):
|
||||
return self.perform(req)
|
||||
|
||||
def render_GET(self, req):
|
||||
try:
|
||||
if self.use_sxp(req):
|
||||
req.setHeader("Content-Type", sxp.mime_type)
|
||||
self.ls_vnet(req, 1)
|
||||
else:
|
||||
req.write("<html><head></head><body>")
|
||||
self.print_path(req)
|
||||
self.ls(req)
|
||||
self.ls_vnet(req)
|
||||
self.form(req)
|
||||
req.write("</body></html>")
|
||||
return ''
|
||||
except Exception, ex:
|
||||
self._perform_err(ex, req)
|
||||
|
||||
def ls_vnet(self, req, use_sxp=0):
|
||||
url = req.prePathURL()
|
||||
if not url.endswith('/'):
|
||||
url += '/'
|
||||
if use_sxp:
|
||||
vnets = self.xvnet.vnet_ls()
|
||||
sxp.show(vnets, out=req)
|
||||
else:
|
||||
vnets = self.xvnet.vnets()
|
||||
vnets.sort(lambda x, y: cmp(x.id, y.id))
|
||||
req.write('<ul>')
|
||||
for v in vnets:
|
||||
req.write('<li><a href="%s%s"> Vnet %s</a>' % (url, v.id, v.id))
|
||||
req.write('</li>')
|
||||
req.write('</ul>')
|
||||
|
||||
def form(self, req):
|
||||
"""Generate the form(s) for vnet dir operations.
|
||||
"""
|
||||
req.write('<form method="post" action="%s" enctype="multipart/form-data">'
|
||||
% req.prePathURL())
|
||||
req.write('<button type="submit" name="op" value="create">Create Vnet</button>')
|
||||
req.write('Config <input type="file" name="config"><br>')
|
||||
req.write('</form>')
|
||||
@@ -9,6 +9,7 @@ from xen.xend import sxp
|
||||
from xen.xend import Vifctl
|
||||
from xen.xend.XendError import XendError
|
||||
from xen.xend.XendLogging import log
|
||||
from xen.xend import XendVnet
|
||||
|
||||
import channel
|
||||
import controller
|
||||
@@ -176,6 +177,9 @@ class NetDev(controller.Dev):
|
||||
"""Bring the device up or down.
|
||||
"""
|
||||
Vifctl.vifctl(op, **self.vifctl_params(vmname=vmname))
|
||||
vnet = XendVnet.instance().vnet_of_bridge(self.bridge)
|
||||
if vnet:
|
||||
vnet.vifctl(op, self.get_vifname(), self.get_mac())
|
||||
|
||||
def destroy(self):
|
||||
"""Destroy the device's resources and disconnect from the back-end
|
||||
|
||||