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>
This commit is contained in:
Roger Pau Monne authored and Ian Jackson committed 2013-03-15 12:40:08 +00:00
1 parent 50ae2d0cb6
commit e2abe690ba
5 files changed
+38 -2

No files matched your search

@@ -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
+5 -1
View File
@@ -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");
+8 -1
View File
@@ -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");
+1
View File
@@ -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", [
+14
View File
@@ -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)) {
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.