aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorach61@labyrinth.cl.cam.ac.uk <ach61@labyrinth.cl.cam.ac.uk>2003-05-01 00:18:20 +0000
committerach61@labyrinth.cl.cam.ac.uk <ach61@labyrinth.cl.cam.ac.uk>2003-05-01 00:18:20 +0000
commit12e2968e450ebca15f97405b352cc0216663dcb8 (patch)
tree7183855aa8de02d2dbae7ab64b259fcbf7901c99
parent788185b57de29abe23c360daca3b67c0bd8ca5d6 (diff)
downloadxen-12e2968e450ebca15f97405b352cc0216663dcb8.tar.gz
xen-12e2968e450ebca15f97405b352cc0216663dcb8.tar.bz2
xen-12e2968e450ebca15f97405b352cc0216663dcb8.zip
bitkeeper revision 1.198 (3eb067ccnZGiSrE___bi3AnWpeUuIw)
allow creation of vbd directly from disk partition error checking to ensure that /proc/partitions is from a xeno machine
-rwxr-xr-xtools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/Parser.java42
-rwxr-xr-xtools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/PartitionManager.java27
-rwxr-xr-xtools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/VirtualDisk.java16
-rwxr-xr-xtools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/VirtualDiskManager.java16
4 files changed, 92 insertions, 9 deletions
diff --git a/tools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/Parser.java b/tools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/Parser.java
index 0ce703a2cb..dee6454fc8 100755
--- a/tools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/Parser.java
+++ b/tools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/Parser.java
@@ -252,6 +252,45 @@ Parser
return;
}
+ if (commands[1].startsWith("sd") ||
+ commands[1].startsWith("hd"))
+ {
+ /*
+ * this is a gross hack to allow you to create a virtual block
+ * device that maps directly to a physical partition
+ */
+
+ /* find the appropriate partition */
+ Partition partition = pm.get_partition(commands[1]);
+ if (partition == null)
+ {
+ System.out.println ("vbdcreate error: couldn't find partition \"" +
+ commands[1] + "\"");
+ return;
+ }
+
+ /* create a virtual disk */
+ vd = new VirtualDisk("vbd:" + commands[1]);
+ vd.add_new_partition(partition, partition.nr_sects);
+
+
+ /* display result */
+ System.out.print("domain:" + commands[2] + " ");
+ if (commands.length == 4)
+ {
+ System.out.print ("rw ");
+ }
+ else
+ {
+ System.out.print(commands[4] + " ");
+ }
+ System.out.print("segment:" + commands[3] + " ");
+ System.out.print(vd.dump_xen());
+ System.out.println("");
+
+ return;
+ }
+
if (commands.length == 4)
{
vbd =
@@ -269,6 +308,7 @@ Parser
commands[4]);
}
+ /* display commandline to user */
{
vd = vdm.get_virtual_disk_key(commands[1]);
System.out.println ("\n" + vd.dump_xen(vbd) + "\n");
@@ -280,7 +320,7 @@ Parser
{
if (commands.length < 3)
{
- System.out.println ("vbdcreate <domain number> <vbd number>");
+ System.out.println ("vbddelete <domain number> <vbd number>");
return;
}
diff --git a/tools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/PartitionManager.java b/tools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/PartitionManager.java
index 72f5982aff..b0177f504d 100755
--- a/tools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/PartitionManager.java
+++ b/tools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/PartitionManager.java
@@ -7,6 +7,7 @@ package uk.ac.cam.cl.xeno.vdmanager;
import java.io.*;
import java.util.Vector;
+import java.util.Enumeration;
public class
PartitionManager
@@ -14,6 +15,9 @@ PartitionManager
Vector partition_map;
Vector xeno_partition_list;
+ static String proc_template =
+ "major minor #blocks start_sect nr_sects name";
+
/*
* Initialize partition manager with source file.
* Normally we read from /proc/partitions, but we can
@@ -32,6 +36,14 @@ PartitionManager
in = new BufferedReader(new FileReader(filename));
str = in.readLine(); /* skip headings */
+ if (str.length() < proc_template.length() ||
+ !str.substring(0, proc_template.length()).equals(proc_template))
+ {
+ System.err.println ("Error: Incorrect /proc/partitions.");
+ System.err.println (" Is this Xeno?");
+ System.exit (1);
+ }
+
str = in.readLine(); /* skip blank line */
str = in.readLine();
@@ -59,6 +71,21 @@ PartitionManager
}
Partition
+ get_partition (String name)
+ {
+ Partition partition = null;
+ for (Enumeration e = partition_map.elements() ; e.hasMoreElements() ;)
+ {
+ partition = (Partition) e.nextElement();
+ if (partition.name.equals(name))
+ {
+ return partition;
+ }
+ }
+ return null;
+ }
+
+ Partition
get_partition (int index)
{
return (Partition) partition_map.get(index);
diff --git a/tools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/VirtualDisk.java b/tools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/VirtualDisk.java
index 0e529edfa2..2a49470170 100755
--- a/tools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/VirtualDisk.java
+++ b/tools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/VirtualDisk.java
@@ -134,6 +134,22 @@ VirtualDisk
}
String
+ dump_xen ()
+ {
+ StringBuffer sb = new StringBuffer();
+
+ sb.append("extents:" + extents.size() + " ");
+ for (int loop = 0; loop < extents.size(); loop++)
+ {
+ Extent e = (Extent) extents.get(loop);
+ sb.append("(disk:" + e.disk + " " +
+ "offset:" + e.offset + " " +
+ "size:" + e.size + ")");
+ }
+ return sb.toString();
+ }
+
+ String
dump_xen (VirtualBlockDevice vbd)
{
StringBuffer sb = new StringBuffer();
diff --git a/tools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/VirtualDiskManager.java b/tools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/VirtualDiskManager.java
index 6d5877da2d..256cdcc7cb 100755
--- a/tools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/VirtualDiskManager.java
+++ b/tools/vdmanager/src/uk/ac/cam/cl/xeno/vdmanager/VirtualDiskManager.java
@@ -14,14 +14,14 @@ import java.io.PrintWriter;
public class
VirtualDiskManager
{
- VirtualDisk free;
+ VirtualDisk free_disk;
Vector virtual_disks;
Hashtable virtual_block_devices;
Hashtable key_hash;
VirtualDiskManager ()
{
- free = new VirtualDisk("free");
+ free_disk = new VirtualDisk("free");
virtual_disks = new Vector(10,5);
flush_virtual_block_devices();
@@ -37,7 +37,7 @@ VirtualDiskManager
public void
add_xeno_partition (Partition partition, long size)
{
- free.add_new_partition (partition, size);
+ free_disk.add_new_partition (partition, size);
return;
}
@@ -54,7 +54,7 @@ VirtualDiskManager
{
Extent e;
- e = free.remove_extent();
+ e = free_disk.remove_extent();
if (e == null)
{
return null;
@@ -88,7 +88,7 @@ VirtualDiskManager
e = vd.remove_extent();
while (e != null)
{
- free.add_extent(e);
+ free_disk.add_extent(e);
e = vd.remove_extent();
}
}
@@ -198,7 +198,7 @@ VirtualDiskManager
public void
add_free (VirtualDisk vd)
{
- free = vd;
+ free_disk = vd;
}
public String
@@ -218,7 +218,7 @@ VirtualDiskManager
public String
dump_free()
{
- return(free.dump(true, false));
+ return(free_disk.dump(true, false));
}
public String
@@ -265,7 +265,7 @@ VirtualDiskManager
dump_xml(PrintWriter out)
{
out.println("<free>");
- free.dump_xml(out);
+ free_disk.dump_xml(out);
out.println("</free>");
out.println("<virtual_disks>");
for (int i = 0; i < virtual_disks.size(); i++)