From: Christian Brauner Date: Sun, 1 Oct 2017 05:12:51 +0000 (+0200) Subject: network: use single helper to delete networks X-Git-Tag: lxc-2.0.9~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9e69b800dab4f531d903dd14ce10b050821c7e76;p=thirdparty%2Flxc.git network: use single helper to delete networks Signed-off-by: Christian Brauner --- diff --git a/src/lxc/network.c b/src/lxc/network.c index 121230762..724bcbb46 100644 --- a/src/lxc/network.c +++ b/src/lxc/network.c @@ -2271,10 +2271,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'; @@ -2334,7 +2330,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; @@ -2343,7 +2338,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) @@ -2451,10 +2446,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; @@ -2496,7 +2487,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)", @@ -2522,7 +2512,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; @@ -2546,7 +2535,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) @@ -3066,3 +3055,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"); +} diff --git a/src/lxc/network.h b/src/lxc/network.h index c745bfd73..ef89e6fc7 100644 --- a/src/lxc/network.h +++ b/src/lxc/network.h @@ -296,8 +296,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); diff --git a/src/lxc/start.c b/src/lxc/start.c index 73bb82a3d..b3587acf6 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -1455,14 +1455,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); @@ -1584,17 +1578,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);