WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] xl: support specifing '[vars]' in 'xl create'

To: Keir Fraser <keir.fraser@xxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH] xl: support specifing '[vars]' in 'xl create'
From: Yu Zhiguo <yuzg@xxxxxxxxxxxxxx>
Date: Wed, 28 Apr 2010 16:51:04 +0800
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Wed, 28 Apr 2010 01:51:20 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 3.0a1 (Windows/2008050715)
Add support of specifing '[vars]' in 'xl create'.
It is said '[vars]' can be used in help message of 'xl create',
but in fact cannot now, so add this function.

After this fix:
# xl create pvguest1.conf
# xl list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  1024     2        r--    161.0
pvguest1                                    29   256     2        r--      0.5
# xl destroy pvguest1
# xl create pvguest1.conf vcpus=4 memory=512 'name="pv1"'
# xl list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  1024     2        r--    162.2
pv1                                         30   512     4        r--      0.2

Signed-off-by: Yu Zhiguo <yuzg@xxxxxxxxxxxxxx>

diff -r c87ec146229a -r 51bb2db1ed51 tools/libxl/xl.c
--- a/tools/libxl/xl.c  Fri Apr 23 15:04:26 2010 +0100
+++ b/tools/libxl/xl.c  Thu Apr 29 00:02:02 2010 +0800
@@ -777,7 +777,9 @@
     return r;
 }
 
-static int create_domain(int debug, int daemonize, const char *config_file, 
const char *restore_file, int paused, int migrate_fd /* -1 means none */, char 
**migration_domname_r)
+static int create_domain(int debug, int daemonize, const char *config_file, 
const char *restore_file,
+                         int paused, int migrate_fd /* -1 means none */, char 
**migration_domname_r,
+                         const char *extra_config)
 {
     libxl_domain_create_info info1;
     libxl_domain_build_info info2;
@@ -873,6 +875,21 @@
                                        &config_data, &config_len);
         if (ret) { fprintf(stderr, "Failed to read config file: %s: %s\n",
                            config_file, strerror(errno)); return ERROR_FAIL; }
+        if (!restore_file && extra_config && strlen(extra_config)) {
+            if (config_len > INT_MAX - (strlen(extra_config) + 2)) {
+                fprintf(stderr, "Failed to attach extra configration\n");
+                return ERROR_FAIL;
+            }
+            config_data = realloc(config_data, config_len + 
strlen(extra_config) + 2);
+            if (!config_data) {
+                fprintf(stderr, "Failed to realloc config_data\n");
+                return ERROR_FAIL;
+            }
+            strcat(config_data, "\n");
+            strcat(config_data, extra_config);
+            strcat(config_data, "\n");
+            config_len += (strlen(extra_config) + 2);
+        }
     } else {
         if (!config_data) {
             fprintf(stderr, "Config file not specified and"
@@ -1935,7 +1952,7 @@
     rc = create_domain(debug, daemonize,
                        0 /* no config file, use incoming */,
                        "incoming migration stream", 1,
-                       0, &migration_domname);
+                       0, &migration_domname, NULL);
     if (rc) {
         fprintf(stderr, "migration target: Domain creation failed"
                 " (code %d).\n", rc);
@@ -2045,7 +2062,7 @@
         exit(2);
     }
     rc = create_domain(debug, daemonize, config_file,
-                       checkpoint_file, paused, -1, 0);
+                       checkpoint_file, paused, -1, 0, NULL);
     exit(-rc);
 }
 
@@ -2291,6 +2308,8 @@
 {
     char *filename = NULL;
     int debug = 0, daemonize = 1;
+#define MAX_EXTRA       1024
+    char *p, extra_config[MAX_EXTRA];
     int opt, rc;
 
     while ((opt = getopt(argc, argv, "hde")) != -1) {
@@ -2310,14 +2329,26 @@
         }
     }
 
-    if (optind >= argc) {
-        help("create");
-        exit(2);
+    memset(extra_config, 0, MAX_EXTRA);
+    while (optind < argc) {
+        if ((p = strchr(argv[optind], '='))) {
+            if (strlen(extra_config) + 1 < MAX_EXTRA) {
+                if (strlen(extra_config))
+                    strcat(extra_config, "\n");
+                strcat(extra_config, argv[optind]);
+            }
+        } else if (!filename) {
+            filename = argv[optind];
+        } else {
+            help("create");
+            exit(2);
+        }
+
+        optind++;
     }
 
-    filename = argv[optind];
     rc = create_domain(debug, daemonize, filename, NULL, 0,
-                       -1, 0);
+                       -1, 0, extra_config);
     exit(-rc);
 }
 


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>