Roger Pau Monne
2013-Mar-13 17:34 UTC
[PATCH v3 1/4] 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>
---
Changes since v1:
* Don't pass a NULL as a value of a env variable
* Change netdev to gatewaydev
---
docs/misc/xl-network-configuration.markdown | 10 ++++++++++
tools/libxl/libxl.c | 6 +++++-
tools/libxl/libxl_linux.c | 9 ++++++++-
tools/libxl/libxl_types.idl | 1 +
tools/libxl/xl_cmdimpl.c | 14 ++++++++++++++
5 files changed, 38 insertions(+), 2 deletions(-)
diff --git a/docs/misc/xl-network-configuration.markdown
b/docs/misc/xl-network-configuration.markdown
index 5e2f049..e0d3d2a 100644
--- a/docs/misc/xl-network-configuration.markdown
+++ b/docs/misc/xl-network-configuration.markdown
@@ -67,6 +67,15 @@ added to. The default is `xenbr0`. The bridge must be
configured using
your distribution's network configuration tools. See the [wiki][net]
for guidance and examples.
+### gatewaydev
+
+Specifies the name of the network interface which has an IP and which
+is in the network the VIF should communicate with. This is used in the host
+by the vif-route hotplug script. See [wiki][vifroute] for guidance and
+examples.
+
+NOTE: netdev is a deprecated alias of this option.
+
### type
This keyword is valid for HVM guests only.
@@ -158,3 +167,4 @@ on the underlying netback implementation.
[oui]: http://en.wikipedia.org/wiki/Organizationally_Unique_Identifier
[net]: http://wiki.xen.org/wiki/HostConfiguration/Networking
+[vifroute]: http://wiki.xen.org/wiki/Vif-route
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 73e0dc3..5d590f1 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -2826,7 +2826,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)) {
@@ -2862,6 +2862,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 1fed3cd..60fc533 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 5b080ed..f3c212b 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 a98705e..d7ffc50 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)) {
--
1.7.7.5 (Apple Git-26)
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
Roger Pau Monne
2013-Mar-13 17:34 UTC
[PATCH v3 2/4] xl: allow specifying a default gatewaydev in xl.conf
This adds a new global option in the xl configuration file called
"vif.default.gatewaydev", that is used to specify the default
gatewaydev to use when none is passed in the vif specification.
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>
---
Changes since v1:
* Rename defaultnetdev to vif.default.gatewaydev
Changes since v2:
* Added a comment describing the nomenclature used in default options
---
docs/man/xl.conf.pod.5 | 6 ++++++
tools/examples/xl.conf | 3 +++
tools/libxl/xl.c | 14 ++++++++++++++
tools/libxl/xl.h | 1 +
tools/libxl/xl_cmdimpl.c | 5 +++++
5 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/docs/man/xl.conf.pod.5 b/docs/man/xl.conf.pod.5
index 82c6b20..f8f7e7f 100644
--- a/docs/man/xl.conf.pod.5
+++ b/docs/man/xl.conf.pod.5
@@ -82,6 +82,12 @@ Configures the default bridge to set for virtual network
devices.
Default: C<xenbr0>
+=item B<vif.default.gatewaydev="NAME">
+
+Configures the default gateway device to set for virtual network devices.
+
+Default: C<None>
+
=item B<output_format="json|sxp">
Configures the default output format used by xl when printing "machine
diff --git a/tools/examples/xl.conf b/tools/examples/xl.conf
index 28ab796..9a03fff 100644
--- a/tools/examples/xl.conf
+++ b/tools/examples/xl.conf
@@ -20,3 +20,6 @@
# if disabled the old behaviour will be used, and hotplug scripts will be
# launched by udev.
#run_hotplug_scripts=1
+
+# default gateway device to use with vif-route hotplug script
+#vif.default.gatewaydev="eth0"
diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c
index ecbcd3b..71561a4 100644
--- a/tools/libxl/xl.c
+++ b/tools/libxl/xl.c
@@ -43,6 +43,7 @@ int run_hotplug_scripts = 1;
char *lockfile;
char *default_vifscript = NULL;
char *default_bridge = NULL;
+char *default_gatewaydev = NULL;
enum output_format default_output_format = OUTPUT_FORMAT_JSON;
static xentoollog_level minmsglevel = XTL_PROGRESS;
@@ -85,12 +86,25 @@ static void parse_global_config(const char *configfile,
exit(1);
}
+ /*
+ * For global options that are related to a specific type of device
+ * we use the following nomenclature:
+ *
+ * <device type>.default.<option name>
+ *
+ * This allows us to keep the default options classified for the
+ * different device kinds.
+ */
+
if (!xlu_cfg_get_string (config, "vifscript", &buf, 0))
default_vifscript = strdup(buf);
if (!xlu_cfg_get_string (config, "defaultbridge", &buf, 0))
default_bridge = strdup(buf);
+ if (!xlu_cfg_get_string (config, "vif.default.gatewaydev",
&buf, 0))
+ default_gatewaydev = strdup(buf);
+
if (!xlu_cfg_get_string (config, "output_format", &buf, 0)) {
if (!strcmp(buf, "json"))
default_output_format = OUTPUT_FORMAT_JSON;
diff --git a/tools/libxl/xl.h b/tools/libxl/xl.h
index be6f38b..b881f92 100644
--- a/tools/libxl/xl.h
+++ b/tools/libxl/xl.h
@@ -148,6 +148,7 @@ extern int dryrun_only;
extern char *lockfile;
extern char *default_vifscript;
extern char *default_bridge;
+extern char *default_gatewaydev;
extern char *blkdev_start;
enum output_format {
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index d7ffc50..2d40f8f 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -1146,6 +1146,11 @@ static void parse_config_data(const char *config_source,
nic->bridge = strdup(default_bridge);
}
+ if (default_gatewaydev) {
+ free(nic->gatewaydev);
+ nic->gatewaydev = strdup(default_gatewaydev);
+ }
+
p = strtok(buf2, ",");
if (!p)
goto skip_nic;
--
1.7.7.5 (Apple Git-26)
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
This is a replacement for defaultbridge xl.conf option. The now
deprecated defaultbridge is still supported.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Cc: George Dunlap <George.Dunlap@eu.citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
---
Changes since v2:
* Changed bridge0 to the more common xenbr0
* Changed defaultbridge in xl.conf man page to vif.default.bridge
---
docs/man/xl.conf.pod.5 | 4 +++-
tools/examples/xl.conf | 3 +++
tools/libxl/xl.c | 13 +++++++++++--
3 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/docs/man/xl.conf.pod.5 b/docs/man/xl.conf.pod.5
index f8f7e7f..31aebca 100644
--- a/docs/man/xl.conf.pod.5
+++ b/docs/man/xl.conf.pod.5
@@ -76,10 +76,12 @@ Configures the default hotplug script used by virtual
network devices.
Default: C</etc/xen/scripts/vif-bridge>
-=item B<defaultbridge="NAME">
+=item B<vif.default.bridge="NAME">
Configures the default bridge to set for virtual network devices.
+The old B<defaultbridge> option is deprecated and should not be used.
+
Default: C<xenbr0>
=item B<vif.default.gatewaydev="NAME">
diff --git a/tools/examples/xl.conf b/tools/examples/xl.conf
index 9a03fff..b0caa32 100644
--- a/tools/examples/xl.conf
+++ b/tools/examples/xl.conf
@@ -23,3 +23,6 @@
# default gateway device to use with vif-route hotplug script
#vif.default.gatewaydev="eth0"
+
+# default bridge device to use with vif-bridge hotplug scripts
+#vif.default.bridge="xenbr0"
diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c
index 71561a4..9f45e45 100644
--- a/tools/libxl/xl.c
+++ b/tools/libxl/xl.c
@@ -99,8 +99,17 @@ static void parse_global_config(const char *configfile,
if (!xlu_cfg_get_string (config, "vifscript", &buf, 0))
default_vifscript = strdup(buf);
- if (!xlu_cfg_get_string (config, "defaultbridge", &buf, 0))
- default_bridge = strdup(buf);
+ if (!xlu_cfg_get_string (config, "defaultbridge", &buf, 0)) {
+ fprintf(stderr, "the global config option defaultbridge is
deprecated, "
+ "please switch to vif.default.bridge\n");
+ free(default_bridge);
+ default_bridge = strdup(buf);
+ }
+
+ if (!xlu_cfg_get_string (config, "vif.default.bridge", &buf,
0)) {
+ free(default_bridge);
+ default_bridge = strdup(buf);
+ }
if (!xlu_cfg_get_string (config, "vif.default.gatewaydev",
&buf, 0))
default_gatewaydev = strdup(buf);
--
1.7.7.5 (Apple Git-26)
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
Replace vifscript with vif.default.script. The old config option is
kept for backwards compatibility.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Cc: George Dunlap <george.dunlap@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
---
docs/man/xl.conf.pod.5 | 4 +++-
tools/libxl/xl.c | 11 ++++++++++-
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/docs/man/xl.conf.pod.5 b/docs/man/xl.conf.pod.5
index 31aebca..7b9fcac 100644
--- a/docs/man/xl.conf.pod.5
+++ b/docs/man/xl.conf.pod.5
@@ -70,10 +70,12 @@ operations (primarily domain creation).
Default: C</var/lock/xl>
-=item B<vifscript="PATH">
+=item B<vif.default.script="PATH">
Configures the default hotplug script used by virtual network devices.
+The old B<vifscript> option is deprecated and should not be used.
+
Default: C</etc/xen/scripts/vif-bridge>
=item B<vif.default.bridge="NAME">
diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c
index 9f45e45..4c598db 100644
--- a/tools/libxl/xl.c
+++ b/tools/libxl/xl.c
@@ -96,8 +96,17 @@ static void parse_global_config(const char *configfile,
* different device kinds.
*/
- if (!xlu_cfg_get_string (config, "vifscript", &buf, 0))
+ if (!xlu_cfg_get_string (config, "vifscript", &buf, 0)) {
+ fprintf(stderr, "the global config option vifscript is deprecated,
"
+ "please switch to vif.default.script\n");
+ free(default_vifscript);
default_vifscript = strdup(buf);
+ }
+
+ if (!xlu_cfg_get_string (config, "vif.default.script", &buf,
0)) {
+ free(default_vifscript);
+ default_vifscript = strdup(buf);
+ }
if (!xlu_cfg_get_string (config, "defaultbridge", &buf, 0)) {
fprintf(stderr, "the global config option defaultbridge is
deprecated, "
--
1.7.7.5 (Apple Git-26)
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
Ian Jackson
2013-Mar-15 12:51 UTC
Re: [PATCH v3 1/4] xl/libxl: add gatewaydev/netdev to vif specification [and 3 more messages]
Roger Pau Monne writes ("[Xen-devel] [PATCH v3 1/4] 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.
I have applied all four of these, thanks.
I have a comment for possible future improvement:
> +=item B<vif.default.gatewaydev="NAME">
...> + if (!xlu_cfg_get_string (config, "vif.default.gatewaydev",
&buf, 0))
> + default_gatewaydev = strdup(buf);
> +
Maybe we should make it a general rule that you can write
default.<something>
in the global config file ?
Ian.