[libvirt] [PATCH 3/7] Add 'detail' arg to network lifecycle event internals
Cedric Bosdonnat
cbosdonnat at suse.com
Fri Dec 13 10:19:20 UTC 2013
On Thu, 2013-12-12 at 18:04 +0000, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
>
> While the public API & wire protocol included the 'detail'
> arg for network lifecycle events, the internal event handling
> code did not process it. This meant that if a future libvirtd
> server starts sending non-0 'detail' args, the current libvirt
> client will not process them.
>
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
> src/conf/network_event.c | 7 +++++--
> src/conf/network_event.h | 3 ++-
> src/network/bridge_driver.c | 15 ++++++++++-----
> src/remote/remote_driver.c | 2 +-
> src/test/test_driver.c | 15 ++++++++++-----
> 5 files changed, 28 insertions(+), 14 deletions(-)
>
> diff --git a/src/conf/network_event.c b/src/conf/network_event.c
> index 4a02523..b885ced 100644
> --- a/src/conf/network_event.c
> +++ b/src/conf/network_event.c
> @@ -32,6 +32,7 @@ struct _virNetworkEventLifecycle {
> virObjectEvent parent;
>
> int type;
> + int detail;
> };
> typedef struct _virNetworkEventLifecycle virNetworkEventLifecycle;
> typedef virNetworkEventLifecycle *virNetworkEventLifecyclePtr;
> @@ -80,7 +81,7 @@ virNetworkEventDispatchDefaultFunc(virConnectPtr conn,
> networkLifecycleEvent = (virNetworkEventLifecyclePtr)event;
> ((virConnectNetworkEventLifecycleCallback)cb)(conn, net,
> networkLifecycleEvent->type,
> - 0,
> + networkLifecycleEvent->detail,
> cbopaque);
> goto cleanup;
> }
> @@ -135,7 +136,8 @@ virNetworkEventStateRegisterID(virConnectPtr conn,
> virObjectEventPtr
> virNetworkEventLifecycleNew(const char *name,
> const unsigned char *uuid,
> - int type)
> + int type,
> + int detail)
> {
> virNetworkEventLifecyclePtr event;
> int eventId = (VIR_EVENT_NAMESPACE_NETWORK << 8) + VIR_NETWORK_EVENT_ID_LIFECYCLE;
> @@ -149,6 +151,7 @@ virNetworkEventLifecycleNew(const char *name,
> return NULL;
>
> event->type = type;
> + event->detail = detail;
>
> return (virObjectEventPtr)event;
> }
> diff --git a/src/conf/network_event.h b/src/conf/network_event.h
> index 44b762e..1eef771 100644
> --- a/src/conf/network_event.h
> +++ b/src/conf/network_event.h
> @@ -40,7 +40,8 @@ virNetworkEventStateRegisterID(virConnectPtr conn,
> virObjectEventPtr
> virNetworkEventLifecycleNew(const char *name,
> const unsigned char *uuid,
> - int type);
> + int type,
> + int detail);
>
> void
> virNetworkEventDispatchDefaultFunc(virConnectPtr conn,
> diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
> index 1bde7d7..3e10758 100644
> --- a/src/network/bridge_driver.c
> +++ b/src/network/bridge_driver.c
> @@ -2559,7 +2559,8 @@ static virNetworkPtr networkCreateXML(virConnectPtr conn, const char *xml) {
>
> event = virNetworkEventLifecycleNew(network->def->name,
> network->def->uuid,
> - VIR_NETWORK_EVENT_STARTED);
> + VIR_NETWORK_EVENT_STARTED,
> + 0);
>
> VIR_INFO("Creating network '%s'", network->def->name);
> ret = virGetNetwork(conn, network->def->name, network->def->uuid);
> @@ -2621,7 +2622,8 @@ static virNetworkPtr networkDefineXML(virConnectPtr conn, const char *xml) {
> }
>
> event = virNetworkEventLifecycleNew(def->name, def->uuid,
> - VIR_NETWORK_EVENT_DEFINED);
> + VIR_NETWORK_EVENT_DEFINED,
> + 0);
>
> VIR_INFO("Defining network '%s'", def->name);
> ret = virGetNetwork(conn, def->name, def->uuid);
> @@ -2673,7 +2675,8 @@ networkUndefine(virNetworkPtr net) {
>
> event = virNetworkEventLifecycleNew(network->def->name,
> network->def->uuid,
> - VIR_NETWORK_EVENT_UNDEFINED);
> + VIR_NETWORK_EVENT_UNDEFINED,
> + 0);
>
> VIR_INFO("Undefining network '%s'", network->def->name);
> if (!active) {
> @@ -2890,7 +2893,8 @@ static int networkCreate(virNetworkPtr net) {
>
> event = virNetworkEventLifecycleNew(network->def->name,
> network->def->uuid,
> - VIR_NETWORK_EVENT_STARTED);
> + VIR_NETWORK_EVENT_STARTED,
> + 0);
>
> cleanup:
> if (event)
> @@ -2930,7 +2934,8 @@ static int networkDestroy(virNetworkPtr net) {
>
> event = virNetworkEventLifecycleNew(network->def->name,
> network->def->uuid,
> - VIR_NETWORK_EVENT_STOPPED);
> + VIR_NETWORK_EVENT_STOPPED,
> + 0);
>
> if (!network->persistent) {
> if (networkRemoveInactive(driver, network) < 0) {
> diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
> index 7bd4b24..be282d6 100644
> --- a/src/remote/remote_driver.c
> +++ b/src/remote/remote_driver.c
> @@ -4918,7 +4918,7 @@ remoteNetworkBuildEventLifecycle(virNetClientProgramPtr prog ATTRIBUTE_UNUSED,
> if (!net)
> return;
>
> - event = virNetworkEventLifecycleNew(net->name, net->uuid, msg->event);
> + event = virNetworkEventLifecycleNew(net->name, net->uuid, msg->event, msg->detail);
> virNetworkFree(net);
>
> remoteDomainEventQueue(priv, event);
> diff --git a/src/test/test_driver.c b/src/test/test_driver.c
> index 30d2636..a48404a 100644
> --- a/src/test/test_driver.c
> +++ b/src/test/test_driver.c
> @@ -3542,7 +3542,8 @@ static virNetworkPtr testNetworkCreateXML(virConnectPtr conn, const char *xml) {
> net->active = 1;
>
> event = virNetworkEventLifecycleNew(net->def->name, net->def->uuid,
> - VIR_NETWORK_EVENT_STARTED);
> + VIR_NETWORK_EVENT_STARTED,
> + 0);
>
> ret = virGetNetwork(conn, net->def->name, net->def->uuid);
>
> @@ -3575,7 +3576,8 @@ virNetworkPtr testNetworkDefineXML(virConnectPtr conn, const char *xml)
> net->persistent = 1;
>
> event = virNetworkEventLifecycleNew(net->def->name, net->def->uuid,
> - VIR_NETWORK_EVENT_DEFINED);
> + VIR_NETWORK_EVENT_DEFINED,
> + 0);
>
> ret = virGetNetwork(conn, net->def->name, net->def->uuid);
>
> @@ -3611,7 +3613,8 @@ static int testNetworkUndefine(virNetworkPtr network) {
> }
>
> event = virNetworkEventLifecycleNew(network->name, network->uuid,
> - VIR_NETWORK_EVENT_UNDEFINED);
> + VIR_NETWORK_EVENT_UNDEFINED,
> + 0);
>
> virNetworkRemoveInactive(&privconn->networks,
> privnet);
> @@ -3699,7 +3702,8 @@ static int testNetworkCreate(virNetworkPtr network) {
>
> privnet->active = 1;
> event = virNetworkEventLifecycleNew(privnet->def->name, privnet->def->uuid,
> - VIR_NETWORK_EVENT_STARTED);
> + VIR_NETWORK_EVENT_STARTED,
> + 0);
> ret = 0;
>
> cleanup:
> @@ -3727,7 +3731,8 @@ static int testNetworkDestroy(virNetworkPtr network) {
>
> privnet->active = 0;
> event = virNetworkEventLifecycleNew(privnet->def->name, privnet->def->uuid,
> - VIR_NETWORK_EVENT_STOPPED);
> + VIR_NETWORK_EVENT_STOPPED,
> + 0);
> if (!privnet->persistent) {
> virNetworkRemoveInactive(&privconn->networks,
> privnet);
ACK
--
Cedric
More information about the libvir-list
mailing list