diff options
author | rac61@labyrinth.cl.cam.ac.uk <rac61@labyrinth.cl.cam.ac.uk> | 2003-07-15 12:25:38 +0000 |
---|---|---|
committer | rac61@labyrinth.cl.cam.ac.uk <rac61@labyrinth.cl.cam.ac.uk> | 2003-07-15 12:25:38 +0000 |
commit | 86ac4fab39ea45e7ff317b8f3f719c77b6f121b4 (patch) | |
tree | f1c531ea9fdf0e927a99dabc6cfc8f26bedcda58 /tools | |
parent | 321726ff146b7ba0d665549370405d5f26bc345c (diff) | |
download | xen-86ac4fab39ea45e7ff317b8f3f719c77b6f121b4.tar.gz xen-86ac4fab39ea45e7ff317b8f3f719c77b6f121b4.tar.bz2 xen-86ac4fab39ea45e7ff317b8f3f719c77b6f121b4.zip |
bitkeeper revision 1.356 (3f13f2c2PyTtgUQ-EMLCir5OE3cd1g)
Add support for usr= argument to xenctl domain new
Add better argument construction (ro if root is a disk)
Add automatic physical disk access grant if root/usr are disks
Diffstat (limited to 'tools')
4 files changed, 88 insertions, 20 deletions
diff --git a/tools/control/src/org/xenoserver/cmdline/ParseDomainNew.java b/tools/control/src/org/xenoserver/cmdline/ParseDomainNew.java index 910ffc01ea..ed75aa744d 100644 --- a/tools/control/src/org/xenoserver/cmdline/ParseDomainNew.java +++ b/tools/control/src/org/xenoserver/cmdline/ParseDomainNew.java @@ -4,7 +4,10 @@ import java.util.LinkedList; import org.xenoserver.control.CommandDomainNew; import org.xenoserver.control.CommandFailedException; +import org.xenoserver.control.CommandPhysicalGrant; import org.xenoserver.control.Defaults; +import org.xenoserver.control.Mode; +import org.xenoserver.control.StringPattern; public class ParseDomainNew extends CommandParser { public void parse(Defaults d, LinkedList args) @@ -16,6 +19,7 @@ public class ParseDomainNew extends CommandParser { int vifs = getIntParameter(args, 'v', d.domainVIFs); String bargs = getStringParameter(args, 'a', d.args) + " "; String root_dev = getStringParameter(args, 'd', d.rootDevice); + String usr_dev = getStringParameter(args, 'u', d.usrDevice); String nfs_root_path = getStringParameter(args, 'f', d.nwNFSRoot); String nw_ip = getStringParameter(args, '4', d.nwIP); String nw_gw = getStringParameter(args, 'g', d.nwGateway); @@ -40,12 +44,33 @@ public class ParseDomainNew extends CommandParser { nw_gw, nw_mask, nw_nfs_server, - nw_host); + nw_host, + usr_dev); c.execute(); String[] output = c.output(); for (int i = 0; i < output.length; i++) { System.out.println(output[i]); } + + if (root_dev.startsWith("/dev/sda") || root_dev.startsWith("/dev/hda")) { + String real_root = StringPattern.parse(root_dev).resolve(c.domain_id()); + String device = real_root.substring(real_root.indexOf('/',1)+1); + CommandPhysicalGrant cg = new CommandPhysicalGrant(d,c.domain_id(),device,Mode.READ_WRITE,false); + String output2 = cg.execute(); + if ( output2 != null ) { + System.out.println(output2); + } + } + + if (usr_dev != null && (usr_dev.startsWith("/dev/sda")) || usr_dev.startsWith("/dev/hda")) { + String real_usr = StringPattern.parse(usr_dev).resolve(c.domain_id()); + String device = real_usr.substring(real_usr.indexOf('/',1)+1); + CommandPhysicalGrant cg = new CommandPhysicalGrant(d,c.domain_id(),device,Mode.READ_ONLY,false); + String output2 = cg.execute(); + if ( output2 != null ) { + System.out.println(output2); + } + } } public String getName() { @@ -53,7 +78,7 @@ public class ParseDomainNew extends CommandParser { } public String getUsage() { - return "[-n<domain_name>] [-k<size>] [-i<image>] [-v<num_vifs>] [-r<initrd>] [-d<root_device>] [-f<nfs_root>] [-s<nfs_boot_server>] [-4<ipv4_boot_address>] [-g<ipv4_boot_gateway>] [-m<ipv4_boot_netmask>] [-h<hostname>] [-a<args>]"; + return "[-n<domain_name>] [-k<size>] [-i<image>] [-v<num_vifs>] [-r<initrd>] [-d<root_device>] [-u<usr_device>] [-f<nfs_root>] [-s<nfs_boot_server>] [-4<ipv4_boot_address>] [-g<ipv4_boot_gateway>] [-m<ipv4_boot_netmask>] [-h<hostname>] [-a<args>]"; } public String getHelpText() { @@ -68,7 +93,8 @@ public class ParseDomainNew extends CommandParser { + " -v Number of VIFs domain_vifs\n" + " -r InitRD (if required) domain_init_rd\n" + " -d Root device (e.g /dev/nfs, /dev/hda3) root_device\n" - + " -a Additional boot parameters\n" + + " -u Usr dev/path (e.g /dev/hda3, server:path)usr_device\n" + + " -a Additional boot parameters args\n" + "\n" + "Networking options:\n" + " -f NFS root (if /dev/nfs specified) nw_nfs_root\n" diff --git a/tools/control/src/org/xenoserver/control/CommandDomainNew.java b/tools/control/src/org/xenoserver/control/CommandDomainNew.java index 8bb0c9be44..5600cd04da 100644 --- a/tools/control/src/org/xenoserver/control/CommandDomainNew.java +++ b/tools/control/src/org/xenoserver/control/CommandDomainNew.java @@ -31,6 +31,8 @@ public class CommandDomainNew extends Command { private String bargs; /** Root device */ private String root_dev; + /** Usr device */ + private String usr_dev; /** NFS root path */ private String nfs_root_path; /** IP address */ @@ -45,6 +47,8 @@ public class CommandDomainNew extends Command { private String nw_host; /** Output from domain creation */ private String[] output; + /** Domain ID created. */ + private int domain_id; /** * @return Output from domain creation. @@ -52,6 +56,13 @@ public class CommandDomainNew extends Command { public String[] output() { return output; } + + /** + * @return The domain id this command created. + */ + public int domain_id() { + return domain_id; + } /** * Constructor for CommandDomainNew. @@ -85,20 +96,40 @@ public class CommandDomainNew extends Command { String nw_mask, String nw_nfs_server, String nw_host) { - this.d = d; - this.name = name; - this.size = size; - this.image = image; - this.initrd = initrd; - this.vifs = vifs; - this.bargs = bargs; - this.root_dev = root_dev; - this.nfs_root_path = nfs_root_path; - this.nw_ip = nw_ip; - this.nw_gw = nw_gw; - this.nw_mask = nw_mask; - this.nw_nfs_server = nw_nfs_server; - this.nw_host = nw_host; + this(d,name,size,image,initrd,vifs,bargs,root_dev,nfs_root_path,nw_ip,nw_gw,nw_mask,nw_nfs_server,nw_host,null); + } + + public CommandDomainNew( + Defaults d, + String name, + int size, + String image, + String initrd, + int vifs, + String bargs, + String root_dev, + String nfs_root_path, + String nw_ip, + String nw_gw, + String nw_mask, + String nw_nfs_server, + String nw_host, + String usr_dev) { + this.d = d; + this.name = name; + this.size = size; + this.image = image; + this.initrd = initrd; + this.vifs = vifs; + this.bargs = bargs; + this.root_dev = root_dev; + this.nfs_root_path = nfs_root_path; + this.nw_ip = nw_ip; + this.nw_gw = nw_gw; + this.nw_mask = nw_mask; + this.nw_nfs_server = nw_nfs_server; + this.nw_host = nw_host; + this.usr_dev = usr_dev; } /** @@ -189,9 +220,13 @@ public class CommandDomainNew extends Command { (bargs + " root=" + StringPattern.parse(root_dev).resolve(domain_id) - + " "); + + " ro "); } + + if (usr_dev != null && !usr_dev.equals("")) { + bargs = bargs + " usr=" + StringPattern.parse(usr_dev).resolve(domain_id) + " "; + } if (vifs > 0) { domain_ip = @@ -316,6 +351,8 @@ public class CommandDomainNew extends Command { output[5] += vifinit_cmdarray[i] + " "; } } + + this.domain_id = domain_id; return null; } diff --git a/tools/control/src/org/xenoserver/control/Defaults.java b/tools/control/src/org/xenoserver/control/Defaults.java index 1fba5baeac..d180a3eb91 100644 --- a/tools/control/src/org/xenoserver/control/Defaults.java +++ b/tools/control/src/org/xenoserver/control/Defaults.java @@ -29,6 +29,8 @@ public class Defaults { public int domainVIFs; /** Default root device. */ public String rootDevice; + /** Default usr device. */ + public String usrDevice; /** Default IP address pattern. */ public String nwIP; /** Default gateway pattern. */ @@ -84,6 +86,7 @@ public class Defaults { System.out.println(" domainImage " + domainImage); System.out.println(" domainInitRD " + domainInitRD); System.out.println(" rootDevice " + rootDevice); + System.out.println(" usrDevice " + usrDevice); System.out.println(" NWIP " + nwIP); System.out.println(" NWGW " + nwGateway); System.out.println(" NWMask " + nwMask); @@ -146,6 +149,8 @@ public class Defaults { domainVIFs = Integer.parseInt(s); } else if (lastName.equals("root_device")) { rootDevice = s; + } else if (lastName.equals("usr_device")) { + usrDevice = s; } else if (lastName.equals("nw_ip")) { nwIP = expandDefault( diff --git a/tools/control/src/org/xenoserver/control/StringPattern.java b/tools/control/src/org/xenoserver/control/StringPattern.java index 111a5271fa..664bff0013 100644 --- a/tools/control/src/org/xenoserver/control/StringPattern.java +++ b/tools/control/src/org/xenoserver/control/StringPattern.java @@ -18,7 +18,7 @@ public class StringPattern { * @param t The pattern string to parse. * @return A usable pattern object. */ - static StringPattern parse(String t) { + public static StringPattern parse(String t) { StringPattern result = new StringPattern(); char[] ca = t.toCharArray(); int idx = 0; @@ -53,7 +53,7 @@ public class StringPattern { * @param domain The domain number to use. * @return The expanded pattern for the given domain. */ - String resolve(int domain) { + public String resolve(int domain) { if (addDom) { return base + (bn + domain); } else if (appendDom) { |