}
}
+void
+virNWFilterUnRegisterCallbackDriver(virNWFilterCallbackDriverPtr cbd)
+{
+ int i = 0;
+
+ while (i < nCallbackDriver && callbackDrvArray[i] != cbd)
+ i++;
+
+ if (i < nCallbackDriver) {
+ memmove(&callbackDrvArray[i], &callbackDrvArray[i+1],
+ (nCallbackDriver - i - 1) * sizeof(callbackDrvArray[i]));
+ callbackDrvArray[i] = 0;
+ nCallbackDriver--;
+ }
+}
+
void
virNWFilterCallbackDriversLock(void)
{
};
void virNWFilterRegisterCallbackDriver(virNWFilterCallbackDriverPtr);
+void virNWFilterUnRegisterCallbackDriver(virNWFilterCallbackDriverPtr);
void virNWFilterCallbackDriversLock(void);
void virNWFilterCallbackDriversUnlock(void);
virNWFilterRuleDirectionTypeToString;
virNWFilterRuleProtocolTypeToString;
virNWFilterTestUnassignDef;
+virNWFilterUnRegisterCallbackDriver;
virNWFilterUnlockFilterUpdates;
static int lxcShutdown(void);
virLXCDriverPtr lxc_driver = NULL;
+/* callbacks for nwfilter */
+static int
+lxcVMFilterRebuild(virConnectPtr conn ATTRIBUTE_UNUSED,
+ virHashIterator iter, void *data)
+{
+ virHashForEach(lxc_driver->domains.objs, iter, data);
+
+ return 0;
+}
+
+static void
+lxcVMDriverLock(void)
+{
+ lxcDriverLock(lxc_driver);
+}
+
+static void
+lxcVMDriverUnlock(void)
+{
+ lxcDriverUnlock(lxc_driver);
+}
+
+static virNWFilterCallbackDriver lxcCallbackDriver = {
+ .name = "LXC",
+ .vmFilterRebuild = lxcVMFilterRebuild,
+ .vmDriverLock = lxcVMDriverLock,
+ .vmDriverUnlock = lxcVMDriverUnlock,
+};
+
/* Functions */
static virDrvOpenStatus lxcOpen(virConnectPtr conn,
virLXCProcessAutostartAll(lxc_driver);
+ virNWFilterRegisterCallbackDriver(&lxcCallbackDriver);
return 0;
cleanup:
return -1;
lxcDriverLock(lxc_driver);
+ virNWFilterUnRegisterCallbackDriver(&lxcCallbackDriver);
virDomainObjListDeinit(&lxc_driver->domains);
virDomainEventStateFree(lxc_driver->domainEventState);
return ret;
}
-static int
-lxcVMFilterRebuild(virConnectPtr conn ATTRIBUTE_UNUSED,
- virHashIterator iter, void *data)
-{
- virHashForEach(lxc_driver->domains.objs, iter, data);
-
- return 0;
-}
-
-static void
-lxcVMDriverLock(void)
-{
- lxcDriverLock(lxc_driver);
-}
-
-static void
-lxcVMDriverUnlock(void)
-{
- lxcDriverUnlock(lxc_driver);
-}
-
-static virNWFilterCallbackDriver lxcCallbackDriver = {
- .name = "LXC",
- .vmFilterRebuild = lxcVMFilterRebuild,
- .vmDriverLock = lxcVMDriverLock,
- .vmDriverUnlock = lxcVMDriverUnlock,
-};
-
/* Function Tables */
static virDriver lxcDriver = {
.no = VIR_DRV_LXC,
{
virRegisterDriver(&lxcDriver);
virRegisterStateDriver(&lxcStateDriver);
- virNWFilterRegisterCallbackDriver(&lxcCallbackDriver);
return 0;
}
struct qemud_driver *qemu_driver = NULL;
+static void
+qemuVMDriverLock(void) {
+ qemuDriverLock(qemu_driver);
+};
+
+
+static void
+qemuVMDriverUnlock(void) {
+ qemuDriverUnlock(qemu_driver);
+};
+
+
+static int
+qemuVMFilterRebuild(virConnectPtr conn ATTRIBUTE_UNUSED,
+ virHashIterator iter, void *data)
+{
+ virHashForEach(qemu_driver->domains.objs, iter, data);
+
+ return 0;
+}
+
+static virNWFilterCallbackDriver qemuCallbackDriver = {
+ .name = QEMU_DRIVER_NAME,
+ .vmFilterRebuild = qemuVMFilterRebuild,
+ .vmDriverLock = qemuVMDriverLock,
+ .vmDriverUnlock = qemuVMDriverUnlock,
+};
+
+
struct qemuAutostartData {
struct qemud_driver *driver;
virConnectPtr conn;
if (conn)
virConnectClose(conn);
+ virNWFilterRegisterCallbackDriver(&qemuCallbackDriver);
return 0;
out_of_memory:
return -1;
qemuDriverLock(qemu_driver);
+ virNWFilterUnRegisterCallbackDriver(&qemuCallbackDriver);
pciDeviceListFree(qemu_driver->activePciHostdevs);
pciDeviceListFree(qemu_driver->inactivePciHostdevs);
usbDeviceListFree(qemu_driver->activeUsbHostdevs);
.active = qemudActive,
};
-static void
-qemuVMDriverLock(void) {
- qemuDriverLock(qemu_driver);
-};
-
-
-static void
-qemuVMDriverUnlock(void) {
- qemuDriverUnlock(qemu_driver);
-};
-
-
-static int
-qemuVMFilterRebuild(virConnectPtr conn ATTRIBUTE_UNUSED,
- virHashIterator iter, void *data)
-{
- virHashForEach(qemu_driver->domains.objs, iter, data);
-
- return 0;
-}
-
-static virNWFilterCallbackDriver qemuCallbackDriver = {
- .name = QEMU_DRIVER_NAME,
- .vmFilterRebuild = qemuVMFilterRebuild,
- .vmDriverLock = qemuVMDriverLock,
- .vmDriverUnlock = qemuVMDriverUnlock,
-};
-
int qemuRegister(void) {
virRegisterDriver(&qemuDriver);
virRegisterStateDriver(&qemuStateDriver);
- virNWFilterRegisterCallbackDriver(&qemuCallbackDriver);
return 0;
}
static struct uml_driver *uml_driver = NULL;
+static int
+umlVMFilterRebuild(virConnectPtr conn ATTRIBUTE_UNUSED,
+ virHashIterator iter, void *data)
+{
+ virHashForEach(uml_driver->domains.objs, iter, data);
+
+ return 0;
+}
+
+static void
+umlVMDriverLock(void)
+{
+ umlDriverLock(uml_driver);
+}
+
+static void
+umlVMDriverUnlock(void)
+{
+ umlDriverUnlock(uml_driver);
+}
+
+static virNWFilterCallbackDriver umlCallbackDriver = {
+ .name = "UML",
+ .vmFilterRebuild = umlVMFilterRebuild,
+ .vmDriverLock = umlVMDriverLock,
+ .vmDriverUnlock = umlVMDriverUnlock,
+};
+
struct umlAutostartData {
struct uml_driver *driver;
virConnectPtr conn;
VIR_FREE(userdir);
+ virNWFilterRegisterCallbackDriver(¨CallbackDriver);
return 0;
out_of_memory:
return -1;
umlDriverLock(uml_driver);
+ virNWFilterRegisterCallbackDriver(¨CallbackDriver);
if (uml_driver->inotifyWatch != -1)
virEventRemoveHandle(uml_driver->inotifyWatch);
VIR_FORCE_CLOSE(uml_driver->inotifyFD);
.nodeSuspendForDuration = nodeSuspendForDuration, /* 0.9.8 */
};
-static int
-umlVMFilterRebuild(virConnectPtr conn ATTRIBUTE_UNUSED,
- virHashIterator iter, void *data)
-{
- virHashForEach(uml_driver->domains.objs, iter, data);
-
- return 0;
-}
-
static virStateDriver umlStateDriver = {
.name = "UML",
.initialize = umlStartup,
.active = umlActive,
};
-static void
-umlVMDriverLock(void)
-{
- umlDriverLock(uml_driver);
-}
-
-static void
-umlVMDriverUnlock(void)
-{
- umlDriverUnlock(uml_driver);
-}
-
-static virNWFilterCallbackDriver umlCallbackDriver = {
- .name = "UML",
- .vmFilterRebuild = umlVMFilterRebuild,
- .vmDriverLock = umlVMDriverLock,
- .vmDriverUnlock = umlVMDriverUnlock,
-};
-
int umlRegister(void) {
virRegisterDriver(¨Driver);
virRegisterStateDriver(¨StateDriver);
- virNWFilterRegisterCallbackDriver(¨CallbackDriver);
return 0;
}