static virDomainObjListIterator virNWFilterDomainFWUpdateCB;
+static void *virNWFilterDomainFWUpdateOpaque;
/**
* virNWFilterInstFiltersOnAllVMs:
{
size_t i;
struct domUpdateCBStruct cb = {
- .conn = conn,
+ .opaque = virNWFilterDomainFWUpdateOpaque,
.step = STEP_APPLY_CURRENT,
.skipInterfaces = NULL, /* not needed */
};
size_t i;
int ret = 0;
struct domUpdateCBStruct cb = {
- .conn = conn,
+ .opaque = virNWFilterDomainFWUpdateOpaque,
.step = STEP_APPLY_NEW,
.skipInterfaces = virHashCreate(0, NULL),
};
}
-int virNWFilterConfLayerInit(virDomainObjListIterator domUpdateCB)
+int virNWFilterConfLayerInit(virDomainObjListIterator domUpdateCB,
+ void *opaque)
{
+ if (initialized)
+ return -1;
+
virNWFilterDomainFWUpdateCB = domUpdateCB;
+ virNWFilterDomainFWUpdateOpaque = opaque;
initialized = true;
virMutexDestroy(&updateMutex);
initialized = false;
+ virNWFilterDomainFWUpdateOpaque = NULL;
+ virNWFilterDomainFWUpdateCB = NULL;
}
};
struct domUpdateCBStruct {
- virConnectPtr conn;
+ void *opaque;
enum UpdateStep step;
virHashTablePtr skipInterfaces;
};
void virNWFilterLockFilterUpdates(void);
void virNWFilterUnlockFilterUpdates(void);
-int virNWFilterConfLayerInit(virDomainObjListIterator domUpdateCB);
+int virNWFilterConfLayerInit(virDomainObjListIterator domUpdateCB, void *opaque);
void virNWFilterConfLayerShutdown(void);
int virNWFilterInstFiltersOnAllVMs(virConnectPtr conn);
/* 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);
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);
virNWFilterTechDriversInit(privileged);
- if (virNWFilterConfLayerInit(virNWFilterDomainFWUpdateCB) < 0)
+ if (virNWFilterConfLayerInit(virNWFilterDomainFWUpdateCB,
+ driverState) < 0)
goto err_techdrivers_shutdown;
/*
const unsigned char *vmuuid,
virDomainNetDefPtr net)
{
- return virNWFilterInstantiateFilter(conn, vmuuid, net);
+ return virNWFilterInstantiateFilter(conn->nwfilterPrivateData, vmuuid, net);
}
* 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,
const char *filtername,
virNWFilterHashTablePtr filterparams,
enum instCase useNewFilter,
- virNWFilterDriverStatePtr driver,
bool forceWithPendingReq,
bool *foundNewFilter)
{
static int
-_virNWFilterInstantiateFilter(virConnectPtr conn,
+_virNWFilterInstantiateFilter(virNWFilterDriverStatePtr driver,
const unsigned char *vmuuid,
const virDomainNetDefPtr net,
bool teardownOld,
goto cleanup;
}
- rc = __virNWFilterInstantiateFilter(vmuuid,
+ rc = __virNWFilterInstantiateFilter(driver,
+ vmuuid,
teardownOld,
net->ifname,
ifindex,
net->filter,
net->filterparams,
useNewFilter,
- conn->nwfilterPrivateData,
false,
foundNewFilter);
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,
filtername,
filterparams,
INSTANTIATE_ALWAYS,
- driver,
true,
&foundNewFilter);
if (rc < 0) {
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);
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);
if ((net->filter) && (net->ifname)) {
switch (cb->step) {
case STEP_APPLY_NEW:
- ret = virNWFilterUpdateInstantiateFilter(cb->conn,
+ ret = virNWFilterUpdateInstantiateFilter(cb->opaque,
vm->uuid,
net,
&skipIface);
break;
case STEP_APPLY_CURRENT:
- ret = virNWFilterInstantiateFilter(cb->conn,
+ ret = virNWFilterInstantiateFilter(cb->opaque,
vm->uuid,
net);
if (ret)
};
-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);
"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);
}