selftests: mptcp: add token for dump_addr
authorGeliang Tang <tanggeliang@kylinos.cn>
Fri, 1 Mar 2024 18:18:32 +0000 (19:18 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 4 Mar 2024 13:07:46 +0000 (13:07 +0000)
The command dump_addr() of pm_nl_ctl can be used like this in in-kernel PM:

        pm_nl_ctl dump

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

        pm_nl_ctl dump token $token

If 'token $token' is passed to dump_addr(), copy it into the kernel
netlink.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/mptcp/pm_nl_ctl.c

index e97856323ec348364a3752dc55c04d7b3bbe558a..8d7d1b4ed28e3bf9602320f850fcd8787c8f0a74 100644 (file)
@@ -1127,8 +1127,16 @@ int dump_addrs(int fd, int pm_family, int argc, char *argv[])
                  1024];
        pid_t pid = getpid();
        struct nlmsghdr *nh;
+       u_int32_t token = 0;
+       struct rtattr *rta;
        int off = 0;
 
+       if (argc != 2 && argc != 4)
+               syntax(argv);
+
+       if (argc == 4 && !strcmp(argv[2], "token"))
+               token = strtoul(argv[3], NULL, 10);
+
        memset(data, 0, sizeof(data));
        nh = (void *)data;
        off = init_genl_req(data, pm_family, MPTCP_PM_CMD_GET_ADDR,
@@ -1138,6 +1146,15 @@ int dump_addrs(int fd, int pm_family, int argc, char *argv[])
        nh->nlmsg_pid = pid;
        nh->nlmsg_len = off;
 
+       /* 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)));
        return 0;
 }