From aa1c5628fd67631894b91bfb339a912a39a24994 Mon Sep 17 00:00:00 2001 From: Cong Wang Date: Tue, 3 Dec 2013 20:16:08 -0800 Subject: [PATCH] add a parameter to rtnl_link_veth_add() Usually the peer of a veth device is moved to a new netns after creation, so add a pid parameter to rtnl_link_veth_add(). Signed-off-by: Cong Wang Signed-off-by: Thomas Graf --- include/netlink/route/link/veth.h | 3 ++- lib/route/link/veth.c | 7 +++++-- tests/test-create-veth.c | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/include/netlink/route/link/veth.h b/include/netlink/route/link/veth.h index 7ca7d32..35c2345 100644 --- a/include/netlink/route/link/veth.h +++ b/include/netlink/route/link/veth.h @@ -14,6 +14,7 @@ #include #include +#include #ifdef __cplusplus extern "C" { @@ -26,7 +27,7 @@ extern int rtnl_link_is_veth(struct rtnl_link *); extern struct rtnl_link *rtnl_link_veth_get_peer(struct rtnl_link *); extern int rtnl_link_veth_add(struct nl_sock *sock, const char *name, - const char *peer); + const char *peer, pid_t pid); #ifdef __cplusplus } diff --git a/lib/route/link/veth.c b/lib/route/link/veth.c index dba1294..d5c1926 100644 --- a/lib/route/link/veth.c +++ b/lib/route/link/veth.c @@ -236,15 +236,17 @@ int rtnl_link_is_veth(struct rtnl_link *link) * @arg sock netlink socket * @arg name name of the veth device or NULL * @arg peer_name name of its peer or NULL + * @arg pid pid of the process in the new netns * - * Creates a new veth device pair in the kernel. If no name is + * Creates a new veth device pair in the kernel and move the peer + * to the network namespace where the process is. If no name is * provided, the kernel will automatically pick a name of the * form "veth%d" (e.g. veth0, veth1, etc.) * * @return 0 on success or a negative error code */ int rtnl_link_veth_add(struct nl_sock *sock, const char *name, - const char *peer_name) + const char *peer_name, pid_t pid) { struct rtnl_link *link, *peer; int err = -NLE_NOMEM; @@ -258,6 +260,7 @@ int rtnl_link_veth_add(struct nl_sock *sock, const char *name, rtnl_link_set_name(peer, peer_name); } + rtnl_link_set_ns_pid(peer, pid); err = rtnl_link_add(sock, link, NLM_F_CREATE); rtnl_link_put(peer); diff --git a/tests/test-create-veth.c b/tests/test-create-veth.c index 038353f..c0d9145 100644 --- a/tests/test-create-veth.c +++ b/tests/test-create-veth.c @@ -16,7 +16,7 @@ int main(int argc, char *argv[]) } #if 0 - rtnl_link_veth_add(sk, "veth2", "veth3"); + rtnl_link_veth_add(sk, "veth2", "veth3", getpid()); #else link = rtnl_link_veth_alloc(); if (!link) { -- 2.40.0