From: Geliang Tang <[email protected]>

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: Geliang Tang <[email protected]>
Reviewed-by: Matthieu Baerts (NGI0) <[email protected]>
Reviewed-by: Mat Martineau <[email protected]>
Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
---
 tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c 
b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
index 8d7d1b4ed28e..7426a2cbd4a0 100644
--- a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
+++ b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
@@ -1087,6 +1087,7 @@ int get_addr(int fd, int pm_family, int argc, char 
*argv[])
                  1024];
        struct rtattr *rta, *nest;
        struct nlmsghdr *nh;
+       u_int32_t token = 0;
        int nest_start;
        u_int8_t id;
        int off = 0;
@@ -1097,10 +1098,12 @@ int get_addr(int fd, int pm_family, int argc, char 
*argv[])
                            MPTCP_PM_VER);
 
        /* the only argument is the address id */
-       if (argc != 3)
+       if (argc != 3 && argc != 5)
                syntax(argv);
 
        id = atoi(argv[2]);
+       if (argc == 5 && !strcmp(argv[3], "token"))
+               token = strtoul(argv[4], NULL, 10);
 
        nest_start = off;
        nest = (void *)(data + off);
@@ -1116,6 +1119,15 @@ int get_addr(int fd, int pm_family, int argc, char 
*argv[])
        off += NLMSG_ALIGN(rta->rta_len);
        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)));
        return 0;
 }

-- 
2.43.0


Reply via email to