Commit b055671b authored by Geliang Tang's avatar Geliang Tang Committed by David S. Miller

selftests: mptcp: add token for get_addr

The command get_addr() of pm_nl_ctl can be used like this in in-kernel PM:

	pm_nl_ctl get $id

This patch adds token argument for it to support userspace PM:

	pm_nl_ctl get $id token $token

If 'token $token' is passed to get_addr(), copy it into the kernel netlink.
Signed-off-by: default avatarGeliang Tang <tanggeliang@kylinos.cn>
Reviewed-by: default avatarMatthieu Baerts (NGI0) <matttbe@kernel.org>
Reviewed-by: default avatarMat Martineau <martineau@kernel.org>
Signed-off-by: default avatarMatthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 564ae679
...@@ -1087,6 +1087,7 @@ int get_addr(int fd, int pm_family, int argc, char *argv[]) ...@@ -1087,6 +1087,7 @@ int get_addr(int fd, int pm_family, int argc, char *argv[])
1024]; 1024];
struct rtattr *rta, *nest; struct rtattr *rta, *nest;
struct nlmsghdr *nh; struct nlmsghdr *nh;
u_int32_t token = 0;
int nest_start; int nest_start;
u_int8_t id; u_int8_t id;
int off = 0; int off = 0;
...@@ -1097,10 +1098,12 @@ int get_addr(int fd, int pm_family, int argc, char *argv[]) ...@@ -1097,10 +1098,12 @@ int get_addr(int fd, int pm_family, int argc, char *argv[])
MPTCP_PM_VER); MPTCP_PM_VER);
/* the only argument is the address id */ /* the only argument is the address id */
if (argc != 3) if (argc != 3 && argc != 5)
syntax(argv); syntax(argv);
id = atoi(argv[2]); id = atoi(argv[2]);
if (argc == 5 && !strcmp(argv[3], "token"))
token = strtoul(argv[4], NULL, 10);
nest_start = off; nest_start = off;
nest = (void *)(data + off); nest = (void *)(data + off);
...@@ -1116,6 +1119,15 @@ int get_addr(int fd, int pm_family, int argc, char *argv[]) ...@@ -1116,6 +1119,15 @@ int get_addr(int fd, int pm_family, int argc, char *argv[])
off += NLMSG_ALIGN(rta->rta_len); off += NLMSG_ALIGN(rta->rta_len);
nest->rta_len = off - nest_start; nest->rta_len = off - nest_start;
/* token */
if (token) {
rta = (void *)(data + off);
rta->rta_type = MPTCP_PM_ATTR_TOKEN;
rta->rta_len = RTA_LENGTH(4);
memcpy(RTA_DATA(rta), &token, 4);
off += NLMSG_ALIGN(rta->rta_len);
}
print_addrs(nh, pm_family, do_nl_req(fd, nh, off, sizeof(data))); print_addrs(nh, pm_family, do_nl_req(fd, nh, off, sizeof(data)));
return 0; return 0;
} }
......
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