[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