From: David Ahern Update rdma dev to work like ip link where the netns can be a name or a pid. Update dev_set_netns to use netns_get_fd instead of open coding use of NETNS_RUN_DIR. If netns_get_fd fails, try netns_get_fd_pid. Signed-off-by: David Ahern --- rdma/dev.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/rdma/dev.c b/rdma/dev.c index fd60c1a0..f9b782eb 100644 --- a/rdma/dev.c +++ b/rdma/dev.c @@ -6,6 +6,7 @@ #include #include "rdma.h" +#include "namespace.h" static int dev_help(struct rd *rd) { @@ -13,7 +14,7 @@ static int dev_help(struct rd *rd) pr_out(" %s dev add DEVNAME type TYPE parent PARENT_DEVNAME\n", rd->filename); pr_out(" %s dev delete DEVNAME\n", rd->filename); pr_out(" %s dev set [DEV] name DEVNAME\n", rd->filename); - pr_out(" %s dev set [DEV] netns NSNAME\n", rd->filename); + pr_out(" %s dev set [DEV] netns { NSNAME | PID }\n", rd->filename); pr_out(" %s dev set [DEV] adaptive-moderation [on|off]\n", rd->filename); return 0; } @@ -311,9 +312,9 @@ static int dev_set_name(struct rd *rd) static int dev_set_netns(struct rd *rd) { - char *netns_path; + char *arg = rd_argv(rd); + int netns, pid; uint32_t seq; - int netns; int ret; if (rd_no_arg(rd)) { @@ -321,10 +322,11 @@ static int dev_set_netns(struct rd *rd) return -EINVAL; } - if (asprintf(&netns_path, "%s/%s", NETNS_RUN_DIR, rd_argv(rd)) < 0) - return -ENOMEM; + /* try by name then by pid */ + netns = netns_get_fd(arg); + if (netns < 0) + netns = netns_get_fd_pid(arg); - netns = open(netns_path, O_RDONLY | O_CLOEXEC); if (netns < 0) { fprintf(stderr, "Cannot open network namespace \"%s\": %s\n", rd_argv(rd), strerror(errno)); @@ -339,7 +341,6 @@ static int dev_set_netns(struct rd *rd) ret = rd_sendrecv_msg(rd, seq); close(netns); done: - free(netns_path); return ret; } -- 2.50.1 (Apple Git-155)