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.