aboutsummaryrefslogtreecommitdiffstats
path: root/tools/control/web/tmpl
diff options
context:
space:
mode:
Diffstat (limited to 'tools/control/web/tmpl')
-rw-r--r--tools/control/web/tmpl/about.tmpl71
-rw-r--r--tools/control/web/tmpl/dom-del.tmpl86
-rw-r--r--tools/control/web/tmpl/dom-delr.tmpl42
-rw-r--r--tools/control/web/tmpl/dom-lis.tmpl50
-rw-r--r--tools/control/web/tmpl/dom-new.tmpl197
-rw-r--r--tools/control/web/tmpl/dom-newr.tmpl100
-rw-r--r--tools/control/web/tmpl/dom-sta.tmpl64
-rw-r--r--tools/control/web/tmpl/dom-star.tmpl40
-rw-r--r--tools/control/web/tmpl/dom-stp.tmpl64
-rw-r--r--tools/control/web/tmpl/dom-stpr.tmpl40
-rw-r--r--tools/control/web/tmpl/dom.tmpl30
-rw-r--r--tools/control/web/tmpl/dommenu.tmpl33
-rw-r--r--tools/control/web/tmpl/help.tmpl61
-rw-r--r--tools/control/web/tmpl/index.tmpl66
-rwxr-xr-xtools/control/web/tmpl/install.pl236
-rw-r--r--tools/control/web/tmpl/makefile35
-rw-r--r--tools/control/web/tmpl/newdom.tmpl172
-rw-r--r--tools/control/web/tmpl/vd-fv.tmpl60
-rw-r--r--tools/control/web/tmpl/vd-pa.tmpl97
-rw-r--r--tools/control/web/tmpl/vd-par.tmpl49
-rw-r--r--tools/control/web/tmpl/vd-pv.tmpl54
-rw-r--r--tools/control/web/tmpl/vd-vbdc.tmpl94
-rw-r--r--tools/control/web/tmpl/vd-vbdcr.tmpl44
-rw-r--r--tools/control/web/tmpl/vd-vbdd.tmpl29
-rw-r--r--tools/control/web/tmpl/vd-vbdf.tmpl59
-rw-r--r--tools/control/web/tmpl/vd-vbdfr.tmpl32
-rw-r--r--tools/control/web/tmpl/vd-vbdv.tmpl44
-rw-r--r--tools/control/web/tmpl/vd-vdc.tmpl67
-rw-r--r--tools/control/web/tmpl/vd-vdcr.tmpl64
-rw-r--r--tools/control/web/tmpl/vd-vdd.tmpl58
-rw-r--r--tools/control/web/tmpl/vd-vddr.tmpl34
-rw-r--r--tools/control/web/tmpl/vd-vdr.tmpl83
-rw-r--r--tools/control/web/tmpl/vd-vdrr.tmpl72
-rw-r--r--tools/control/web/tmpl/vd-vdv.tmpl43
-rw-r--r--tools/control/web/tmpl/vd.tmpl24
-rw-r--r--tools/control/web/tmpl/vdmenu.tmpl63
-rw-r--r--tools/control/web/tmpl/xenofoot.def28
-rw-r--r--tools/control/web/tmpl/xenohead.def82
-rw-r--r--tools/control/web/tmpl/xenostyle.css91
39 files changed, 2658 insertions, 0 deletions
diff --git a/tools/control/web/tmpl/about.tmpl b/tools/control/web/tmpl/about.tmpl
new file mode 100644
index 0000000000..77e4f90804
--- /dev/null
+++ b/tools/control/web/tmpl/about.tmpl
@@ -0,0 +1,71 @@
+About
+SECTION&XenoServers
+
+<!-- content -->
+<img src="img/pixel.gif" class="block" width="1" height="12" alt="">
+<table cellpadding="0" cellspacing="0" border="0" summary="page content">
+<tbody><tr>
+ <td width="250" valign="top" align="right">
+ <a href="http://www.cl.cam.ac.uk/xeno/"><img width="191" heigth="65" src="img/xeno.gif" border="0"></a>
+
+<table cellpadding="0" cellspacing="0" border="0" align="right">
+<tbody><tr>
+ <td><img src="img/pixel.gif" class="block" width="20" height="1" alt=""></td>
+</tr>
+<tr>
+ <td colspan="3"><img src="img/pixel.gif" class="block" width="1" height="10" alt=""></td>
+</tr>
+<tr>
+ <td align="right">
+ <table width="180" ><tbody><tr><td><p align="right">
+The XenoServer project aims to build a public infrastructure for wide-area distributed computing.
+</p>
+ </td></tr></tbody></table></td>
+<td><img src="img/pixel.gif" class="block" width="10" height="1" alt=""></td>
+</tr>
+</tbody></table>
+</td>
+<td bgcolor="#666666" width="2"><img src="img/pixel.gif" class="block" width="2" height="50" alt=""></td>
+<td width="20"><img src="img/pixel.gif" class="block" width="20" height="1" alt=""></td>
+<td valign="top">
+
+<!-- main navigation -->
+<table cellpadding="0" cellspacing="0" border="0">
+
+<tbody><tr><td><b>Overview</b><td></tr>
+<tr>
+ <td>
+The Xenoserver project is building a public infrastructure for wide-area distributed computing. We envisage a world in which Xenoserver execution platforms will be scattered across the globe and available for any member of the public to submit code for execution. Crucially, the sponsor of the code will be billed for all the resources used or reserved during the course of execution. This will serve to encourage load balancing, limit congestion, and hopefully even make the platform self-financing.
+<p>
+A global infrastructure such as we propose is essential to address the fundamental problem of communication latency. By enabling principles to run programs at points throughout the network they can ensure that their code executes close to the entities with which it needs to interact. As well as reducing latency this can be used to avoid network bottlenecks, to reduce long-haul network charges and to provide a platform over which code provided by transiently-connected mobile devices can maintain a network presence.
+<p>
+Our approach is distinguished from existing work on mobile agents, execution platforms, code hosting and the like by two principles:
+<p>
+<b>Tackling difficult problems at the same time.</b> Acceptable designs for execution environments, resource management, resource discovery, authentication, privacy, charging, billing, payment and auditing are all crucial to the success of our platform as an infrastructure service open to and accepted by the public. Existing work has tackled individual subsets of these problems, but tensions between the issues concerned mean that solutions proficient in some dimension are lacking in another.
+<p>
+<b>No brave new world.</b> Our platform will host applications written in today's programming languages against existing APIs -- and, we believe, those written with tomorrow's languages and libraries. We do not want to mandate a particular code distribution format or a particular middleware toolkit for distributed programming.
+</td>
+</tr>
+
+<tr> <!-- blank white space -->
+ <td><img src="img/pixel.gif" class="block" width="1" height="10" alt=""></td>
+</tr>
+
+<tr> <!-- grey line -->
+ <td bgcolor="#cccccc"><img src="img/pixel.gif" class="block" width="1" height="2" alt=""></td>
+</tr>
+
+<tr> <!-- blank white space -->
+ <td><img src="img/pixel.gif" class="block" width="1" height="10" alt=""></td>
+</tr>
+
+<tr> <!-- list of menu items -->
+ <td nowrap="nowrap">
+ <a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xeno/general-xeno.pdf" class="homemenu">Project Overview Document</a><br>
+ </td>
+</tr>
+</tbody></table>
+</td>
+</tr>
+</tbody></table>
+<!-- end content -->
diff --git a/tools/control/web/tmpl/dom-del.tmpl b/tools/control/web/tmpl/dom-del.tmpl
new file mode 100644
index 0000000000..1c71fba836
--- /dev/null
+++ b/tools/control/web/tmpl/dom-del.tmpl
@@ -0,0 +1,86 @@
+Delete Domain
+SECTION&XenoServers
+BREADCRUMB&Domain Manager&dom.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&dommenu.tmpl
+<td valign="top">
+
+<form method="post" action="dom-delr.jsp">
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+<tr><td>
+<%
+ CommandList command_list = new CommandList();
+ Defaults d = sc.getDefaults();
+ Domain domains[] = command_list.executeCommand(d);
+%>
+
+<table cellpadding="2" cellspacing="0" border="0">
+<tbody>
+ <tr class="vdh"><td></td><td>domain<br>id</td><td>processor</td><td>has<br>cpu</td><td>state</td><td>mcu<br>advance</td><td>total<br>pages</td><td>name</td></tr>
+ <%
+ for (int loop = 0; loop < domains.length; loop++)
+ {
+ %>
+ <tr class="vdt">
+ <td><input type="checkbox" name="dom" value="<%= domains[loop].id %>"></td>
+ <td align="center"><%= domains[loop].id %></td>
+ <td align="center"><%= domains[loop].processor %></td>
+ <td align="center"><%= domains[loop].cpu %> </td>
+ <td><%= domains[loop].state %> </td>
+ <td align="center"><%= domains[loop].mcu %> </td>
+ <td align="center"><%= domains[loop].pages %> </td>
+ <td><%= domains[loop].name %> </td>
+ </tr>
+ <%
+ }
+ %>
+
+</tbody>
+</table>
+</td></tr>
+
+##WHITESPACE## ##GREYLINE1## ##WHITESPACE##
+
+<tr><td>
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+
+<tr>
+ <td></td>
+ <td class="menuheader">force immediate destruction?</td>
+</tr>
+<tr>
+ <td> <input type="radio" name="force" value="false" checked></td>
+ <td> don't force </td>
+</tr>
+<tr>
+ <td> <input type="radio" name="force" value="true"></td>
+ <td> force </td>
+</tr>
+</tbody>
+</table>
+</td></tr>
+
+##WHITESPACE## ##GREYLINE1## ##WHITESPACE##
+
+<tr>
+ <td><input type="submit" name="action" value="delete domain"></td>
+</tr>
+</tbody>
+</table>
+</form>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/dom-delr.tmpl b/tools/control/web/tmpl/dom-delr.tmpl
new file mode 100644
index 0000000000..0693570f7a
--- /dev/null
+++ b/tools/control/web/tmpl/dom-delr.tmpl
@@ -0,0 +1,42 @@
+Delete Domain
+SECTION&XenoServers
+BREADCRUMB&Domain Manager&dom.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&dommenu.tmpl
+<td valign="top">
+
+
+<b>Delete Domain Results</b>
+<br>
+
+<%
+ HttpServletRequestWrapper hsrw = new HttpServletRequestWrapper(request);
+ Defaults d = sc.getDefaults();
+ CommandDestroy command_destroy = new CommandDestroy();
+
+ String domains[] = hsrw.getParameterValues("dom");
+ boolean force = hsrw.getParameter("force").equals("true");
+
+ for (int i = 0; i < domains.length; i++)
+ {
+%>
+result <%= domains[i] %> =
+ <%= command_destroy.executeCommand(d, Integer.parseInt(domains[i]),
+ force) %> <br>
+<%
+ }
+%>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/dom-lis.tmpl b/tools/control/web/tmpl/dom-lis.tmpl
new file mode 100644
index 0000000000..7a479a0f87
--- /dev/null
+++ b/tools/control/web/tmpl/dom-lis.tmpl
@@ -0,0 +1,50 @@
+Domain List
+SECTION&XenoServers
+BREADCRUMB&Domain Manager&dom.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&dommenu.tmpl
+<td valign="top">
+
+<%
+ CommandList command_list = new CommandList();
+ Defaults d = sc.getDefaults();
+ Domain domains[] = command_list.executeCommand(d);
+%>
+
+<table cellpadding="2" cellspacing="0" border="0">
+<tbody>
+ <tr class="vdh"><td>domain<br>id</td><td>processor</td><td>has<br>cpu</td><td>state</td><td>mcu<br>advance</td><td>total<br>pages</td><td>name</td></tr>
+ <%
+ /* assert: domains != null, otherwise, where is the servlet engine? */
+ for (int loop = 0; loop < domains.length; loop++)
+ {
+ %>
+ <tr>
+ <td align="center"><%= domains[loop].id %></td>
+ <td align="center"><%= domains[loop].processor %></td>
+ <td align="center"><%= domains[loop].cpu %> </td>
+ <td><%= domains[loop].state %> </td>
+ <td align="center"><%= domains[loop].mcu %> </td>
+ <td align="center"><%= domains[loop].pages %> </td>
+ <td><%= domains[loop].name %> </td>
+ </tr>
+ <%
+ }
+ %>
+</tbody>
+</table>
+
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/dom-new.tmpl b/tools/control/web/tmpl/dom-new.tmpl
new file mode 100644
index 0000000000..f6af5e570b
--- /dev/null
+++ b/tools/control/web/tmpl/dom-new.tmpl
@@ -0,0 +1,197 @@
+Create New Domain
+SECTION&XenoServers
+BREADCRUMB&Domain Manager&dom.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&dommenu.tmpl
+<td valign="top">
+
+<form method="post" action="dom-newr.jsp">
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+<tr>
+ <td width="10"></td>
+ <td></td>
+ <td></td>
+ <td width="7"></td>
+ <td></td>
+</tr>
+
+<tr>
+ <td></td>
+ <td class="block" colspan=4><b>Create A New Domain</b></td>
+</tr>
+
+##WHITESPACE## ##GREYLINE14## ##WHITESPACE##
+
+<%
+ Defaults d = sc.getDefaults();
+
+ if (d == null)
+ {
+%>
+ <b>ACK Defaults IS NULL</b>
+<%
+ }
+%>
+
+<tr>
+ <td></td>
+ <td class="block" colspan=4>Domain Name</td>
+</tr>
+<tr>
+ <td></td> <td></td> <td></td> <td></td>
+ <td> <input type="text" size="16" name="name" value="<%= d.domainName %>">
+ </td>
+</tr>
+
+##WHITESPACE## ##GREYLINE14## ##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td class="block" colspan=4>Memory Size</td>
+</tr>
+<tr>
+ <td></td> <td></td> <td></td> <td></td>
+ <td>
+ <input type="text" size="5" name="size" value="<%= d.domainSizeKB %>"> KB
+ </td>
+</tr>
+
+##WHITESPACE## ##GREYLINE14## ##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td class="block" colspan=4>Kernel Image</td>
+</tr>
+<tr>
+ <td></td>
+ <td colspan=2 align="right">path</td>
+ <td></td>
+ <td>
+ <input type="text" size="40" name="image" value="<%= d.domainImage %>">
+ </td>
+</tr>
+
+##WHITESPACE## ##GREYLINE14## ##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td class="block" colspan=4>IP Config</td>
+</tr>
+<tr>
+ <td></td> <td></td>
+ <td class="block" align="right">VIFs</td>
+ <td></td>
+ <td>
+ <input type="text" size="4" name="vifs" value="<%= d.domainVIFs %>">
+ </td>
+</tr>
+<tr>
+ <td></td> <td></td>
+ <td class="block" align="right">IP address</td>
+ <td></td>
+ <td> <input type="text" size="15" name="ip" value="<%= d.NWIP %>"> </td>
+</tr>
+<tr>
+ <td></td> <td></td>
+ <td class="block" align="right">Gateway</td>
+ <td></td>
+ <td> <input type="text" size="15" name="gw" value="<%= d.NWGW %>"> </td>
+</tr>
+<tr>
+ <td></td> <td></td>
+ <td class="block" align="right">Netmask</td>
+ <td></td>
+ <td> <input type="text" size="15" name="mask" value="<%= d.NWMask %>"> </td>
+</tr>
+
+##WHITESPACE## ##GREYLINE14## ##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td class="block" colspan=2>Root File System</td>
+</tr>
+
+##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td align="right">NFS<input type="radio" name="root" value="nfs"></td>
+ <td align="right">path</td>
+ <td></td>
+ <td>
+ <input type="text" size="40" name="nfsroot" value="<%= d.NWNFSRoot %>">
+ </td>
+</tr>
+<tr>
+ <td></td> <td></td>
+ <td align="right">server</td>
+ <td></td>
+ <td>
+ <input type="text" size="15" name="nfsserver" value="<%= d.NWNFSServer%>">
+ </td>
+</tr>
+ ##WHITESPACE##
+<tr>
+ <td></td>
+ <td align="right">ramdisk<input type="radio" name="root" value="ram"></td>
+ <td align="right">path</td>
+ <td></td>
+ <td>
+ <input type="text" size="40" name="rd" value="/usr/isolinux/initrd.gz">
+ </td>
+</tr>
+ ##WHITESPACE##
+<tr>
+ <td></td>
+ <td align="right">physical disk<input type="radio" checked name="root" value="pdisk"></td>
+ <td align="right">path</td>
+ <td></td>
+ <td><input type="text" size="40" name="pdisk" value="/dev/sda8"></td>
+</tr>
+<tr>
+ <td></td>
+ <td align="right">virtual disk<input type="radio" checked name="root" value="vdisk"></td>
+ <td align="right">path</td>
+ <td></td>
+ <td><input type="text" size="40" name="vdisk" value="/dev/xvda1"></td>
+</tr>
+
+##WHITESPACE## ##GREYLINE14## ##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td class="block" colspan=4>Extra Arguments</td>
+</tr>
+<tr>
+ <td></td>
+ <td colspan=2 align="right"></td>
+ <td></td>
+ <td> <input type="text" size="40" name="args" value="ro"> </td>
+</tr>
+
+
+##WHITESPACE## ##GREYLINE14## ##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td><input type="submit" value="create domain"></td>
+</tr>
+
+</tbody>
+</table>
+</form>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/dom-newr.tmpl b/tools/control/web/tmpl/dom-newr.tmpl
new file mode 100644
index 0000000000..2800eac702
--- /dev/null
+++ b/tools/control/web/tmpl/dom-newr.tmpl
@@ -0,0 +1,100 @@
+Create New Domain
+SECTION&XenoServers
+BREADCRUMB&Domain Manager&dom.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&dommenu.tmpl
+<td valign="top">
+
+<b>Create Domain Results</b>
+<br>
+
+<%
+ HttpServletRequestWrapper hsrw = new HttpServletRequestWrapper(request);
+ Defaults d = sc.getDefaults();
+ CommandNew command_new = new CommandNew();
+ String root_device = hsrw.getParameter("root");
+
+ String nfsroot = null;
+ String nfsserver = null;
+ String rd = null;
+ String disk = null;
+
+ if (root_device.equals("nfs"))
+ {
+ nfsroot = hsrw.getParameter("nfsroot");
+ nfsserver = hsrw.getParameter("nfsserver");
+ disk = "/dev/nfs";
+ }
+ else if (root_device.equals("ram"))
+ {
+ nfsserver = hsrw.getParameter("nfsserver");
+ rd = hsrw.getParameter("rd");
+ }
+ else if (root_device.equals("pdisk"))
+ {
+ nfsserver = hsrw.getParameter("nfsserver");
+ disk = hsrw.getParameter("pdisk");
+ }
+ else if (root_device.equals("vdisk"))
+ {
+ nfsserver = hsrw.getParameter("nfsserver");
+ disk = hsrw.getParameter("vdisk");
+ }
+
+%>
+name = <%= hsrw.getParameter("name") %>
+<br>
+size = <%= hsrw.getParameter("size") %>
+<br>
+image = <%= hsrw.getParameter("image") %>
+<br>
+initrd = <%= rd %>
+<br>
+vifs = <%= hsrw.getParameter("vifs") %>
+<br>
+bargs = <%= hsrw.getParameter("args") %>
+<br>
+nfs_root_path = <%= nfsroot %>
+<br>
+nw_ip = <%= hsrw.getParameter("ip") %>
+<br>
+nw_gw = <%= hsrw.getParameter("gw") %>
+<br>
+nw_mask = <%= hsrw.getParameter("mask") %>
+<br>
+nw_nfs_server = <%= nfsserver %>
+<br>
+nw_host = <%= hsrw.getParameter("hostname") %>
+<br>
+root = <%= disk %>
+<br>
+output = <br><%=
+ command_new.executeCommand(d,
+ hsrw.getParameter("name"),
+ Integer.parseInt(hsrw.getParameter("size")),
+ hsrw.getParameter("image"),
+ rd,
+ Integer.parseInt(hsrw.getParameter("vifs")),
+ hsrw.getParameter("args"),
+ disk,
+ nfsroot,
+ hsrw.getParameter("ip"),
+ hsrw.getParameter("gw"),
+ hsrw.getParameter("mask"),
+ nfsserver,
+ hsrw.getParameter("hostname"))
+%>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/dom-sta.tmpl b/tools/control/web/tmpl/dom-sta.tmpl
new file mode 100644
index 0000000000..06fda1a96a
--- /dev/null
+++ b/tools/control/web/tmpl/dom-sta.tmpl
@@ -0,0 +1,64 @@
+Start Domain
+SECTION&XenoServers
+BREADCRUMB&Domain Manager&dom.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&dommenu.tmpl
+<td valign="top">
+
+<form method="post" action="dom-star.jsp">
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+<tr><td>
+<%
+ CommandList command_list = new CommandList();
+ Defaults d = sc.getDefaults();
+ Domain domains[] = command_list.executeCommand(d);
+%>
+
+<table cellpadding="2" cellspacing="0" border="0">
+<tbody>
+ <tr class="vdh"><td></td><td>domain<br>id</td><td>processor</td><td>has<br>cpu</td><td>state</td><td>mcu<br>advance</td><td>total<br>pages</td><td>name</td></tr>
+ <%
+ for (int loop = 0; loop < domains.length; loop++)
+ {
+ %>
+ <tr class="vdt">
+ <td><input type="checkbox" name="dom" value="<%= domains[loop].id %>"></td>
+ <td align="center"><%= domains[loop].id %></td>
+ <td align="center"><%= domains[loop].processor %></td>
+ <td align="center"><%= domains[loop].cpu %> </td>
+ <td><%= domains[loop].state %> </td>
+ <td align="center"><%= domains[loop].mcu %> </td>
+ <td align="center"><%= domains[loop].pages %> </td>
+ <td><%= domains[loop].name %> </td>
+ </tr>
+ <%
+ }
+ %>
+
+</tbody>
+</table>
+</td></tr>
+
+##WHITESPACE## ##GREYLINE1## ##WHITESPACE##
+
+<tr>
+ <td><input type="submit" name="action" value="start domain"></td>
+</tr>
+</tbody>
+</table>
+</form>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/dom-star.tmpl b/tools/control/web/tmpl/dom-star.tmpl
new file mode 100644
index 0000000000..cd7e27abd4
--- /dev/null
+++ b/tools/control/web/tmpl/dom-star.tmpl
@@ -0,0 +1,40 @@
+Start Domain
+SECTION&XenoServers
+BREADCRUMB&Domain Manager&dom.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&dommenu.tmpl
+<td valign="top">
+
+
+<b>Start Domain Results</b>
+<br>
+
+<%
+ HttpServletRequestWrapper hsrw = new HttpServletRequestWrapper(request);
+ Defaults d = sc.getDefaults();
+ CommandStart command_start = new CommandStart();
+
+ String domains[] = hsrw.getParameterValues("dom");
+
+ for (int i = 0; i < domains.length; i++)
+ {
+%>
+result <%= domains[i] %> =
+ <%= command_start.executeCommand(d, Integer.parseInt(domains[i])) %> <br>
+<%
+ }
+%>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/dom-stp.tmpl b/tools/control/web/tmpl/dom-stp.tmpl
new file mode 100644
index 0000000000..8587a5a594
--- /dev/null
+++ b/tools/control/web/tmpl/dom-stp.tmpl
@@ -0,0 +1,64 @@
+Stop Domain
+SECTION&XenoServers
+BREADCRUMB&Domain Manager&dom.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&dommenu.tmpl
+<td valign="top">
+
+<form method="post" action="dom-stpr.jsp">
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+<tr><td>
+<%
+ CommandList command_list = new CommandList();
+ Defaults d = sc.getDefaults();
+ Domain domains[] = command_list.executeCommand(d);
+%>
+
+<table cellpadding="2" cellspacing="0" border="0">
+<tbody>
+ <tr class="vdh"><td></td><td>domain<br>id</td><td>processor</td><td>has<br>cpu</td><td>state</td><td>mcu<br>advance</td><td>total<br>pages</td><td>name</td></tr>
+ <%
+ for (int loop = 0; loop < domains.length; loop++)
+ {
+ %>
+ <tr class="vdt">
+ <td><input type="checkbox" name="dom" value="<%= domains[loop].id %>"></td>
+ <td align="center"><%= domains[loop].id %></td>
+ <td align="center"><%= domains[loop].processor %></td>
+ <td align="center"><%= domains[loop].cpu %> </td>
+ <td><%= domains[loop].state %> </td>
+ <td align="center"><%= domains[loop].mcu %> </td>
+ <td align="center"><%= domains[loop].pages %> </td>
+ <td><%= domains[loop].name %> </td>
+ </tr>
+ <%
+ }
+ %>
+
+</tbody>
+</table>
+</td></tr>
+
+##WHITESPACE## ##GREYLINE1## ##WHITESPACE##
+
+<tr>
+ <td><input type="submit" name="action" value="stop domain"></td>
+</tr>
+</tbody>
+</table>
+</form>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/dom-stpr.tmpl b/tools/control/web/tmpl/dom-stpr.tmpl
new file mode 100644
index 0000000000..8c0016e89b
--- /dev/null
+++ b/tools/control/web/tmpl/dom-stpr.tmpl
@@ -0,0 +1,40 @@
+Stop Domain
+SECTION&XenoServers
+BREADCRUMB&Domain Manager&dom.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&dommenu.tmpl
+<td valign="top">
+
+
+<b>Stop Domain Results</b>
+<br>
+
+<%
+ HttpServletRequestWrapper hsrw = new HttpServletRequestWrapper(request);
+ Defaults d = sc.getDefaults();
+ CommandStop command_stop = new CommandStop();
+
+ String domains[] = hsrw.getParameterValues("dom");
+
+ for (int i = 0; i < domains.length; i++)
+ {
+%>
+result <%= domains[i] %> =
+ <%= command_stop.executeCommand(d, Integer.parseInt(domains[i])) %> <br>
+<%
+ }
+%>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/dom.tmpl b/tools/control/web/tmpl/dom.tmpl
new file mode 100644
index 0000000000..6e602c979f
--- /dev/null
+++ b/tools/control/web/tmpl/dom.tmpl
@@ -0,0 +1,30 @@
+Domain Manager
+SECTION&XenoServers
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&dommenu.tmpl
+<td valign="top">
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+<%
+ Defaults d = sc.getDefaults();
+%>
+ <tr><td nowrap="nowrap">Domain Manager</td></tr>
+ <tr><td></td></tr>
+<!--
+ <tr><td><%= d.XIToolsDir %></td></tr>
+-->
+</tbody>
+</table>
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/dommenu.tmpl b/tools/control/web/tmpl/dommenu.tmpl
new file mode 100644
index 0000000000..8fc11b2276
--- /dev/null
+++ b/tools/control/web/tmpl/dommenu.tmpl
@@ -0,0 +1,33 @@
+<td width="10" valign="top" align="right"></td>
+
+<td valign="top">
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+<tr>
+ <td class="menuheader" width="100">Domains</td>
+</tr>
+<tr>
+ <td class="sidemenu" width="100"><a href="dom-lis.jsp">List</a></td>
+</tr>
+<tr>
+ <td class="sidemenu" width="100"><a href="dom-new.jsp">New</a></td>
+</tr>
+<tr>
+ <td class="sidemenu" width="100"><a href="dom-sta.jsp">Start</a></td>
+</tr>
+<tr>
+ <td class="sidemenu" width="100"><a href="dom-stp.jsp">Stop</a></td>
+</tr>
+<tr>
+ <td class="sidemenu" width="100"><a href="dom-del.jsp">Delete</a></td>
+</tr>
+
+</tbody>
+</table>
+</td>
+
+<td width="5" valign="top" align="right"></td>
+
+<td bgcolor="#666666" width="2"><img src="img/pixel.gif" class="block" width="2" height="50"></td>
+
+<td width="15" valign="top" align="right"></td>
diff --git a/tools/control/web/tmpl/help.tmpl b/tools/control/web/tmpl/help.tmpl
new file mode 100644
index 0000000000..9cf6462273
--- /dev/null
+++ b/tools/control/web/tmpl/help.tmpl
@@ -0,0 +1,61 @@
+Help
+SECTION&XenoServers
+
+<!-- content -->
+<img src="img/pixel.gif" class="block" width="1" height="12" alt="">
+<table cellpadding="0" cellspacing="0" border="0" summary="page content">
+<tbody><tr>
+ <td width="250" valign="top" align="right">
+ <a href="http://www.cl.cam.ac.uk/newlabphotos/"><img width="191" heigth="65" src="img/xeno.gif" border="0"></a>
+
+<table cellpadding="0" cellspacing="0" border="0" align="right">
+<tbody><tr>
+ <td><img src="img/pixel.gif" class="block" width="20" height="1" alt=""></td>
+</tr>
+<tr>
+ <td colspan="3"><img src="img/pixel.gif" class="block" width="1" height="10" alt=""></td>
+</tr>
+<tr>
+ <td align="right">
+ <table width="180" ><tbody><tr><td><p align="right">
+The XenoServer project aims to build a public infrastructure for wide-area distributed computing.
+</p>
+ </td></tr></tbody></table></td>
+<td><img src="img/pixel.gif" class="block" width="10" height="1" alt=""></td>
+</tr>
+</tbody></table>
+</td>
+<td bgcolor="#666666" width="2"><img src="img/pixel.gif" class="block" width="2" height="50" alt=""></td>
+<td width="20"><img src="img/pixel.gif" class="block" width="20" height="1" alt=""></td>
+<td valign="top">
+
+<!-- main navigation -->
+<table cellpadding="0" cellspacing="0" border="0">
+
+<tbody><tr> <!-- list of menu items -->
+ <td nowrap="nowrap">
+ <b>Help</b>
+</td>
+</tr>
+
+<tr> <!-- blank white space -->
+ <td><img src="img/pixel.gif" class="block" width="1" height="10" alt=""></td>
+</tr>
+
+<tr> <!-- grey line -->
+ <td bgcolor="#cccccc"><img src="img/pixel.gif" class="block" width="1" height="2" alt=""></td>
+</tr>
+
+<tr> <!-- blank white space -->
+ <td><img src="img/pixel.gif" class="block" width="1" height="10" alt=""></td>
+</tr>
+
+<tr> <!-- list of menu items -->
+ <td nowrap="nowrap">Some help text will go here.
+ </td>
+</tr>
+</tbody></table>
+</td>
+</tr>
+</tbody></table>
+<!-- end content -->
diff --git a/tools/control/web/tmpl/index.tmpl b/tools/control/web/tmpl/index.tmpl
new file mode 100644
index 0000000000..d1e158ff48
--- /dev/null
+++ b/tools/control/web/tmpl/index.tmpl
@@ -0,0 +1,66 @@
+XenoServers
+COPYRIGHT&Computer Laboratory, University of Cambridge
+
+<!-- content -->
+<img src="img/pixel.gif" class="block" width="1" height="12" alt="">
+<table cellpadding="0" cellspacing="0" border="0" summary="page content">
+<tbody><tr>
+ <td width="250" valign="top" align="right">
+ <a href="http://www.cl.cam.ac.uk/xeno"><img width="191" heigth="65" src="img/xeno.gif" border="0"></a>
+
+<table cellpadding="0" cellspacing="0" border="0" align="right">
+<tbody>
+<tr>
+ <td><img src="img/pixel.gif" class="block" width="20" height="1" alt=""></td>
+</tr>
+<tr>
+ <td colspan="2"><img src="img/pixel.gif" class="block" width="1" height="10" alt=""></td>
+</tr>
+<tr>
+ <td align="right">
+ <table width="180" ><tbody><tr><td><p align="right">
+ The XenoServer project aims to build a public infrastructure
+ for wide-area distributed computing.
+ </td></tr></tbody></table></td>
+<td><img src="img/pixel.gif" class="block" width="10" height="1" alt=""></td>
+</tr>
+</tbody></table>
+</td>
+<td bgcolor="#666666" width="2"><img src="img/pixel.gif" class="block" width="2" height="50" alt=""></td>
+<td width="20"><img src="img/pixel.gif" class="block" width="20" height="1" alt=""></td>
+<td valign="top">
+
+<!-- main navigation -->
+<table cellpadding="0" cellspacing="0" border="0">
+
+<tbody><tr> <!-- list of menu items -->
+ <td nowrap="nowrap">
+ <a href="about.jsp" class="homemenu">About the XenoServers Project</a><br>
+</td>
+</tr>
+
+##WHITESPACE## ##GREYLINE1## ##WHITESPACE##
+
+<tr>
+ <td nowrap="nowrap">
+ <a href="dom.jsp" class="homemenu">Domain Manager</a><br>
+ <a href="vd.jsp" class="homemenu">Virtual Disk Manager</a><br>
+ </td>
+</tr>
+
+##WHITESPACE## ##GREYLINE1## ##WHITESPACE##
+
+<tr>
+ <td nowrap="nowrap">
+ For additional information, click
+ <a href="http://www.xenoserver.org">here</a>
+ </td>
+</tr>
+
+
+##WHITESPACE##
+</tbody></table>
+</td>
+</tr>
+</tbody></table>
+<!-- end content -->
diff --git a/tools/control/web/tmpl/install.pl b/tools/control/web/tmpl/install.pl
new file mode 100755
index 0000000000..1d712a2e39
--- /dev/null
+++ b/tools/control/web/tmpl/install.pl
@@ -0,0 +1,236 @@
+#!/usr/bin/perl5
+if($#ARGV<0) {
+ &usage();
+} else {
+
+ $headerfile = "xenohead.def" ;
+ $footerfile = "xenofoot.def" ;
+
+ $sectionbreak = "-" ;
+ $supress_section = 0 ;
+ $homepage = 0 ;
+ $navigationwidth = 106;
+ $navigationstring = "<td><a href=\"index.jsp\"><img src=\"img/home.gif\" width=\"53\" height=\"18\" border=\"0\" alt=\"XenoServers Home Page\" class=\"block\" /></a></td>";
+ $whitespace = "<tr><td><img src=\"img/pixel.gif\" class=\"block\" width=\"1\" height=\"10\"></td></tr>";
+ $greyline1 = "<tr><td bgcolor=\"#cccccc\"><img src=\"img/pixel.gif\" class=\"block\" width=\"1\" height=\"2\"></td></tr>";
+ $greyline2 = "<tr><td bgcolor=\"#cccccc\" colspan=\"2\"><img src=\"img/pixel.gif\" class=\"block\" width=\"1\" height=\"2\"></td></tr>";
+ $greyline3 = "<tr><td bgcolor=\"#cccccc\" colspan=\"3\"><img src=\"img/pixel.gif\" class=\"block\" width=\"1\" height=\"2\"></td></tr>";
+ $greyline4 = "<tr><td bgcolor=\"#cccccc\" colspan=\"4\"><img src=\"img/pixel.gif\" class=\"block\" width=\"1\" height=\"2\"></td></tr>";
+ $greyline14 = "<tr><td></td><td bgcolor=\"#cccccc\" colspan=\"4\"><img src=\"img/pixel.gif\" class=\"block\" width=\"1\" height=\"2\"></td></tr>";
+
+
+ $login = getlogin || (getpwuid($<))[0] || "an unidentified user" ;
+
+ $name =`finger $login | sed -n "s/Login.*:.*: //p"` ;
+ if( $name eq "" ) { $name = $login ; }
+
+ $date = `date +"on %-e-%b-%Y at %H:%M"` ;
+
+ $year = `date +"%Y"` ;
+
+ foreach $ag (@ARGV) {
+
+ if( $ag =~ "^-s" ) {
+ $supress_section = 1 ;
+ }
+ elsif( $ag =~ "^-home" ) {
+ $homepage = 1 ;
+ }
+ else {
+
+ $preagtmp = $ag . ".tmpl~$$";
+ $agtmp = $ag . ".jsp~$$";
+
+ open(PRETMPL,">$preagtmp") or die "Unable to write $preagtmp\n";
+ print PRETMPL &doIncludes("$ag.tmpl");
+ close(PRETMPL);
+
+ open(TMPL,"<$preagtmp") or die "Unable to read $preagtmp\n";
+
+ open(HTML,">$agtmp") or die "Unable to open $agtmp\n" ;
+
+ $title=<TMPL> ;
+
+ $sectionhead = "XenoServers" ;
+ $copyright = "Computer Laboratory, University of Cambridge" ;
+ $breadcrumbline = "" ;
+ $commentcontact="<a href=\"mailto:pagemaster\@cl.cam.ac.uk\">pagemaster\@cl.cam.ac.uk</a>" ;
+
+ $process_headings = 1 ;
+ $tmp=<TMPL> ;
+ while( $process_headings ) {
+ $process_headings = 0 ;
+
+ if( $tmp =~ /^SECTION&(.*)$/ ) {
+ $sectionhead=$1 ;
+ $process_headings = 1 ;
+ }
+
+ if( $tmp =~ /^COMMENTS&(.*)$/ ) {
+ $commentcontact=$1 ;
+ $process_headings = 1 ;
+ }
+
+ if( $tmp =~ /^COPYRIGHT&(.*)$/ ) {
+ $copyright=$1 ;
+ $process_headings = 1 ;
+ }
+
+ if( $tmp =~ /^HEADERFILE&(.*)$/ ) {
+ $headerfile=$1 ;
+ $process_headings = 1 ;
+ }
+
+ if( $tmp =~ /^FOOTERFILE&(.*)$/ ) {
+ $footerfile=$1 ;
+ $process_headings = 1 ;
+ }
+
+ if( $tmp =~ /BREADCRUMB&.*/ ) {
+ @bread=split(/&/,$tmp) ;
+ @bwords=split(/ /, @bread[1]) ;
+ $bname=@bwords[0] ;
+ for( $i=1 ; $i <= $#bwords ; $i++ ){
+ $bname = $bname . "&nbsp;" . @bwords[$i] ;
+ }
+ $breadcrumbline = $breadcrumbline . "&nbsp;&gt;&nbsp;<a href=\"" . @bread[2] . "\"class=\"bread\">" . $bname . "</a>" ;
+ $process_headings = 1 ;
+ }
+
+ if( $process_headings ) {
+ $tmp=<TMPL> ;
+ }
+ }
+
+#### generate the final breadcrumb which is the current file itself
+ @path=split(/\//, $ag) ;
+ $localfilename=@path[$#path] . ".jsp" ;
+ @bwords=split(/ /, $title) ;
+ $bname=@bwords[0] ;
+ for( $i=1 ; $i <= $#bwords ; $i++ ){
+ $bname = $bname . "&nbsp;" . @bwords[$i] ;
+ }
+ $breadcrumbline = $breadcrumbline . "&nbsp;&gt;&nbsp;<a href=\"" . $localfilename . "\" class=\"bread\">" . $bname . "</a>" ;
+
+
+#### if suppressing the section header then do so now
+ if( $supress_section ) {
+ $sectionhead = "" ;
+ $sectionbreak = "" ;
+ }
+
+#### if homepage then do so now
+ if( $homepage ) {
+ $breadcrumbline = "" ;
+ $navigationwidth = 53;
+ $navigationstring = "";
+ }
+
+
+ open(HEADER,"<$headerfile") or die "Unable to open $headerfile\n" ;
+ while(<HEADER>) {
+ s/##TITLE##/$title/g ;
+ s/##SECTION##/$sectionhead/g ;
+ s/##SECTIONBREAK##/$sectionbreak/g ;
+ s/##BREADCRUMBS##/$breadcrumbline/g ;
+ s/##FILENAME##/$ag.jsp/g ;
+ s/##DATE##/$date/g ;
+ s/##OWNERNAME##/$name/g ;
+ s/##OWNERUSERID##/$login/g ;
+ s/##OWNEREMAIL##/$login\@cl.cam.ac.uk/g ;
+ s/##COMMENTCONTACT##/$commentcontact/g ;
+ s/##COPYRIGHT##/$copyright/g ;
+ s/##YEAR##/$year/g ;
+ s/##NAVIGATIONWIDTH##/$navigationwidth/g ;
+ s/##NAVIGATIONSTRING##/$navigationstring/g ;
+ print HTML $_ ;
+ }
+ close(HEADER) ;
+
+ $_ = $tmp ;
+ while(defined($_)) {
+ s/##LISTSTART##/<ul>/g ;
+ s/##ITEMHEAD##/<li>/g ;
+ s/##ITEMBODY##/<br \/>/g ;
+ s|##LISTEND##|</ul>|g ;
+ s/##TITLE##/$title/g ;
+ s/##SECTION##/$sectionhead/g ;
+ s/##BREADCRUMBS##/$breadcrumbline/g ;
+ s/##FILENAME##/$ag.jsp/g ;
+ s/##DATE##/$date/g ;
+ s/##OWNERNAME##/$name/g ;
+ s/##OWNERUSERID##/$login/g ;
+ s/##OWNEREMAIL##/$login\@cl.cam.ac.uk/g ;
+ s/##COMMENTCONTACT##/$commentcontact/g ;
+ s/##COPYRIGHT##/$copyright/g ;
+ s/##YEAR##/$year/g ;
+ s/##WHITESPACE##/$whitespace/g ;
+ s/##GREYLINE1##/$greyline1/g ;
+ s/##GREYLINE2##/$greyline2/g ;
+ s/##GREYLINE3##/$greyline3/g ;
+ s/##GREYLINE4##/$greyline4/g ;
+ s/##GREYLINE14##/$greyline14/g ;
+ print HTML $_ ;
+ $_ = <TMPL>
+ }
+ open(FOOTER,"<$footerfile") or die "Unable to open $footerfile\n" ;
+ while(<FOOTER>) {
+ s/##TITLE##/$title/g ;
+ s/##SECTION##/$sectionhead/g ;
+ s/##BREADCRUMBS##/$breadcrumbline/g ;
+ s/##FILENAME##/$ag.jsp/g ;
+ s/##DATE##/$date/g ;
+ s/##OWNERNAME##/$name/g ;
+ s/##OWNERUSERID##/$login/g ;
+ s/##OWNEREMAIL##/$login\@cl.cam.ac.uk/g ;
+ s/##COMMENTCONTACT##/$commentcontact/g ;
+ s/##COPYRIGHT##/$copyright/g ;
+ s/##YEAR##/$year/g ;
+ print HTML $_ ;
+ }
+ close(FOOTER) ;
+ close(HTML);
+ close(TMPL);
+
+ if( system "mv $agtmp $ag.jsp" ) {
+ die "Unable to rename $agtmp to $ag.jsp\n" ; ;
+ }
+ if( system "rm $preagtmp" ) {
+ die "Unable to remove $preagtmp\n" ; ;
+ }
+ }
+ }
+}
+
+sub usage
+{
+ print "Usage: install.pl [-s] <name>\n";
+ print " Installs web page <name>.jsp based on <name>.tmpl\n";
+ print " -s supresses the generation of any section title";
+ print " which says `Computer Laboratory' in the default" ;
+ print " case or is specified by SECTION& in the .tmpl file" ;
+ exit;
+}
+
+sub doIncludes
+{
+ my $infile=$_[0];
+ my $out="";
+ my $tmp;
+ my $incfile;
+ my @lines;
+ my $line;
+
+ open(FIN,"<$infile") or die "doIncludes unable to read from $infile\n";
+ @lines=<FIN>;
+ close(FIN);
+ foreach $line (@lines) {
+ if( $line =~ /^INCLUDE&.*/ ) {
+ ($tmp,$incfile) = split(/&/,$line);
+ $out=$out.&doIncludes($incfile);
+ } else {
+ $out=$out.$line;
+ }
+ }
+ return $out;
+}
diff --git a/tools/control/web/tmpl/makefile b/tools/control/web/tmpl/makefile
new file mode 100644
index 0000000000..aed826114e
--- /dev/null
+++ b/tools/control/web/tmpl/makefile
@@ -0,0 +1,35 @@
+src0 = xenostyle.css
+src1 = index.jsp newdom.jsp about.jsp help.jsp vd.jsp \
+ vd-pv.jsp vd-pa.jsp vd-vdv.jsp vd-vdc.jsp vd-vdd.jsp vd-vdr.jsp \
+ vd-fv.jsp vd-vbdv.jsp vd-vbdc.jsp vd-vbdd.jsp vd-vbdf.jsp \
+ vd-par.jsp vd-vdcr.jsp vd-vddr.jsp vd-vdrr.jsp \
+ vd-vbdcr.jsp vd-vbdfr.jsp \
+ dom.jsp dom-lis.jsp dom-new.jsp dom-newr.jsp dom-sta.jsp dom-star.jsp \
+ dom-stp.jsp dom-stpr.jsp dom-del.jsp dom-delr.jsp
+target = ..
+target1 = $(target)/index.jsp $(target)/newdom.jsp $(target)/vd.jsp \
+ $(target)/vd-pv.jsp $(target)/vd-pa.jsp $(target)/vd-vdv.jsp \
+ $(target)/vd-vdc.jsp $(target)/vd-vdd.jsp $(target)/vd-vdr.jsp \
+ $(target)/vd-fv.jsp $(target)/vd-vbdv.jsp $(target)/vd-vbdc.jsp \
+ $(target)/vd-vbdd.jsp $(target)/vd-vbdf.jsp \
+ $(target)/about.jsp $(target)/help.jsp \
+ $(target)/vd-par.jsp $(target)/vd-vdcr.jsp $(target)/vd-vddr.jsp \
+ $(target)/vd-vdrr.jsp $(target)/vd-vbdcr.jsp $(target)/vd-vbdfr.jsp \
+ $(target)/dom.jsp $(target)/dom-lis.jsp $(target)/dom-new.jsp \
+ $(target)/dom-newr.jsp $(target)/dom-sta.jsp $(target)/dom-star.jsp \
+ $(target)/dom-stp.jsp $(target)/dom-stpr.jsp \
+ $(target)/dom-del.jsp $(target)/dom-delr.jsp
+
+.SUFFIXES: .tmpl .jsp
+
+.tmpl.jsp:
+ ./install.pl $*
+
+all: $(src0) $(src1)
+ ./install.pl -s -home index
+ mv *.jsp $(target)
+ cp $(src0) $(target)
+
+clean:
+ rm -f $(target1)
+ rm -f $(target)/$(src0)
diff --git a/tools/control/web/tmpl/newdom.tmpl b/tools/control/web/tmpl/newdom.tmpl
new file mode 100644
index 0000000000..47af39f4a8
--- /dev/null
+++ b/tools/control/web/tmpl/newdom.tmpl
@@ -0,0 +1,172 @@
+New Domain
+SECTION&XenoServers
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<form>
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+<tr>
+ <td width="50"></td>
+ <td></td>
+ <td></td>
+ <td width="7"></td>
+ <td></td>
+</tr>
+
+<tr>
+ <td></td>
+ <td class="block" colspan=4><b>Create A New Domain</b></td>
+</tr>
+
+##WHITESPACE## ##GREYLINE14## ##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td class="block" colspan=4>Memory Size</td>
+</tr>
+<tr>
+ <td></td> <td></td> <td></td> <td></td>
+ <td> <input type="text" size="5" value="64"> MB </td>
+</tr>
+
+##WHITESPACE## ##GREYLINE14## ##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td class="block" colspan=4>Kernel Image</td>
+</tr>
+<tr>
+ <td></td>
+ <td colspan=2 align="right">path</td>
+ <td></td>
+ <td> <input type="text" size="40" value="/usr/src/xeno/install/xenolinux.gz"> </td>
+</tr>
+
+##WHITESPACE## ##GREYLINE14## ##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td class="block" colspan=4>IP Config</td>
+</tr>
+<tr>
+ <td></td> <td></td>
+ <td class="block" align="right">IP address</td>
+ <td></td>
+ <td> <input type="text" size="15" value="128.232.35.202"> </td>
+</tr>
+<tr>
+ <td></td> <td></td>
+ <td class="block" align="right">Gateway</td>
+ <td></td>
+ <td> <input type="text" size="15" value="128.232.32.1"> </td>
+</tr>
+<tr>
+ <td></td> <td></td>
+ <td class="block" align="right">Netmask</td>
+ <td></td>
+ <td> <input type="text" size="15" value="255.255.240.0"> </td>
+</tr>
+<tr>
+ <td></td> <td></td>
+ <td class="block" align="right">New Name</td>
+ <td></td>
+ <td> <input type="text" size="15"> </td>
+</tr>
+
+##WHITESPACE## ##GREYLINE14## ##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td class="block" colspan=2>Root File System</td>
+</tr>
+
+##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td align="right">NFS<input type="radio" name="root" value="nfs"></td>
+ <td align="right">path</td>
+ <td></td>
+ <td><input type="text" size="40" value="/usr/groups/xeno/srgboot/mousetrap/root0"></td>
+</tr>
+<tr>
+ <td></td> <td></td>
+ <td align="right">server</td>
+ <td></td>
+ <td><input type="text" size="15" value="128.232.32.20"></td>
+</tr>
+ ##WHITESPACE##
+<tr>
+ <td></td>
+ <td align="right">ramdisk<input type="radio" name="root" value="ram"></td>
+ <td align="right">path</td>
+ <td></td>
+ <td><input type="text" size="40" value="/usr/isolinux/initrd.gz"></td>
+</tr>
+ ##WHITESPACE##
+<tr>
+ <td></td>
+ <td align="right">raw partition<input type="radio" name="root" value="raw"></td>
+ <td align="right">path</td>
+ <td></td>
+ <td><input type="text" size="40" value="/dev/xsda8"></td>
+</tr>
+ ##WHITESPACE##
+<tr>
+ <td></td>
+ <td align="right">virtual disk<input type="radio" checked name="root" value="virtual"></td>
+ <td align="right">path</td>
+ <td></td>
+ <td><input type="text" size="40" value="/dev/xvda0"></td>
+</tr>
+
+##WHITESPACE## ##GREYLINE14## ##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td class="block" colspan=4>Extra Arguments</td>
+</tr>
+<tr>
+ <td></td>
+ <td colspan=2 align="right"></td>
+ <td></td>
+ <td> <input type="text" size="40"> </td>
+</tr>
+
+
+##WHITESPACE## ##GREYLINE14## ##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td><input type="submit" value="refresh"></td>
+</tr>
+
+##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td colspan=4>
+ <textarea cols="60" rows="5" name="commandline">
+When you press refresh, the sample command line shows
+up here. The user has the option of editing it before
+pressing execute below. e.g.
+./newdom 16000 image 128.232.35.202 ip=128.232.35.202:128.232.32.20:128.232.32.1:255.255.240.0::eth0:off root=/dev/xsda9 ro
+</textarea>
+</td></tr>
+
+##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td><input type="submit" value="execute"></td>
+</tr>
+
+</tbody>
+</table>
+</form>
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-fv.tmpl b/tools/control/web/tmpl/vd-fv.tmpl
new file mode 100644
index 0000000000..e8b41a2bb5
--- /dev/null
+++ b/tools/control/web/tmpl/vd-fv.tmpl
@@ -0,0 +1,60 @@
+View Free Space
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+
+<tr><td>
+<table cellpadding="2" cellspacing="0" border="0">
+<tbody>
+ <tr class="vdh"><td>idx</td><td>disk</td><td>offset</td><td>size </td></tr>
+
+ <%
+ long space = 0;
+ int count = root.getFreeExtentCount();
+ for (int loop = 0; loop < count; loop++)
+ {
+ Extent e = root.getFreeExtent(loop);
+ space += e.getSize();
+ %>
+ <tr class="vdt">
+ <td ><%= loop %></td>
+ <td ><%= e.getDisk() %></td>
+ <td align="right"><%= e.getOffset() %> </td>
+ <td align="right"><%= e.getSize() %> </td>
+ </tr>
+ <%
+ }
+ %>
+</tbody>
+</table>
+</td></tr>
+
+
+##WHITESPACE## ##GREYLINE1## ##WHITESPACE##
+
+<tr><td>
+Total available freespace: <%= space * 512 / (1024 * 1024) %> MB
+</td></tr>
+
+</tbody>
+</table>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-pa.tmpl b/tools/control/web/tmpl/vd-pa.tmpl
new file mode 100644
index 0000000000..e71a6bf195
--- /dev/null
+++ b/tools/control/web/tmpl/vd-pa.tmpl
@@ -0,0 +1,97 @@
+Add Partition
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+
+<form method="post" action="vd-par.jsp">
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+
+<tr><td>
+
+<table cellpadding="2" cellspacing="0" border="0">
+<tbody>
+ <tr class="vdh"><td></td><td>maj:min</td><td>blocks</td><td>start sect</td><td>num sects</td><td>name</td></tr>
+ <%
+ int count = root.getPartitionCount();
+ for (int loop = 0; loop < count; loop++)
+ {
+ Partition p = root.getPartition(loop);
+ if (p.getIsXeno() == true)
+ {
+ %>
+ <tr class="vds"><td></td>
+ <%
+ }
+ else
+ {
+ %>
+ <tr class="vdt">
+ <td><input type="checkbox" name="p" value="<%= p.getName() %>"></td>
+ <%
+ }
+ %>
+ <td><%= p.getMajor() %>:<%= p.getMinor() %></td>
+ <td align="right"><%= p.getBlocks() %></td>
+ <td align="right"><%= p.getStartSect() %> </td>
+ <td align="right"><%= p.getNumSects() %> </td>
+ <td><%= p.getName() %> </td>
+ </tr>
+ <%
+ }
+ %>
+</tbody>
+</table>
+
+</td></tr>
+
+##WHITESPACE## ##GREYLINE1## ##WHITESPACE##
+
+
+<tr><td>
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+
+<tr>
+ <td width="50"></td>
+ <td width="7"></td>
+ <td></td>
+</tr>
+
+<tr>
+ <td align="right">chunksize</td>
+ <td></td>
+ <td> <input type="text" size="5" name="chunk" value="256">
+ <input type="radio" name="chunkunits" value="m" checked>MB
+ <input type="radio" name="chunkunits" value="g">GB
+ </td>
+</tr>
+</tbody>
+</table>
+</td></tr>
+
+##WHITESPACE## ##GREYLINE1## ##WHITESPACE##
+
+<tr>
+ <td><input type="submit" name="action" value="add partition"></td>
+</tr>
+
+</tbody>
+</table>
+</form>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-par.tmpl b/tools/control/web/tmpl/vd-par.tmpl
new file mode 100644
index 0000000000..3a7f5ec3b9
--- /dev/null
+++ b/tools/control/web/tmpl/vd-par.tmpl
@@ -0,0 +1,49 @@
+Add Partition Results
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+
+<b>Add Partition Results</b>
+<br>
+
+<%
+ HttpServletRequestWrapper hsrw = new HttpServletRequestWrapper(request);
+
+ String partitions[] = hsrw.getParameterValues("p");
+ String size = hsrw.getParameter("chunk").trim() +
+ hsrw.getParameter("chunkunits").trim();
+
+ for (int i = 0; i < partitions.length; i++)
+ {
+%>
+p = <%= root.doAddPartition(partitions[i], size) %> <br>
+<%
+ }
+%>
+chunk = <%= hsrw.getParameter("chunk") %>
+<br>
+chunkunits = <%= hsrw.getParameter("chunkunits") %>
+<br>
+size = <%= size %>
+<br>
+
+
+<%
+ root.doFlushState();
+%>
+
+
+</td>
+</tbody>
+</table>
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-pv.tmpl b/tools/control/web/tmpl/vd-pv.tmpl
new file mode 100644
index 0000000000..8195f82964
--- /dev/null
+++ b/tools/control/web/tmpl/vd-pv.tmpl
@@ -0,0 +1,54 @@
+View Partitions
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+note: highlighted entries are currently being used as xeno partitions.
+<br><br>
+
+<table cellpadding="2" cellspacing="0" border="0">
+<tbody>
+ <tr class="vdh"><td>maj:min</td><td>blocks</td><td>start sect</td><td>num sects</td><td>name</td></tr>
+ <%
+ int count = root.getPartitionCount();
+ for (int loop = 0; loop < count; loop++)
+ {
+ Partition p = root.getPartition(loop);
+ if (p.getIsXeno() == true)
+ {
+ %>
+ <tr class="vds">
+ <%
+ }
+ else
+ {
+ %>
+ <tr class="vdt">
+ <%
+ }
+ %>
+ <td><%= p.getMajor() %>:<%= p.getMinor() %></td>
+ <td align="right"><%= p.getBlocks() %></td>
+ <td align="right"><%= p.getStartSect() %> </td>
+ <td align="right"><%= p.getNumSects() %> </td>
+ <td><%= p.getName() %> </td>
+ <%
+ }
+ %>
+</tbody>
+</table>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-vbdc.tmpl b/tools/control/web/tmpl/vd-vbdc.tmpl
new file mode 100644
index 0000000000..e6952182b8
--- /dev/null
+++ b/tools/control/web/tmpl/vd-vbdc.tmpl
@@ -0,0 +1,94 @@
+Create Virtual Block Device
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+
+<form method="post" action="vd-vbdcr.jsp">
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+<tr><td>
+<table cellpadding="2" cellspacing="0" border="0">
+<tbody>
+ <tr class="vdh"><td></td><td>vd key</td><td width="5"></td><td>name</td><td width="5"></td><td>expiry</td></tr>
+
+ <%
+ int count = root.getVirtualDiskCount();
+ for (int loop = 0; loop < count; loop++)
+ {
+ VirtualDisk vd = root.getVirtualDisk(loop);
+ %>
+ <tr class="vdt">
+ <td>
+ <input type="radio" name="vd"
+ <% if (loop == 0) { %> checked <% } %>
+ value="<%= vd.getKey() %>">
+ </td>
+ <td><%= vd.getKey() %></td>
+ <td></td>
+ <td><%= vd.getName() %></td>
+ <td></td>
+ <td><%= vd.getExpiry() %></td>
+ </tr>
+ <%
+ }
+ %>
+
+</tbody>
+</table>
+</td></tr>
+
+##WHITESPACE## ##GREYLINE1## ##WHITESPACE##
+
+<tr><td>
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+
+<tr>
+ <td width="100"></td>
+ <td width="7"></td>
+ <td></td>
+</tr>
+
+<tr>
+ <td align="right">domain</td>
+ <td></td>
+ <td> <input type="text" size="3" name="domain"> </td>
+</tr>
+<tr>
+ <td align="right">vbd number</td>
+ <td></td>
+ <td> <input type="text" size="3" name="vbd"> </td>
+</tr>
+<tr>
+ <td align="right"></td>
+ <td></td>
+ <td> <input type="radio" name="mode" value="ro" checked>RO
+ <input type="radio" name="mode" value="rw">RW</td>
+</tr>
+</tbody>
+</table>
+</td></tr>
+
+##WHITESPACE## ##GREYLINE1## ##WHITESPACE##
+
+<tr>
+ <td><input type="submit" name="action" value="create virtual block device"></td>
+</tr>
+</table>
+</form>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-vbdcr.tmpl b/tools/control/web/tmpl/vd-vbdcr.tmpl
new file mode 100644
index 0000000000..78d1d74c6e
--- /dev/null
+++ b/tools/control/web/tmpl/vd-vbdcr.tmpl
@@ -0,0 +1,44 @@
+Create Virtual Block Device
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+
+<b>Create Virtual Block Device Results</b>
+<br>
+
+<%
+ HttpServletRequestWrapper hsrw = new HttpServletRequestWrapper(request);
+%>
+output = <%= root.doCreateVirtualBlockDevice(hsrw.getParameter("vd"),
+ Integer.decode(hsrw.getParameter("domain")).intValue(),
+ Integer.decode(hsrw.getParameter("vbd")).intValue(),
+ hsrw.getParameter("mode"))
+ %>
+<br>
+vd = <%= hsrw.getParameter("vd") %>
+<br>
+domain = <%= hsrw.getParameter("domain") %>
+<br>
+vbd = <%= hsrw.getParameter("vbd") %>
+<br>
+mode = <%= hsrw.getParameter("mode") %>
+
+<%
+ root.doFlushState();
+%>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-vbdd.tmpl b/tools/control/web/tmpl/vd-vbdd.tmpl
new file mode 100644
index 0000000000..39b6163643
--- /dev/null
+++ b/tools/control/web/tmpl/vd-vbdd.tmpl
@@ -0,0 +1,29 @@
+Delete Virtual Block Devices
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+
+<tr><td>
+Not currently implemented.
+</td></tr>
+
+##WHITESPACE## ##GREYLINE1## ##WHITESPACE##
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-vbdf.tmpl b/tools/control/web/tmpl/vd-vbdf.tmpl
new file mode 100644
index 0000000000..5325fbb9ab
--- /dev/null
+++ b/tools/control/web/tmpl/vd-vbdf.tmpl
@@ -0,0 +1,59 @@
+Flush Virtual Block Devices
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+
+<form method="post" action="vd-vbdfr.jsp">
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+
+<tr><td>
+<table cellpadding="2" cellspacing="0" border="0">
+<tbody>
+ <tr class="vdh"><td>vd key</td><td>dom</td><td>vbd</td><td>mode</td></tr>
+
+ <%
+ for (Enumeration e = root.getVirtualBlockDevices(); e.hasMoreElements();)
+ {
+ VirtualBlockDevice vbd = (VirtualBlockDevice) e.nextElement();
+ %>
+ <tr class="vdt">
+ <td><%= vbd.getKey() %></td>
+ <td><%= vbd.getDomain() %></td>
+ <td><%= vbd.getVBDNum() %></td>
+ <td><%= vbd.getMode().toString() %></td>
+ </tr>
+ <%
+ }
+ %>
+
+</tbody>
+</table>
+</td></tr>
+
+##WHITESPACE## ##GREYLINE1## ##WHITESPACE##
+
+<tr>
+ <td><font color="red">Warning, this will remove all virtual block devices</font></td>
+</tr>
+
+<tr>
+ <td><input type="submit" value="flush all vbds"></td>
+</tr>
+</form>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-vbdfr.tmpl b/tools/control/web/tmpl/vd-vbdfr.tmpl
new file mode 100644
index 0000000000..566f4cb038
--- /dev/null
+++ b/tools/control/web/tmpl/vd-vbdfr.tmpl
@@ -0,0 +1,32 @@
+Flush Virtual Block Devices
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+
+<b>Flush Virtual Block Device Results</b>
+<br>
+
+
+<%
+ HttpServletRequestWrapper hsrw = new HttpServletRequestWrapper(request);
+%>
+output = <%= root.doFlushVirtualBlockDevices() %>
+<%
+ root.doFlushState();
+%>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-vbdv.tmpl b/tools/control/web/tmpl/vd-vbdv.tmpl
new file mode 100644
index 0000000000..306372e2bb
--- /dev/null
+++ b/tools/control/web/tmpl/vd-vbdv.tmpl
@@ -0,0 +1,44 @@
+View Virtual Block Devices
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+
+<table cellpadding="2" cellspacing="0" border="0">
+<tbody>
+ <tr class="vdh"><td>dom</td><td>vbd</td><td>mode</td><td>vd key</td><td>vd name</td></tr>
+
+
+ <%
+ for (Enumeration e = root.getVirtualBlockDevices(); e.hasMoreElements();)
+ {
+ VirtualBlockDevice vbd = (VirtualBlockDevice) e.nextElement();
+ VirtualDisk vd = root.getVirtualDiskKey(vbd.getKey());
+ %>
+ <tr class="vdt">
+ <td><%= vbd.getDomain() %></td>
+ <td><%= vbd.getVBDNum() %></td>
+ <td><%= vbd.getMode().toString() %></td>
+ <td><%= vbd.getKey() %></td>
+ <td><%= vd.getName() %></td>
+ </tr>
+ <%
+ }
+ %>
+</tbody>
+</table>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-vdc.tmpl b/tools/control/web/tmpl/vd-vdc.tmpl
new file mode 100644
index 0000000000..97a9276e50
--- /dev/null
+++ b/tools/control/web/tmpl/vd-vdc.tmpl
@@ -0,0 +1,67 @@
+Create New Virtual Disk
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+
+<form method="post" action="vd-vdcr.jsp">
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+
+<tr>
+ <td width="50"></td>
+ <td width="7"></td>
+ <td></td>
+</tr>
+
+<tr>
+ <td align="right">name</td>
+ <td></td>
+ <td> <input type="text" size="40" name="name" value="name of disk"> </td>
+</tr>
+
+<tr>
+ <td align="right">size</td>
+ <td></td>
+ <td> <input type="text" size="10" name="size">
+ <input type="radio" name="sizeunits" value="mb" checked>MB
+ <input type="radio" name="sizeunits" value="gb">GB
+ </td>
+</tr>
+
+<tr>
+ <td align="right">expiry</td>
+ <td></td>
+ <td> <input type="text" size="3" name="expiry">
+ <input type="radio" name="expiryunits" value="d" checked>days
+ <input type="radio" name="expiryunits" value="w">weeks
+ <input type="radio" name="expiryunits" value="m">months
+ <input type="radio" name="expiryunits" value="y">years
+ </td>
+</tr>
+
+##WHITESPACE## ##GREYLINE3## ##WHITESPACE##
+
+<tr>
+ <td></td>
+ <td></td>
+ <td><input type="submit" name="action" value="create virtual disk"></td>
+</tr>
+
+</tbody>
+</table>
+</form>
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-vdcr.tmpl b/tools/control/web/tmpl/vd-vdcr.tmpl
new file mode 100644
index 0000000000..85936cdd95
--- /dev/null
+++ b/tools/control/web/tmpl/vd-vdcr.tmpl
@@ -0,0 +1,64 @@
+Create New Virtual Disk
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+
+
+<b>Create Virtual Disk Results</b>
+<br>
+
+<%
+ HttpServletRequestWrapper hsrw = new HttpServletRequestWrapper(request);
+ String size = hsrw.getParameter("size").trim() +
+ hsrw.getParameter("sizeunits").trim();
+ long expiry = Long.decode(hsrw.getParameter("expiry")).longValue();
+
+ /* not perfect, but good enough for now... */
+ if ( hsrw.getParameter("expiryunits").equals("d"))
+ {
+ expiry *= 24 * 60 * 60 * 1000;
+ }
+ else if ( hsrw.getParameter("expiryunits").equals("w"))
+ {
+ expiry *= 24 * 60 * 60 * 1000 * 7;
+ }
+ else if ( hsrw.getParameter("expiryunits").equals("m"))
+ {
+ expiry *= 24 * 60 * 60 * 1000 * 30;
+ }
+ else if ( hsrw.getParameter("expiryunits").equals("y"))
+ {
+ expiry *= 24 * 60 * 60 * 1000 * 365;
+ }
+
+%>
+output = <%= root.doCreateVirtualDisk( hsrw.getParameter("name"),
+ size, expiry)
+ %>
+<br>
+size = <%= size %>
+<br>
+expiry = <%= hsrw.getParameter("expiry") %>
+<br>
+expiryunits = <%= hsrw.getParameter("expiryunits") %>
+<br>
+
+<%
+ root.doFlushState();
+%>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-vdd.tmpl b/tools/control/web/tmpl/vd-vdd.tmpl
new file mode 100644
index 0000000000..920899b1b2
--- /dev/null
+++ b/tools/control/web/tmpl/vd-vdd.tmpl
@@ -0,0 +1,58 @@
+Delete Virtual Disk
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+
+<form method="post" action="vd-vddr.jsp">
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+<tr><td>
+<table cellpadding="2" cellspacing="0" border="0">
+<tbody>
+ <tr class="vdh"><td></td><td>key</td><td width="5"></td><td>name</td><td width="5"></td><td>expiry</td></tr>
+
+ <%
+ int count = root.getVirtualDiskCount();
+ for (int loop = 0; loop < count; loop++)
+ {
+ VirtualDisk vd = root.getVirtualDisk(loop);
+ %>
+ <tr class="vdt">
+ <td><input type="checkbox" name="vd" value="<%= vd.getKey() %>"></td>
+ <td><%= vd.getKey() %></td>
+ <td></td>
+ <td><%= vd.getName() %></td>
+ <td></td>
+ <td><%= vd.getExpiry() %></td>
+ </tr>
+ <%
+ }
+ %>
+
+
+</tbody>
+</table>
+</td></tr>
+
+##WHITESPACE## ##GREYLINE1## ##WHITESPACE##
+
+<tr>
+ <td><input type="submit" name="action" value="delete virtual disk"></td>
+</tr>
+</table>
+</form>
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-vddr.tmpl b/tools/control/web/tmpl/vd-vddr.tmpl
new file mode 100644
index 0000000000..13925ebb8b
--- /dev/null
+++ b/tools/control/web/tmpl/vd-vddr.tmpl
@@ -0,0 +1,34 @@
+Delete Virtual Disk
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+
+<b>Delete Virtual Disk Results</b>
+<br>
+<%
+ HttpServletRequestWrapper hsrw = new HttpServletRequestWrapper(request);
+%>
+
+vd= <%= hsrw.getParameter("vd") %>
+
+vd= <%= root.doDeleteVirtualDisk(hsrw.getParameter("vd")) %>
+
+<%
+ root.doFlushState();
+%>
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-vdr.tmpl b/tools/control/web/tmpl/vd-vdr.tmpl
new file mode 100644
index 0000000000..551d230ceb
--- /dev/null
+++ b/tools/control/web/tmpl/vd-vdr.tmpl
@@ -0,0 +1,83 @@
+Refresh Virtual Disk
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+
+<form method="post" action="vd-vdrr.jsp">
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+<tr><td>
+<table cellpadding="2" cellspacing="0" border="0">
+<tbody>
+ <tr class="vdh"><td></td><td>key</td><td width="5"></td><td>name</td><td width="5"></td><td>expiry</td></tr>
+
+ <%
+ int count = root.getVirtualDiskCount();
+ for (int loop = 0; loop < count; loop++)
+ {
+ VirtualDisk vd = root.getVirtualDisk(loop);
+ %>
+ <tr class="vdt">
+ <td><input type="checkbox" name="vd" value="<%= vd.getKey() %>"></td>
+ <td><%= vd.getKey() %></td>
+ <td></td>
+ <td><%= vd.getName() %></td>
+ <td></td>
+ <td><%= vd.getExpiry() %></td>
+ </tr>
+ <%
+ }
+ %>
+
+</tbody>
+</table>
+</td></tr>
+
+##WHITESPACE## ##GREYLINE1## ##WHITESPACE##
+
+<tr><td>
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+
+<tr>
+ <td width="50"></td>
+ <td width="7"></td>
+ <td></td>
+</tr>
+
+<tr>
+ <td align="right">new<br>expiry</td>
+ <td></td>
+ <td> <input type="text" size="3" name="expiry">
+ <input type="radio" name="expiryunits" value="d" checked>days
+ <input type="radio" name="expiryunits" value="w">weeks
+ <input type="radio" name="expiryunits" value="m">months
+ <input type="radio" name="expiryunits" value="y">years
+ </td>
+</tr>
+</tbody>
+</table>
+</td></tr>
+
+##WHITESPACE## ##GREYLINE1## ##WHITESPACE##
+
+<tr>
+ <td><input type="submit" name="action" value="refresh expiry time"></td>
+</tr>
+</table>
+</form>
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-vdrr.tmpl b/tools/control/web/tmpl/vd-vdrr.tmpl
new file mode 100644
index 0000000000..bf93429b26
--- /dev/null
+++ b/tools/control/web/tmpl/vd-vdrr.tmpl
@@ -0,0 +1,72 @@
+Refresh Virtual Disk Results
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+
+<%
+ HttpServletRequestWrapper hsrw = new HttpServletRequestWrapper(request);
+
+ String vds[] = hsrw.getParameterValues("vd");
+ long expiry = Long.decode(hsrw.getParameter("expiry")).longValue();
+
+ /* not perfect, but good enough for now... */
+ if ( hsrw.getParameter("expiryunits").equals("d"))
+ {
+ expiry *= 24 * 60 * 60 * 1000;
+ }
+ else if ( hsrw.getParameter("expiryunits").equals("w"))
+ {
+ expiry *= 24 * 60 * 60 * 1000 * 7;
+ }
+ else if ( hsrw.getParameter("expiryunits").equals("m"))
+ {
+ expiry *= 24 * 60 * 60 * 1000 * 30;
+ }
+ else if ( hsrw.getParameter("expiryunits").equals("y"))
+ {
+ expiry *= 24 * 60 * 60 * 1000 * 365;
+ }
+
+ if (vds == null)
+ {
+%>
+no virtual disks selected.
+<%
+ }
+ else
+ {
+ for (int i = 0; i < vds.length; i++)
+ {
+%>
+vd = <%= root.doRefreshVirtualDisk(vds[i], expiry) %> <br>
+<%
+ }
+ }
+%>
+
+<br>
+expiry = <%= hsrw.getParameter("expiry") %>
+<br>
+expiryunits = <%= hsrw.getParameter("expiryunits") %>
+<br>
+
+<%
+ root.doFlushState();
+%>
+
+
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd-vdv.tmpl b/tools/control/web/tmpl/vd-vdv.tmpl
new file mode 100644
index 0000000000..e03cd6959f
--- /dev/null
+++ b/tools/control/web/tmpl/vd-vdv.tmpl
@@ -0,0 +1,43 @@
+View Virtual Disks
+SECTION&XenoServers
+BREADCRUMB&Virtual Disk Manager&vd.jsp
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+
+<table cellpadding="2" cellspacing="0" border="0">
+<tbody>
+ <tr class="vdh"><td>key</td><td width="5"></td><td>name</td><td width="5"></td><td>expiry</td></tr>
+
+ <%
+ int count = root.getVirtualDiskCount();
+ for (int loop = 0; loop < count; loop++)
+ {
+ VirtualDisk vd = root.getVirtualDisk(loop);
+ %>
+ <tr class="vdt">
+ <td><%= vd.getKey() %></td>
+ <td></td>
+ <td><%= vd.getName() %></td>
+ <td></td>
+ <td><%= vd.getExpiry() %></td>
+ </tr>
+ <%
+ }
+ %>
+
+</tbody>
+</table>
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vd.tmpl b/tools/control/web/tmpl/vd.tmpl
new file mode 100644
index 0000000000..a21189966a
--- /dev/null
+++ b/tools/control/web/tmpl/vd.tmpl
@@ -0,0 +1,24 @@
+Virtual Disk Manager
+SECTION&XenoServers
+
+<!-- content -->
+<img src="pixel.gif" class="block" width="1" height="12">
+
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+INCLUDE&vdmenu.tmpl
+<td valign="top">
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+ <tr><td nowrap="nowrap">Virtual Disk Manager</td></tr>
+
+</tbody>
+</table>
+</td>
+</tbody>
+</table>
+
+
+
+
+<!-- end content -->
diff --git a/tools/control/web/tmpl/vdmenu.tmpl b/tools/control/web/tmpl/vdmenu.tmpl
new file mode 100644
index 0000000000..20cb5ecf6f
--- /dev/null
+++ b/tools/control/web/tmpl/vdmenu.tmpl
@@ -0,0 +1,63 @@
+<td width="10" valign="top" align="right"></td>
+
+<td valign="top">
+<table cellpadding="0" cellspacing="0" border="0">
+<tbody>
+<tr>
+ <td class="menuheader" width="100">Partitions</td>
+</tr>
+<tr>
+ <td class="sidemenu" width="100"><a href="vd-pv.jsp">View</a></td>
+</tr>
+<tr>
+ <td class="sidemenu" width="100"><a href="vd-pa.jsp">Add</a></td>
+</tr>
+##WHITESPACE##
+<tr>
+ <td class="menuheader" width="100">Virtual Disk</td>
+</tr>
+<tr>
+ <td class="sidemenu" width="100"><a href="vd-vdv.jsp">View</a></td>
+</tr>
+<tr>
+ <td class="sidemenu" width="100"><a href="vd-vdc.jsp">Create</a></td>
+</tr>
+<tr>
+ <td class="sidemenu" width="100"><a href="vd-vdd.jsp">Delete</a></td>
+</tr>
+<tr>
+ <td class="sidemenu" width="100"><a href="vd-vdr.jsp">Refresh</a></td>
+</tr>
+##WHITESPACE##
+<tr>
+ <td class="menuheader" width="100">Free Space</td>
+</tr>
+<tr>
+ <td class="sidemenu" width="100"><a href="vd-fv.jsp">View</a></td>
+</tr>
+##WHITESPACE##
+<tr>
+ <td class="menuheader" width="100">Virtual Block Device</td>
+</tr>
+<tr>
+ <td class="sidemenu" width="100"><a href="vd-vbdv.jsp">View</a></td>
+</tr>
+<tr>
+ <td class="sidemenu" width="100"><a href="vd-vbdc.jsp">Create</a></td>
+</tr>
+<tr>
+ <td class="sidemenu" width="100"><a href="vd-vbdd.jsp">Delete</a></td>
+</tr>
+<tr>
+ <td class="sidemenu" width="100"><a href="vd-vbdf.jsp">Flush</a></td>
+</tr>
+
+</tbody>
+</table>
+</td>
+
+<td width="5" valign="top" align="right"></td>
+
+<td bgcolor="#666666" width="2"><img src="img/pixel.gif" class="block" width="2" height="50"></td>
+
+<td width="15" valign="top" align="right"></td>
diff --git a/tools/control/web/tmpl/xenofoot.def b/tools/control/web/tmpl/xenofoot.def
new file mode 100644
index 0000000000..4653a78495
--- /dev/null
+++ b/tools/control/web/tmpl/xenofoot.def
@@ -0,0 +1,28 @@
+<!-- START OF STANDARD FOOTER-->
+</td>
+</tr></table>
+<!-- end body text -->
+
+<!-- footer -->
+<br />
+<table cellpadding="0" cellspacing="0" border="0" width="98%" summary="footer">
+<tr><td bgcolor="#0099cc" colspan="2"><img
+src="http://www.cl.cam.ac.uk/UoCCL/images/pixel.gif" class="block" width="1" height="4" border="0" alt="" /></td>
+</tr>
+<tr><td bgcolor="#cccccc" colspan="2"><img
+src="http://www.cl.cam.ac.uk/UoCCL/images/pixel.gif" class="block" width="1" height="2" border="0" alt="" /></td>
+</tr>
+
+<tr><td>
+<div class="footer">
+<!--Add Department name and email contact here-->
+<p>&copy; ##YEAR## ##COPYRIGHT##<br />
+<!-- Page last updated ##DATE## by ##OWNERNAME##</p> -->
+</div>
+</td>
+</tr>
+</table>
+
+<!-- end footer -->
+</body>
+</html>
diff --git a/tools/control/web/tmpl/xenohead.def b/tools/control/web/tmpl/xenohead.def
new file mode 100644
index 0000000000..843244a0ae
--- /dev/null
+++ b/tools/control/web/tmpl/xenohead.def
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<jsp:useBean id="root" scope="application"
+ class="uk.ac.cam.cl.xeno.xenctl.RootBean" />
+<jsp:useBean id="sc" scope="application"
+ class="uk.ac.cam.cl.xeno.xenctl.SystemConfigurationBean" />
+<%@ page session="false" %>
+<%@ page import="uk.ac.cam.cl.xeno.xenctl.*" %>
+<%@ page import="uk.ac.cam.cl.xeno.domctl.*" %>
+<%@ page import="java.util.Enumeration" %>
+<%@ page import="javax.servlet.http.HttpServletRequestWrapper" %>
+
+<html lang="en">
+
+<!--
+ THIS FILE HAS BEEN AUTOMATICALLY GENERATED BY A PERL SCRIPT
+ THE SOURCE FILE HAS THE EXTENSION .tmpl
+-->
+
+
+<head>
+
+<title>##SECTION## ##SECTIONBREAK## ##TITLE## <%= root.getDebugCounter() %></title>
+
+<link rel="stylesheet" type="text/css" href="xenostyle.css">
+
+</head>
+
+<body bgcolor="#ffffff" text="#000000" link="#003399"
+ alink="#cc0000"vlink="#cc3333">
+
+<!-- header -->
+<table cellpadding="0" cellspacing="0" border="0" width="98%" summary="navigation bar">
+<tr>
+<td bgcolor="#0099cc" width="98%" ><img src="img/pixel.gif" class="block" width="1" height="16" alt="" border="0" /></td>
+<td align="right" width="212" rowspan="2" >
+<table cellpadding="0" cellspacing="0" border="0" width="##NAVIGATIONWIDTH##" summary="navigation bar insert">
+<tr>
+ ##NAVIGATIONSTRING##
+ <td><a href="help.jsp"><img src="img/help.gif" width="53" height="18" border="0" alt="Help" class="block" /></a></td>
+</tr>
+</table>
+</td>
+</tr>
+<tr>
+<td bgcolor="#cccccc" ><img src="img/pixel.gif" class="block"
+width="1" height="2" alt="" border="0" /></td>
+</tr>
+</table>
+<table cellpadding="0" cellspacing="0" border="0" width="98%" summary="departmental header">
+<tr>
+<td><a href="http://www.cam.ac.uk/"><img src="img/cambridge.gif" width="192"
+height="46" border="0" alt="University of Cambridge Home" /></a></td>
+
+<!--Departmental name in next cell-->
+<td align="right" valign="bottom" class="title">##SECTION##<br />##TITLE##</td>
+</tr>
+
+<tr><td bgcolor="#0099cc" colspan="3"><img
+src="img/pixel.gif" class="block" width="1" height="4" alt="" /></td>
+</tr>
+<tr><td bgcolor="#cccccc" colspan="3"><img
+src="img/pixel.gif" class="block" width="1" height="2" alt="" /></td>
+</tr>
+</table>
+<!-- end header -->
+
+<!-- breadcrumbs start -->
+<table cellpadding="0" cellspacing="0" border="0" width="98%" summary="breadcrumb navigation">
+<tr>
+<td><a href="index.jsp"class="bread">XenoServers</a>##BREADCRUMBS##</td>
+</tr>
+</table>
+<!-- end breadcrumbs -->
+
+<!-- body text -->
+<br />
+<!-- <h1>##TITLE##</h1> -->
+<table cellpadding="0" cellspacing="0" border="0" width="98%" summary="content panel">
+<tr>
+<td valign="top">
+<!-- END OF STANDARD HEADER-->
diff --git a/tools/control/web/tmpl/xenostyle.css b/tools/control/web/tmpl/xenostyle.css
new file mode 100644
index 0000000000..1681a55bb0
--- /dev/null
+++ b/tools/control/web/tmpl/xenostyle.css
@@ -0,0 +1,91 @@
+body {background-color: #ffffff; color: #000000;}
+
+p, ul, ol, li, table, td {font-family: Arial, Helvetica, sans-serif; }
+
+a {text-decoration:none;}
+a:link {color: #003399; font-family: Arial, Helvetica, sans-serif;}
+a:visited {color: #cc3333; font-family: Arial, Helvetica, sans-serif;}
+a:hover {text-decoration: underline; font-family: Arial, Helvetica, sans-serif;}
+a:active {color: #cc0000; font-family: Arial, Helvetica, sans-serif;}
+
+a.bread {font-size: 80%; font-weight: bold;}
+a.univbread {font-size: 90%; font-weight: bold;}
+p.small {font-size: 90%;}
+p.smallc {font-size: 90%; text-align:center; font-weight: bold;}
+p.foot {font-size: 110%; text-align:center;}
+p.nav {font-size: 80%;}
+span.activenav {font-size: 80%; color: #000000}
+
+.bigb {font-size: 110%; font-weight: bold;}
+.small {font-size: 90%;}
+.deptitle {font-size: 140%; color: #000000; font-weight: bold;}
+.deptitle {font-size: 120%; color: #000000; font-weight: bold;}
+.title {font-size: 130%; color: #990000; font-weight: bold;}
+.center {text-align:center;}
+div.footer {font-size: 80%;}
+
+h1 {font-weight: bold; font-size: 120%; color: #990000; font-family: Arial, Helvetica, sans-serif;}
+h2 {font-weight: bold; font-size: 110%; color: #333333; font-family: Arial, Helvetica, sans-serif;}
+h3 {font-weight: bold; font-style: italic; font-size: 100%; color: #333333; font-family: Arial, Helvetica, sans-serif;}
+h4 {font-weight: bold; font-size: 90%; color: #333333; font-family: Arial, Helvetica, sans-serif;}
+h5 {font-weight: bold; font-size: 80%; color: #333333; font-family: Arial, Helvetica, sans-serif;}
+
+
+/* netscape 6 correction */
+.null {font-size: 1px;}
+
+/* linux correction */
+.block {display: block;}
+
+
+/* home page */
+.homeheading {font-weight: bold; font-size: 80%; font-family: arial, helvetica, sans-serif; color: #990000;}
+
+a.homemenu {font-weight: bold; font-family: arial, helvetica, sans-serif;}
+a.homemenu2 {font-size: 80%; font-family: arial, helvetica, sans-serif;}
+
+p.homealert {font-size: 80%; color: #990000; font-family: arial, helvetica, sans-serif;}
+p.homenews {font-size: 80%; font-family: arial, helvetica, sans-serif;}
+
+
+<!--from admin styles-->
+.linkcell { background: #003399; color: #ffffff }
+a.cell { font-family: sans-serif; text-decoration:none }
+a.cell:link { color: #ffffff }
+a.cell:visited { color: #ffffff }
+a.cell:active { color: #ffff33 }
+
+
+.sidemenu {
+ /*font-weight : 400; */
+ /*font-size : 13px; */
+ /*line-height : 12px; */
+ /*font-family : Verdana, Arial, Helvetica, sans-serif, "MS sans serif"; */
+ /*letter-spacing : 0px; */
+ /*text-decoration : none; */
+ text-align : left;
+}
+
+.menuheader {
+ color : #003366;
+ font-weight : bold;
+ /*font-size : 13px; */
+ /*line-height : 15px; */
+ /*font-family : Verdana, Arial, Helvetica, sans-serif, "MS sans serif"; */
+ /*letter-spacing : -1px; */
+ text-decoration : none;
+ text-align : left;
+}
+
+.vdh {
+ background-color: #003366;
+ color : #ffffff;
+ font-weight : bold;
+ text-align : center;
+}
+.vdt {
+ background-color: #f0f0f0;
+}
+.vds {
+ background-color: #aaaaaa;
+}