From ccf3463cdc1dc248d17da9a848c2f934d79064c7 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Sun, 3 Sep 2017 16:51:54 +0200 Subject: [PATCH] network: user send()/recv() Also move all functions to network.{c,h}. Signed-off-by: Christian Brauner --- src/lxc/conf.c | 37 ----------------------- src/lxc/network.c | 77 ++++++++++++++++++++++++++++++++++++++++++++--- src/lxc/network.h | 2 ++ src/lxc/start.c | 37 ----------------------- 4 files changed, 75 insertions(+), 78 deletions(-) diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 136d2b807..f9c61e1e4 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -3045,43 +3045,6 @@ static int lxc_send_ttys_to_parent(struct lxc_handler *handler) return ret; } -static int lxc_network_send_name_and_ifindex_to_parent(struct lxc_handler *handler) -{ - struct lxc_list *iterator, *network; - int data_sock = handler->data_sock[0]; - - if (!handler->am_root) - return 0; - - network = &handler->conf->network; - lxc_list_for_each(iterator, network) { - int ret; - struct lxc_netdev *netdev = iterator->elem; - - /* Send network device name in the child's namespace to parent. */ - ret = lxc_abstract_unix_send_credential(data_sock, netdev->name, - IFNAMSIZ); - if (ret < 0) - goto on_error; - - /* Send network device ifindex in the child's namespace to - * parent. - */ - ret = lxc_abstract_unix_send_credential(data_sock, &netdev->ifindex, - sizeof(netdev->ifindex)); - if (ret < 0) - goto on_error; - } - - TRACE("Sent network device names and ifindeces to parent"); - return 0; - -on_error: - close(handler->data_sock[0]); - close(handler->data_sock[1]); - return -1; -} - int lxc_setup(struct lxc_handler *handler) { const char *name = handler->name; diff --git a/src/lxc/network.c b/src/lxc/network.c index 9e9c4191b..caedcbbc1 100644 --- a/src/lxc/network.c +++ b/src/lxc/network.c @@ -2981,8 +2981,7 @@ int lxc_network_send_veth_names_to_child(struct lxc_handler *handler) if (netdev->type != LXC_NET_VETH) continue; - ret = lxc_abstract_unix_send_credential(data_sock, netdev->name, - IFNAMSIZ); + ret = send(data_sock, netdev->name, IFNAMSIZ, 0); if (ret < 0) { close(handler->data_sock[0]); close(handler->data_sock[1]); @@ -3012,8 +3011,7 @@ int lxc_network_recv_veth_names_from_parent(struct lxc_handler *handler) if (netdev->type != LXC_NET_VETH) continue; - ret = lxc_abstract_unix_rcv_credential(data_sock, netdev->name, - IFNAMSIZ); + ret = recv(data_sock, netdev->name, IFNAMSIZ, 0); if (ret < 0) { close(handler->data_sock[0]); close(handler->data_sock[1]); @@ -3026,3 +3024,74 @@ int lxc_network_recv_veth_names_from_parent(struct lxc_handler *handler) return 0; } + +int lxc_network_send_name_and_ifindex_to_parent(struct lxc_handler *handler) +{ + struct lxc_list *iterator, *network; + int data_sock = handler->data_sock[0]; + + if (!handler->am_root) + return 0; + + network = &handler->conf->network; + lxc_list_for_each(iterator, network) { + int ret; + struct lxc_netdev *netdev = iterator->elem; + + /* Send network device name in the child's namespace to parent. */ + ret = send(data_sock, netdev->name, IFNAMSIZ, 0); + if (ret < 0) + goto on_error; + + /* Send network device ifindex in the child's namespace to + * parent. + */ + ret = send(data_sock, &netdev->ifindex, sizeof(netdev->ifindex), 0); + if (ret < 0) + goto on_error; + } + + TRACE("Sent network device names and ifindeces to parent"); + return 0; + +on_error: + close(handler->data_sock[0]); + close(handler->data_sock[1]); + return -1; +} + +int lxc_network_recv_name_and_ifindex_from_child(struct lxc_handler *handler) +{ + struct lxc_list *iterator, *network; + int data_sock = handler->data_sock[1]; + + if (!handler->am_root) + return 0; + + network = &handler->conf->network; + lxc_list_for_each(iterator, network) { + int ret; + struct lxc_netdev *netdev = iterator->elem; + + /* Receive network device name in the child's namespace to + * parent. + */ + ret = recv(data_sock, netdev->name, IFNAMSIZ, 0); + if (ret < 0) + goto on_error; + + /* Receive network device ifindex in the child's namespace to + * parent. + */ + ret = recv(data_sock, &netdev->ifindex, sizeof(netdev->ifindex), 0); + if (ret < 0) + goto on_error; + } + + return 0; + +on_error: + close(handler->data_sock[0]); + close(handler->data_sock[1]); + return -1; +} diff --git a/src/lxc/network.h b/src/lxc/network.h index 5dd48fb2a..ffe318125 100644 --- a/src/lxc/network.h +++ b/src/lxc/network.h @@ -307,5 +307,7 @@ extern int lxc_setup_network_in_child_namespaces(const struct lxc_conf *conf, struct lxc_list *network); extern int lxc_network_send_veth_names_to_child(struct lxc_handler *handler); extern int lxc_network_recv_veth_names_from_parent(struct lxc_handler *handler); +extern int lxc_network_send_name_and_ifindex_to_parent(struct lxc_handler *handler); +extern int lxc_network_recv_name_and_ifindex_from_child(struct lxc_handler *handler); #endif /* __LXC_NETWORK_H */ diff --git a/src/lxc/start.c b/src/lxc/start.c index eb0886e5d..db6172177 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -1122,43 +1122,6 @@ out_error: return -1; } -static int lxc_network_recv_name_and_ifindex_from_child(struct lxc_handler *handler) -{ - struct lxc_list *iterator, *network; - int data_sock = handler->data_sock[1]; - - if (!handler->am_root) - return 0; - - network = &handler->conf->network; - lxc_list_for_each(iterator, network) { - int ret; - struct lxc_netdev *netdev = iterator->elem; - - /* Receive network device name in the child's namespace to - * parent. - */ - ret = lxc_abstract_unix_rcv_credential(data_sock, netdev->name, IFNAMSIZ); - if (ret < 0) - goto on_error; - - /* Receive network device ifindex in the child's namespace to - * parent. - */ - ret = lxc_abstract_unix_rcv_credential(data_sock, &netdev->ifindex, - sizeof(netdev->ifindex)); - if (ret < 0) - goto on_error; - } - - return 0; - -on_error: - close(handler->data_sock[0]); - close(handler->data_sock[1]); - return -1; -} - static int lxc_recv_ttys_from_child(struct lxc_handler *handler) { int i; -- 2.47.2