#include "virfile.h"
#include "virstring.h"
#include "viraccessapicheck.h"
+#include "network_event.h"
#define VIR_FROM_THIS VIR_FROM_NETWORK
networkReloadFirewallRules(driverState);
networkRefreshDaemons(driverState);
+ driverState->networkEventState = virObjectEventStateNew();
+
networkDriverUnlock(driverState);
#ifdef HAVE_FIREWALLD
networkDriverLock(driverState);
+ virObjectEventStateFree(driverState->networkEventState);
+
/* free inactive networks */
virNetworkObjListFree(&driverState->networks);
return ret;
}
+static int
+networkConnectNetworkEventRegisterAny(virConnectPtr conn,
+ virNetworkPtr net,
+ int eventID,
+ virConnectNetworkEventGenericCallback callback,
+ void *opaque,
+ virFreeCallback freecb)
+{
+ virNetworkDriverStatePtr driver = conn->networkPrivateData;
+ int ret = -1;
+
+ if (virConnectNetworkEventRegisterAnyEnsureACL(conn) < 0)
+ goto cleanup;
+
+ if (virNetworkEventStateRegisterID(conn, driver->networkEventState,
+ net, eventID,
+ VIR_OBJECT_EVENT_CALLBACK(callback),
+ opaque, freecb, &ret) < 0)
+ ret = -1;
+
+cleanup:
+ return ret;
+}
+
+static int
+networkConnectNetworkEventDeregisterAny(virConnectPtr conn,
+ int callbackID)
+{
+ virNetworkDriverStatePtr driver = conn->networkPrivateData;
+ int ret = -1;
+
+ if (virConnectNetworkEventDeregisterAnyEnsureACL(conn) < 0)
+ goto cleanup;
+
+ ret = virObjectEventStateDeregisterID(conn,
+ driver->networkEventState,
+ callbackID);
+
+cleanup:
+ return ret;
+}
+
static int networkIsActive(virNetworkPtr net)
{
virNetworkObjPtr obj;
virNetworkDefPtr def;
virNetworkObjPtr network = NULL;
virNetworkPtr ret = NULL;
+ virObjectEventPtr event = NULL;
networkDriverLock(driver);
goto cleanup;
}
+ event = virNetworkEventLifecycleNew(network->def->name,
+ network->def->uuid,
+ VIR_NETWORK_EVENT_STARTED);
+
VIR_INFO("Creating network '%s'", network->def->name);
ret = virGetNetwork(conn, network->def->name, network->def->uuid);
cleanup:
virNetworkDefFree(def);
+ if (event)
+ virObjectEventStateQueue(driver->networkEventState, event);
if (network)
virNetworkObjUnlock(network);
networkDriverUnlock(driver);
bool freeDef = true;
virNetworkObjPtr network = NULL;
virNetworkPtr ret = NULL;
+ virObjectEventPtr event = NULL;
networkDriverLock(driver);
goto cleanup;
}
+ event = virNetworkEventLifecycleNew(def->name, def->uuid,
+ VIR_NETWORK_EVENT_DEFINED);
+
VIR_INFO("Defining network '%s'", def->name);
ret = virGetNetwork(conn, def->name, def->uuid);
cleanup:
+ if (event)
+ virObjectEventStateQueue(driver->networkEventState, event);
if (freeDef)
virNetworkDefFree(def);
if (network)
virNetworkObjPtr network;
int ret = -1;
bool active = false;
+ virObjectEventPtr event = NULL;
networkDriverLock(driver);
virNetworkDefFree(network->newDef);
network->newDef = NULL;
+ event = virNetworkEventLifecycleNew(network->def->name,
+ network->def->uuid,
+ VIR_NETWORK_EVENT_UNDEFINED);
+
VIR_INFO("Undefining network '%s'", network->def->name);
if (!active) {
if (networkRemoveInactive(driver, network) < 0) {
ret = 0;
cleanup:
+ if (event)
+ virObjectEventStateQueue(driver->networkEventState, event);
if (network)
virNetworkObjUnlock(network);
networkDriverUnlock(driver);
virNetworkDriverStatePtr driver = net->conn->networkPrivateData;
virNetworkObjPtr network;
int ret = -1;
+ virObjectEventPtr event = NULL;
networkDriverLock(driver);
network = virNetworkFindByUUID(&driver->networks, net->uuid);
ret = networkStartNetwork(driver, network);
+ event = virNetworkEventLifecycleNew(network->def->name,
+ network->def->uuid,
+ VIR_NETWORK_EVENT_STARTED);
+
cleanup:
+ if (event)
+ virObjectEventStateQueue(driver->networkEventState, event);
if (network)
virNetworkObjUnlock(network);
networkDriverUnlock(driver);
virNetworkDriverStatePtr driver = net->conn->networkPrivateData;
virNetworkObjPtr network;
int ret = -1;
+ virObjectEventPtr event = NULL;
networkDriverLock(driver);
network = virNetworkFindByUUID(&driver->networks, net->uuid);
if ((ret = networkShutdownNetwork(driver, network)) < 0)
goto cleanup;
+ event = virNetworkEventLifecycleNew(network->def->name,
+ network->def->uuid,
+ VIR_NETWORK_EVENT_STOPPED);
+
if (!network->persistent) {
if (networkRemoveInactive(driver, network) < 0) {
network = NULL;
}
cleanup:
+ if (event)
+ virObjectEventStateQueue(driver->networkEventState, event);
if (network)
virNetworkObjUnlock(network);
networkDriverUnlock(driver);
.connectNumOfDefinedNetworks = networkConnectNumOfDefinedNetworks, /* 0.2.0 */
.connectListDefinedNetworks = networkConnectListDefinedNetworks, /* 0.2.0 */
.connectListAllNetworks = networkConnectListAllNetworks, /* 0.10.2 */
+ .connectNetworkEventRegisterAny = networkConnectNetworkEventRegisterAny, /* 1.2.1 */
+ .connectNetworkEventDeregisterAny = networkConnectNetworkEventDeregisterAny, /* 1.2.1 */
.networkLookupByUUID = networkLookupByUUID, /* 0.2.0 */
.networkLookupByName = networkLookupByName, /* 0.2.0 */
.networkCreateXML = networkCreateXML, /* 0.2.0 */