Extend user-mode-linux driver to support nwfilter. Signed-off-by: Soren Hansen <soren@xxxxxxxxxxx> --- src/uml/uml_conf.c | 16 +++++++++++++--- src/uml/uml_driver.c | 8 +++++++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/uml/uml_conf.c b/src/uml/uml_conf.c index 4906192..f2eaef5 100644 --- a/src/uml/uml_conf.c +++ b/src/uml/uml_conf.c @@ -46,6 +46,7 @@ #include "verify.h" #include "bridge.h" #include "logging.h" +#include "domain_nwfilter.h" #define VIR_FROM_THIS VIR_FROM_UML @@ -108,7 +109,8 @@ virCapsPtr umlCapsInit(void) { static int -umlConnectTapDevice(virDomainNetDefPtr net, +umlConnectTapDevice(virConnectPtr conn, + virDomainNetDefPtr net, const char *bridge) { brControl *brctl = NULL; @@ -164,6 +166,14 @@ umlConnectTapDevice(virDomainNetDefPtr net, goto error; } + if (net->filter) { + if (virDomainConfNWFilterInstantiate(conn, net)) { + if (template_ifname) + VIR_FREE(net->ifname); + goto error; + } + } + brShutdown(brctl); return 0; @@ -239,7 +249,7 @@ umlBuildCommandLineNet(virConnectPtr conn, goto error; } - if (umlConnectTapDevice(def, bridge) < 0) { + if (umlConnectTapDevice(conn, def, bridge) < 0) { VIR_FREE(bridge); goto error; } @@ -250,7 +260,7 @@ umlBuildCommandLineNet(virConnectPtr conn, } case VIR_DOMAIN_NET_TYPE_BRIDGE: - if (umlConnectTapDevice(def, def->data.bridge.brname) < 0) + if (umlConnectTapDevice(conn, def, def->data.bridge.brname) < 0) goto error; /* ethNNN=tuntap,tapname,macaddr,gateway */ diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index 0a5c829..40345d5 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -58,6 +58,7 @@ #include "domain_conf.h" #include "datatypes.h" #include "logging.h" +#include "domain_nwfilter.h" #define VIR_FROM_THIS VIR_FROM_UML @@ -876,6 +877,7 @@ static int umlStartVMDaemon(virConnectPtr conn, if (umlBuildCommandLine(conn, driver, vm, &keepfd, &argv, &progenv) < 0) { close(logfd); + virDomainConfVMNWFilterTeardown(vm); umlCleanupTapDevices(conn, vm); return -1; } @@ -928,8 +930,11 @@ static int umlStartVMDaemon(virConnectPtr conn, VIR_FREE(progenv[i]); VIR_FREE(progenv); - if (ret < 0) + if (ret < 0) { + virDomainConfVMNWFilterTeardown(vm); umlCleanupTapDevices(conn, vm); + } + /* NB we don't mark it running here - we do that async with inotify */ @@ -965,6 +970,7 @@ static void umlShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED, vm->def->id = -1; vm->state = VIR_DOMAIN_SHUTOFF; + virDomainConfVMNWFilterTeardown(vm); umlCleanupTapDevices(conn, vm); if (vm->newDef) { -- 1.7.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list