#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
}
-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
{
int i;
int err;
- struct cbStruct cb = {
+ struct domUpdateCBStruct cb = {
.conn = conn,
.err = 0,
.step = STEP_APPLY_NEW,
}
-int virNWFilterConfLayerInit(void)
+int virNWFilterConfLayerInit(virHashIterator domUpdateCB)
{
+ virNWFilterDomainFWUpdateCB = domUpdateCB;
+
if (virMutexInit(&updateMutex))
return 1;
};
+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,
void virNWFilterPoolObjLock(virNWFilterPoolObjPtr obj);
void virNWFilterPoolObjUnlock(virNWFilterPoolObjPtr obj);
-int virNWFilterConfLayerInit(void);
+int virNWFilterConfLayerInit(virHashIterator domUpdateCB);
void virNWFilterConfLayerShutdown(void);
int virNWFilterParamConfLayerInit(void);
#include "memory.h"
#include "domain_conf.h"
#include "nwfilter_driver.h"
+#include "nwfilter_gentech_driver.h"
#define VIR_FROM_THIS VIR_FROM_NWFILTER
nwfilterDriverStartup(int privileged) {
char *base = NULL;
- if (virNWFilterConfLayerInit() < 0)
+ if (virNWFilterConfLayerInit(virNWFilterDomainFWUpdateCB) < 0)
return -1;
if (VIR_ALLOC(driverState) < 0)
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);
+}
virNWFilterHashTablePtr virNWFilterCreateVarHashmap(virConnectPtr conn,
char *macaddr);
+void virNWFilterDomainFWUpdateCB(void *payload,
+ const char *name ATTRIBUTE_UNUSED,
+ void *data);
+
#endif