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-3.0.0.beta1~226^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bb84beda1ef3c54c1e092c920ed3fbef3377eaf2;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 4469fdda8..ca9123b63 100644 --- a/src/lxc/network.c +++ b/src/lxc/network.c @@ -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"); +} diff --git a/src/lxc/network.h b/src/lxc/network.h index 833bfe6f3..3bacdc2b0 100644 --- a/src/lxc/network.h +++ b/src/lxc/network.h @@ -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); diff --git a/src/lxc/start.c b/src/lxc/start.c index b838e579d..a557817c2 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -1400,14 +1400,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); @@ -1518,17 +1512,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);