]> xenbits.xensource.com Git - libvirt.git/commitdiff
Improve error message in LXC startup with network is not active
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 30 Jul 2012 10:26:51 +0000 (11:26 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 30 Jul 2012 12:09:57 +0000 (13:09 +0100)
If an LXC container is using a virtual network and that network
is not active, currently the user gets a rather unhelpful
error message about tap device setup failure. Add an explicit
check for whether the network is active, in exactly the same
way as the QEMU driver

src/lxc/lxc_process.c

index b42f4a04de9866e2d47728cc5763691be292b766..65b463fc1613e9c2eda2f958e3d45bda7758d3b1 100644 (file)
@@ -452,14 +452,37 @@ static int virLXCProcessSetupInterfaces(virConnectPtr conn,
         case VIR_DOMAIN_NET_TYPE_NETWORK: {
             virNetworkPtr network;
             char *brname = NULL;
+            bool fail = false;
+            int active;
+            virErrorPtr errobj;
 
             if (!(network = virNetworkLookupByName(conn,
                                                    def->nets[i]->data.network.name)))
                 goto cleanup;
 
-            brname = virNetworkGetBridgeName(network);
+            active = virNetworkIsActive(network);
+            if (active != 1) {
+                fail = true;
+                if (active == 0)
+                    virReportError(VIR_ERR_INTERNAL_ERROR,
+                                   _("Network '%s' is not active."),
+                                   def->nets[i]->data.network.name);
+                goto cleanup;
+            }
+
+            if (!fail) {
+                brname = virNetworkGetBridgeName(network);
+                if (brname == NULL)
+                    fail = true;
+            }
+
+            /* Make sure any above failure is preserved */
+            errobj = virSaveLastError();
             virNetworkFree(network);
-            if (!brname)
+            virSetError(errobj);
+            virFreeError(errobj);
+
+            if (fail)
                 goto cleanup;
 
             if (virLXCProcessSetupInterfaceBridged(conn,