network: user send()/recv()

Also move all functions to network.{c,h}. Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>
parent 9ffa2966
...@@ -3045,43 +3045,6 @@ static int lxc_send_ttys_to_parent(struct lxc_handler *handler) ...@@ -3045,43 +3045,6 @@ static int lxc_send_ttys_to_parent(struct lxc_handler *handler)
return ret; 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) int lxc_setup(struct lxc_handler *handler)
{ {
const char *name = handler->name; const char *name = handler->name;
......
...@@ -2981,8 +2981,7 @@ int lxc_network_send_veth_names_to_child(struct lxc_handler *handler) ...@@ -2981,8 +2981,7 @@ int lxc_network_send_veth_names_to_child(struct lxc_handler *handler)
if (netdev->type != LXC_NET_VETH) if (netdev->type != LXC_NET_VETH)
continue; continue;
ret = lxc_abstract_unix_send_credential(data_sock, netdev->name, ret = send(data_sock, netdev->name, IFNAMSIZ, 0);
IFNAMSIZ);
if (ret < 0) { if (ret < 0) {
close(handler->data_sock[0]); close(handler->data_sock[0]);
close(handler->data_sock[1]); close(handler->data_sock[1]);
...@@ -3012,8 +3011,7 @@ int lxc_network_recv_veth_names_from_parent(struct lxc_handler *handler) ...@@ -3012,8 +3011,7 @@ int lxc_network_recv_veth_names_from_parent(struct lxc_handler *handler)
if (netdev->type != LXC_NET_VETH) if (netdev->type != LXC_NET_VETH)
continue; continue;
ret = lxc_abstract_unix_rcv_credential(data_sock, netdev->name, ret = recv(data_sock, netdev->name, IFNAMSIZ, 0);
IFNAMSIZ);
if (ret < 0) { if (ret < 0) {
close(handler->data_sock[0]); close(handler->data_sock[0]);
close(handler->data_sock[1]); close(handler->data_sock[1]);
...@@ -3026,3 +3024,74 @@ int lxc_network_recv_veth_names_from_parent(struct lxc_handler *handler) ...@@ -3026,3 +3024,74 @@ int lxc_network_recv_veth_names_from_parent(struct lxc_handler *handler)
return 0; 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;
}
...@@ -307,5 +307,7 @@ extern int lxc_setup_network_in_child_namespaces(const struct lxc_conf *conf, ...@@ -307,5 +307,7 @@ extern int lxc_setup_network_in_child_namespaces(const struct lxc_conf *conf,
struct lxc_list *network); struct lxc_list *network);
extern int lxc_network_send_veth_names_to_child(struct lxc_handler *handler); 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_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 */ #endif /* __LXC_NETWORK_H */
...@@ -1122,43 +1122,6 @@ out_error: ...@@ -1122,43 +1122,6 @@ out_error:
return -1; 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) static int lxc_recv_ttys_from_child(struct lxc_handler *handler)
{ {
int i; int i;
......
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