From 0b9f930836ea4987412c599e9e371923211d1bfa Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Thu, 3 Oct 2013 12:45:26 +0100 Subject: [PATCH] Don't pass virConnectPtr in nwfilter 'struct domUpdateCBStruct' The nwfilter driver only needs a reference to its private state object, not a full virConnectPtr. Update the domUpdateCBStruct struct to have a 'void *opaque' field instead of a virConnectPtr. Signed-off-by: Daniel P. Berrange (cherry picked from commit ebca369e3fe5ac999c261c2d44e60a1bac3cfe65) --- src/conf/nwfilter_conf.c | 14 ++++++++--- src/conf/nwfilter_conf.h | 4 ++-- src/nwfilter/nwfilter_dhcpsnoop.c | 12 +++++----- src/nwfilter/nwfilter_driver.c | 5 ++-- src/nwfilter/nwfilter_gentech_driver.c | 32 +++++++++++++------------- src/nwfilter/nwfilter_gentech_driver.h | 10 ++++---- src/nwfilter/nwfilter_learnipaddr.c | 6 ++--- 7 files changed, 46 insertions(+), 37 deletions(-) diff --git a/src/conf/nwfilter_conf.c b/src/conf/nwfilter_conf.c index 5559c09a62..9348c2b9be 100644 --- a/src/conf/nwfilter_conf.c +++ b/src/conf/nwfilter_conf.c @@ -2867,6 +2867,7 @@ virNWFilterCallbackDriversUnlock(void) static virDomainObjListIterator virNWFilterDomainFWUpdateCB; +static void *virNWFilterDomainFWUpdateOpaque; /** * virNWFilterInstFiltersOnAllVMs: @@ -2878,7 +2879,7 @@ virNWFilterInstFiltersOnAllVMs(virConnectPtr conn) { int i; struct domUpdateCBStruct cb = { - .conn = conn, + .opaque = virNWFilterDomainFWUpdateOpaque, .step = STEP_APPLY_CURRENT, .skipInterfaces = NULL, /* not needed */ }; @@ -2897,7 +2898,7 @@ virNWFilterTriggerVMFilterRebuild(virConnectPtr conn) int i; int ret = 0; struct domUpdateCBStruct cb = { - .conn = conn, + .opaque = virNWFilterDomainFWUpdateOpaque, .step = STEP_APPLY_NEW, .skipInterfaces = virHashCreate(0, NULL), }; @@ -3500,9 +3501,14 @@ char *virNWFilterConfigFile(const char *dir, } -int virNWFilterConfLayerInit(virDomainObjListIterator domUpdateCB) +int virNWFilterConfLayerInit(virDomainObjListIterator domUpdateCB, + void *opaque) { + if (initialized) + return -1; + virNWFilterDomainFWUpdateCB = domUpdateCB; + virNWFilterDomainFWUpdateOpaque = opaque; initialized = true; @@ -3521,6 +3527,8 @@ void virNWFilterConfLayerShutdown(void) virMutexDestroy(&updateMutex); initialized = false; + virNWFilterDomainFWUpdateOpaque = NULL; + virNWFilterDomainFWUpdateCB = NULL; } diff --git a/src/conf/nwfilter_conf.h b/src/conf/nwfilter_conf.h index f7d21a1b27..ea90fbd425 100644 --- a/src/conf/nwfilter_conf.h +++ b/src/conf/nwfilter_conf.h @@ -587,7 +587,7 @@ enum UpdateStep { }; struct domUpdateCBStruct { - virConnectPtr conn; + void *opaque; enum UpdateStep step; virHashTablePtr skipInterfaces; }; @@ -723,7 +723,7 @@ void virNWFilterObjUnlock(virNWFilterObjPtr obj); void virNWFilterLockFilterUpdates(void); void virNWFilterUnlockFilterUpdates(void); -int virNWFilterConfLayerInit(virDomainObjListIterator domUpdateCB); +int virNWFilterConfLayerInit(virDomainObjListIterator domUpdateCB, void *opaque); void virNWFilterConfLayerShutdown(void); int virNWFilterInstFiltersOnAllVMs(virConnectPtr conn); diff --git a/src/nwfilter/nwfilter_dhcpsnoop.c b/src/nwfilter/nwfilter_dhcpsnoop.c index 5012b14d17..a2a69a206f 100644 --- a/src/nwfilter/nwfilter_dhcpsnoop.c +++ b/src/nwfilter/nwfilter_dhcpsnoop.c @@ -481,15 +481,15 @@ virNWFilterSnoopIPLeaseInstallRule(virNWFilterSnoopIPLeasePtr ipl, /* instantiate the filters */ if (req->ifname) - rc = virNWFilterInstantiateFilterLate(NULL, + rc = virNWFilterInstantiateFilterLate(req->driver, + NULL, req->ifname, req->ifindex, req->linkdev, req->nettype, &req->macaddr, req->filtername, - req->vars, - req->driver); + req->vars); exit_snooprequnlock: virNWFilterSnoopReqUnlock(req); @@ -871,15 +871,15 @@ virNWFilterSnoopReqLeaseDel(virNWFilterSnoopReqPtr req, goto skip_instantiate; if (ipAddrLeft) { - ret = virNWFilterInstantiateFilterLate(NULL, + ret = virNWFilterInstantiateFilterLate(req->driver, + NULL, req->ifname, req->ifindex, req->linkdev, req->nettype, &req->macaddr, req->filtername, - req->vars, - req->driver); + req->vars); } else { const virNWFilterVarValuePtr dhcpsrvrs = virHashLookup(req->vars->hashTable, NWFILTER_VARNAME_DHCPSERVER); diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index db7d9cb2e8..d69721c217 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -201,7 +201,8 @@ nwfilterStateInitialize(bool privileged, virNWFilterTechDriversInit(privileged); - if (virNWFilterConfLayerInit(virNWFilterDomainFWUpdateCB) < 0) + if (virNWFilterConfLayerInit(virNWFilterDomainFWUpdateCB, + driverState) < 0) goto err_techdrivers_shutdown; /* @@ -640,7 +641,7 @@ nwfilterInstantiateFilter(virConnectPtr conn, const unsigned char *vmuuid, virDomainNetDefPtr net) { - return virNWFilterInstantiateFilter(conn, vmuuid, net); + return virNWFilterInstantiateFilter(conn->nwfilterPrivateData, vmuuid, net); } diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter_gentech_driver.c index 958f47a0c2..5323e455db 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -812,7 +812,8 @@ err_unresolvable_vars: * Call this function while holding the NWFilter filter update lock */ static int -__virNWFilterInstantiateFilter(const unsigned char *vmuuid, +__virNWFilterInstantiateFilter(virNWFilterDriverStatePtr driver, + const unsigned char *vmuuid, bool teardownOld, const char *ifname, int ifindex, @@ -822,7 +823,6 @@ __virNWFilterInstantiateFilter(const unsigned char *vmuuid, const char *filtername, virNWFilterHashTablePtr filterparams, enum instCase useNewFilter, - virNWFilterDriverStatePtr driver, bool forceWithPendingReq, bool *foundNewFilter) { @@ -935,7 +935,7 @@ err_exit: static int -_virNWFilterInstantiateFilter(virConnectPtr conn, +_virNWFilterInstantiateFilter(virNWFilterDriverStatePtr driver, const unsigned char *vmuuid, const virDomainNetDefPtr net, bool teardownOld, @@ -962,7 +962,8 @@ _virNWFilterInstantiateFilter(virConnectPtr conn, goto cleanup; } - rc = __virNWFilterInstantiateFilter(vmuuid, + rc = __virNWFilterInstantiateFilter(driver, + vmuuid, teardownOld, net->ifname, ifindex, @@ -972,7 +973,6 @@ _virNWFilterInstantiateFilter(virConnectPtr conn, net->filter, net->filterparams, useNewFilter, - conn->nwfilterPrivateData, false, foundNewFilter); @@ -984,22 +984,23 @@ cleanup: int -virNWFilterInstantiateFilterLate(const unsigned char *vmuuid, +virNWFilterInstantiateFilterLate(virNWFilterDriverStatePtr driver, + const unsigned char *vmuuid, const char *ifname, int ifindex, const char *linkdev, enum virDomainNetType nettype, const virMacAddrPtr macaddr, const char *filtername, - virNWFilterHashTablePtr filterparams, - virNWFilterDriverStatePtr driver) + virNWFilterHashTablePtr filterparams) { int rc; bool foundNewFilter = false; virNWFilterLockFilterUpdates(); - rc = __virNWFilterInstantiateFilter(vmuuid, + rc = __virNWFilterInstantiateFilter(driver, + vmuuid, true, ifname, ifindex, @@ -1009,7 +1010,6 @@ virNWFilterInstantiateFilterLate(const unsigned char *vmuuid, filtername, filterparams, INSTANTIATE_ALWAYS, - driver, true, &foundNewFilter); if (rc < 0) { @@ -1029,13 +1029,13 @@ virNWFilterInstantiateFilterLate(const unsigned char *vmuuid, int -virNWFilterInstantiateFilter(virConnectPtr conn, +virNWFilterInstantiateFilter(virNWFilterDriverStatePtr driver, const unsigned char *vmuuid, const virDomainNetDefPtr net) { bool foundNewFilter = false; - return _virNWFilterInstantiateFilter(conn, vmuuid, net, + return _virNWFilterInstantiateFilter(driver, vmuuid, net, 1, INSTANTIATE_ALWAYS, &foundNewFilter); @@ -1043,14 +1043,14 @@ virNWFilterInstantiateFilter(virConnectPtr conn, int -virNWFilterUpdateInstantiateFilter(virConnectPtr conn, +virNWFilterUpdateInstantiateFilter(virNWFilterDriverStatePtr driver, const unsigned char *vmuuid, const virDomainNetDefPtr net, bool *skipIface) { bool foundNewFilter = false; - int rc = _virNWFilterInstantiateFilter(conn, vmuuid, net, + int rc = _virNWFilterInstantiateFilter(driver, vmuuid, net, 0, INSTANTIATE_FOLLOW_NEWFILTER, &foundNewFilter); @@ -1168,7 +1168,7 @@ virNWFilterDomainFWUpdateCB(virDomainObjPtr obj, if ((net->filter) && (net->ifname)) { switch (cb->step) { case STEP_APPLY_NEW: - ret = virNWFilterUpdateInstantiateFilter(cb->conn, + ret = virNWFilterUpdateInstantiateFilter(cb->opaque, vm->uuid, net, &skipIface); @@ -1193,7 +1193,7 @@ virNWFilterDomainFWUpdateCB(virDomainObjPtr obj, break; case STEP_APPLY_CURRENT: - ret = virNWFilterInstantiateFilter(cb->conn, + ret = virNWFilterInstantiateFilter(cb->opaque, vm->uuid, net); if (ret) diff --git a/src/nwfilter/nwfilter_gentech_driver.h b/src/nwfilter/nwfilter_gentech_driver.h index 4b47b4a706..8528e2a41e 100644 --- a/src/nwfilter/nwfilter_gentech_driver.h +++ b/src/nwfilter/nwfilter_gentech_driver.h @@ -39,23 +39,23 @@ enum instCase { }; -int virNWFilterInstantiateFilter(virConnectPtr conn, +int virNWFilterInstantiateFilter(virNWFilterDriverStatePtr driver, const unsigned char *vmuuid, const virDomainNetDefPtr net); -int virNWFilterUpdateInstantiateFilter(virConnectPtr conn, +int virNWFilterUpdateInstantiateFilter(virNWFilterDriverStatePtr driver, const unsigned char *vmuuid, const virDomainNetDefPtr net, bool *skipIface); -int virNWFilterInstantiateFilterLate(const unsigned char *vmuuid, +int virNWFilterInstantiateFilterLate(virNWFilterDriverStatePtr driver, + const unsigned char *vmuuid, const char *ifname, int ifindex, const char *linkdev, enum virDomainNetType nettype, const virMacAddrPtr macaddr, const char *filtername, - virNWFilterHashTablePtr filterparams, - virNWFilterDriverStatePtr driver); + virNWFilterHashTablePtr filterparams); int virNWFilterTeardownFilter(const virDomainNetDefPtr net); diff --git a/src/nwfilter/nwfilter_learnipaddr.c b/src/nwfilter/nwfilter_learnipaddr.c index 990374d535..7ee51d2b49 100644 --- a/src/nwfilter/nwfilter_learnipaddr.c +++ b/src/nwfilter/nwfilter_learnipaddr.c @@ -613,15 +613,15 @@ learnIPAddressThread(void *arg) "cache for interface %s"), inetaddr, req->ifname); } - ret = virNWFilterInstantiateFilterLate(NULL, + ret = virNWFilterInstantiateFilterLate(req->driver, + NULL, req->ifname, req->ifindex, req->linkdev, req->nettype, &req->macaddr, req->filtername, - req->filterparams, - req->driver); + req->filterparams); VIR_DEBUG("Result from applying firewall rules on " "%s with IP addr %s : %d\n", req->ifname, inetaddr, ret); }