aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authoriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>2003-09-10 15:06:10 +0000
committeriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>2003-09-10 15:06:10 +0000
commitb2066699dc90544983c7435290408641a5b60188 (patch)
tree352ac2cc2e649b23ee197c9ee6550fda1c8b13be /tools
parent0a8a407187f5cd087c4bffea79fcdbffbc700431 (diff)
parent81b68e2240a539b0b0dbb65e7d97c0f444e62096 (diff)
downloadxen-b2066699dc90544983c7435290408641a5b60188.tar.gz
xen-b2066699dc90544983c7435290408641a5b60188.tar.bz2
xen-b2066699dc90544983c7435290408641a5b60188.zip
bitkeeper revision 1.420 (3f5f3de2nYFce7cUg2vR08Q7Y_E2XA)
Merge labyrinth.cl.cam.ac.uk:/auto/groups/xeno/users/tlh20/xeno.bk into labyrinth.cl.cam.ac.uk:/auto/anfs/scratch/labyrinth/iap10/xeno-clone/xeno.bk
Diffstat (limited to 'tools')
-rw-r--r--tools/control/src/org/xenoserver/cmdline/Main.java32
-rw-r--r--tools/control/src/org/xenoserver/cmdline/ParseDomainDestroy.java4
-rw-r--r--tools/control/src/org/xenoserver/cmdline/ParseDomainStart.java4
-rw-r--r--tools/control/src/org/xenoserver/cmdline/ParseDomainStop.java4
-rw-r--r--tools/control/src/org/xenoserver/cmdline/ParsePhysicalGrant.java4
-rw-r--r--tools/control/src/org/xenoserver/cmdline/ParsePhysicalList.java2
-rw-r--r--tools/control/src/org/xenoserver/cmdline/ParsePhysicalRevoke.java4
-rw-r--r--tools/control/src/org/xenoserver/cmdline/ParseScript.java79
-rw-r--r--tools/control/src/org/xenoserver/cmdline/ParseVbdCreate.java4
-rw-r--r--tools/control/src/org/xenoserver/control/CommandDomainNew.java1
-rw-r--r--tools/control/src/org/xenoserver/control/Defaults.java4
-rw-r--r--tools/control/src/org/xenoserver/control/Settings.java6
-rwxr-xr-xtools/control/xenctl22
13 files changed, 117 insertions, 53 deletions
diff --git a/tools/control/src/org/xenoserver/cmdline/Main.java b/tools/control/src/org/xenoserver/cmdline/Main.java
index 3b8cc554b7..fe7c6a2c25 100644
--- a/tools/control/src/org/xenoserver/cmdline/Main.java
+++ b/tools/control/src/org/xenoserver/cmdline/Main.java
@@ -43,12 +43,23 @@ public class Main {
new ParseGroup( "domain", domaincommands ),
new ParseGroup( "partitions", partitioncommands ),
new ParseGroup( "physical", physicalcommands ),
+ new ParseScript(),
new ParseGroup( "vd", vdcommands ),
new ParseGroup( "vbd", vbdcommands )
};
/** The top-level parser. */
static final CommandParser parser = new ParseGroup( null, commands );
+ public static void executeArgList (Defaults d, LinkedList arglist)
+ throws ParseFailedException, CommandFailedException
+ {
+ if (arglist.size() == 0) {
+ help.parse(null, null);
+ } else {
+ parser.parse(d, arglist);
+ }
+ }
+
public static void main(String[] args) {
Defaults d = new Defaults();
int ec = -1;
@@ -57,20 +68,15 @@ public class Main {
arglist.add( args[i] );
}
- if (args.length == 0) {
+ try {
+ executeArgList (d, arglist);
+ ec = 0;
+ } catch (NoSuchElementException e) {
help.parse(null, null);
- } else {
- try
- {
- parser.parse(d, arglist);
- ec = 0;
- } catch (NoSuchElementException e) {
- help.parse(null, null);
- } catch (ParseFailedException e) {
- System.err.println( e.getMessage() );
- } catch (CommandFailedException e) {
- System.err.println( e.getMessage() );
- }
+ } catch (ParseFailedException e) {
+ System.err.println( e.getMessage() );
+ } catch (CommandFailedException e) {
+ System.err.println( e.getMessage() );
}
System.exit(ec);
diff --git a/tools/control/src/org/xenoserver/cmdline/ParseDomainDestroy.java b/tools/control/src/org/xenoserver/cmdline/ParseDomainDestroy.java
index 78d224cf5e..d556275ecb 100644
--- a/tools/control/src/org/xenoserver/cmdline/ParseDomainDestroy.java
+++ b/tools/control/src/org/xenoserver/cmdline/ParseDomainDestroy.java
@@ -9,7 +9,7 @@ import org.xenoserver.control.Defaults;
public class ParseDomainDestroy extends CommandParser {
public void parse(Defaults d, LinkedList args)
throws ParseFailedException, CommandFailedException {
- int domain_id = getIntParameter(args, 'n', 0);
+ int domain_id = getIntParameter(args, 'n', d.domainNumber);
boolean force = getFlagParameter(args, 'f');
if (domain_id == 0) {
@@ -27,7 +27,7 @@ public class ParseDomainDestroy extends CommandParser {
}
public String getUsage() {
- return "-n<domain_id> [-f]";
+ return "[-n<domain_id>] [-f]";
}
public String getHelpText() {
diff --git a/tools/control/src/org/xenoserver/cmdline/ParseDomainStart.java b/tools/control/src/org/xenoserver/cmdline/ParseDomainStart.java
index e27394cb23..4b676f568b 100644
--- a/tools/control/src/org/xenoserver/cmdline/ParseDomainStart.java
+++ b/tools/control/src/org/xenoserver/cmdline/ParseDomainStart.java
@@ -9,7 +9,7 @@ import org.xenoserver.control.Defaults;
public class ParseDomainStart extends CommandParser {
public void parse(Defaults d, LinkedList args)
throws ParseFailedException, CommandFailedException {
- int domain_id = getIntParameter(args, 'n', 0);
+ int domain_id = getIntParameter(args, 'n', d.domainNumber);
if (domain_id == 0) {
throw new ParseFailedException("Expected -n<domain_id>");
@@ -25,7 +25,7 @@ public class ParseDomainStart extends CommandParser {
}
public String getUsage() {
- return "-n<domain_id>";
+ return "[-n<domain_id>]";
}
public String getHelpText() {
diff --git a/tools/control/src/org/xenoserver/cmdline/ParseDomainStop.java b/tools/control/src/org/xenoserver/cmdline/ParseDomainStop.java
index 306f18529b..e4727b33e3 100644
--- a/tools/control/src/org/xenoserver/cmdline/ParseDomainStop.java
+++ b/tools/control/src/org/xenoserver/cmdline/ParseDomainStop.java
@@ -9,7 +9,7 @@ import org.xenoserver.control.Defaults;
public class ParseDomainStop extends CommandParser {
public void parse(Defaults d, LinkedList args)
throws ParseFailedException, CommandFailedException {
- int domain_id = getIntParameter(args, 'n', 0);
+ int domain_id = getIntParameter(args, 'n', d.domainNumber);
if (domain_id == 0) {
throw new ParseFailedException("Expected -n<domain_id>");
@@ -25,7 +25,7 @@ public class ParseDomainStop extends CommandParser {
}
public String getUsage() {
- return "-n<domain_id>";
+ return "[-n<domain_id>]";
}
public String getHelpText() {
diff --git a/tools/control/src/org/xenoserver/cmdline/ParsePhysicalGrant.java b/tools/control/src/org/xenoserver/cmdline/ParsePhysicalGrant.java
index f332d5c698..521d2e740a 100644
--- a/tools/control/src/org/xenoserver/cmdline/ParsePhysicalGrant.java
+++ b/tools/control/src/org/xenoserver/cmdline/ParsePhysicalGrant.java
@@ -10,7 +10,7 @@ import org.xenoserver.control.Mode;
public class ParsePhysicalGrant extends CommandParser {
public void parse(Defaults d, LinkedList args)
throws ParseFailedException, CommandFailedException {
- int domain_id = getIntParameter(args, 'n', 0);
+ int domain_id = getIntParameter(args, 'n', d.domainNumber);
boolean force = getFlagParameter(args, 'f');
String partition_name = getStringParameter(args, 'p', "");
boolean write = getFlagParameter(args, 'w');
@@ -44,7 +44,7 @@ public class ParsePhysicalGrant extends CommandParser {
}
public String getUsage() {
- return "-n<domain_id> -p<partition_name> [-f] [-w]";
+ return "-p<partition_name> [-n<domain_id>] [-f] [-w]";
}
public String getHelpText() {
diff --git a/tools/control/src/org/xenoserver/cmdline/ParsePhysicalList.java b/tools/control/src/org/xenoserver/cmdline/ParsePhysicalList.java
index 1b662aa069..85e6e5de19 100644
--- a/tools/control/src/org/xenoserver/cmdline/ParsePhysicalList.java
+++ b/tools/control/src/org/xenoserver/cmdline/ParsePhysicalList.java
@@ -15,7 +15,7 @@ import org.xenoserver.control.PartitionManager;
public class ParsePhysicalList extends CommandParser {
public void parse(Defaults d, LinkedList args)
throws ParseFailedException, CommandFailedException {
- int domain_id = getIntParameter(args, 'n', 0);
+ int domain_id = getIntParameter(args, 'n', d.domainNumber);
if (domain_id == 0) {
throw new ParseFailedException("Expected -n<domain_id>");
}
diff --git a/tools/control/src/org/xenoserver/cmdline/ParsePhysicalRevoke.java b/tools/control/src/org/xenoserver/cmdline/ParsePhysicalRevoke.java
index 56d37e6dac..e53a16ab39 100644
--- a/tools/control/src/org/xenoserver/cmdline/ParsePhysicalRevoke.java
+++ b/tools/control/src/org/xenoserver/cmdline/ParsePhysicalRevoke.java
@@ -9,7 +9,7 @@ import org.xenoserver.control.Defaults;
public class ParsePhysicalRevoke extends CommandParser {
public void parse(Defaults d, LinkedList args)
throws ParseFailedException, CommandFailedException {
- int domain_id = getIntParameter(args, 'n', 0);
+ int domain_id = getIntParameter(args, 'n', d.domainNumber);
String partition_name = getStringParameter(args, 'p', "");
if (domain_id == 0) {
@@ -32,7 +32,7 @@ public class ParsePhysicalRevoke extends CommandParser {
}
public String getUsage() {
- return "-n<domain_id> -p<partition_name>";
+ return "-p<partition_name> [-n<domain_id>]";
}
public String getHelpText() {
diff --git a/tools/control/src/org/xenoserver/cmdline/ParseScript.java b/tools/control/src/org/xenoserver/cmdline/ParseScript.java
new file mode 100644
index 0000000000..061af93128
--- /dev/null
+++ b/tools/control/src/org/xenoserver/cmdline/ParseScript.java
@@ -0,0 +1,79 @@
+package org.xenoserver.cmdline;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.StringTokenizer;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.Reader;
+import java.io.InputStreamReader;
+import java.io.IOException;
+
+import org.xenoserver.control.CommandFailedException;
+import org.xenoserver.control.Defaults;
+import org.xenoserver.control.Extent;
+import org.xenoserver.control.Library;
+import org.xenoserver.control.Settings;
+import org.xenoserver.control.VirtualDisk;
+import org.xenoserver.control.VirtualDiskManager;
+
+public class ParseScript extends CommandParser {
+ public void parse(Defaults d, LinkedList args) throws ParseFailedException, CommandFailedException {
+ String filename = getStringParameter(args,'f',null);
+
+ try
+ {
+ Reader r;
+ BufferedReader br;
+ String next_line;
+ boolean stdin;
+
+ if (filename == null) {
+ r = new InputStreamReader (System.in);
+ stdin = true;
+ } else {
+ r = new FileReader (filename);
+ stdin = false;
+ }
+ br = new BufferedReader (r);
+
+ if (stdin) prompt();
+ while ((next_line = br.readLine()) != null)
+ {
+ StringTokenizer tok = new StringTokenizer(next_line, " ");
+ LinkedList arglist = new LinkedList();
+ while (tok.hasMoreTokens()) {
+ arglist.add (tok.nextToken ());
+ }
+ Main.executeArgList (d, arglist);
+ if (stdin) prompt();
+ }
+ }
+ catch (IOException ioe)
+ {
+ throw new ParseFailedException ("Could not read script \"" + filename + "\"", ioe);
+ }
+ }
+
+ void prompt() {
+ System.out.print ("$ ");
+ System.out.flush ();
+ }
+
+ public String getName() {
+ return "script";
+ }
+
+ public String getUsage() {
+ return "[-f<filename>]";
+ }
+
+ public String getHelpText() {
+ return ("Execute a series of xenctl command lines found in the specified file\n" +
+ "(or from standard input if no filename is given). Execution terminates\n" +
+ "if any command fails. If a command requires a domain ID then, if\n" +
+ "ommitted, the domain most recently created by the script will be used\n" +
+ "by default.\n");
+ }
+}
diff --git a/tools/control/src/org/xenoserver/cmdline/ParseVbdCreate.java b/tools/control/src/org/xenoserver/cmdline/ParseVbdCreate.java
index 54713b45fc..cacb987816 100644
--- a/tools/control/src/org/xenoserver/cmdline/ParseVbdCreate.java
+++ b/tools/control/src/org/xenoserver/cmdline/ParseVbdCreate.java
@@ -13,7 +13,7 @@ public class ParseVbdCreate extends CommandParser {
throws ParseFailedException, CommandFailedException {
String vd_key = getStringParameter(args, 'k', "");
String partition_name = getStringParameter(args, 'p', "");
- int domain_id = getIntParameter(args, 'n', 0);
+ int domain_id = getIntParameter(args, 'n', d.domainNumber);
int vbd_num = getIntParameter(args, 'v', -1);
boolean write = getFlagParameter(args, 'w');
@@ -53,7 +53,7 @@ public class ParseVbdCreate extends CommandParser {
}
public String getUsage() {
- return "-n<domain_id> {-k<key>|-p<partition} -v<vbd_num> [-w]";
+ return "{-k<key>|-p<partition} -v<vbd_num> [-n<domain_id>] [-w]";
}
public String getHelpText() {
diff --git a/tools/control/src/org/xenoserver/control/CommandDomainNew.java b/tools/control/src/org/xenoserver/control/CommandDomainNew.java
index 5600cd04da..b8341551d1 100644
--- a/tools/control/src/org/xenoserver/control/CommandDomainNew.java
+++ b/tools/control/src/org/xenoserver/control/CommandDomainNew.java
@@ -185,6 +185,7 @@ public class CommandDomainNew extends Command {
domain_id = Integer.parseInt(br.readLine());
create_rc = create_p.waitFor();
}
+ d.domainNumber = domain_id;
if (create_rc != 0) {
throw CommandFailedException.xiCommandFailed(
diff --git a/tools/control/src/org/xenoserver/control/Defaults.java b/tools/control/src/org/xenoserver/control/Defaults.java
index d180a3eb91..e64f6e19d1 100644
--- a/tools/control/src/org/xenoserver/control/Defaults.java
+++ b/tools/control/src/org/xenoserver/control/Defaults.java
@@ -49,6 +49,8 @@ public class Defaults {
public String args = "";
/** Directory to find XI tools. */
public String xiToolsDir = "";
+ /** Domain number */
+ public int domainNumber;
/**
@@ -143,6 +145,8 @@ public class Defaults {
domainImage = s;
} else if (lastName.equals("domain_name")) {
domainName = s;
+ } else if (lastName.equals("domain_number")) {
+ domainNumber = Integer.parseInt(s);
} else if (lastName.equals("domain_init_rd")) {
domainInitRD = s;
} else if (lastName.equals("domain_vifs")) {
diff --git a/tools/control/src/org/xenoserver/control/Settings.java b/tools/control/src/org/xenoserver/control/Settings.java
index 02cdbdecd6..317bdb1c77 100644
--- a/tools/control/src/org/xenoserver/control/Settings.java
+++ b/tools/control/src/org/xenoserver/control/Settings.java
@@ -14,12 +14,6 @@ public final class Settings {
/** Path to search for the defaults file. */
public static final String DEFAULTS_PATH =
System.getProperty("DEFAULTS_PATH", ".:/etc:/var/lib/xen");
- /** IP address of domain 0. */
- public static final String LOCAL_IP = System.getProperty("LOCAL_IP");
- /** Network mask of domain 0. */
- public static final String LOCAL_MASK = System.getProperty("LOCAL_MASK");
- /** Gateway of domain 0. */
- public static final String LOCAL_GW = System.getProperty("LOCAL_ROUTE");
/** If set, do not call any xi_ commands, just print their command lines. */
public static final boolean TEST = (System.getProperty("TEST") != null);
/** Name of xi_helper utility. */
diff --git a/tools/control/xenctl b/tools/control/xenctl
index 9b30b81617..d653d7d8a4 100755
--- a/tools/control/xenctl
+++ b/tools/control/xenctl
@@ -7,27 +7,7 @@ if [ -z "$IFCONFIG" ] ; then IFCONFIG=/sbin/ifconfig ; fi
if [ -z "$ROUTE" ] ; then ROUTE=/sbin/route ; fi
if [ -z "$JAVA" ] ; then JAVA=java ; fi
-if [ "$1" = "domain" -a "$2" = "new" ] ; then
- if [ ! -x "$IFCONFIG" ]; then
- echo Could not find executable $IFCONFIG
- exit 1
- fi
-
- if [ ! -x "$ROUTE" ]; then
- echo Could not find executable $ROUTE
- exit 1
- fi
-
- # Try to determine dom0 network settings to avoid hard-coding
- # particular machines in the defaults file
- LOCAL_IP=$(/sbin/ifconfig $QUERY_DEV | grep 'inet addr' | tr ':' '\t' | awk '{print $3}')
- LOCAL_MASK=$(/sbin/ifconfig $QUERY_DEV | grep 'Mask' | tr ':' '\t' | awk '{print $7}')
- LOCAL_ROUTE=$(/sbin/route -n | grep $QUERY_DEV | grep 'G' | awk '{print $2}')
-fi
-
-
-#ARGS="-DTEST -DDEFAULTS_FILE=$DEFAULTS_FILE -DDEFAULTS_PATH=$DEFAULTS_PATH -DLOCAL_IP=$LOCAL_IP -DLOCAL_MASK=$LOCAL_MASK -DLOCAL_ROUTE=$LOCAL_ROUTE"
-ARGS="-DDEFAULTS_FILE=$DEFAULTS_FILE -DDEFAULTS_PATH=$DEFAULTS_PATH -DLOCAL_IP=$LOCAL_IP -DLOCAL_MASK=$LOCAL_MASK -DLOCAL_ROUTE=$LOCAL_ROUTE"
+ARGS="-DDEFAULTS_FILE=$DEFAULTS_FILE -DDEFAULTS_PATH=$DEFAULTS_PATH"
$JAVA $ARGS -jar $(dirname $0)/xenctl-cmdline.jar $*