]> xenbits.xensource.com Git - libvirt.git/commitdiff
Add nwfilter support to UML driver
authorSoren Hansen <soren@linux2go.dk>
Tue, 7 Sep 2010 08:19:56 +0000 (10:19 +0200)
committerEric Blake <eblake@redhat.com>
Thu, 9 Sep 2010 21:08:36 +0000 (15:08 -0600)
Extend user-mode-linux driver to support nwfilter.

Signed-off-by: Soren Hansen <soren@linux2go.dk>
src/uml/uml_conf.c
src/uml/uml_driver.c

index 4906192f2d690dafcdd6d9e0686de2961efed3bf..f2eaef59c6a0fc234bf62af290e8a306e7b9abb3 100644 (file)
@@ -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 */
index 0a5c8291b11a8ae70c78117790ed212a56ba8916..40345d58034861962beacf8b85faa9e4e10bfb2a 100644 (file)
@@ -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) {