Unverified Commit 48a97f16 by Christian Brauner Committed by Stéphane Graber

network: use single helper to delete networks

parent b1eee4e4
...@@ -2299,10 +2299,6 @@ bool lxc_delete_network_unpriv(struct lxc_handler *handler) ...@@ -2299,10 +2299,6 @@ bool lxc_delete_network_unpriv(struct lxc_handler *handler)
* \0 * \0
*/ */
char netns_path[6 + LXC_NUMSTRLEN64 + 4 + LXC_NUMSTRLEN64 + 1]; char netns_path[6 + LXC_NUMSTRLEN64 + 4 + LXC_NUMSTRLEN64 + 1];
bool deleted_all = true;
if (handler->am_root)
return true;
*netns_path = '\0'; *netns_path = '\0';
...@@ -2362,7 +2358,6 @@ bool lxc_delete_network_unpriv(struct lxc_handler *handler) ...@@ -2362,7 +2358,6 @@ bool lxc_delete_network_unpriv(struct lxc_handler *handler)
handler->name, netdev, handler->name, netdev,
netns_path); netns_path);
if (ret < 0) { if (ret < 0) {
deleted_all = false;
WARN("Failed to remove port \"%s\" from openvswitch " WARN("Failed to remove port \"%s\" from openvswitch "
"bridge \"%s\"", hostveth, netdev->link); "bridge \"%s\"", hostveth, netdev->link);
continue; continue;
...@@ -2371,7 +2366,7 @@ bool lxc_delete_network_unpriv(struct lxc_handler *handler) ...@@ -2371,7 +2366,7 @@ bool lxc_delete_network_unpriv(struct lxc_handler *handler)
netdev->link); netdev->link);
} }
return deleted_all; return true;
} }
int lxc_create_network_priv(struct lxc_handler *handler) int lxc_create_network_priv(struct lxc_handler *handler)
...@@ -2479,10 +2474,6 @@ bool lxc_delete_network_priv(struct lxc_handler *handler) ...@@ -2479,10 +2474,6 @@ bool lxc_delete_network_priv(struct lxc_handler *handler)
int ret; int ret;
struct lxc_list *iterator; struct lxc_list *iterator;
struct lxc_list *network = &handler->conf->network; struct lxc_list *network = &handler->conf->network;
bool deleted_all = true;
if (!handler->am_root)
return true;
lxc_list_for_each(iterator, network) { lxc_list_for_each(iterator, network) {
char *hostveth = NULL; char *hostveth = NULL;
...@@ -2524,7 +2515,6 @@ bool lxc_delete_network_priv(struct lxc_handler *handler) ...@@ -2524,7 +2515,6 @@ bool lxc_delete_network_priv(struct lxc_handler *handler)
netdev->name[0] != '\0' ? netdev->name : "(null)", netdev->name[0] != '\0' ? netdev->name : "(null)",
netdev->ifindex); netdev->ifindex);
} else if (ret < 0) { } else if (ret < 0) {
deleted_all = false;
WARN("Failed to remove interface \"%s\" with " WARN("Failed to remove interface \"%s\" with "
"index %d: %s", "index %d: %s",
netdev->name[0] != '\0' ? netdev->name : "(null)", netdev->name[0] != '\0' ? netdev->name : "(null)",
...@@ -2550,7 +2540,6 @@ bool lxc_delete_network_priv(struct lxc_handler *handler) ...@@ -2550,7 +2540,6 @@ bool lxc_delete_network_priv(struct lxc_handler *handler)
ret = lxc_netdev_delete_by_name(hostveth); ret = lxc_netdev_delete_by_name(hostveth);
if (ret < 0) { if (ret < 0) {
deleted_all = false;
WARN("Failed to remove interface \"%s\" from \"%s\": %s", WARN("Failed to remove interface \"%s\" from \"%s\": %s",
hostveth, netdev->link, strerror(-ret)); hostveth, netdev->link, strerror(-ret));
continue; continue;
...@@ -2574,7 +2563,7 @@ bool lxc_delete_network_priv(struct lxc_handler *handler) ...@@ -2574,7 +2563,7 @@ bool lxc_delete_network_priv(struct lxc_handler *handler)
netdev->priv.veth_attr.veth1[0] = '\0'; netdev->priv.veth_attr.veth1[0] = '\0';
} }
return deleted_all; return true;
} }
int lxc_requests_empty_network(struct lxc_handler *handler) 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) ...@@ -3094,3 +3083,17 @@ int lxc_network_recv_name_and_ifindex_from_child(struct lxc_handler *handler)
return 0; 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");
}
...@@ -266,8 +266,7 @@ extern int lxc_network_move_created_netdev_priv(const char *lxcpath, ...@@ -266,8 +266,7 @@ extern int lxc_network_move_created_netdev_priv(const char *lxcpath,
char *lxcname, char *lxcname,
struct lxc_list *network, struct lxc_list *network,
pid_t pid); pid_t pid);
extern bool lxc_delete_network_priv(struct lxc_handler *handler); extern void lxc_delete_network(struct lxc_handler *handler);
extern bool lxc_delete_network_unpriv(struct lxc_handler *handler);
extern int lxc_find_gateway_addresses(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, extern int lxc_create_network_unpriv(const char *lxcpath, char *lxcname,
struct lxc_list *network, pid_t pid); struct lxc_list *network, pid_t pid);
......
...@@ -1395,14 +1395,8 @@ out_delete_net: ...@@ -1395,14 +1395,8 @@ out_delete_net:
if (cgroups_connected) if (cgroups_connected)
cgroup_disconnect(); cgroup_disconnect();
if (handler->clone_flags & CLONE_NEWNET) { if (handler->clone_flags & CLONE_NEWNET)
DEBUG("Tearing down network devices"); lxc_delete_network(handler);
if (!lxc_delete_network_priv(handler))
DEBUG("Failed tearing down network devices");
if (!lxc_delete_network_unpriv(handler))
DEBUG("Failed tearing down network devices");
}
out_abort: out_abort:
lxc_abort(name, handler); lxc_abort(name, handler);
...@@ -1513,17 +1507,7 @@ int __lxc_start(const char *name, struct lxc_handler *handler, ...@@ -1513,17 +1507,7 @@ int __lxc_start(const char *name, struct lxc_handler *handler,
err = lxc_error_set_and_log(handler->pid, status); err = lxc_error_set_and_log(handler->pid, status);
out_fini: out_fini:
DEBUG("Tearing down network devices"); lxc_delete_network(handler);
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;
}
out_detach_blockdev: out_detach_blockdev:
detach_block_device(handler->conf); detach_block_device(handler->conf);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment