render / rpms / libvirt

Forked from rpms/libvirt 4 months ago
Clone
43618d
From 0a5abfb22d5d030cc3780c44b805b5b92567b44a Mon Sep 17 00:00:00 2001
43618d
From: "Daniel P. Berrange" <berrange@redhat.com>
43618d
Date: Thu, 3 Oct 2013 14:06:59 +0100
43618d
Subject: [PATCH] Don't pass virConnectPtr in nwfilter 'struct
43618d
 domUpdateCBStruct'
43618d
43618d
The nwfilter driver only needs a reference to its private
43618d
state object, not a full virConnectPtr. Update the domUpdateCBStruct
43618d
struct to have a 'void *opaque' field instead of a virConnectPtr.
43618d
43618d
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
43618d
---
43618d
 src/conf/nwfilter_conf.c               | 14 +++++++++++---
43618d
 src/conf/nwfilter_conf.h               |  4 ++--
43618d
 src/nwfilter/nwfilter_dhcpsnoop.c      | 12 ++++++------
43618d
 src/nwfilter/nwfilter_driver.c         |  5 +++--
43618d
 src/nwfilter/nwfilter_gentech_driver.c | 32 ++++++++++++++++----------------
43618d
 src/nwfilter/nwfilter_gentech_driver.h | 10 +++++-----
43618d
 src/nwfilter/nwfilter_learnipaddr.c    |  6 +++---
43618d
 7 files changed, 46 insertions(+), 37 deletions(-)
43618d
43618d
diff --git a/src/conf/nwfilter_conf.c b/src/conf/nwfilter_conf.c
43618d
index c009921..9927f7e 100644
43618d
--- a/src/conf/nwfilter_conf.c
43618d
+++ b/src/conf/nwfilter_conf.c
43618d
@@ -2850,6 +2850,7 @@ virNWFilterCallbackDriversUnlock(void)
43618d
 
43618d
 
43618d
 static virDomainObjListIterator virNWFilterDomainFWUpdateCB;
43618d
+static void *virNWFilterDomainFWUpdateOpaque;
43618d
 
43618d
 /**
43618d
  * virNWFilterInstFiltersOnAllVMs:
43618d
@@ -2861,7 +2862,7 @@ virNWFilterInstFiltersOnAllVMs(virConnectPtr conn)
43618d
 {
43618d
     size_t i;
43618d
     struct domUpdateCBStruct cb = {
43618d
-        .conn = conn,
43618d
+        .opaque = virNWFilterDomainFWUpdateOpaque,
43618d
         .step = STEP_APPLY_CURRENT,
43618d
         .skipInterfaces = NULL, /* not needed */
43618d
     };
43618d
@@ -2880,7 +2881,7 @@ virNWFilterTriggerVMFilterRebuild(virConnectPtr conn)
43618d
     size_t i;
43618d
     int ret = 0;
43618d
     struct domUpdateCBStruct cb = {
43618d
-        .conn = conn,
43618d
+        .opaque = virNWFilterDomainFWUpdateOpaque,
43618d
         .step = STEP_APPLY_NEW,
43618d
         .skipInterfaces = virHashCreate(0, NULL),
43618d
     };
43618d
@@ -3474,9 +3475,14 @@ char *virNWFilterConfigFile(const char *dir,
43618d
 }
43618d
 
43618d
 
43618d
-int virNWFilterConfLayerInit(virDomainObjListIterator domUpdateCB)
43618d
+int virNWFilterConfLayerInit(virDomainObjListIterator domUpdateCB,
43618d
+                             void *opaque)
43618d
 {
43618d
+    if (initialized)
43618d
+        return -1;
43618d
+
43618d
     virNWFilterDomainFWUpdateCB = domUpdateCB;
43618d
+    virNWFilterDomainFWUpdateOpaque = opaque;
43618d
 
43618d
     initialized = true;
43618d
 
43618d
@@ -3495,6 +3501,8 @@ void virNWFilterConfLayerShutdown(void)
43618d
     virMutexDestroy(&updateMutex);
43618d
 
43618d
     initialized = false;
43618d
+    virNWFilterDomainFWUpdateOpaque = NULL;
43618d
+    virNWFilterDomainFWUpdateCB = NULL;
43618d
 }
43618d
 
43618d
 
43618d
diff --git a/src/conf/nwfilter_conf.h b/src/conf/nwfilter_conf.h
43618d
index faa7527..e470615 100644
43618d
--- a/src/conf/nwfilter_conf.h
43618d
+++ b/src/conf/nwfilter_conf.h
43618d
@@ -586,7 +586,7 @@ enum UpdateStep {
43618d
 };
43618d
 
43618d
 struct domUpdateCBStruct {
43618d
-    virConnectPtr conn;
43618d
+    void *opaque;
43618d
     enum UpdateStep step;
43618d
     virHashTablePtr skipInterfaces;
43618d
 };
