[libvirt] [PATCHv4 2/3] openvswitch: Add utility functions for getting and setting Open vSwitch per-port data
Michal Privoznik
mprivozn at redhat.com
Tue Oct 23 12:07:38 UTC 2012
On 22.10.2012 23:30, Laine Stump wrote:
> From: Kyle Mestery <kmestery at cisco.com>
>
> Add utility functions for Open vSwitch to both save
> per-port data before a live migration, and restore the
> per-port data after a live migration.
>
> Signed-off-by: Kyle Mestery <kmestery at cisco.com>
> ---
> src/libvirt_private.syms | 2 ++
> src/util/virnetdevopenvswitch.c | 70 +++++++++++++++++++++++++++++++++++++++++
> src/util/virnetdevopenvswitch.h | 6 ++++
> 3 files changed, 78 insertions(+)
ACK but see my comments below
Michal
>
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index 60f9c7f..699c9a3 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -1500,7 +1500,9 @@ virNetDevMacVLanVPortProfileRegisterCallback;
>
> # virnetdevopenvswitch.h
> virNetDevOpenvswitchAddPort;
> +virNetDevOpenvswitchGetMigrateData;
> virNetDevOpenvswitchRemovePort;
> +virNetDevOpenvswitchSetMigrateData;
>
>
> # virnetdevtap.h
> diff --git a/src/util/virnetdevopenvswitch.c b/src/util/virnetdevopenvswitch.c
> index a6993b6..841f693 100644
> --- a/src/util/virnetdevopenvswitch.c
> +++ b/src/util/virnetdevopenvswitch.c
> @@ -179,3 +179,73 @@ int virNetDevOpenvswitchRemovePort(const char *brname ATTRIBUTE_UNUSED, const ch
> virCommandFree(cmd);
> return ret;
> }
> +
> +/**
> + * virNetDevOpenvswitchGetMigrateData:
> + * @migrate: a pointer to store the data into, allocated by this function
> + * @ifname: name of the interface for which data is being migrated
> + *
> + * Allocates data to be migrated specific to Open vSwitch
> + *
> + * Returns 0 in case of success or -1 in case of failure
> + */
> +int virNetDevOpenvswitchGetMigrateData(char **migrate, const char *ifname)
> +{
> + virCommandPtr cmd = NULL;
> + int ret = 0;
> +
> + cmd = virCommandNewArgList(OVSVSCTL, "--timeout=5", "get", "Interface",
> + ifname, "external_ids:PortData", NULL);
> +
> + virCommandSetOutputBuffer(cmd, migrate);
> +
> + /* Run the command */
> + if (virCommandRun(cmd, NULL) < 0) {
> + virReportSystemError(VIR_ERR_INTERNAL_ERROR,
> + _("Unable to run command to get OVS port data for "
> + "interface %s"), ifname);
> + ret = -1;
> + goto error;
> + }
> +
> + /* Wipeout the newline */
> + (*migrate)[strlen(*migrate) - 1] = '\0';
> +
> +error:
> + return ret;
> +}
> +
> +/**
> + * virNetDevOpenvswitchSetMigrateData:
> + * @migrate: the data which was transferred during migration
> + * @ifname: the name of the interface the data is associated with
> + *
> + * Repopulates OVS per-port data on destination host
> + *
> + * Returns 0 in case of success or -1 in case of failure
> + */
> +int virNetDevOpenvswitchSetMigrateData(char *migrate, const char *ifname)
> +{
> + virCommandPtr cmd = NULL;
> + int ret = 0;
> + virBufferPtr buf;
> +
> + if (VIR_ALLOC(buf) < 0) {
> + ret = -1;
> + goto error;
> + }
I think we miss virReportOOMError() in here.
> +
> + virBufferAsprintf(buf, "external_ids:PortData=%s", migrate);
> +
> + cmd = virCommandNewArgList(OVSVSCTL, "--timeout=5", "set", "Interface", ifname,
> + virBufferCurrentContent(buf), NULL);
Again, if we ran OOM virBuffer* will return NULL. It should be checked.
> + /* Run the command */
> + if ((ret = virCommandRun(cmd, NULL)) < 0) {
> + virReportSystemError(VIR_ERR_INTERNAL_ERROR,
> + _("Unable to run command to set OVS port data for "
> + "interface %s"), ifname);
> + }
> +
> +error:
> + return ret;
> +}
> diff --git a/src/util/virnetdevopenvswitch.h b/src/util/virnetdevopenvswitch.h
> index 7e5b618..147cd6f 100644
> --- a/src/util/virnetdevopenvswitch.h
> +++ b/src/util/virnetdevopenvswitch.h
> @@ -42,4 +42,10 @@ int virNetDevOpenvswitchAddPort(const char *brname,
> int virNetDevOpenvswitchRemovePort(const char *brname, const char *ifname)
> ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
>
> +int virNetDevOpenvswitchGetMigrateData(char **migrate, const char *ifname)
> + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
> +
> +int virNetDevOpenvswitchSetMigrateData(char *migrate, const char *ifname)
> + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
> +
> #endif /* __VIR_NETDEV_OPENVSWITCH_H__ */
>
More information about the libvir-list
mailing list