[libvirt] [PATCH] Add nwfilter support to UML driver

Soren Hansen soren at linux2go.dk
Tue Sep 7 08:19:56 UTC 2010


Extend user-mode-linux driver to support nwfilter.

Signed-off-by: Soren Hansen <soren at linux2go.dk>
---
 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




More information about the libvir-list mailing list