[libvirt] [PATCH v2 1/3] libxl: add support for multiple IP addresses
Jim Fehlig
jfehlig at suse.com
Fri Dec 8 21:15:43 UTC 2017
On 12/06/2017 07:27 PM, Marek Marczykowski-Górecki wrote:
> vif-* scripts support it for a long time, and expect addresses to be
> separated by spaces. Add appropriate support to libxl driver.
>
> ---
> changed in v2:
> - moved libxlMakeIPList function to xenconfig/xen_common.c and renamed
> to xenMakeIPList
> ---
> src/libxl/libxl_conf.c | 5 +++--
> src/libxl/libxl_domain.c | 12 ------------
> src/xenconfig/xen_common.c | 24 ++++++++++++++++++++++++
> src/xenconfig/xen_common.h | 1 +
> 4 files changed, 28 insertions(+), 14 deletions(-)
Reviewed-by: Jim Fehlig <jfehlig at suse.com>
Regards,
Jim
>
> diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
> index 2a9be69..970cff2 100644
> --- a/src/libxl/libxl_conf.c
> +++ b/src/libxl/libxl_conf.c
> @@ -49,6 +49,7 @@
> #include "virstoragefile.h"
> #include "secret_util.h"
> #include "cpu/cpu.h"
> +#include "xen_common.h"
>
>
> #define VIR_FROM_THIS VIR_FROM_LIBXL
> @@ -1144,7 +1145,7 @@ libxlMakeNic(virDomainDefPtr def,
> if (VIR_STRDUP(x_nic->script, l_nic->script) < 0)
> goto cleanup;
> if (l_nic->guestIP.nips > 0) {
> - x_nic->ip = virSocketAddrFormat(&l_nic->guestIP.ips[0]->address);
> + x_nic->ip = xenMakeIPList(&l_nic->guestIP);
> if (!x_nic->ip)
> goto cleanup;
> }
> @@ -1160,7 +1161,7 @@ libxlMakeNic(virDomainDefPtr def,
> }
>
> if (l_nic->guestIP.nips > 0) {
> - x_nic->ip = virSocketAddrFormat(&l_nic->guestIP.ips[0]->address);
> + x_nic->ip = xenMakeIPList(&l_nic->guestIP);
> if (!x_nic->ip)
> goto cleanup;
> }
> diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
> index d054b07..395c8a9 100644
> --- a/src/libxl/libxl_domain.c
> +++ b/src/libxl/libxl_domain.c
> @@ -294,18 +294,6 @@ libxlDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
> def->os.type != VIR_DOMAIN_OSTYPE_HVM)
> dev->data.chr->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN;
>
> - if (dev->type == VIR_DOMAIN_DEVICE_NET &&
> - (dev->data.net->type == VIR_DOMAIN_NET_TYPE_BRIDGE ||
> - dev->data.net->type == VIR_DOMAIN_NET_TYPE_ETHERNET ||
> - dev->data.net->type == VIR_DOMAIN_NET_TYPE_NETWORK)) {
> - if (dev->data.net->guestIP.nips > 1) {
> - virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> - _("multiple IP addresses not supported on device type %s"),
> - virDomainNetTypeToString(dev->data.net->type));
> - return -1;
> - }
> - }
> -
> if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV ||
> (dev->type == VIR_DOMAIN_DEVICE_NET &&
> dev->data.net->type == VIR_DOMAIN_NET_TYPE_HOSTDEV)) {
> diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c
> index ded0aca..7f838b6 100644
> --- a/src/xenconfig/xen_common.c
> +++ b/src/xenconfig/xen_common.c
> @@ -1166,6 +1166,30 @@ xenFormatSerial(virConfValuePtr list, virDomainChrDefPtr serial)
> return -1;
> }
>
> +char *
> +xenMakeIPList(virNetDevIPInfoPtr guestIP)
> +{
> + size_t i;
> + char **address_array;
> + char *ret = NULL;
> +
> + if (VIR_ALLOC_N(address_array, guestIP->nips + 1) < 0)
> + return NULL;
> +
> + for (i = 0; i < guestIP->nips; i++) {
> + address_array[i] = virSocketAddrFormat(&guestIP->ips[i]->address);
> + if (!address_array[i])
> + goto cleanup;
> + }
> + address_array[guestIP->nips] = NULL;
> +
> + ret = virStringListJoin((const char**)address_array, " ");
> +
> + cleanup:
> + while (i > 0)
> + VIR_FREE(address_array[--i]);
> + return ret;
> +}
>
> static int
> xenFormatNet(virConnectPtr conn,
> diff --git a/src/xenconfig/xen_common.h b/src/xenconfig/xen_common.h
> index 9055692..3b7a5db 100644
> --- a/src/xenconfig/xen_common.h
> +++ b/src/xenconfig/xen_common.h
> @@ -67,6 +67,7 @@ int xenFormatConfigCommon(virConfPtr conf,
> virConnectPtr conn,
> const char *nativeFormat);
>
> +char *xenMakeIPList(virNetDevIPInfoPtr guestIP);
>
> int xenDomainDefAddImplicitInputDevice(virDomainDefPtr def);
>
>
> base-commit: 9f0ccc717ba9026c30ce38951a354dd66fa12e3b
>
More information about the libvir-list
mailing list