* [PATCH mptcp-next v3 00/14] dump for userspace pm
@ 2023-12-19 8:19 Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 01/14] mptcp: export mptcp_genl_family & mptcp_nl_fill_addr Geliang Tang
` (13 more replies)
0 siblings, 14 replies; 21+ messages in thread
From: Geliang Tang @ 2023-12-19 8:19 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
v3:
- fix the errors reported by CI in v2:
[10:55:51.288] [ 897.523894][ T5664] BUG: sleeping function called from invalid context at include/linux/sched/mm.h:306
[10:55:51.288] [ 897.532157][ T5664] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 5664, name: pm_nl_ctl
[10:55:51.289] [ 897.539503][ T5664] preempt_count: 201, expected: 0
- drop mptcp_pm_nl_put_entry_msg and mptcp_pm_nl_put_entry_info
helpers.
v2:
Address Mat's comments in v1:
- patch 2: pass token to dump_addr too.
- patch 2: add back id in mptcp_userspace_pm_dump_addr().
- patch 5: pdate mptcp.yaml
v1:
Address Mat's comments in "userspace pm enhancements" v14.
Geliang Tang (14):
mptcp: export mptcp_genl_family & mptcp_nl_fill_addr
mptcp: implement mptcp_userspace_pm_dump_addr
mptcp: dump addrs in userspace pm list
mptcp: check userspace pm subflow flag
mptcp: add token for get-addr in yaml
selftests: mptcp: add userspace pm subflow flag
selftests: mptcp: add token for dump_addr
selftests: mptcp: add check_output helper
selftests: mptcp: dump userspace addrs list
mptcp: add userspace_pm_lookup_addr_by_id helper
mptcp: implement mptcp_userspace_pm_get_addr
mptcp: get addr in userspace pm list
selftests: mptcp: add token for get_addr
selftests: mptcp: userspace pm get addr tests
Documentation/netlink/specs/mptcp.yaml | 5 +-
net/mptcp/mptcp_pm_gen.c | 7 +-
net/mptcp/mptcp_pm_gen.h | 2 +-
net/mptcp/pm_netlink.c | 29 +++-
net/mptcp/pm_userspace.c | 158 ++++++++++++++++--
net/mptcp/protocol.h | 8 +
.../testing/selftests/net/mptcp/mptcp_join.sh | 99 +++++++++++
tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 39 ++++-
8 files changed, 315 insertions(+), 32 deletions(-)
--
2.35.3
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH mptcp-next v3 01/14] mptcp: export mptcp_genl_family & mptcp_nl_fill_addr
2023-12-19 8:19 [PATCH mptcp-next v3 00/14] dump for userspace pm Geliang Tang
@ 2023-12-19 8:19 ` Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 02/14] mptcp: implement mptcp_userspace_pm_dump_addr Geliang Tang
` (12 subsequent siblings)
13 siblings, 0 replies; 21+ messages in thread
From: Geliang Tang @ 2023-12-19 8:19 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch exports struct mptcp_genl_family and mptcp_nl_fill_addr() helper
to allow them can be used in pm_userspace.c.
Signed-off-by: Geliang Tang <geliang.tang@linux.dev>
---
net/mptcp/pm_netlink.c | 9 +++------
net/mptcp/protocol.h | 4 ++++
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 1b754cf525de..29fdef4cfdfd 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -18,9 +18,6 @@
#include "protocol.h"
#include "mib.h"
-/* forward declaration */
-static struct genl_family mptcp_genl_family;
-
static int pm_nl_pernet_id;
struct mptcp_pm_add_entry {
@@ -1614,8 +1611,8 @@ int mptcp_pm_nl_flush_addrs_doit(struct sk_buff *skb, struct genl_info *info)
return 0;
}
-static int mptcp_nl_fill_addr(struct sk_buff *skb,
- struct mptcp_pm_addr_entry *entry)
+int mptcp_nl_fill_addr(struct sk_buff *skb,
+ struct mptcp_pm_addr_entry *entry)
{
struct mptcp_addr_info *addr = &entry->addr;
struct nlattr *attr;
@@ -2259,7 +2256,7 @@ void mptcp_event(enum mptcp_event_type type, const struct mptcp_sock *msk,
nlmsg_free(skb);
}
-static struct genl_family mptcp_genl_family __ro_after_init = {
+struct genl_family mptcp_genl_family __ro_after_init = {
.name = MPTCP_PM_NAME,
.version = MPTCP_PM_VER,
.netnsok = true,
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index f7b9c1b995df..9b0b3fa65ae5 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -341,6 +341,8 @@ struct mptcp_sock {
#define mptcp_for_each_subflow_safe(__msk, __subflow, __tmp) \
list_for_each_entry_safe(__subflow, __tmp, &((__msk)->conn_list), node)
+extern struct genl_family mptcp_genl_family;
+
static inline void msk_owned_by_me(const struct mptcp_sock *msk)
{
sock_owned_by_me((const struct sock *)msk);
@@ -961,6 +963,8 @@ void mptcp_fastopen_gen_msk_ackseq(struct mptcp_sock *msk, struct mptcp_subflow_
const struct mptcp_options_received *mp_opt);
void mptcp_fastopen_subflow_synack_set_params(struct mptcp_subflow_context *subflow,
struct request_sock *req);
+int mptcp_nl_fill_addr(struct sk_buff *skb,
+ struct mptcp_pm_addr_entry *entry);
static inline bool mptcp_pm_should_add_signal(struct mptcp_sock *msk)
{
--
2.35.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH mptcp-next v3 02/14] mptcp: implement mptcp_userspace_pm_dump_addr
2023-12-19 8:19 [PATCH mptcp-next v3 00/14] dump for userspace pm Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 01/14] mptcp: export mptcp_genl_family & mptcp_nl_fill_addr Geliang Tang
@ 2023-12-19 8:19 ` Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 03/14] mptcp: dump addrs in userspace pm list Geliang Tang
` (11 subsequent siblings)
13 siblings, 0 replies; 21+ messages in thread
From: Geliang Tang @ 2023-12-19 8:19 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch implements mptcp_userspace_pm_dump_addr() to dump addresses
from userspace pm address list. Use mptcp_token_get_sock() to get the
msk from the given token, if userspace PM is enabled in it, traverse
each address entry in address list, put every entry to userspace using
mptcp_pm_nl_put_entry_msg().
Signed-off-by: Geliang Tang <geliang.tang@linux.dev>
---
net/mptcp/pm_userspace.c | 51 ++++++++++++++++++++++++++++++++++++++++
net/mptcp/protocol.h | 2 ++
2 files changed, 53 insertions(+)
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index efecbe3cf415..5494293537bb 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -550,3 +550,54 @@ int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token,
sock_put(sk);
return ret;
}
+
+int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
+ struct netlink_callback *cb)
+{
+ const struct genl_info *info = genl_info_dump(cb);
+ struct net *net = sock_net(msg->sk);
+ struct mptcp_pm_addr_entry *entry;
+ struct mptcp_sock *msk;
+ int id = cb->args[0];
+ int ret = -EINVAL;
+ struct sock *sk;
+ void *hdr;
+
+ if (!info->attrs[MPTCP_PM_ATTR_TOKEN])
+ return ret;
+
+ msk = mptcp_token_get_sock(net, nla_get_u32(info->attrs[MPTCP_PM_ATTR_TOKEN]));
+ if (!msk)
+ return ret;
+
+ if (!mptcp_pm_is_userspace(msk))
+ return ret;
+
+ sk = (struct sock *)msk;
+
+ lock_sock(sk);
+ spin_lock_bh(&msk->pm.lock);
+ list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) {
+ if (entry->addr.id <= id)
+ continue;
+
+ hdr = genlmsg_put(msg, NETLINK_CB(cb->skb).portid,
+ cb->nlh->nlmsg_seq, &mptcp_genl_family,
+ NLM_F_MULTI, MPTCP_PM_CMD_GET_ADDR);
+ if (!hdr)
+ break;
+
+ if (mptcp_nl_fill_addr(msg, entry) < 0) {
+ genlmsg_cancel(msg, hdr);
+ break;
+ }
+
+ id = entry->addr.id;
+ genlmsg_end(msg, hdr);
+ }
+ spin_unlock_bh(&msk->pm.lock);
+ release_sock(sk);
+
+ cb->args[0] = id;
+ return msg->len;
+}
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 9b0b3fa65ae5..7c0d592a9a45 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -1029,6 +1029,8 @@ bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);
int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
+int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
+ struct netlink_callback *cb);
void __init mptcp_pm_nl_init(void);
void mptcp_pm_nl_work(struct mptcp_sock *msk);
--
2.35.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH mptcp-next v3 03/14] mptcp: dump addrs in userspace pm list
2023-12-19 8:19 [PATCH mptcp-next v3 00/14] dump for userspace pm Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 01/14] mptcp: export mptcp_genl_family & mptcp_nl_fill_addr Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 02/14] mptcp: implement mptcp_userspace_pm_dump_addr Geliang Tang
@ 2023-12-19 8:19 ` Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 04/14] mptcp: check userspace pm subflow flag Geliang Tang
` (10 subsequent siblings)
13 siblings, 0 replies; 21+ messages in thread
From: Geliang Tang @ 2023-12-19 8:19 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch renames mptcp_pm_nl_get_addr_dumpit() to in-kernel netlink PM
dump addrs function mptcp_pm_nl_dump_addr(), then invoke both in-kernel PM
mptcp_pm_nl_dump_addr() and userspace PM mptcp_userspace_pm_dump_addr()
dump addrs functions in mptcp_pm_nl_get_addr_dumpit().
Signed-off-by: Geliang Tang <geliang.tang@linux.dev>
---
net/mptcp/pm_netlink.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 29fdef4cfdfd..812dc719269a 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -1700,8 +1700,8 @@ int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info)
return ret;
}
-int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg,
- struct netlink_callback *cb)
+static int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
+ struct netlink_callback *cb)
{
struct net *net = sock_net(msg->sk);
struct mptcp_pm_addr_entry *entry;
@@ -1743,6 +1743,13 @@ int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg,
return msg->len;
}
+int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg,
+ struct netlink_callback *cb)
+{
+ return mptcp_pm_nl_dump_addr(msg, cb) +
+ mptcp_userspace_pm_dump_addr(msg, cb);
+}
+
static int parse_limit(struct genl_info *info, int id, unsigned int *limit)
{
struct nlattr *attr = info->attrs[id];
--
2.35.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH mptcp-next v3 04/14] mptcp: check userspace pm subflow flag
2023-12-19 8:19 [PATCH mptcp-next v3 00/14] dump for userspace pm Geliang Tang
` (2 preceding siblings ...)
2023-12-19 8:19 ` [PATCH mptcp-next v3 03/14] mptcp: dump addrs in userspace pm list Geliang Tang
@ 2023-12-19 8:19 ` Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 05/14] mptcp: add token for get-addr in yaml Geliang Tang
` (9 subsequent siblings)
13 siblings, 0 replies; 21+ messages in thread
From: Geliang Tang @ 2023-12-19 8:19 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch uses mptcp_pm_parse_entry() instead of mptcp_pm_parse_addr()
to get the flags of the entry. Add MPTCP_PM_ADDR_FLAG_SUBFLOW flag check
in mptcp_pm_nl_subflow_create_doit().
Signed-off-by: Geliang Tang <geliang.tang@linux.dev>
---
net/mptcp/pm_userspace.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index 5494293537bb..8702dc5759ca 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -348,12 +348,19 @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
goto create_err;
}
- err = mptcp_pm_parse_addr(laddr, info, &addr_l);
+ err = mptcp_pm_parse_entry(laddr, info, true, &local);
if (err < 0) {
NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr");
goto create_err;
}
+ if (!(local.flags & MPTCP_PM_ADDR_FLAG_SUBFLOW)) {
+ GENL_SET_ERR_MSG(info, "invalid addr flags");
+ err = -EINVAL;
+ goto create_err;
+ }
+ addr_l = local.addr;
+
err = mptcp_pm_parse_addr(raddr, info, &addr_r);
if (err < 0) {
NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr");
@@ -366,7 +373,6 @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
goto create_err;
}
- local.addr = addr_l;
err = mptcp_userspace_pm_append_new_local_addr(msk, &local);
if (err < 0) {
GENL_SET_ERR_MSG(info, "did not match address and id");
--
2.35.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH mptcp-next v3 05/14] mptcp: add token for get-addr in yaml
2023-12-19 8:19 [PATCH mptcp-next v3 00/14] dump for userspace pm Geliang Tang
` (3 preceding siblings ...)
2023-12-19 8:19 ` [PATCH mptcp-next v3 04/14] mptcp: check userspace pm subflow flag Geliang Tang
@ 2023-12-19 8:19 ` Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 06/14] selftests: mptcp: add userspace pm subflow flag Geliang Tang
` (8 subsequent siblings)
13 siblings, 0 replies; 21+ messages in thread
From: Geliang Tang @ 2023-12-19 8:19 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch adds token paramenter together with addr in get-addr section
in mptcp.yaml, then use the following commands to update mptcp_pm_gen.c
and mptcp_pm_gen.h:
./tools/net/ynl/ynl-gen-c.py --mode kernel \
--spec Documentation/netlink/specs/mptcp.yaml --source \
-o net/mptcp/mptcp_pm_gen.c
./tools/net/ynl/ynl-gen-c.py --mode kernel \
--spec Documentation/netlink/specs/mptcp.yaml --header \
-o net/mptcp/mptcp_pm_gen.h
Signed-off-by: Geliang Tang <geliang.tang@linux.dev>
---
Documentation/netlink/specs/mptcp.yaml | 5 ++++-
net/mptcp/mptcp_pm_gen.c | 7 ++++---
net/mptcp/mptcp_pm_gen.h | 2 +-
3 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/Documentation/netlink/specs/mptcp.yaml b/Documentation/netlink/specs/mptcp.yaml
index 49f90cfb4698..cc731dbaa427 100644
--- a/Documentation/netlink/specs/mptcp.yaml
+++ b/Documentation/netlink/specs/mptcp.yaml
@@ -292,20 +292,23 @@ operations:
-
name: get-addr
doc: Get endpoint information
- attribute-set: endpoint
+ attribute-set: attr
dont-validate: [ strict ]
flags: [ uns-admin-perm ]
do: &get-addr-attrs
request:
attributes:
- addr
+ - token
reply:
attributes:
- addr
+ - token
dump:
reply:
attributes:
- addr
+ - token
-
name: flush-addrs
doc: flush addresses
diff --git a/net/mptcp/mptcp_pm_gen.c b/net/mptcp/mptcp_pm_gen.c
index a2325e70ddab..69c8857b4c5d 100644
--- a/net/mptcp/mptcp_pm_gen.c
+++ b/net/mptcp/mptcp_pm_gen.c
@@ -32,8 +32,9 @@ const struct nla_policy mptcp_pm_del_addr_nl_policy[MPTCP_PM_ENDPOINT_ADDR + 1]
};
/* MPTCP_PM_CMD_GET_ADDR - do */
-const struct nla_policy mptcp_pm_get_addr_nl_policy[MPTCP_PM_ENDPOINT_ADDR + 1] = {
- [MPTCP_PM_ENDPOINT_ADDR] = NLA_POLICY_NESTED(mptcp_pm_address_nl_policy),
+const struct nla_policy mptcp_pm_get_addr_nl_policy[MPTCP_PM_ATTR_TOKEN + 1] = {
+ [MPTCP_PM_ATTR_ADDR] = NLA_POLICY_NESTED(mptcp_pm_address_nl_policy),
+ [MPTCP_PM_ATTR_TOKEN] = { .type = NLA_U32, },
};
/* MPTCP_PM_CMD_FLUSH_ADDRS - do */
@@ -110,7 +111,7 @@ const struct genl_ops mptcp_pm_nl_ops[11] = {
.doit = mptcp_pm_nl_get_addr_doit,
.dumpit = mptcp_pm_nl_get_addr_dumpit,
.policy = mptcp_pm_get_addr_nl_policy,
- .maxattr = MPTCP_PM_ENDPOINT_ADDR,
+ .maxattr = MPTCP_PM_ATTR_TOKEN,
.flags = GENL_UNS_ADMIN_PERM,
},
{
diff --git a/net/mptcp/mptcp_pm_gen.h b/net/mptcp/mptcp_pm_gen.h
index 10579d184587..3963c55950b7 100644
--- a/net/mptcp/mptcp_pm_gen.h
+++ b/net/mptcp/mptcp_pm_gen.h
@@ -18,7 +18,7 @@ extern const struct nla_policy mptcp_pm_add_addr_nl_policy[MPTCP_PM_ENDPOINT_ADD
extern const struct nla_policy mptcp_pm_del_addr_nl_policy[MPTCP_PM_ENDPOINT_ADDR + 1];
-extern const struct nla_policy mptcp_pm_get_addr_nl_policy[MPTCP_PM_ENDPOINT_ADDR + 1];
+extern const struct nla_policy mptcp_pm_get_addr_nl_policy[MPTCP_PM_ATTR_TOKEN + 1];
extern const struct nla_policy mptcp_pm_flush_addrs_nl_policy[MPTCP_PM_ENDPOINT_ADDR + 1];
--
2.35.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH mptcp-next v3 06/14] selftests: mptcp: add userspace pm subflow flag
2023-12-19 8:19 [PATCH mptcp-next v3 00/14] dump for userspace pm Geliang Tang
` (4 preceding siblings ...)
2023-12-19 8:19 ` [PATCH mptcp-next v3 05/14] mptcp: add token for get-addr in yaml Geliang Tang
@ 2023-12-19 8:19 ` Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 07/14] selftests: mptcp: add token for dump_addr Geliang Tang
` (7 subsequent siblings)
13 siblings, 0 replies; 21+ messages in thread
From: Geliang Tang @ 2023-12-19 8:19 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch adds the address flag MPTCP_PM_ADDR_FLAG_SUBFLOW in csf() in
pm_nl_ctl.c when subflow is created by a userspace PM.
Signed-off-by: Geliang Tang <geliang.tang@linux.dev>
---
tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
index 49369c4a5f26..e97856323ec3 100644
--- a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
+++ b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
@@ -453,6 +453,7 @@ int csf(int fd, int pm_family, int argc, char *argv[])
char data[NLMSG_ALIGN(sizeof(struct nlmsghdr)) +
NLMSG_ALIGN(sizeof(struct genlmsghdr)) +
1024];
+ u_int32_t flags = MPTCP_PM_ADDR_FLAG_SUBFLOW;
const char *params[5];
struct nlmsghdr *nh;
struct rtattr *addr;
@@ -558,6 +559,13 @@ int csf(int fd, int pm_family, int argc, char *argv[])
off += NLMSG_ALIGN(rta->rta_len);
}
+ /* addr flags */
+ rta = (void *)(data + off);
+ rta->rta_type = MPTCP_PM_ADDR_ATTR_FLAGS;
+ rta->rta_len = RTA_LENGTH(4);
+ memcpy(RTA_DATA(rta), &flags, 4);
+ off += NLMSG_ALIGN(rta->rta_len);
+
addr->rta_len = off - addr_start;
}
--
2.35.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH mptcp-next v3 07/14] selftests: mptcp: add token for dump_addr
2023-12-19 8:19 [PATCH mptcp-next v3 00/14] dump for userspace pm Geliang Tang
` (5 preceding siblings ...)
2023-12-19 8:19 ` [PATCH mptcp-next v3 06/14] selftests: mptcp: add userspace pm subflow flag Geliang Tang
@ 2023-12-19 8:19 ` Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 08/14] selftests: mptcp: add check_output helper Geliang Tang
` (6 subsequent siblings)
13 siblings, 0 replies; 21+ messages in thread
From: Geliang Tang @ 2023-12-19 8:19 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
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 <geliang.tang@linux.dev>
---
tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
index e97856323ec3..8d7d1b4ed28e 100644
--- a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
+++ b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
@@ -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;
}
--
2.35.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH mptcp-next v3 08/14] selftests: mptcp: add check_output helper
2023-12-19 8:19 [PATCH mptcp-next v3 00/14] dump for userspace pm Geliang Tang
` (6 preceding siblings ...)
2023-12-19 8:19 ` [PATCH mptcp-next v3 07/14] selftests: mptcp: add token for dump_addr Geliang Tang
@ 2023-12-19 8:19 ` Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 09/14] selftests: mptcp: dump userspace addrs list Geliang Tang
` (5 subsequent siblings)
13 siblings, 0 replies; 21+ messages in thread
From: Geliang Tang @ 2023-12-19 8:19 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Similar to check() in pm_netlink.sh, add a new helper check_output()
in mptcp_join.sh to check the output of the given commands.
Signed-off-by: Geliang Tang <geliang.tang@linux.dev>
---
.../testing/selftests/net/mptcp/mptcp_join.sh | 27 +++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 3a5b63026191..25d3f32644ed 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -21,6 +21,7 @@ cinfail=""
cinsent=""
tmpfile=""
cout=""
+check_output_err=""
capout=""
ns1=""
ns2=""
@@ -186,6 +187,7 @@ init() {
cout=$(mktemp)
evts_ns1=$(mktemp)
evts_ns2=$(mktemp)
+ check_output_err=$(mktemp)
trap cleanup EXIT
@@ -199,6 +201,7 @@ cleanup()
rm -f "$sin" "$sout" "$cinsent" "$cinfail"
rm -f "$tmpfile"
rm -rf $evts_ns1 $evts_ns2
+ rm -f $check_output_err
cleanup_partial
}
@@ -3357,6 +3360,30 @@ userspace_pm_rm_sf()
wait_rm_sf $1 "${cnt}"
}
+check_output()
+{
+ local cmd="$1"
+ local expected="$2"
+ local msg="$3"
+ local out=`$cmd 2>$check_output_err`
+ local cmd_ret=$?
+
+ printf "%-42s" "$msg"
+ if [ $cmd_ret -ne 0 ]; then
+ mptcp_lib_print_err "[ FAIL ] command execution '$cmd' stderr "
+ cat $check_output_err
+ ret=${KSFT_FAIL}
+ return $cmd_ret
+ elif [ "$out" = "$expected" ]; then
+ mptcp_lib_print_ok "[ OK ]"
+ return 0
+ else
+ mptcp_lib_print_err "[ FAIL ] expected '$expected' got '$out'"
+ ret=${KSFT_FAIL}
+ return 1
+ fi
+}
+
userspace_tests()
{
# userspace pm type prevents add_addr
--
2.35.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH mptcp-next v3 09/14] selftests: mptcp: dump userspace addrs list
2023-12-19 8:19 [PATCH mptcp-next v3 00/14] dump for userspace pm Geliang Tang
` (7 preceding siblings ...)
2023-12-19 8:19 ` [PATCH mptcp-next v3 08/14] selftests: mptcp: add check_output helper Geliang Tang
@ 2023-12-19 8:19 ` Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 10/14] mptcp: add userspace_pm_lookup_addr_by_id helper Geliang Tang
` (4 subsequent siblings)
13 siblings, 0 replies; 21+ messages in thread
From: Geliang Tang @ 2023-12-19 8:19 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch adds a new helper userspace_pm_dump() to dump addresses
for the userspace PM. Add two new tests for userspace pm dump address
and subflow. Use userspace_pm_add_addr() and userspace_pm_add_sf() to
add an address and a suflow.
Signed-off-by: Geliang Tang <geliang.tang@linux.dev>
---
.../testing/selftests/net/mptcp/mptcp_join.sh | 56 +++++++++++++++++++
1 file changed, 56 insertions(+)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 25d3f32644ed..403200394aa7 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -3360,6 +3360,18 @@ userspace_pm_rm_sf()
wait_rm_sf $1 "${cnt}"
}
+# $1: ns
+userspace_pm_dump()
+{
+ local evts=$evts_ns1
+ local tk
+
+ [ "$1" == "$ns2" ] && evts=$evts_ns2
+ tk=$(mptcp_lib_evts_get_info token "$evts")
+
+ ip netns exec $1 ./pm_nl_ctl dump token $tk
+}
+
check_output()
{
local cmd="$1"
@@ -3573,6 +3585,50 @@ userspace_tests()
kill_events_pids
wait $tests_pid
fi
+
+ # userspace pm dump address
+ if reset_with_events "userspace pm dump address" &&
+ continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
+ set_userspace_pm $ns1
+ pm_nl_set_limits $ns2 1 1
+ speed=5 \
+ run_tests $ns1 $ns2 10.0.1.1 &
+ local tests_pid=$!
+ wait_mpj $ns1
+ userspace_pm_add_addr $ns1 10.0.2.1 10
+ chk_join_nr 1 1 1
+ chk_add_nr 1 1
+ chk_mptcp_info subflows 1 subflows 1
+ chk_subflows_total 2 2
+ chk_mptcp_info add_addr_signal 1 add_addr_accepted 1
+ local dump="id 10 flags signal 10.0.2.1"
+ check_output "userspace_pm_dump $ns1" \
+ "$dump" " dump addrs signal"
+ kill_events_pids
+ wait $tests_pid
+ fi
+
+ # userspace pm dump subflow
+ if reset_with_events "userspace pm dump subflow" &&
+ continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
+ set_userspace_pm $ns2
+ pm_nl_set_limits $ns1 0 1
+ speed=5 \
+ run_tests $ns1 $ns2 10.0.1.1 &
+ local tests_pid=$!
+ wait_mpj $ns2
+ chk_mptcp_info subflows 0 subflows 0
+ chk_subflows_total 1 1
+ userspace_pm_add_sf $ns2 10.0.3.2 20
+ chk_join_nr 1 1 1
+ chk_mptcp_info subflows 1 subflows 1
+ chk_subflows_total 2 2
+ local dump="id 20 flags subflow 10.0.3.2"
+ check_output "userspace_pm_dump $ns2" \
+ "$dump" " dump addrs subflow"
+ kill_events_pids
+ wait $tests_pid
+ fi
}
endpoint_tests()
--
2.35.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH mptcp-next v3 10/14] mptcp: add userspace_pm_lookup_addr_by_id helper
2023-12-19 8:19 [PATCH mptcp-next v3 00/14] dump for userspace pm Geliang Tang
` (8 preceding siblings ...)
2023-12-19 8:19 ` [PATCH mptcp-next v3 09/14] selftests: mptcp: dump userspace addrs list Geliang Tang
@ 2023-12-19 8:19 ` Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 11/14] mptcp: implement mptcp_userspace_pm_get_addr Geliang Tang
` (3 subsequent siblings)
13 siblings, 0 replies; 21+ messages in thread
From: Geliang Tang @ 2023-12-19 8:19 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Corresponding __lookup_addr_by_id() helper in the in-kernel netlink PM,
this patch adds a new helper mptcp_userspace_pm_lookup_addr_by_id() to
lookup the address entry with the given id on the userspace pm local
address list.
Signed-off-by: Geliang Tang <geliang.tang@linux.dev>
---
net/mptcp/pm_userspace.c | 31 ++++++++++++++++---------------
1 file changed, 16 insertions(+), 15 deletions(-)
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index 8702dc5759ca..0a4cbb9e6e41 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -105,19 +105,26 @@ static int mptcp_userspace_pm_delete_local_addr(struct mptcp_sock *msk,
return -EINVAL;
}
+static struct mptcp_pm_addr_entry *
+mptcp_userspace_pm_lookup_addr_by_id(struct mptcp_sock *msk, unsigned int id)
+{
+ struct mptcp_pm_addr_entry *entry;
+
+ list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) {
+ if (entry->addr.id == id)
+ return entry;
+ }
+ return NULL;
+}
+
int mptcp_userspace_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk,
unsigned int id,
u8 *flags, int *ifindex)
{
- struct mptcp_pm_addr_entry *entry, *match = NULL;
+ struct mptcp_pm_addr_entry *match;
spin_lock_bh(&msk->pm.lock);
- list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) {
- if (id == entry->addr.id) {
- match = entry;
- break;
- }
- }
+ match = mptcp_userspace_pm_lookup_addr_by_id(msk, id);
spin_unlock_bh(&msk->pm.lock);
if (match) {
*flags = match->flags;
@@ -249,7 +256,7 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
{
struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN];
struct nlattr *id = info->attrs[MPTCP_PM_ATTR_LOC_ID];
- struct mptcp_pm_addr_entry *match = NULL;
+ struct mptcp_pm_addr_entry *match;
struct mptcp_pm_addr_entry *entry;
struct mptcp_sock *msk;
LIST_HEAD(free_list);
@@ -286,13 +293,7 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
lock_sock(sk);
- list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) {
- if (entry->addr.id == id_val) {
- match = entry;
- break;
- }
- }
-
+ match = mptcp_userspace_pm_lookup_addr_by_id(msk, id_val);
if (!match) {
GENL_SET_ERR_MSG(info, "address with specified id not found");
release_sock(sk);
--
2.35.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH mptcp-next v3 11/14] mptcp: implement mptcp_userspace_pm_get_addr
2023-12-19 8:19 [PATCH mptcp-next v3 00/14] dump for userspace pm Geliang Tang
` (9 preceding siblings ...)
2023-12-19 8:19 ` [PATCH mptcp-next v3 10/14] mptcp: add userspace_pm_lookup_addr_by_id helper Geliang Tang
@ 2023-12-19 8:19 ` Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 12/14] mptcp: get addr in userspace pm list Geliang Tang
` (2 subsequent siblings)
13 siblings, 0 replies; 21+ messages in thread
From: Geliang Tang @ 2023-12-19 8:19 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch implements mptcp_userspace_pm_get_addr() to get an address
from userspace pm address list according the given 'token' and 'id'.
Use nla_get_u32() to get the u32 value of 'token', then pass it to
mptcp_token_get_sock() to get the msk. Pass 'msk' and 'id' to the helper
mptcp_userspace_pm_lookup_addr_by_id() to get the address entry. Put
this entry to userspace using mptcp_pm_nl_put_entry_info().
Signed-off-by: Geliang Tang <geliang.tang@linux.dev>
---
net/mptcp/pm_userspace.c | 66 ++++++++++++++++++++++++++++++++++++++++
net/mptcp/protocol.h | 2 ++
2 files changed, 68 insertions(+)
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index 0a4cbb9e6e41..cf0c04006baa 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -608,3 +608,69 @@ int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
cb->args[0] = id;
return msg->len;
}
+
+int mptcp_userspace_pm_get_addr(struct sk_buff *skb,
+ struct genl_info *info)
+{
+ struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
+ struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN];
+ struct mptcp_pm_addr_entry addr, *entry;
+ struct net *net = sock_net(skb->sk);
+ struct mptcp_sock *msk;
+ struct sk_buff *msg;
+ int ret = -EINVAL;
+ struct sock *sk;
+ void *reply;
+
+ msk = mptcp_token_get_sock(net, nla_get_u32(token));
+ if (!msk)
+ return ret;
+
+ if (!mptcp_pm_is_userspace(msk))
+ return ret;
+
+ ret = mptcp_pm_parse_entry(attr, info, false, &addr);
+ if (ret < 0)
+ return ret;
+
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
+ if (!msg)
+ return -ENOMEM;
+
+ reply = genlmsg_put_reply(msg, info, &mptcp_genl_family, 0,
+ info->genlhdr->cmd);
+ if (!reply) {
+ GENL_SET_ERR_MSG(info, "not enough space in Netlink message");
+ ret = -EMSGSIZE;
+ goto fail;
+ }
+
+ sk = (struct sock *)msk;
+
+ lock_sock(sk);
+ spin_lock_bh(&msk->pm.lock);
+ entry = mptcp_userspace_pm_lookup_addr_by_id(msk, addr.addr.id);
+ if (!entry) {
+ GENL_SET_ERR_MSG(info, "address not found");
+ ret = -EINVAL;
+ goto unlock_fail;
+ }
+
+ ret = mptcp_nl_fill_addr(msg, entry);
+ if (ret)
+ goto unlock_fail;
+
+ genlmsg_end(msg, reply);
+ ret = genlmsg_reply(msg, info);
+ spin_unlock_bh(&msk->pm.lock);
+ release_sock(sk);
+ return ret;
+
+unlock_fail:
+ spin_unlock_bh(&msk->pm.lock);
+ release_sock(sk);
+
+fail:
+ nlmsg_free(msg);
+ return ret;
+}
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 7c0d592a9a45..b4c340439abd 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -1031,6 +1031,8 @@ int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_info *skc
int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
struct netlink_callback *cb);
+int mptcp_userspace_pm_get_addr(struct sk_buff *skb,
+ struct genl_info *info);
void __init mptcp_pm_nl_init(void);
void mptcp_pm_nl_work(struct mptcp_sock *msk);
--
2.35.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH mptcp-next v3 12/14] mptcp: get addr in userspace pm list
2023-12-19 8:19 [PATCH mptcp-next v3 00/14] dump for userspace pm Geliang Tang
` (10 preceding siblings ...)
2023-12-19 8:19 ` [PATCH mptcp-next v3 11/14] mptcp: implement mptcp_userspace_pm_get_addr Geliang Tang
@ 2023-12-19 8:19 ` Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 13/14] selftests: mptcp: add token for get_addr Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 14/14] selftests: mptcp: userspace pm get addr tests Geliang Tang
13 siblings, 0 replies; 21+ messages in thread
From: Geliang Tang @ 2023-12-19 8:19 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch renames mptcp_pm_nl_get_addr_doit() to in-kernel netlink
PM get addr function mptcp_pm_nl_get_addr(). If a token is gotten in
mptcp_pm_nl_get_addr_doit(), that means a userspace PM is used. So
invoke mptcp_userspace_pm_get_addr() to get addr in userspace PM list.
Otherwise, invoke mptcp_pm_nl_get_addr().
Signed-off-by: Geliang Tang <geliang.tang@linux.dev>
---
net/mptcp/pm_netlink.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 812dc719269a..41a22301608b 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -1650,7 +1650,7 @@ int mptcp_nl_fill_addr(struct sk_buff *skb,
return -EMSGSIZE;
}
-int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info)
+int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info)
{
struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
@@ -1700,6 +1700,13 @@ int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info)
return ret;
}
+int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info)
+{
+ if (info->attrs[MPTCP_PM_ATTR_TOKEN])
+ return mptcp_userspace_pm_get_addr(skb, info);
+ return mptcp_pm_nl_get_addr(skb, info);
+}
+
static int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
struct netlink_callback *cb)
{
--
2.35.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH mptcp-next v3 13/14] selftests: mptcp: add token for get_addr
2023-12-19 8:19 [PATCH mptcp-next v3 00/14] dump for userspace pm Geliang Tang
` (11 preceding siblings ...)
2023-12-19 8:19 ` [PATCH mptcp-next v3 12/14] mptcp: get addr in userspace pm list Geliang Tang
@ 2023-12-19 8:19 ` Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 14/14] selftests: mptcp: userspace pm get addr tests Geliang Tang
13 siblings, 0 replies; 21+ messages in thread
From: Geliang Tang @ 2023-12-19 8:19 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
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 <geliang.tang@linux.dev>
---
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.35.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH mptcp-next v3 14/14] selftests: mptcp: userspace pm get addr tests
2023-12-19 8:19 [PATCH mptcp-next v3 00/14] dump for userspace pm Geliang Tang
` (12 preceding siblings ...)
2023-12-19 8:19 ` [PATCH mptcp-next v3 13/14] selftests: mptcp: add token for get_addr Geliang Tang
@ 2023-12-19 8:19 ` Geliang Tang
2023-12-19 8:36 ` selftests: mptcp: userspace pm get addr tests: Tests Results MPTCP CI
` (3 more replies)
13 siblings, 4 replies; 21+ messages in thread
From: Geliang Tang @ 2023-12-19 8:19 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch adds a new helper userspace_pm_get_addr() in mptcp_join.sh.
In it, parse the token value from the output of 'pm_nl_ctl events', then
pass it to pm_nl_ctl get_addr command. Use this helper in userspace pm
dump tests.
Signed-off-by: Geliang Tang <geliang.tang@linux.dev>
---
tools/testing/selftests/net/mptcp/mptcp_join.sh | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 403200394aa7..e603baa1d4a8 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -3372,6 +3372,18 @@ userspace_pm_dump()
ip netns exec $1 ./pm_nl_ctl dump token $tk
}
+# $1: ns ; $2: id
+userspace_pm_get_addr()
+{
+ local evts=$evts_ns1
+ local tk
+
+ [ "$1" == "$ns2" ] && evts=$evts_ns2
+ tk=$(mptcp_lib_evts_get_info token "$evts")
+
+ ip netns exec $1 ./pm_nl_ctl get $2 token $tk
+}
+
check_output()
{
local cmd="$1"
@@ -3602,6 +3614,8 @@ userspace_tests()
chk_subflows_total 2 2
chk_mptcp_info add_addr_signal 1 add_addr_accepted 1
local dump="id 10 flags signal 10.0.2.1"
+ check_output "userspace_pm_get_addr $ns1 10" \
+ "$dump" " get id 10 addr"
check_output "userspace_pm_dump $ns1" \
"$dump" " dump addrs signal"
kill_events_pids
@@ -3624,6 +3638,8 @@ userspace_tests()
chk_mptcp_info subflows 1 subflows 1
chk_subflows_total 2 2
local dump="id 20 flags subflow 10.0.3.2"
+ check_output "userspace_pm_get_addr $ns2 20" \
+ "$dump" " get id 20 addr"
check_output "userspace_pm_dump $ns2" \
"$dump" " dump addrs subflow"
kill_events_pids
--
2.35.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: selftests: mptcp: userspace pm get addr tests: Tests Results
2023-12-19 8:19 ` [PATCH mptcp-next v3 14/14] selftests: mptcp: userspace pm get addr tests Geliang Tang
@ 2023-12-19 8:36 ` MPTCP CI
2023-12-19 8:41 ` selftests: mptcp: userspace pm get addr tests: Build Failure MPTCP CI
` (2 subsequent siblings)
3 siblings, 0 replies; 21+ messages in thread
From: MPTCP CI @ 2023-12-19 8:36 UTC (permalink / raw)
To: Geliang Tang; +Cc: mptcp
Hi Geliang,
Thank you for your modifications, that's great!
Our CI did some validations and here is its report:
- {"code":404,"message":
- "Can't find artifacts containing file conclusion.txt"}:
- Task: https://cirrus-ci.com/task/6002476764102656
- Summary: https://api.cirrus-ci.com/v1/artifact/task/6002476764102656/summary/summary.txt
- {"code":404,"message":
- "Can't find artifacts containing file conclusion.txt"}:
- Task: https://cirrus-ci.com/task/6565426717523968
- Summary: https://api.cirrus-ci.com/v1/artifact/task/6565426717523968/summary/summary.txt
- {"code":404,"message":
- "Can't find artifacts containing file conclusion.txt"}:
- Task: https://cirrus-ci.com/task/5439526810681344
- Summary: https://api.cirrus-ci.com/v1/artifact/task/5439526810681344/summary/summary.txt
- {"code":404,"message":
- "Can't find artifacts containing file conclusion.txt"}:
- Task: https://cirrus-ci.com/task/4735839368904704
- Summary: https://api.cirrus-ci.com/v1/artifact/task/4735839368904704/summary/summary.txt
Initiator: Patchew Applier
Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/f1dcab025390
If there are some issues, you can reproduce them using the same environment as
the one used by the CI thanks to a docker image, e.g.:
$ cd [kernel source code]
$ docker run -v "${PWD}:${PWD}:rw" -w "${PWD}" --privileged --rm -it \
--pull always mptcp/mptcp-upstream-virtme-docker:latest \
auto-debug
For more details:
https://github.com/multipath-tcp/mptcp-upstream-virtme-docker
Please note that despite all the efforts that have been already done to have a
stable tests suite when executed on a public CI like here, it is possible some
reported issues are not due to your modifications. Still, do not hesitate to
help us improve that ;-)
Cheers,
MPTCP GH Action bot
Bot operated by Matthieu Baerts (NGI0 Core)
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: selftests: mptcp: userspace pm get addr tests: Build Failure
2023-12-19 8:19 ` [PATCH mptcp-next v3 14/14] selftests: mptcp: userspace pm get addr tests Geliang Tang
2023-12-19 8:36 ` selftests: mptcp: userspace pm get addr tests: Tests Results MPTCP CI
@ 2023-12-19 8:41 ` MPTCP CI
2023-12-19 10:55 ` selftests: mptcp: userspace pm get addr tests: Tests Results MPTCP CI
2023-12-19 11:07 ` selftests: mptcp: userspace pm get addr tests: Build Failure MPTCP CI
3 siblings, 0 replies; 21+ messages in thread
From: MPTCP CI @ 2023-12-19 8:41 UTC (permalink / raw)
To: Geliang Tang; +Cc: mptcp
Hi Geliang,
Thank you for your modifications, that's great!
But sadly, our CI spotted some issues with it when trying to build it.
You can find more details there:
https://patchwork.kernel.org/project/mptcp/patch/9a8034c76311d8871fb8d9e69aefc459b2e607ec.1702973751.git.geliang.tang@linux.dev/
https://github.com/multipath-tcp/mptcp_net-next/actions/runs/7259311767
Status: failure
Initiator: MPTCPimporter
Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/f1dcab025390
Feel free to reply to this email if you cannot access logs, if you need
some support to fix the error, if this doesn't seem to be caused by your
modifications or if the error is a false positive one.
Cheers,
MPTCP GH Action bot
Bot operated by Matthieu Baerts (NGI0 Core)
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: selftests: mptcp: userspace pm get addr tests: Tests Results
2023-12-19 8:19 ` [PATCH mptcp-next v3 14/14] selftests: mptcp: userspace pm get addr tests Geliang Tang
2023-12-19 8:36 ` selftests: mptcp: userspace pm get addr tests: Tests Results MPTCP CI
2023-12-19 8:41 ` selftests: mptcp: userspace pm get addr tests: Build Failure MPTCP CI
@ 2023-12-19 10:55 ` MPTCP CI
2023-12-19 12:19 ` Matthieu Baerts
2023-12-19 11:07 ` selftests: mptcp: userspace pm get addr tests: Build Failure MPTCP CI
3 siblings, 1 reply; 21+ messages in thread
From: MPTCP CI @ 2023-12-19 10:55 UTC (permalink / raw)
To: Geliang Tang; +Cc: mptcp
Hi Geliang,
Thank you for your modifications, that's great!
Our CI did some validations and here is its report:
- {"code":404,"message":
- "Can't find artifacts containing file conclusion.txt"}:
- Task: https://cirrus-ci.com/task/4651956644347904
- Summary: https://api.cirrus-ci.com/v1/artifact/task/4651956644347904/summary/summary.txt
- {"code":404,"message":
- "Can't find artifacts containing file conclusion.txt"}:
- Task: https://cirrus-ci.com/task/6340806504611840
- Summary: https://api.cirrus-ci.com/v1/artifact/task/6340806504611840/summary/summary.txt
- {"code":404,"message":
- "Can't find artifacts containing file conclusion.txt"}:
- Task: https://cirrus-ci.com/task/5777856551190528
- Summary: https://api.cirrus-ci.com/v1/artifact/task/5777856551190528/summary/summary.txt
- {"code":404,"message":
- "Can't find artifacts containing file conclusion.txt"}:
- Task: https://cirrus-ci.com/task/5214906597769216
- Summary: https://api.cirrus-ci.com/v1/artifact/task/5214906597769216/summary/summary.txt
Initiator: Patchew Applier
Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/8745a4886c7f
If there are some issues, you can reproduce them using the same environment as
the one used by the CI thanks to a docker image, e.g.:
$ cd [kernel source code]
$ docker run -v "${PWD}:${PWD}:rw" -w "${PWD}" --privileged --rm -it \
--pull always mptcp/mptcp-upstream-virtme-docker:latest \
auto-debug
For more details:
https://github.com/multipath-tcp/mptcp-upstream-virtme-docker
Please note that despite all the efforts that have been already done to have a
stable tests suite when executed on a public CI like here, it is possible some
reported issues are not due to your modifications. Still, do not hesitate to
help us improve that ;-)
Cheers,
MPTCP GH Action bot
Bot operated by Matthieu Baerts (NGI0 Core)
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: selftests: mptcp: userspace pm get addr tests: Build Failure
2023-12-19 8:19 ` [PATCH mptcp-next v3 14/14] selftests: mptcp: userspace pm get addr tests Geliang Tang
` (2 preceding siblings ...)
2023-12-19 10:55 ` selftests: mptcp: userspace pm get addr tests: Tests Results MPTCP CI
@ 2023-12-19 11:07 ` MPTCP CI
2023-12-19 12:20 ` Matthieu Baerts
3 siblings, 1 reply; 21+ messages in thread
From: MPTCP CI @ 2023-12-19 11:07 UTC (permalink / raw)
To: Geliang Tang; +Cc: mptcp
Hi Geliang,
Thank you for your modifications, that's great!
But sadly, our CI spotted some issues with it when trying to build it.
You can find more details there:
https://patchwork.kernel.org/project/mptcp/patch/9a8034c76311d8871fb8d9e69aefc459b2e607ec.1702973751.git.geliang.tang@linux.dev/
https://github.com/multipath-tcp/mptcp_net-next/actions/runs/7260823965
Status: failure
Initiator: MPTCPimporter
Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/8745a4886c7f
Feel free to reply to this email if you cannot access logs, if you need
some support to fix the error, if this doesn't seem to be caused by your
modifications or if the error is a false positive one.
Cheers,
MPTCP GH Action bot
Bot operated by Matthieu Baerts (NGI0 Core)
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: selftests: mptcp: userspace pm get addr tests: Tests Results
2023-12-19 10:55 ` selftests: mptcp: userspace pm get addr tests: Tests Results MPTCP CI
@ 2023-12-19 12:19 ` Matthieu Baerts
0 siblings, 0 replies; 21+ messages in thread
From: Matthieu Baerts @ 2023-12-19 12:19 UTC (permalink / raw)
To: mptcp, Geliang Tang
Hi Geliang,
On 19/12/2023 11:55, MPTCP CI wrote:
> Hi Geliang,
>
> Thank you for your modifications, that's great!
>
> Our CI did some validations and here is its report:
>
> - {"code":404,"message":
> - "Can't find artifacts containing file conclusion.txt"}:
> - Task: https://cirrus-ci.com/task/4651956644347904
> - Summary: https://api.cirrus-ci.com/v1/artifact/task/4651956644347904/summary/summary.txt
>
> - {"code":404,"message":
> - "Can't find artifacts containing file conclusion.txt"}:
> - Task: https://cirrus-ci.com/task/6340806504611840
> - Summary: https://api.cirrus-ci.com/v1/artifact/task/6340806504611840/summary/summary.txt
>
> - {"code":404,"message":
> - "Can't find artifacts containing file conclusion.txt"}:
> - Task: https://cirrus-ci.com/task/5777856551190528
> - Summary: https://api.cirrus-ci.com/v1/artifact/task/5777856551190528/summary/summary.txt
>
> - {"code":404,"message":
> - "Can't find artifacts containing file conclusion.txt"}:
> - Task: https://cirrus-ci.com/task/5214906597769216
> - Summary: https://api.cirrus-ci.com/v1/artifact/task/5214906597769216/summary/summary.txt
>
> Initiator: Patchew Applier
> Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/8745a4886c7f
Please ignore this one: I just updated our CI config to ignore "skipped"
tests (because we reached our monthly limit on the public CI).
Please note that this series has not been validated by the CI!
Cheers,
Matt
--
Sponsored by the NGI0 Core fund.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: selftests: mptcp: userspace pm get addr tests: Build Failure
2023-12-19 11:07 ` selftests: mptcp: userspace pm get addr tests: Build Failure MPTCP CI
@ 2023-12-19 12:20 ` Matthieu Baerts
0 siblings, 0 replies; 21+ messages in thread
From: Matthieu Baerts @ 2023-12-19 12:20 UTC (permalink / raw)
To: mptcp, Geliang Tang
Hi Geliang,
On 19/12/2023 12:07, MPTCP CI wrote:
> Hi Geliang,
>
> Thank you for your modifications, that's great!
>
> But sadly, our CI spotted some issues with it when trying to build it.
>
> You can find more details there:
>
> https://patchwork.kernel.org/project/mptcp/patch/9a8034c76311d8871fb8d9e69aefc459b2e607ec.1702973751.git.geliang.tang@linux.dev/
> https://github.com/multipath-tcp/mptcp_net-next/actions/runs/7260823965
>
> Status: failure
> Initiator: MPTCPimporter
> Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/8745a4886c7f
This one is different from the previous one (BPF related error, see the
patch I sent a few hours ago), and it seems to be a valid issue:
> net/mptcp/pm_netlink.c:1656:5: error: no previous prototype for 'mptcp_pm_nl_get_addr' [-Werror=missing-prototypes]
> 1656 | int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info)
> | ^~~~~~~~~~~~~~~~~~~~
> cc1: all warnings being treated as errors
mptcp_pm_nl_get_addr() should indeed be declared as static in "mptcp:
get addr in userspace pm list" commit.
Cheers,
Matt
--
Sponsored by the NGI0 Core fund.
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2023-12-19 12:21 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-19 8:19 [PATCH mptcp-next v3 00/14] dump for userspace pm Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 01/14] mptcp: export mptcp_genl_family & mptcp_nl_fill_addr Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 02/14] mptcp: implement mptcp_userspace_pm_dump_addr Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 03/14] mptcp: dump addrs in userspace pm list Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 04/14] mptcp: check userspace pm subflow flag Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 05/14] mptcp: add token for get-addr in yaml Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 06/14] selftests: mptcp: add userspace pm subflow flag Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 07/14] selftests: mptcp: add token for dump_addr Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 08/14] selftests: mptcp: add check_output helper Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 09/14] selftests: mptcp: dump userspace addrs list Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 10/14] mptcp: add userspace_pm_lookup_addr_by_id helper Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 11/14] mptcp: implement mptcp_userspace_pm_get_addr Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 12/14] mptcp: get addr in userspace pm list Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 13/14] selftests: mptcp: add token for get_addr Geliang Tang
2023-12-19 8:19 ` [PATCH mptcp-next v3 14/14] selftests: mptcp: userspace pm get addr tests Geliang Tang
2023-12-19 8:36 ` selftests: mptcp: userspace pm get addr tests: Tests Results MPTCP CI
2023-12-19 8:41 ` selftests: mptcp: userspace pm get addr tests: Build Failure MPTCP CI
2023-12-19 10:55 ` selftests: mptcp: userspace pm get addr tests: Tests Results MPTCP CI
2023-12-19 12:19 ` Matthieu Baerts
2023-12-19 11:07 ` selftests: mptcp: userspace pm get addr tests: Build Failure MPTCP CI
2023-12-19 12:20 ` Matthieu Baerts
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.