mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-28 03:21:19 +00:00
Remove use of nwfilterPrivateData from nwfilter driver
The nwfilter driver can rely on its global state instead of the connect private data.
This commit is contained in:
parent
04101f23d0
commit
7b1ba9566b
@ -38,12 +38,11 @@ virDomainConfNWFilterRegister(virDomainConfNWFilterDriverPtr driver)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
virDomainConfNWFilterInstantiate(virConnectPtr conn,
|
virDomainConfNWFilterInstantiate(const unsigned char *vmuuid,
|
||||||
const unsigned char *vmuuid,
|
|
||||||
virDomainNetDefPtr net)
|
virDomainNetDefPtr net)
|
||||||
{
|
{
|
||||||
if (nwfilterDriver != NULL)
|
if (nwfilterDriver != NULL)
|
||||||
return nwfilterDriver->instantiateFilter(conn, vmuuid, net);
|
return nwfilterDriver->instantiateFilter(vmuuid, net);
|
||||||
/* driver module not available -- don't indicate failure */
|
/* driver module not available -- don't indicate failure */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -23,8 +23,7 @@
|
|||||||
#ifndef DOMAIN_NWFILTER_H
|
#ifndef DOMAIN_NWFILTER_H
|
||||||
# define DOMAIN_NWFILTER_H
|
# define DOMAIN_NWFILTER_H
|
||||||
|
|
||||||
typedef int (*virDomainConfInstantiateNWFilter)(virConnectPtr conn,
|
typedef int (*virDomainConfInstantiateNWFilter)(const unsigned char *vmuuid,
|
||||||
const unsigned char *vmuuid,
|
|
||||||
virDomainNetDefPtr net);
|
virDomainNetDefPtr net);
|
||||||
typedef void (*virDomainConfTeardownNWFilter)(virDomainNetDefPtr net);
|
typedef void (*virDomainConfTeardownNWFilter)(virDomainNetDefPtr net);
|
||||||
|
|
||||||
@ -36,8 +35,7 @@ typedef virDomainConfNWFilterDriver *virDomainConfNWFilterDriverPtr;
|
|||||||
|
|
||||||
void virDomainConfNWFilterRegister(virDomainConfNWFilterDriverPtr driver);
|
void virDomainConfNWFilterRegister(virDomainConfNWFilterDriverPtr driver);
|
||||||
|
|
||||||
int virDomainConfNWFilterInstantiate(virConnectPtr conn,
|
int virDomainConfNWFilterInstantiate(const unsigned char *vmuuid,
|
||||||
const unsigned char *vmuuid,
|
|
||||||
virDomainNetDefPtr net);
|
virDomainNetDefPtr net);
|
||||||
void virDomainConfNWFilterTeardown(virDomainNetDefPtr net);
|
void virDomainConfNWFilterTeardown(virDomainNetDefPtr net);
|
||||||
void virDomainConfVMNWFilterTeardown(virDomainObjPtr vm);
|
void virDomainConfVMNWFilterTeardown(virDomainObjPtr vm);
|
||||||
|
@ -4189,8 +4189,7 @@ lxcDomainAttachDeviceNetLive(virConnectPtr conn,
|
|||||||
_("No bridge name specified"));
|
_("No bridge name specified"));
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
if (!(veth = virLXCProcessSetupInterfaceBridged(conn,
|
if (!(veth = virLXCProcessSetupInterfaceBridged(vm->def,
|
||||||
vm->def,
|
|
||||||
net,
|
net,
|
||||||
brname)))
|
brname)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
@ -239,8 +239,7 @@ static void virLXCProcessCleanup(virLXCDriverPtr driver,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char *virLXCProcessSetupInterfaceBridged(virConnectPtr conn,
|
char *virLXCProcessSetupInterfaceBridged(virDomainDefPtr vm,
|
||||||
virDomainDefPtr vm,
|
|
||||||
virDomainNetDefPtr net,
|
virDomainNetDefPtr net,
|
||||||
const char *brname)
|
const char *brname)
|
||||||
{
|
{
|
||||||
@ -274,7 +273,7 @@ char *virLXCProcessSetupInterfaceBridged(virConnectPtr conn,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (net->filter &&
|
if (net->filter &&
|
||||||
virDomainConfNWFilterInstantiate(conn, vm->uuid, net) < 0)
|
virDomainConfNWFilterInstantiate(vm->uuid, net) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
ret = containerVeth;
|
ret = containerVeth;
|
||||||
@ -391,8 +390,7 @@ static int virLXCProcessSetupInterfaces(virConnectPtr conn,
|
|||||||
_("No bridge name specified"));
|
_("No bridge name specified"));
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
if (!(veth = virLXCProcessSetupInterfaceBridged(conn,
|
if (!(veth = virLXCProcessSetupInterfaceBridged(def,
|
||||||
def,
|
|
||||||
net,
|
net,
|
||||||
brname)))
|
brname)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
@ -47,8 +47,7 @@ void virLXCProcessAutostartAll(virLXCDriverPtr driver);
|
|||||||
int virLXCProcessReconnectAll(virLXCDriverPtr driver,
|
int virLXCProcessReconnectAll(virLXCDriverPtr driver,
|
||||||
virDomainObjListPtr doms);
|
virDomainObjListPtr doms);
|
||||||
|
|
||||||
char *virLXCProcessSetupInterfaceBridged(virConnectPtr conn,
|
char *virLXCProcessSetupInterfaceBridged(virDomainDefPtr vm,
|
||||||
virDomainDefPtr vm,
|
|
||||||
virDomainNetDefPtr net,
|
virDomainNetDefPtr net,
|
||||||
const char *brname);
|
const char *brname);
|
||||||
char *virLXCProcessSetupInterfaceDirect(virConnectPtr conn,
|
char *virLXCProcessSetupInterfaceDirect(virConnectPtr conn,
|
||||||
|
@ -64,17 +64,17 @@ VIR_LOG_INIT("nwfilter.nwfilter_driver");
|
|||||||
",member='Reloaded'"
|
",member='Reloaded'"
|
||||||
|
|
||||||
|
|
||||||
static virNWFilterDriverStatePtr driverState;
|
static virNWFilterDriverStatePtr driver;
|
||||||
|
|
||||||
static int nwfilterStateCleanup(void);
|
static int nwfilterStateCleanup(void);
|
||||||
|
|
||||||
static int nwfilterStateReload(void);
|
static int nwfilterStateReload(void);
|
||||||
|
|
||||||
static void nwfilterDriverLock(virNWFilterDriverStatePtr driver)
|
static void nwfilterDriverLock(void)
|
||||||
{
|
{
|
||||||
virMutexLock(&driver->lock);
|
virMutexLock(&driver->lock);
|
||||||
}
|
}
|
||||||
static void nwfilterDriverUnlock(virNWFilterDriverStatePtr driver)
|
static void nwfilterDriverUnlock(void)
|
||||||
{
|
{
|
||||||
virMutexUnlock(&driver->lock);
|
virMutexUnlock(&driver->lock);
|
||||||
}
|
}
|
||||||
@ -183,17 +183,17 @@ nwfilterStateInitialize(bool privileged,
|
|||||||
!(sysbus = virDBusGetSystemBus()))
|
!(sysbus = virDBusGetSystemBus()))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (VIR_ALLOC(driverState) < 0)
|
if (VIR_ALLOC(driver) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (virMutexInit(&driverState->lock) < 0)
|
if (virMutexInit(&driver->lock) < 0)
|
||||||
goto err_free_driverstate;
|
goto err_free_driverstate;
|
||||||
|
|
||||||
/* remember that we are going to use firewalld */
|
/* remember that we are going to use firewalld */
|
||||||
driverState->watchingFirewallD = (sysbus != NULL);
|
driver->watchingFirewallD = (sysbus != NULL);
|
||||||
driverState->privileged = privileged;
|
driver->privileged = privileged;
|
||||||
|
|
||||||
nwfilterDriverLock(driverState);
|
nwfilterDriverLock();
|
||||||
|
|
||||||
if (virNWFilterIPAddrMapInit() < 0)
|
if (virNWFilterIPAddrMapInit() < 0)
|
||||||
goto err_free_driverstate;
|
goto err_free_driverstate;
|
||||||
@ -206,7 +206,7 @@ nwfilterStateInitialize(bool privileged,
|
|||||||
goto err_dhcpsnoop_shutdown;
|
goto err_dhcpsnoop_shutdown;
|
||||||
|
|
||||||
if (virNWFilterConfLayerInit(virNWFilterDomainFWUpdateCB,
|
if (virNWFilterConfLayerInit(virNWFilterDomainFWUpdateCB,
|
||||||
driverState) < 0)
|
driver) < 0)
|
||||||
goto err_techdrivers_shutdown;
|
goto err_techdrivers_shutdown;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -231,23 +231,23 @@ nwfilterStateInitialize(bool privileged,
|
|||||||
if (VIR_STRDUP(base, SYSCONFDIR "/libvirt") < 0)
|
if (VIR_STRDUP(base, SYSCONFDIR "/libvirt") < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (virAsprintf(&driverState->configDir,
|
if (virAsprintf(&driver->configDir,
|
||||||
"%s/nwfilter", base) == -1)
|
"%s/nwfilter", base) == -1)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
VIR_FREE(base);
|
VIR_FREE(base);
|
||||||
|
|
||||||
if (virNWFilterLoadAllConfigs(&driverState->nwfilters,
|
if (virNWFilterLoadAllConfigs(&driver->nwfilters,
|
||||||
driverState->configDir) < 0)
|
driver->configDir) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
nwfilterDriverUnlock(driverState);
|
nwfilterDriverUnlock();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
VIR_FREE(base);
|
VIR_FREE(base);
|
||||||
nwfilterDriverUnlock(driverState);
|
nwfilterDriverUnlock();
|
||||||
nwfilterStateCleanup();
|
nwfilterStateCleanup();
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
@ -262,7 +262,7 @@ nwfilterStateInitialize(bool privileged,
|
|||||||
virNWFilterIPAddrMapShutdown();
|
virNWFilterIPAddrMapShutdown();
|
||||||
|
|
||||||
err_free_driverstate:
|
err_free_driverstate:
|
||||||
VIR_FREE(driverState);
|
VIR_FREE(driver);
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -276,26 +276,26 @@ nwfilterStateInitialize(bool privileged,
|
|||||||
static int
|
static int
|
||||||
nwfilterStateReload(void)
|
nwfilterStateReload(void)
|
||||||
{
|
{
|
||||||
if (!driverState)
|
if (!driver)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (!driverState->privileged)
|
if (!driver->privileged)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
virNWFilterDHCPSnoopEnd(NULL);
|
virNWFilterDHCPSnoopEnd(NULL);
|
||||||
/* shut down all threads -- they will be restarted if necessary */
|
/* shut down all threads -- they will be restarted if necessary */
|
||||||
virNWFilterLearnThreadsTerminate(true);
|
virNWFilterLearnThreadsTerminate(true);
|
||||||
|
|
||||||
nwfilterDriverLock(driverState);
|
nwfilterDriverLock();
|
||||||
virNWFilterWriteLockFilterUpdates();
|
virNWFilterWriteLockFilterUpdates();
|
||||||
virNWFilterCallbackDriversLock();
|
virNWFilterCallbackDriversLock();
|
||||||
|
|
||||||
virNWFilterLoadAllConfigs(&driverState->nwfilters,
|
virNWFilterLoadAllConfigs(&driver->nwfilters,
|
||||||
driverState->configDir);
|
driver->configDir);
|
||||||
|
|
||||||
virNWFilterCallbackDriversUnlock();
|
virNWFilterCallbackDriversUnlock();
|
||||||
virNWFilterUnlockFilterUpdates();
|
virNWFilterUnlockFilterUpdates();
|
||||||
nwfilterDriverUnlock(driverState);
|
nwfilterDriverUnlock();
|
||||||
|
|
||||||
virNWFilterInstFiltersOnAllVMs();
|
virNWFilterInstFiltersOnAllVMs();
|
||||||
|
|
||||||
@ -313,10 +313,10 @@ nwfilterStateReload(void)
|
|||||||
bool
|
bool
|
||||||
virNWFilterDriverIsWatchingFirewallD(void)
|
virNWFilterDriverIsWatchingFirewallD(void)
|
||||||
{
|
{
|
||||||
if (!driverState)
|
if (!driver)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return driverState->watchingFirewallD;
|
return driver->watchingFirewallD;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -327,29 +327,29 @@ virNWFilterDriverIsWatchingFirewallD(void)
|
|||||||
static int
|
static int
|
||||||
nwfilterStateCleanup(void)
|
nwfilterStateCleanup(void)
|
||||||
{
|
{
|
||||||
if (!driverState)
|
if (!driver)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (driverState->privileged) {
|
if (driver->privileged) {
|
||||||
virNWFilterConfLayerShutdown();
|
virNWFilterConfLayerShutdown();
|
||||||
virNWFilterDHCPSnoopShutdown();
|
virNWFilterDHCPSnoopShutdown();
|
||||||
virNWFilterLearnShutdown();
|
virNWFilterLearnShutdown();
|
||||||
virNWFilterIPAddrMapShutdown();
|
virNWFilterIPAddrMapShutdown();
|
||||||
virNWFilterTechDriversShutdown();
|
virNWFilterTechDriversShutdown();
|
||||||
|
|
||||||
nwfilterDriverLock(driverState);
|
nwfilterDriverLock();
|
||||||
|
|
||||||
nwfilterDriverRemoveDBusMatches();
|
nwfilterDriverRemoveDBusMatches();
|
||||||
|
|
||||||
/* free inactive nwfilters */
|
/* free inactive nwfilters */
|
||||||
virNWFilterObjListFree(&driverState->nwfilters);
|
virNWFilterObjListFree(&driver->nwfilters);
|
||||||
|
|
||||||
VIR_FREE(driverState->configDir);
|
VIR_FREE(driver->configDir);
|
||||||
nwfilterDriverUnlock(driverState);
|
nwfilterDriverUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
virMutexDestroy(&driverState->lock);
|
virMutexDestroy(&driver->lock);
|
||||||
VIR_FREE(driverState);
|
VIR_FREE(driver);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -359,13 +359,12 @@ static virNWFilterPtr
|
|||||||
nwfilterLookupByUUID(virConnectPtr conn,
|
nwfilterLookupByUUID(virConnectPtr conn,
|
||||||
const unsigned char *uuid)
|
const unsigned char *uuid)
|
||||||
{
|
{
|
||||||
virNWFilterDriverStatePtr driver = conn->nwfilterPrivateData;
|
|
||||||
virNWFilterObjPtr nwfilter;
|
virNWFilterObjPtr nwfilter;
|
||||||
virNWFilterPtr ret = NULL;
|
virNWFilterPtr ret = NULL;
|
||||||
|
|
||||||
nwfilterDriverLock(driver);
|
nwfilterDriverLock();
|
||||||
nwfilter = virNWFilterObjFindByUUID(&driver->nwfilters, uuid);
|
nwfilter = virNWFilterObjFindByUUID(&driver->nwfilters, uuid);
|
||||||
nwfilterDriverUnlock(driver);
|
nwfilterDriverUnlock();
|
||||||
|
|
||||||
if (!nwfilter) {
|
if (!nwfilter) {
|
||||||
virReportError(VIR_ERR_NO_NWFILTER,
|
virReportError(VIR_ERR_NO_NWFILTER,
|
||||||
@ -389,13 +388,12 @@ static virNWFilterPtr
|
|||||||
nwfilterLookupByName(virConnectPtr conn,
|
nwfilterLookupByName(virConnectPtr conn,
|
||||||
const char *name)
|
const char *name)
|
||||||
{
|
{
|
||||||
virNWFilterDriverStatePtr driver = conn->nwfilterPrivateData;
|
|
||||||
virNWFilterObjPtr nwfilter;
|
virNWFilterObjPtr nwfilter;
|
||||||
virNWFilterPtr ret = NULL;
|
virNWFilterPtr ret = NULL;
|
||||||
|
|
||||||
nwfilterDriverLock(driver);
|
nwfilterDriverLock();
|
||||||
nwfilter = virNWFilterObjFindByName(&driver->nwfilters, name);
|
nwfilter = virNWFilterObjFindByName(&driver->nwfilters, name);
|
||||||
nwfilterDriverUnlock(driver);
|
nwfilterDriverUnlock();
|
||||||
|
|
||||||
if (!nwfilter) {
|
if (!nwfilter) {
|
||||||
virReportError(VIR_ERR_NO_NWFILTER,
|
virReportError(VIR_ERR_NO_NWFILTER,
|
||||||
@ -416,24 +414,22 @@ nwfilterLookupByName(virConnectPtr conn,
|
|||||||
|
|
||||||
|
|
||||||
static virDrvOpenStatus
|
static virDrvOpenStatus
|
||||||
nwfilterOpen(virConnectPtr conn,
|
nwfilterOpen(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||||
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
|
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
|
||||||
|
|
||||||
if (!driverState)
|
if (!driver)
|
||||||
return VIR_DRV_OPEN_DECLINED;
|
return VIR_DRV_OPEN_DECLINED;
|
||||||
|
|
||||||
conn->nwfilterPrivateData = driverState;
|
|
||||||
return VIR_DRV_OPEN_SUCCESS;
|
return VIR_DRV_OPEN_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
nwfilterClose(virConnectPtr conn)
|
nwfilterClose(virConnectPtr conn ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
conn->nwfilterPrivateData = NULL;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -441,7 +437,6 @@ nwfilterClose(virConnectPtr conn)
|
|||||||
static int
|
static int
|
||||||
nwfilterConnectNumOfNWFilters(virConnectPtr conn)
|
nwfilterConnectNumOfNWFilters(virConnectPtr conn)
|
||||||
{
|
{
|
||||||
virNWFilterDriverStatePtr driver = conn->nwfilterPrivateData;
|
|
||||||
size_t i;
|
size_t i;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
@ -466,14 +461,13 @@ nwfilterConnectListNWFilters(virConnectPtr conn,
|
|||||||
char **const names,
|
char **const names,
|
||||||
int nnames)
|
int nnames)
|
||||||
{
|
{
|
||||||
virNWFilterDriverStatePtr driver = conn->nwfilterPrivateData;
|
|
||||||
int got = 0;
|
int got = 0;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
if (virConnectListNWFiltersEnsureACL(conn) < 0)
|
if (virConnectListNWFiltersEnsureACL(conn) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
nwfilterDriverLock(driver);
|
nwfilterDriverLock();
|
||||||
for (i = 0; i < driver->nwfilters.count && got < nnames; i++) {
|
for (i = 0; i < driver->nwfilters.count && got < nnames; i++) {
|
||||||
virNWFilterObjPtr obj = driver->nwfilters.objs[i];
|
virNWFilterObjPtr obj = driver->nwfilters.objs[i];
|
||||||
virNWFilterObjLock(obj);
|
virNWFilterObjLock(obj);
|
||||||
@ -486,11 +480,11 @@ nwfilterConnectListNWFilters(virConnectPtr conn,
|
|||||||
}
|
}
|
||||||
virNWFilterObjUnlock(obj);
|
virNWFilterObjUnlock(obj);
|
||||||
}
|
}
|
||||||
nwfilterDriverUnlock(driver);
|
nwfilterDriverUnlock();
|
||||||
return got;
|
return got;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
nwfilterDriverUnlock(driver);
|
nwfilterDriverUnlock();
|
||||||
for (i = 0; i < got; i++)
|
for (i = 0; i < got; i++)
|
||||||
VIR_FREE(names[i]);
|
VIR_FREE(names[i]);
|
||||||
memset(names, 0, nnames * sizeof(*names));
|
memset(names, 0, nnames * sizeof(*names));
|
||||||
@ -503,7 +497,6 @@ nwfilterConnectListAllNWFilters(virConnectPtr conn,
|
|||||||
virNWFilterPtr **filters,
|
virNWFilterPtr **filters,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
virNWFilterDriverStatePtr driver = conn->nwfilterPrivateData;
|
|
||||||
virNWFilterPtr *tmp_filters = NULL;
|
virNWFilterPtr *tmp_filters = NULL;
|
||||||
int nfilters = 0;
|
int nfilters = 0;
|
||||||
virNWFilterPtr filter = NULL;
|
virNWFilterPtr filter = NULL;
|
||||||
@ -516,7 +509,7 @@ nwfilterConnectListAllNWFilters(virConnectPtr conn,
|
|||||||
if (virConnectListAllNWFiltersEnsureACL(conn) < 0)
|
if (virConnectListAllNWFiltersEnsureACL(conn) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
nwfilterDriverLock(driver);
|
nwfilterDriverLock();
|
||||||
|
|
||||||
if (!filters) {
|
if (!filters) {
|
||||||
ret = driver->nwfilters.count;
|
ret = driver->nwfilters.count;
|
||||||
@ -545,7 +538,7 @@ nwfilterConnectListAllNWFilters(virConnectPtr conn,
|
|||||||
ret = nfilters;
|
ret = nfilters;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
nwfilterDriverUnlock(driver);
|
nwfilterDriverUnlock();
|
||||||
if (tmp_filters) {
|
if (tmp_filters) {
|
||||||
for (i = 0; i < nfilters; i ++)
|
for (i = 0; i < nfilters; i ++)
|
||||||
virObjectUnref(tmp_filters[i]);
|
virObjectUnref(tmp_filters[i]);
|
||||||
@ -559,12 +552,11 @@ static virNWFilterPtr
|
|||||||
nwfilterDefineXML(virConnectPtr conn,
|
nwfilterDefineXML(virConnectPtr conn,
|
||||||
const char *xml)
|
const char *xml)
|
||||||
{
|
{
|
||||||
virNWFilterDriverStatePtr driver = conn->nwfilterPrivateData;
|
|
||||||
virNWFilterDefPtr def;
|
virNWFilterDefPtr def;
|
||||||
virNWFilterObjPtr nwfilter = NULL;
|
virNWFilterObjPtr nwfilter = NULL;
|
||||||
virNWFilterPtr ret = NULL;
|
virNWFilterPtr ret = NULL;
|
||||||
|
|
||||||
nwfilterDriverLock(driver);
|
nwfilterDriverLock();
|
||||||
virNWFilterWriteLockFilterUpdates();
|
virNWFilterWriteLockFilterUpdates();
|
||||||
virNWFilterCallbackDriversLock();
|
virNWFilterCallbackDriversLock();
|
||||||
|
|
||||||
@ -593,7 +585,7 @@ nwfilterDefineXML(virConnectPtr conn,
|
|||||||
|
|
||||||
virNWFilterCallbackDriversUnlock();
|
virNWFilterCallbackDriversUnlock();
|
||||||
virNWFilterUnlockFilterUpdates();
|
virNWFilterUnlockFilterUpdates();
|
||||||
nwfilterDriverUnlock(driver);
|
nwfilterDriverUnlock();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -601,11 +593,10 @@ nwfilterDefineXML(virConnectPtr conn,
|
|||||||
static int
|
static int
|
||||||
nwfilterUndefine(virNWFilterPtr obj)
|
nwfilterUndefine(virNWFilterPtr obj)
|
||||||
{
|
{
|
||||||
virNWFilterDriverStatePtr driver = obj->conn->nwfilterPrivateData;
|
|
||||||
virNWFilterObjPtr nwfilter;
|
virNWFilterObjPtr nwfilter;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
nwfilterDriverLock(driver);
|
nwfilterDriverLock();
|
||||||
virNWFilterWriteLockFilterUpdates();
|
virNWFilterWriteLockFilterUpdates();
|
||||||
virNWFilterCallbackDriversLock();
|
virNWFilterCallbackDriversLock();
|
||||||
|
|
||||||
@ -641,7 +632,7 @@ nwfilterUndefine(virNWFilterPtr obj)
|
|||||||
|
|
||||||
virNWFilterCallbackDriversUnlock();
|
virNWFilterCallbackDriversUnlock();
|
||||||
virNWFilterUnlockFilterUpdates();
|
virNWFilterUnlockFilterUpdates();
|
||||||
nwfilterDriverUnlock(driver);
|
nwfilterDriverUnlock();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -650,15 +641,14 @@ static char *
|
|||||||
nwfilterGetXMLDesc(virNWFilterPtr obj,
|
nwfilterGetXMLDesc(virNWFilterPtr obj,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
virNWFilterDriverStatePtr driver = obj->conn->nwfilterPrivateData;
|
|
||||||
virNWFilterObjPtr nwfilter;
|
virNWFilterObjPtr nwfilter;
|
||||||
char *ret = NULL;
|
char *ret = NULL;
|
||||||
|
|
||||||
virCheckFlags(0, NULL);
|
virCheckFlags(0, NULL);
|
||||||
|
|
||||||
nwfilterDriverLock(driver);
|
nwfilterDriverLock();
|
||||||
nwfilter = virNWFilterObjFindByUUID(&driver->nwfilters, obj->uuid);
|
nwfilter = virNWFilterObjFindByUUID(&driver->nwfilters, obj->uuid);
|
||||||
nwfilterDriverUnlock(driver);
|
nwfilterDriverUnlock();
|
||||||
|
|
||||||
if (!nwfilter) {
|
if (!nwfilter) {
|
||||||
virReportError(VIR_ERR_NO_NWFILTER,
|
virReportError(VIR_ERR_NO_NWFILTER,
|
||||||
@ -679,11 +669,10 @@ nwfilterGetXMLDesc(virNWFilterPtr obj,
|
|||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
nwfilterInstantiateFilter(virConnectPtr conn,
|
nwfilterInstantiateFilter(const unsigned char *vmuuid,
|
||||||
const unsigned char *vmuuid,
|
|
||||||
virDomainNetDefPtr net)
|
virDomainNetDefPtr net)
|
||||||
{
|
{
|
||||||
return virNWFilterInstantiateFilter(conn->nwfilterPrivateData, vmuuid, net);
|
return virNWFilterInstantiateFilter(driver, vmuuid, net);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -285,7 +285,6 @@ static int qemuCreateInBridgePortWithHelper(virQEMUDriverConfigPtr cfg,
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
qemuNetworkIfaceConnect(virDomainDefPtr def,
|
qemuNetworkIfaceConnect(virDomainDefPtr def,
|
||||||
virConnectPtr conn,
|
|
||||||
virQEMUDriverPtr driver,
|
virQEMUDriverPtr driver,
|
||||||
virDomainNetDefPtr net,
|
virDomainNetDefPtr net,
|
||||||
virQEMUCapsPtr qemuCaps,
|
virQEMUCapsPtr qemuCaps,
|
||||||
@ -368,7 +367,7 @@ qemuNetworkIfaceConnect(virDomainDefPtr def,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (net->filter &&
|
if (net->filter &&
|
||||||
virDomainConfNWFilterInstantiate(conn, def->uuid, net) < 0) {
|
virDomainConfNWFilterInstantiate(def->uuid, net) < 0) {
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7420,7 +7419,6 @@ qemuBuildVhostuserCommandLine(virCommandPtr cmd,
|
|||||||
static int
|
static int
|
||||||
qemuBuildInterfaceCommandLine(virCommandPtr cmd,
|
qemuBuildInterfaceCommandLine(virCommandPtr cmd,
|
||||||
virQEMUDriverPtr driver,
|
virQEMUDriverPtr driver,
|
||||||
virConnectPtr conn,
|
|
||||||
virDomainDefPtr def,
|
virDomainDefPtr def,
|
||||||
virDomainNetDefPtr net,
|
virDomainNetDefPtr net,
|
||||||
virQEMUCapsPtr qemuCaps,
|
virQEMUCapsPtr qemuCaps,
|
||||||
@ -7476,7 +7474,7 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd,
|
|||||||
|
|
||||||
memset(tapfd, -1, tapfdSize * sizeof(tapfd[0]));
|
memset(tapfd, -1, tapfdSize * sizeof(tapfd[0]));
|
||||||
|
|
||||||
if (qemuNetworkIfaceConnect(def, conn, driver, net,
|
if (qemuNetworkIfaceConnect(def, driver, net,
|
||||||
qemuCaps, tapfd, &tapfdSize) < 0)
|
qemuCaps, tapfd, &tapfdSize) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
} else if (actualType == VIR_DOMAIN_NET_TYPE_DIRECT) {
|
} else if (actualType == VIR_DOMAIN_NET_TYPE_DIRECT) {
|
||||||
@ -8933,7 +8931,7 @@ qemuBuildCommandLine(virConnectPtr conn,
|
|||||||
else
|
else
|
||||||
vlan = i;
|
vlan = i;
|
||||||
|
|
||||||
if (qemuBuildInterfaceCommandLine(cmd, driver, conn, def, net,
|
if (qemuBuildInterfaceCommandLine(cmd, driver, def, net,
|
||||||
qemuCaps, vlan, bootNet, vmop,
|
qemuCaps, vlan, bootNet, vmop,
|
||||||
standalone) < 0)
|
standalone) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -190,7 +190,6 @@ char *qemuBuildRedirdevDevStr(virDomainDefPtr def,
|
|||||||
virDomainRedirdevDefPtr dev,
|
virDomainRedirdevDefPtr dev,
|
||||||
virQEMUCapsPtr qemuCaps);
|
virQEMUCapsPtr qemuCaps);
|
||||||
int qemuNetworkIfaceConnect(virDomainDefPtr def,
|
int qemuNetworkIfaceConnect(virDomainDefPtr def,
|
||||||
virConnectPtr conn,
|
|
||||||
virQEMUDriverPtr driver,
|
virQEMUDriverPtr driver,
|
||||||
virDomainNetDefPtr net,
|
virDomainNetDefPtr net,
|
||||||
virQEMUCapsPtr qemuCaps,
|
virQEMUCapsPtr qemuCaps,
|
||||||
|
@ -7177,7 +7177,7 @@ qemuDomainUpdateDeviceLive(virConnectPtr conn,
|
|||||||
ret = qemuDomainChangeGraphics(driver, vm, dev->data.graphics);
|
ret = qemuDomainChangeGraphics(driver, vm, dev->data.graphics);
|
||||||
break;
|
break;
|
||||||
case VIR_DOMAIN_DEVICE_NET:
|
case VIR_DOMAIN_DEVICE_NET:
|
||||||
ret = qemuDomainChangeNet(driver, vm, dom, dev);
|
ret = qemuDomainChangeNet(driver, vm, dev);
|
||||||
break;
|
break;
|
||||||
case VIR_DOMAIN_DEVICE_FS:
|
case VIR_DOMAIN_DEVICE_FS:
|
||||||
case VIR_DOMAIN_DEVICE_INPUT:
|
case VIR_DOMAIN_DEVICE_INPUT:
|
||||||
|
@ -914,7 +914,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn,
|
|||||||
if (VIR_ALLOC_N(vhostfd, vhostfdSize) < 0)
|
if (VIR_ALLOC_N(vhostfd, vhostfdSize) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
memset(vhostfd, -1, sizeof(*vhostfd) * vhostfdSize);
|
memset(vhostfd, -1, sizeof(*vhostfd) * vhostfdSize);
|
||||||
if (qemuNetworkIfaceConnect(vm->def, conn, driver, net,
|
if (qemuNetworkIfaceConnect(vm->def, driver, net,
|
||||||
priv->qemuCaps, tapfd, &tapfdSize) < 0)
|
priv->qemuCaps, tapfd, &tapfdSize) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
iface_connected = true;
|
iface_connected = true;
|
||||||
@ -1830,8 +1830,7 @@ qemuDomainChangeNetBridge(virDomainObjPtr vm,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
qemuDomainChangeNetFilter(virConnectPtr conn,
|
qemuDomainChangeNetFilter(virDomainObjPtr vm,
|
||||||
virDomainObjPtr vm,
|
|
||||||
virDomainNetDefPtr olddev,
|
virDomainNetDefPtr olddev,
|
||||||
virDomainNetDefPtr newdev)
|
virDomainNetDefPtr newdev)
|
||||||
{
|
{
|
||||||
@ -1851,7 +1850,7 @@ qemuDomainChangeNetFilter(virConnectPtr conn,
|
|||||||
virDomainConfNWFilterTeardown(olddev);
|
virDomainConfNWFilterTeardown(olddev);
|
||||||
|
|
||||||
if (newdev->filter &&
|
if (newdev->filter &&
|
||||||
virDomainConfNWFilterInstantiate(conn, vm->def->uuid, newdev) < 0) {
|
virDomainConfNWFilterInstantiate(vm->def->uuid, newdev) < 0) {
|
||||||
virErrorPtr errobj;
|
virErrorPtr errobj;
|
||||||
|
|
||||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||||
@ -1859,7 +1858,7 @@ qemuDomainChangeNetFilter(virConnectPtr conn,
|
|||||||
"- attempting to restore old rules"),
|
"- attempting to restore old rules"),
|
||||||
olddev->ifname);
|
olddev->ifname);
|
||||||
errobj = virSaveLastError();
|
errobj = virSaveLastError();
|
||||||
ignore_value(virDomainConfNWFilterInstantiate(conn, vm->def->uuid, olddev));
|
ignore_value(virDomainConfNWFilterInstantiate(vm->def->uuid, olddev));
|
||||||
virSetError(errobj);
|
virSetError(errobj);
|
||||||
virFreeError(errobj);
|
virFreeError(errobj);
|
||||||
return -1;
|
return -1;
|
||||||
@ -1902,7 +1901,6 @@ int qemuDomainChangeNetLinkState(virQEMUDriverPtr driver,
|
|||||||
int
|
int
|
||||||
qemuDomainChangeNet(virQEMUDriverPtr driver,
|
qemuDomainChangeNet(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm,
|
||||||
virDomainPtr dom,
|
|
||||||
virDomainDeviceDefPtr dev)
|
virDomainDeviceDefPtr dev)
|
||||||
{
|
{
|
||||||
virDomainNetDefPtr newdev = dev->data.net;
|
virDomainNetDefPtr newdev = dev->data.net;
|
||||||
@ -2230,7 +2228,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (needFilterChange) {
|
if (needFilterChange) {
|
||||||
if (qemuDomainChangeNetFilter(dom->conn, vm, olddev, newdev) < 0)
|
if (qemuDomainChangeNetFilter(vm, olddev, newdev) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
/* we successfully switched to the new filter, and we've
|
/* we successfully switched to the new filter, and we've
|
||||||
* determined that the rest of newdev is equivalent to olddev,
|
* determined that the rest of newdev is equivalent to olddev,
|
||||||
|
@ -68,7 +68,6 @@ int qemuDomainChangeGraphicsPasswords(virQEMUDriverPtr driver,
|
|||||||
int asyncJob);
|
int asyncJob);
|
||||||
int qemuDomainChangeNet(virQEMUDriverPtr driver,
|
int qemuDomainChangeNet(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm,
|
||||||
virDomainPtr dom,
|
|
||||||
virDomainDeviceDefPtr dev);
|
virDomainDeviceDefPtr dev);
|
||||||
int qemuDomainChangeNetLinkState(virQEMUDriverPtr driver,
|
int qemuDomainChangeNetLinkState(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm,
|
||||||
|
@ -3331,18 +3331,14 @@ qemuProcessNotifyNets(virDomainDefPtr def)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
qemuProcessFiltersInstantiate(virConnectPtr conn,
|
qemuProcessFiltersInstantiate(virDomainDefPtr def)
|
||||||
virDomainDefPtr def)
|
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
if (!conn)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
for (i = 0; i < def->nnets; i++) {
|
for (i = 0; i < def->nnets; i++) {
|
||||||
virDomainNetDefPtr net = def->nets[i];
|
virDomainNetDefPtr net = def->nets[i];
|
||||||
if ((net->filter) && (net->ifname)) {
|
if ((net->filter) && (net->ifname)) {
|
||||||
if (virDomainConfNWFilterInstantiate(conn, def->uuid, net) < 0)
|
if (virDomainConfNWFilterInstantiate(def->uuid, net) < 0)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3800,7 +3796,7 @@ qemuProcessReconnect(void *opaque)
|
|||||||
if (qemuProcessNotifyNets(obj->def) < 0)
|
if (qemuProcessNotifyNets(obj->def) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (qemuProcessFiltersInstantiate(conn, obj->def))
|
if (qemuProcessFiltersInstantiate(obj->def))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (qemuDomainCheckEjectableMedia(driver, obj, QEMU_ASYNC_JOB_NONE) < 0)
|
if (qemuDomainCheckEjectableMedia(driver, obj, QEMU_ASYNC_JOB_NONE) < 0)
|
||||||
|
@ -105,8 +105,7 @@ virCapsPtr umlCapsInit(void)
|
|||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
umlConnectTapDevice(virConnectPtr conn,
|
umlConnectTapDevice(virDomainDefPtr vm,
|
||||||
virDomainDefPtr vm,
|
|
||||||
virDomainNetDefPtr net,
|
virDomainNetDefPtr net,
|
||||||
const char *bridge)
|
const char *bridge)
|
||||||
{
|
{
|
||||||
@ -135,7 +134,7 @@ umlConnectTapDevice(virConnectPtr conn,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (net->filter) {
|
if (net->filter) {
|
||||||
if (virDomainConfNWFilterInstantiate(conn, vm->uuid, net) < 0) {
|
if (virDomainConfNWFilterInstantiate(vm->uuid, net) < 0) {
|
||||||
if (template_ifname)
|
if (template_ifname)
|
||||||
VIR_FREE(net->ifname);
|
VIR_FREE(net->ifname);
|
||||||
goto error;
|
goto error;
|
||||||
@ -217,7 +216,7 @@ umlBuildCommandLineNet(virConnectPtr conn,
|
|||||||
if (bridge == NULL)
|
if (bridge == NULL)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (umlConnectTapDevice(conn, vm, def, bridge) < 0) {
|
if (umlConnectTapDevice(vm, def, bridge) < 0) {
|
||||||
VIR_FREE(bridge);
|
VIR_FREE(bridge);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
@ -228,7 +227,7 @@ umlBuildCommandLineNet(virConnectPtr conn,
|
|||||||
}
|
}
|
||||||
|
|
||||||
case VIR_DOMAIN_NET_TYPE_BRIDGE:
|
case VIR_DOMAIN_NET_TYPE_BRIDGE:
|
||||||
if (umlConnectTapDevice(conn, vm, def,
|
if (umlConnectTapDevice(vm, def,
|
||||||
def->data.bridge.brname) < 0)
|
def->data.bridge.brname) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user