]> xenbits.xensource.com Git - libvirt.git/commitdiff
Remove driver dependency from nwfilter_conf.c
authorStefan Berger <stefanb@us.ibm.com>
Tue, 30 Mar 2010 14:25:22 +0000 (10:25 -0400)
committerStefan Berger <stefanb@us.ibm.com>
Tue, 30 Mar 2010 14:25:22 +0000 (10:25 -0400)
This patch removes the driver dependency from nwfilter_conf.c and moves
a callback function calling into the driver into
nwfilter_gentech_driver.c and passes a pointer to that callback function
upon initialization of nwfilter_conf.c.

src/conf/nwfilter_conf.c
src/conf/nwfilter_conf.h
src/nwfilter/nwfilter_driver.c
src/nwfilter/nwfilter_gentech_driver.c
src/nwfilter/nwfilter_gentech_driver.h

index 9c9dde3d7f916748831b1d140f378398cf506bb1..97646ce54d24ff7656421a5a7450d7cd706c8eca 100644 (file)
@@ -39,7 +39,6 @@
 #include "nwfilter_params.h"
 #include "nwfilter_conf.h"
 #include "domain_conf.h"
-#include "nwfilter/nwfilter_gentech_driver.h"
 
 
 #define VIR_FROM_THIS VIR_FROM_NWFILTER
@@ -2140,56 +2139,7 @@ virNWFilterRegisterCallbackDriver(virNWFilterCallbackDriverPtr cbd)
 }
 
 
-enum UpdateStep {
-    STEP_APPLY_NEW,
-    STEP_TEAR_NEW,
-    STEP_TEAR_OLD,
-};
-
-struct cbStruct {
-    virConnectPtr conn;
-    enum UpdateStep step;
-    int err;
-};
-
-static void
-virNWFilterDomainFWUpdateCB(void *payload,
-                            const char *name ATTRIBUTE_UNUSED,
-                            void *data)
-{
-    virDomainObjPtr obj = payload;
-    virDomainDefPtr vm = obj->def;
-    struct cbStruct *cb = data;
-    int i;
-
-    virDomainObjLock(obj);
-
-    if (virDomainObjIsActive(obj)) {
-        for (i = 0; i < vm->nnets; i++) {
-            virDomainNetDefPtr net = vm->nets[i];
-            if ((net->filter) && (net->ifname)) {
-                switch (cb->step) {
-                case STEP_APPLY_NEW:
-                    cb->err = virNWFilterUpdateInstantiateFilter(cb->conn,
-                                                                 net);
-                    break;
-
-                case STEP_TEAR_NEW:
-                    cb->err = virNWFilterRollbackUpdateFilter(cb->conn, net);
-                    break;
-
-                case STEP_TEAR_OLD:
-                    cb->err = virNWFilterTearOldFilter(cb->conn, net);
-                    break;
-                }
-                if (cb->err)
-                    break;
-            }
-        }
-    }
-
-    virDomainObjUnlock(obj);
-}
+static virHashIterator virNWFilterDomainFWUpdateCB;
 
 
 static int