43618d
@@ -722,7 +722,7 @@ void virNWFilterObjUnlock(virNWFilterObjPtr obj);
43618d
 void virNWFilterLockFilterUpdates(void);
43618d
 void virNWFilterUnlockFilterUpdates(void);
43618d
 
43618d
-int virNWFilterConfLayerInit(virDomainObjListIterator domUpdateCB);
43618d
+int virNWFilterConfLayerInit(virDomainObjListIterator domUpdateCB, void *opaque);
43618d
 void virNWFilterConfLayerShutdown(void);
43618d
 
43618d
 int virNWFilterInstFiltersOnAllVMs(virConnectPtr conn);
43618d
diff --git a/src/nwfilter/nwfilter_dhcpsnoop.c b/src/nwfilter/nwfilter_dhcpsnoop.c
43618d
index 3e9f046..2bc1686 100644
43618d
--- a/src/nwfilter/nwfilter_dhcpsnoop.c
43618d
+++ b/src/nwfilter/nwfilter_dhcpsnoop.c
43618d
@@ -481,15 +481,15 @@ virNWFilterSnoopIPLeaseInstallRule(virNWFilterSnoopIPLeasePtr ipl,
43618d
     /* instantiate the filters */
43618d
 
43618d
     if (req->ifname)
43618d
-        rc = virNWFilterInstantiateFilterLate(NULL,
43618d
+        rc = virNWFilterInstantiateFilterLate(req->driver,
43618d
+                                              NULL,
43618d
                                               req->ifname,
43618d
                                               req->ifindex,
43618d
                                               req->linkdev,
43618d
                                               req->nettype,
43618d
                                               &req->macaddr,
43618d
                                               req->filtername,
43618d
-                                              req->vars,
43618d
-                                              req->driver);
43618d
+                                              req->vars);
43618d
 
43618d
 exit_snooprequnlock:
43618d
     virNWFilterSnoopReqUnlock(req);
43618d
@@ -867,15 +867,15 @@ virNWFilterSnoopReqLeaseDel(virNWFilterSnoopReqPtr req,
43618d
         goto skip_instantiate;
43618d
 
43618d
     if (ipAddrLeft) {
43618d
-        ret = virNWFilterInstantiateFilterLate(NULL,
43618d
+        ret = virNWFilterInstantiateFilterLate(req->driver,
43618d
+                                               NULL,
43618d
                                                req->ifname,
43618d
                                                req->ifindex,
43618d
                                                req->linkdev,
43618d
                                                req->nettype,
43618d
                                                &req->macaddr,
43618d
                                                req->filtername,
43618d
-                                               req->vars,
43618d
-                                               req->driver);
43618d
+                                               req->vars);
43618d
     } else {
43618d
         const virNWFilterVarValuePtr dhcpsrvrs =
43618d
             virHashLookup(req->vars->hashTable, NWFILTER_VARNAME_DHCPSERVER);
43618d
diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c
43618d
index c2afdfc..6e20e03 100644
43618d
--- a/src/nwfilter/nwfilter_driver.c
43618d
+++ b/src/nwfilter/nwfilter_driver.c
43618d
@@ -203,7 +203,8 @@ nwfilterStateInitialize(bool privileged,
43618d
 
43618d
     virNWFilterTechDriversInit(privileged);
43618d
 
43618d
-    if (virNWFilterConfLayerInit(virNWFilterDomainFWUpdateCB) < 0)
43618d
+    if (virNWFilterConfLayerInit(virNWFilterDomainFWUpdateCB,
43618d
+                                 driverState) < 0)
43618d
         goto err_techdrivers_shutdown;
43618d
 
43618d
     /*
43618d
@@ -681,7 +682,7 @@ nwfilterInstantiateFilter(virConnectPtr conn,
43618d
                           const unsigned char *vmuuid,
43618d
                           virDomainNetDefPtr net)
43618d
 {
43618d
-    return virNWFilterInstantiateFilter(conn, vmuuid, net);
43618d
+    return virNWFilterInstantiateFilter(conn->nwfilterPrivateData, vmuuid, net);
43618d
 }
43618d
 
43618d
 
43618d
diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter_gentech_driver.c
43618d
index 382d73f..5961165 100644
43618d
--- a/src/nwfilter/nwfilter_gentech_driver.c
43618d
+++ b/src/nwfilter/nwfilter_gentech_driver.c
43618d
@@ -800,7 +800,8 @@ err_unresolvable_vars:
43618d
  * Call this function while holding the NWFilter filter update lock
43618d
  */
43618d
 static int
43618d
-__virNWFilterInstantiateFilter(const unsigned char *vmuuid,
43618d
+__virNWFilterInstantiateFilter(virNWFilterDriverStatePtr driver,
43618d
+                               const unsigned char *vmuuid,
43618d
                                bool teardownOld,
43618d
                                const char *ifname,
43618d
                                int ifindex,
43618d
@@ -810,7 +811,6 @@ __virNWFilterInstantiateFilter(const unsigned char *vmuuid,
43618d
                                const char *filtername,
43618d
                                virNWFilterHashTablePtr filterparams,
43618d
                                enum instCase useNewFilter,
43618d
-                               virNWFilterDriverStatePtr driver,
43618d
                                bool forceWithPendingReq,
43618d
                                bool *foundNewFilter)
43618d
 {
43618d
@@ -921,7 +921,7 @@ err_exit:
43618d
 
43618d
 
43618d
 static int
43618d
-_virNWFilterInstantiateFilter(virConnectPtr conn,
43618d
+_virNWFilterInstantiateFilter(virNWFilterDriverStatePtr driver,
43618d
                               const unsigned char *vmuuid,
43618d
                               const virDomainNetDefPtr net,
43618d
                               bool teardownOld,
43618d
@@ -948,7 +948,8 @@ _virNWFilterInstantiateFilter(virConnectPtr conn,
43618d
         goto cleanup;
43618d
     }
43618d
 
43618d
-    rc = __virNWFilterInstantiateFilter(vmuuid,
43618d
+    rc = __virNWFilterInstantiateFilter(driver,
43618d
+                                        vmuuid,
43618d
                                         teardownOld,
43618d
                                         net->ifname,
43618d
                                         ifindex,
43618d
@@ -958,7 +959,6 @@ _virNWFilterInstantiateFilter(virConnectPtr conn,
43618d
                                         net->filter,
43618d
                                         net->filterparams,
43618d
                                         useNewFilter,
43618d
-                                        conn->nwfilterPrivateData,
43618d
                                         false,
43618d
                                         foundNewFilter);
43618d
 
43618d
@@ -970,22 +970,23 @@ cleanup:
43618d
 
43618d
 
43618d
 int
43618d
-virNWFilterInstantiateFilterLate(const unsigned char *vmuuid,
43618d
+virNWFilterInstantiateFilterLate(virNWFilterDriverStatePtr driver,
43618d
+                                 const unsigned char *vmuuid,
43618d
                                  const char *ifname,
43618d
                                  int ifindex,
43618d
                                  const char *linkdev,
43618d
                                  enum virDomainNetType nettype,
43618d
                                  const virMacAddrPtr macaddr,
43618d
                                  const char *filtername,
43618d
-                                 virNWFilterHashTablePtr filterparams,
43618d
-                                 virNWFilterDriverStatePtr driver)
43618d
+                                 virNWFilterHashTablePtr filterparams)
43618d
 {
43618d
     int rc;
43618d
     bool foundNewFilter = false;
43618d
 
43618d
     virNWFilterLockFilterUpdates();
43618d
 
43618d
-    rc = __virNWFilterInstantiateFilter(vmuuid,
43618d
+    rc = __virNWFilterInstantiateFilter(driver,
43618d
+                                        vmuuid,
43618d
                                         true,
43618d
                                         ifname,
43618d
                                         ifindex,
43618d
@@ -995,7 +996,6 @@ virNWFilterInstantiateFilterLate(const unsigned char *vmuuid,
43618d
                                         filtername,
43618d
                                         filterparams,
43618d
                                         INSTANTIATE_ALWAYS,
43618d
-                                        driver,
43618d
                                         true,
43618d
                                         &foundNewFilter);
43618d
     if (rc < 0) {
43618d
@@ -1015,13 +1015,13 @@ virNWFilterInstantiateFilterLate(const unsigned char *vmuuid,
43618d
 
43618d
 
43618d
 int
43618d
-virNWFilterInstantiateFilter(virConnectPtr conn,
43618d
+virNWFilterInstantiateFilter(virNWFilterDriverStatePtr driver,
43618d
                              const unsigned char *vmuuid,
43618d
                              const virDomainNetDefPtr net)
43618d
 {
43618d
     bool foundNewFilter = false;
43618d
 
43618d
-    return _virNWFilterInstantiateFilter(conn, vmuuid, net,
43618d
+    return _virNWFilterInstantiateFilter(driver, vmuuid, net,
43618d
                                          1,
43618d
                                          INSTANTIATE_ALWAYS,
43618d
                                          &foundNewFilter);
43618d
@@ -1029,14 +1029,14 @@ virNWFilterInstantiateFilter(virConnectPtr conn,
43618d
 
43618d
 
43618d
 int
43618d
-virNWFilterUpdateInstantiateFilter(virConnectPtr conn,
43618d
+virNWFilterUpdateInstantiateFilter(virNWFilterDriverStatePtr driver,
43618d
                                    const unsigned char *vmuuid,
43618d
                                    const virDomainNetDefPtr net,
43618d
                                    bool *skipIface)
43618d
 {
43618d
     bool foundNewFilter = false;
43618d
 
43618d
-    int rc = _virNWFilterInstantiateFilter(conn, vmuuid, net,
43618d
+    int rc = _virNWFilterInstantiateFilter(driver, vmuuid, net,
43618d
                                            0,
43618d
                                            INSTANTIATE_FOLLOW_NEWFILTER,
43618d
                                            &foundNewFilter);
43618d
@@ -1154,7 +1154,7 @@ virNWFilterDomainFWUpdateCB(virDomainObjPtr obj,
43618d
             if ((net->filter) && (net->ifname)) {
43618d
                 switch (cb->step) {
43618d
                 case STEP_APPLY_NEW:
43618d
-                    ret = virNWFilterUpdateInstantiateFilter(cb->conn,
43618d
+                    ret = virNWFilterUpdateInstantiateFilter(cb->opaque,
43618d
                                                              vm->uuid,
43618d
                                                              net,
43618d
                                                              &skipIface);
43618d
@@ -1179,7 +1179,7 @@ virNWFilterDomainFWUpdateCB(virDomainObjPtr obj,
43618d
                     break;
43618d
 
43618d
                 case STEP_APPLY_CURRENT:
43618d
-                    ret = virNWFilterInstantiateFilter(cb->conn,
43618d
+                    ret = virNWFilterInstantiateFilter(cb->opaque,
43618d
                                                        vm->uuid,
43618d
                                                        net);
43618d
                     if (ret)
43618d
diff --git a/src/nwfilter/nwfilter_gentech_driver.h b/src/nwfilter/nwfilter_gentech_driver.h
43618d
index 4b47b4a..8528e2a 100644
43618d
--- a/src/nwfilter/nwfilter_gentech_driver.h
43618d
+++ b/src/nwfilter/nwfilter_gentech_driver.h
43618d
@@ -39,23 +39,23 @@ enum instCase {
43618d
 };
43618d
 
43618d
 
43618d
-int virNWFilterInstantiateFilter(virConnectPtr conn,
43618d
+int virNWFilterInstantiateFilter(virNWFilterDriverStatePtr driver,
43618d
                                  const unsigned char *vmuuid,
43618d
                                  const virDomainNetDefPtr net);
43618d
-int virNWFilterUpdateInstantiateFilter(virConnectPtr conn,
43618d
+int virNWFilterUpdateInstantiateFilter(virNWFilterDriverStatePtr driver,
43618d
                                        const unsigned char *vmuuid,
43618d
                                        const virDomainNetDefPtr net,
43618d
                                        bool *skipIface);
43618d
 
43618d
-int virNWFilterInstantiateFilterLate(const unsigned char *vmuuid,
43618d
+int virNWFilterInstantiateFilterLate(virNWFilterDriverStatePtr driver,
43618d
+                                     const unsigned char *vmuuid,
43618d
                                      const char *ifname,
43618d
                                      int ifindex,
43618d
                                      const char *linkdev,
43618d
                                      enum virDomainNetType nettype,
43618d
                                      const virMacAddrPtr macaddr,
43618d
                                      const char *filtername,
43618d
-                                     virNWFilterHashTablePtr filterparams,
43618d
-                                     virNWFilterDriverStatePtr driver);
43618d
+                                     virNWFilterHashTablePtr filterparams);
43618d
 
43618d
 int virNWFilterTeardownFilter(const virDomainNetDefPtr net);
43618d
 
43618d
diff --git a/src/nwfilter/nwfilter_learnipaddr.c b/src/nwfilter/nwfilter_learnipaddr.c
43618d
index 7e67203..093158a 100644
43618d
--- a/src/nwfilter/nwfilter_learnipaddr.c
43618d
+++ b/src/nwfilter/nwfilter_learnipaddr.c
43618d
@@ -612,15 +612,15 @@ learnIPAddressThread(void *arg)
43618d
                           "cache for interface %s"), inetaddr, req->ifname);
43618d
             }
43618d
 
43618d
-            ret = virNWFilterInstantiateFilterLate(NULL,
43618d
+            ret = virNWFilterInstantiateFilterLate(req->driver,
43618d
+                                                   NULL,
43618d
                                                    req->ifname,
43618d
                                                    req->ifindex,
43618d
                                                    req->linkdev,
43618d
                                                    req->nettype,
43618d
                                                    &req->macaddr,
43618d
                                                    req->filtername,
43618d
-                                                   req->filterparams,
43618d
-                                                   req->driver);
43618d
+                                                   req->filterparams);
43618d
             VIR_DEBUG("Result from applying firewall rules on "
43618d
                       "%s with IP addr %s : %d\n", req->ifname, inetaddr, ret);
43618d
         }