aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxl
diff options
context:
space:
mode:
authorRoger Pau Monne <roger.pau@citrix.com>2013-03-13 17:42:17 +0000
committerIan Jackson <Ian.Jackson@eu.citrix.com>2013-03-15 12:40:08 +0000
commite2abe690babf06fc49bdec49b08cb45dd3e09138 (patch)
tree7fcbb3b22bfb226e77c254ff2b6ecf48d84ee9ac /tools/libxl
parent50ae2d0cb625a5c122f27ee69fc2f81479eee33e (diff)
downloadxen-e2abe690babf06fc49bdec49b08cb45dd3e09138.tar.gz
xen-e2abe690babf06fc49bdec49b08cb45dd3e09138.tar.bz2
xen-e2abe690babf06fc49bdec49b08cb45dd3e09138.zip
xl/libxl: add gatewaydev/netdev to vif specification
This option is used by the vif-route hotplug script. A new more descriptive name is used, "gatewaydev", but "netdev" is also supported as a deprecated backwards compatible option. This option was supported in the past, according to http://wiki.xen.org/wiki/Vif-route, so we should also support it in libxl. Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Tested-by: Ulf Kreutzberg <ulf.kreutzberg@hosteurope.de> Cc: Ulf Kreutzberg <ulf.kreutzberg@hosteurope.de> Cc: Ian Campbell <ian.campbell@citrix.com> Cc: George Dunlap <george.dunlap@citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools/libxl')
-rw-r--r--tools/libxl/libxl.c6
-rw-r--r--tools/libxl/libxl_linux.c9
-rw-r--r--tools/libxl/libxl_types.idl1
-rw-r--r--tools/libxl/xl_cmdimpl.c14
4 files changed, 28 insertions, 2 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index a09c0fad68..572c2c6442 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -2829,7 +2829,7 @@ void libxl__device_nic_add(libxl__egc *egc, uint32_t domid,
if (rc) goto out;
front = flexarray_make(gc, 16, 1);
- back = flexarray_make(gc, 16, 1);
+ back = flexarray_make(gc, 18, 1);
if (nic->devid == -1) {
if ((nic->devid = libxl__device_nextid(gc, domid, "vif") < 0)) {
@@ -2865,6 +2865,10 @@ void libxl__device_nic_add(libxl__egc *egc, uint32_t domid,
flexarray_append(back, "ip");
flexarray_append(back, libxl__strdup(gc, nic->ip));
}
+ if (nic->gatewaydev) {
+ flexarray_append(back, "gatewaydev");
+ flexarray_append(back, libxl__strdup(gc, nic->gatewaydev));
+ }
if (nic->rate_interval_usecs > 0) {
flexarray_append(back, "rate");
diff --git a/tools/libxl/libxl_linux.c b/tools/libxl/libxl_linux.c
index d34fbb3b1f..37815eb650 100644
--- a/tools/libxl/libxl_linux.c
+++ b/tools/libxl/libxl_linux.c
@@ -84,11 +84,16 @@ static char **get_hotplug_env(libxl__gc *gc,
char *script, libxl__device *dev)
{
const char *type = libxl__device_kind_to_string(dev->backend_kind);
+ char *be_path = libxl__device_backend_path(gc, dev);
char **env;
+ char *gatewaydev;
int nr = 0;
libxl_nic_type nictype;
- const int arraysize = 13;
+ gatewaydev = libxl__xs_read(gc, XBT_NULL, GCSPRINTF("%s/%s", be_path,
+ "gatewaydev"));
+
+ const int arraysize = 15;
GCNEW_ARRAY(env, arraysize);
env[nr++] = "script";
env[nr++] = script;
@@ -98,6 +103,8 @@ static char **get_hotplug_env(libxl__gc *gc,
env[nr++] = GCSPRINTF("backend/%s/%u/%d", type, dev->domid, dev->devid);
env[nr++] = "XENBUS_BASE_PATH";
env[nr++] = "backend";
+ env[nr++] = "netdev";
+ env[nr++] = gatewaydev ? : "";
if (dev->backend_kind == LIBXL__DEVICE_KIND_VIF) {
if (libxl__nic_type(gc, dev, &nictype)) {
LOG(ERROR, "unable to get nictype");
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 5b080ed548..f3c212bc8c 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -385,6 +385,7 @@ libxl_device_nic = Struct("device_nic", [
("nictype", libxl_nic_type),
("rate_bytes_per_interval", uint64),
("rate_interval_usecs", uint32),
+ ("gatewaydev", string),
])
libxl_device_pci = Struct("device_pci", [
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index a98705e31a..d7ffc507b8 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -1210,6 +1210,14 @@ static void parse_config_data(const char *config_source,
parse_vif_rate(&config, (p2 + 1), nic);
} else if (!strcmp(p, "accel")) {
fprintf(stderr, "the accel parameter for vifs is currently not supported\n");
+ } else if (!strcmp(p, "netdev")) {
+ fprintf(stderr, "the netdev parameter is deprecated, "
+ "please use gatewaydev instead\n");
+ free(nic->gatewaydev);
+ nic->gatewaydev = strdup(p2 + 1);
+ } else if (!strcmp(p, "gatewaydev")) {
+ free(nic->gatewaydev);
+ nic->gatewaydev = strdup(p2 + 1);
}
} while ((p = strtok(NULL, ",")) != NULL);
skip_nic:
@@ -5494,6 +5502,12 @@ int main_networkattach(int argc, char **argv)
}
} else if (MATCH_OPTION("bridge", *argv, oparg)) {
replace_string(&nic.bridge, oparg);
+ } else if (MATCH_OPTION("netdev", *argv, oparg)) {
+ fprintf(stderr, "the netdev parameter is deprecated, "
+ "please use gatewaydev instead\n");
+ replace_string(&nic.gatewaydev, oparg);
+ } else if (MATCH_OPTION("gatewaydev", *argv, oparg)) {
+ replace_string(&nic.gatewaydev, oparg);
} else if (MATCH_OPTION("ip", *argv, oparg)) {
replace_string(&nic.ip, oparg);
} else if (MATCH_OPTION("script", *argv, oparg)) {