]> git.proxmox.com Git - mirror_lxc.git/commitdiff
network: use single helper to delete networks
authorChristian Brauner <christian.brauner@ubuntu.com>
Sun, 1 Oct 2017 05:12:51 +0000 (07:12 +0200)
committerStéphane Graber <stgraber@ubuntu.com>
Wed, 4 Oct 2017 22:56:11 +0000 (18:56 -0400)
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/network.c
src/lxc/network.h
src/lxc/start.c

index 4469fdda8bf0fea4cca3122ba4b7feedea285ee3..ca9123b637a99aff89adb1c9eb113d26d23bc7e4 100644 (file)
@@ -2299,10 +2299,6 @@ bool lxc_delete_network_unpriv(struct lxc_handler *handler)
         * \0
         */
        char netns_path[6 + LXC_NUMSTRLEN64 + 4 + LXC_NUMSTRLEN64 + 1];
-       bool deleted_all = true;
-
-       if (handler->am_root)
-               return true;
 
        *netns_path = '\0';
 
@@ -2362,7 +2358,6 @@ bool lxc_delete_network_unpriv(struct lxc_handler *handler)
                                                     handler->name, netdev,
                                                     netns_path);
                if (ret < 0) {
-                       deleted_all = false;
                        WARN("Failed to remove port \"%s\" from openvswitch "
                             "bridge \"%s\"", hostveth, netdev->link);
                        continue;
@@ -2371,7 +2366,7 @@ bool lxc_delete_network_unpriv(struct lxc_handler *handler)
                     netdev->link);
        }
 
-       return deleted_all;
+       return true;
 }
 
 int lxc_create_network_priv(struct lxc_handler *handler)
@@ -2479,10 +2474,6 @@ bool lxc_delete_network_priv(struct lxc_handler *handler)
        int ret;
        struct lxc_list *iterator;
        struct lxc_list *network = &handler->conf->network;
-       bool deleted_all = true;
-
-       if (!handler->am_root)
-               return true;
 
        lxc_list_for_each(iterator, network) {
                char *hostveth = NULL;
@@ -2524,7 +2515,6 @@ bool lxc_delete_network_priv(struct lxc_handler *handler)
                                        netdev->name[0] != '\0' ? netdev->name : "(null)",
                                        netdev->ifindex);
                } else if (ret < 0) {
-                       deleted_all = false;
                        WARN("Failed to remove interface \"%s\" with "
                                        "index %d: %s",
                                        netdev->name[0] != '\0' ? netdev->name : "(null)",
@@ -2550,7 +2540,6 @@ bool lxc_delete_network_priv(struct lxc_handler *handler)
 
                ret = lxc_netdev_delete_by_name(hostveth);
                if (ret < 0) {
-                       deleted_all = false;
                        WARN("Failed to remove interface \"%s\" from \"%s\": %s",
                             hostveth, netdev->link, strerror(-ret));
                        continue;
@@ -2574,7 +2563,7 @@ bool lxc_delete_network_priv(struct lxc_handler *handler)
                netdev->priv.veth_attr.veth1[0] = '\0';
        }
 
-       return deleted_all;
+       return true;
 }
 
 int lxc_requests_empty_network(struct lxc_handler *handler)
@@ -3094,3 +3083,17 @@ int lxc_network_recv_name_and_ifindex_from_child(struct lxc_handler *handler)
 
        return 0;
 }
+
+void lxc_delete_network(struct lxc_handler *handler)
+{
+       bool bret;
+
+       if (handler->am_root)
+               bret = lxc_delete_network_priv(handler);
+       else
+               bret = lxc_delete_network_unpriv(handler);
+       if (!bret)
+               DEBUG("Failed to delete network devices");
+       else
+               DEBUG("Deleted network devices");
+}
index 833bfe6f3639f244254604b42c3b500da165ffc2..3bacdc2b0b2c32941f63a2439dceb3fc528a28a4 100644 (file)
@@ -266,8 +266,7 @@ extern int lxc_network_move_created_netdev_priv(const char *lxcpath,
                                                char *lxcname,
                                                struct lxc_list *network,
                                                pid_t pid);
-extern bool lxc_delete_network_priv(struct lxc_handler *handler);
-extern bool lxc_delete_network_unpriv(struct lxc_handler *handler);
+extern void lxc_delete_network(struct lxc_handler *handler);
 extern int lxc_find_gateway_addresses(struct lxc_handler *handler);
 extern int lxc_create_network_unpriv(const char *lxcpath, char *lxcname,
                                     struct lxc_list *network, pid_t pid);
index 33b30cb52921805cd1a869eadefe81a2cc178216..a6a40c727f48d2e1aea4324da0a12a19e7d725bd 100644 (file)
@@ -1395,14 +1395,8 @@ out_delete_net:
        if (cgroups_connected)
                cgroup_disconnect();
 
-       if (handler->clone_flags & CLONE_NEWNET) {
-               DEBUG("Tearing down network devices");
-               if (!lxc_delete_network_priv(handler))
-                       DEBUG("Failed tearing down network devices");
-
-               if (!lxc_delete_network_unpriv(handler))
-                       DEBUG("Failed tearing down network devices");
-       }
+       if (handler->clone_flags & CLONE_NEWNET)
+               lxc_delete_network(handler);
 
 out_abort:
        lxc_abort(name, handler);
@@ -1513,17 +1507,7 @@ int __lxc_start(const char *name, struct lxc_handler *handler,
        err =  lxc_error_set_and_log(handler->pid, status);
 
 out_fini:
-       DEBUG("Tearing down network devices");
-       if (!lxc_delete_network_priv(handler))
-               DEBUG("Failed tearing down network devices");
-
-       if (!lxc_delete_network_unpriv(handler))
-               DEBUG("Failed tearing down network devices");
-
-       if (handler->netnsfd >= 0) {
-               close(handler->netnsfd);
-               handler->netnsfd = -1;
-       }
+       lxc_delete_network(handler);
 
 out_detach_blockdev:
        detach_block_device(handler->conf);