@@ -2197,7 +2147,7 @@ virNWFilterTriggerVMFilterRebuild(virConnectPtr conn)
 {
     int i;
     int err;
-    struct cbStruct cb = {
+    struct domUpdateCBStruct cb = {
         .conn = conn,
         .err = 0,
         .step = STEP_APPLY_NEW,
@@ -2793,8 +2743,10 @@ char *virNWFilterConfigFile(virConnectPtr conn ATTRIBUTE_UNUSED,
 }
 
 
-int virNWFilterConfLayerInit(void)
+int virNWFilterConfLayerInit(virHashIterator domUpdateCB)
 {
+    virNWFilterDomainFWUpdateCB = domUpdateCB;
+
     if (virMutexInit(&updateMutex))
         return 1;
 
index 582df11143c98f49a519a0d0c428bec488532310..01a38bbbd6894dba6e1ae438f77c4d708fd3a6c6 100644 (file)
@@ -432,6 +432,19 @@ struct _virNWFilterRuleInst {
 };
 
 
+enum UpdateStep {
+    STEP_APPLY_NEW,
+    STEP_TEAR_NEW,
+    STEP_TEAR_OLD,
+};
+
+struct domUpdateCBStruct {
+    virConnectPtr conn;
+    enum UpdateStep step;
+    int err;
+};
+
+
 enum virDomainNetType;
 
 typedef int (*virNWFilterRuleCreateInstance)(virConnectPtr conn,
@@ -546,7 +559,7 @@ virNWFilterDefPtr virNWFilterDefParseFile(virConnectPtr conn,
 void virNWFilterPoolObjLock(virNWFilterPoolObjPtr obj);
 void virNWFilterPoolObjUnlock(virNWFilterPoolObjPtr obj);
 
-int virNWFilterConfLayerInit(void);
+int virNWFilterConfLayerInit(virHashIterator domUpdateCB);
 void virNWFilterConfLayerShutdown(void);
 
 int virNWFilterParamConfLayerInit(void);
index 4bb30ce13653860a767e9bd923e41e58bb58299c..c6597939d7fc51d0201465d82bd55541c11f4a02 100644 (file)
@@ -34,6 +34,7 @@
 #include "memory.h"
 #include "domain_conf.h"
 #include "nwfilter_driver.h"
+#include "nwfilter_gentech_driver.h"
 
 
 #define VIR_FROM_THIS VIR_FROM_NWFILTER
@@ -64,7 +65,7 @@ static int
 nwfilterDriverStartup(int privileged) {
     char *base = NULL;
 
-    if (virNWFilterConfLayerInit() < 0)
+    if (virNWFilterConfLayerInit(virNWFilterDomainFWUpdateCB) < 0)
         return -1;
 
     if (VIR_ALLOC(driverState) < 0)
index e590952ae4940e237334f269cbffd6ea21dde1ce..6a88dff582ec1b76b1a0b3c403e2a579b9e4ed11 100644 (file)
@@ -681,3 +681,43 @@ virNWFilterTeardownFilter(const virDomainNetDefPtr net)
 
     return 0;
 }
+
+
+void
+virNWFilterDomainFWUpdateCB(void *payload,
+                            const char *name ATTRIBUTE_UNUSED,
+                            void *data)
+{
+    virDomainObjPtr obj = payload;
+    virDomainDefPtr vm = obj->def;
+    struct domUpdateCBStruct *cb = data;
+    int i;
+
+    virDomainObjLock(obj);
+
+    if (virDomainObjIsActive(obj)) {
+        for (i = 0; i < vm->nnets; i++) {
+            virDomainNetDefPtr net = vm->nets[i];
+            if ((net->filter) && (net->ifname)) {
+                switch (cb->step) {
+                case STEP_APPLY_NEW:
+                    cb->err = virNWFilterUpdateInstantiateFilter(cb->conn,
+                                                                 net);
+                    break;
+
+                case STEP_TEAR_NEW:
+                    cb->err = virNWFilterRollbackUpdateFilter(cb->conn, net);
+                    break;
+
+                case STEP_TEAR_OLD:
+                    cb->err = virNWFilterTearOldFilter(cb->conn, net);
+                    break;
+                }
+                if (cb->err)
+                    break;
+            }
+        }
+    }
+
+    virDomainObjUnlock(obj);
+}
index 6b7da71e4d5e662979dbdff0e8630f093b9b44c9..b10480f4b9da21f4a1a09070b425680c109024e5 100644 (file)
@@ -51,4 +51,8 @@ int virNWFilterTeardownFilter(const virDomainNetDefPtr net);
 virNWFilterHashTablePtr virNWFilterCreateVarHashmap(virConnectPtr conn,
                                                      char *macaddr);
 
+void virNWFilterDomainFWUpdateCB(void *payload,
+                                 const char *name ATTRIBUTE_UNUSED,
+                                 void *data);
+
 #endif