ip: Move of set_netnsid_from_name() to namespace.c

Move set_netnsid_from_name() outside for reuse, like what's done for
netns_id_from_name().

Signed-off-by: Xiao Liang <shaw.leon@gmail.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
This commit is contained in:
Xiao Liang
2024-10-11 16:01:08 +08:00
committed by Stephen Hemminger
parent bea332466d
commit 18bbd74b34
5 changed files with 35 additions and 30 deletions

View File

@@ -60,6 +60,8 @@ struct netns_func {
};
int netns_id_from_name(struct rtnl_handle *rtnl, const char *name);
int set_netns_id_from_name(struct rtnl_handle *rtnl, const char *name,
int nsid);
char *netns_name_from_id(int32_t id);
#endif /* __NAMESPACE_H__ */

View File

@@ -63,8 +63,6 @@ void netns_nsid_socket_init(void);
int print_nsid(struct nlmsghdr *n, void *arg);
int ipstats_print(struct nlmsghdr *n, void *arg);
char *get_name_from_nsid(int nsid);
int get_netnsid_from_name(const char *name);
int set_netnsid_from_name(const char *name, int nsid);
int do_ipaddr(int argc, char **argv);
int do_ipaddrlabel(int argc, char **argv);
int do_iproute(int argc, char **argv);

View File

@@ -819,11 +819,11 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req, char **type)
NEXT_ARG();
if (link_netnsid != -1)
duparg("link-netns/link-netnsid", *argv);
link_netnsid = get_netnsid_from_name(*argv);
link_netnsid = netns_id_from_name(&rth, *argv);
/* No nsid? Try to assign one. */
if (link_netnsid < 0)
set_netnsid_from_name(*argv, -1);
link_netnsid = get_netnsid_from_name(*argv);
set_netns_id_from_name(&rth, *argv, -1);
link_netnsid = netns_id_from_name(&rth, *argv);
if (link_netnsid < 0)
invarg("Invalid \"link-netns\" value\n",
*argv);

View File

@@ -104,7 +104,7 @@ static int ipnetns_have_nsid(void)
return have_rtnl_getnsid;
}
int get_netnsid_from_name(const char *name)
static int get_netnsid_from_name(const char *name)
{
netns_nsid_socket_init();
@@ -896,33 +896,11 @@ out_delete:
return -1;
}
int set_netnsid_from_name(const char *name, int nsid)
static int set_netnsid_from_name(const char *name, int nsid)
{
struct {
struct nlmsghdr n;
struct rtgenmsg g;
char buf[1024];
} req = {
.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtgenmsg)),
.n.nlmsg_flags = NLM_F_REQUEST,
.n.nlmsg_type = RTM_NEWNSID,
.g.rtgen_family = AF_UNSPEC,
};
int fd, err = 0;
netns_nsid_socket_init();
fd = netns_get_fd(name);
if (fd < 0)
return fd;
addattr32(&req.n, 1024, NETNSA_FD, fd);
addattr32(&req.n, 1024, NETNSA_NSID, nsid);
if (rtnl_talk(&rth, &req.n, NULL) < 0)
err = -2;
close(fd);
return err;
return set_netns_id_from_name(&rth, name, nsid);
}
static int netns_set(int argc, char **argv)

View File

@@ -189,6 +189,33 @@ out:
return ret;
}
int set_netns_id_from_name(struct rtnl_handle *rtnl, const char *name, int nsid)
{
struct {
struct nlmsghdr n;
struct rtgenmsg g;
char buf[1024];
} req = {
.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtgenmsg)),
.n.nlmsg_flags = NLM_F_REQUEST,
.n.nlmsg_type = RTM_NEWNSID,
.g.rtgen_family = AF_UNSPEC,
};
int fd, err = 0;
fd = netns_get_fd(name);
if (fd < 0)
return fd;
addattr32(&req.n, 1024, NETNSA_FD, fd);
addattr32(&req.n, 1024, NETNSA_NSID, nsid);
if (rtnl_talk(rtnl, &req.n, NULL) < 0)
err = -2;
close(fd);
return err;
}
struct netns_name_from_id_ctx {
int32_t id;
char *name;