* [PATCH mptcp-next 0/8] cleanups for PM interfaces
@ 2024-09-30 2:14 Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 1/8] mptcp: add struct mptcp_id_bitmap Geliang Tang
` (9 more replies)
0 siblings, 10 replies; 11+ messages in thread
From: Geliang Tang @ 2024-09-30 2:14 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
In order to implement BPF path manager, it is necessary to unify the
interfaces of the path manager. This set contains some cleanups for
unify the interfaces.
Geliang Tang (8):
mptcp: add struct mptcp_id_bitmap
mptcp: use __lookup_addr in pm_netlink
mptcp: add lookup_addr for userspace pm
mptcp: change remote as mptcp_addr_info
mptcp: change local as mptcp_pm_addr_entry
mptcp: make pm wrappers static
mptcp: drop skb parameter of get_addr
mptcp: drop skb parameter of set_flags
net/mptcp/pm.c | 25 +--------
net/mptcp/pm_netlink.c | 99 ++++++++++++++++++++---------------
net/mptcp/pm_userspace.c | 110 +++++++++++++++++++--------------------
net/mptcp/protocol.h | 18 +++----
4 files changed, 120 insertions(+), 132 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH mptcp-next 1/8] mptcp: add struct mptcp_id_bitmap
2024-09-30 2:14 [PATCH mptcp-next 0/8] cleanups for PM interfaces Geliang Tang
@ 2024-09-30 2:14 ` Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 2/8] mptcp: use __lookup_addr in pm_netlink Geliang Tang
` (8 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Geliang Tang @ 2024-09-30 2:14 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
A new struct mptcp_id_bitmap is defined to unify all bitmap type of address
ids. This type can be used to easily define dump_addr() interface of the
path managers as:
int (*dump_addr)(struct mptcp_sock *msk,
struct mptcp_id_bitmap *bitmap);
It also allows this parameter to be modified in BPF.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
net/mptcp/pm.c | 2 +-
net/mptcp/pm_netlink.c | 42 ++++++++++++++++++++--------------------
net/mptcp/pm_userspace.c | 14 ++++++--------
net/mptcp/protocol.h | 6 +++++-
4 files changed, 33 insertions(+), 31 deletions(-)
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
index 16c336c51940..5afc1f8e5ca7 100644
--- a/net/mptcp/pm.c
+++ b/net/mptcp/pm.c
@@ -536,7 +536,7 @@ void mptcp_pm_data_reset(struct mptcp_sock *msk)
WRITE_ONCE(pm->addr_signal, 0);
WRITE_ONCE(pm->remote_deny_join_id0, false);
pm->status = 0;
- bitmap_fill(msk->pm.id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1);
+ bitmap_fill(msk->pm.id_avail_bitmap.map, MPTCP_PM_MAX_ADDR_ID + 1);
}
void mptcp_pm_data_init(struct mptcp_sock *msk)
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index fe34297ea6dc..6fcbfcbc0edb 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -37,7 +37,7 @@ struct pm_nl_pernet {
unsigned int local_addr_max;
unsigned int subflows_max;
unsigned int next_id;
- DECLARE_BITMAP(id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1);
+ struct mptcp_id_bitmap id_bitmap;
};
#define MPTCP_PM_ADDR_MAX 8
@@ -161,7 +161,7 @@ select_local_address(const struct pm_nl_pernet *pernet,
if (!(entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW))
continue;
- if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap))
+ if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap.map))
continue;
new_local->addr = entry->addr;
@@ -189,7 +189,7 @@ select_signal_address(struct pm_nl_pernet *pernet, const struct mptcp_sock *msk,
* can lead to additional addresses not being announced.
*/
list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) {
- if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap))
+ if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap.map))
continue;
if (!(entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL))
@@ -243,7 +243,7 @@ bool mptcp_pm_nl_check_work_pending(struct mptcp_sock *msk)
struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk);
if (msk->pm.subflows == mptcp_pm_get_subflows_max(msk) ||
- (find_next_and_bit(pernet->id_bitmap, msk->pm.id_avail_bitmap,
+ (find_next_and_bit(pernet->id_bitmap.map, msk->pm.id_avail_bitmap.map,
MPTCP_PM_MAX_ADDR_ID + 1, 0) == MPTCP_PM_MAX_ADDR_ID + 1)) {
WRITE_ONCE(msk->pm.work_pending, false);
return false;
@@ -443,15 +443,15 @@ static unsigned int fill_remote_addresses_vec(struct mptcp_sock *msk,
msk->pm.subflows++;
addrs[i++] = remote;
} else {
- DECLARE_BITMAP(unavail_id, MPTCP_PM_MAX_ADDR_ID + 1);
+ struct mptcp_id_bitmap unavail_id;
/* Forbid creation of new subflows matching existing
* ones, possibly already created by incoming ADD_ADDR
*/
- bitmap_zero(unavail_id, MPTCP_PM_MAX_ADDR_ID + 1);
+ bitmap_zero(unavail_id.map, MPTCP_PM_MAX_ADDR_ID + 1);
mptcp_for_each_subflow(msk, subflow)
if (READ_ONCE(subflow->local_id) == local->id)
- __set_bit(subflow->remote_id, unavail_id);
+ __set_bit(subflow->remote_id, unavail_id.map);
mptcp_for_each_subflow(msk, subflow) {
ssk = mptcp_subflow_tcp_sock(subflow);
@@ -460,7 +460,7 @@ static unsigned int fill_remote_addresses_vec(struct mptcp_sock *msk,
if (deny_id0 && !addrs[i].id)
continue;
- if (test_bit(addrs[i].id, unavail_id))
+ if (test_bit(addrs[i].id, unavail_id.map))
continue;
if (!mptcp_pm_addr_families_match(sk, local, &addrs[i]))
@@ -470,7 +470,7 @@ static unsigned int fill_remote_addresses_vec(struct mptcp_sock *msk,
/* forbid creating multiple address towards
* this id
*/
- __set_bit(addrs[i].id, unavail_id);
+ __set_bit(addrs[i].id, unavail_id.map);
msk->pm.subflows++;
i++;
}
@@ -558,7 +558,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk)
rcu_read_lock();
entry = __lookup_addr(pernet, &mpc_addr);
if (entry) {
- __clear_bit(entry->addr.id, msk->pm.id_avail_bitmap);
+ __clear_bit(entry->addr.id, msk->pm.id_avail_bitmap.map);
msk->mpc_endpoint_id = entry->addr.id;
backup = !!(entry->flags & MPTCP_PM_ADDR_FLAG_BACKUP);
}
@@ -596,7 +596,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk)
if (!mptcp_pm_alloc_anno_list(msk, &local.addr))
return;
- __clear_bit(local.addr.id, msk->pm.id_avail_bitmap);
+ __clear_bit(local.addr.id, msk->pm.id_avail_bitmap.map);
msk->pm.add_addr_signaled++;
/* Special case for ID0: set the correct ID */
@@ -625,7 +625,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk)
fullmesh = !!(local.flags & MPTCP_PM_ADDR_FLAG_FULLMESH);
- __clear_bit(local.addr.id, msk->pm.id_avail_bitmap);
+ __clear_bit(local.addr.id, msk->pm.id_avail_bitmap.map);
/* Special case for ID0: set the correct ID */
if (local.addr.id == msk->mpc_endpoint_id)
@@ -990,7 +990,7 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_nl_pernet *pernet,
ret = -ERANGE;
goto out;
}
- if (test_bit(entry->addr.id, pernet->id_bitmap)) {
+ if (test_bit(entry->addr.id, pernet->id_bitmap.map)) {
ret = -EBUSY;
goto out;
}
@@ -1024,7 +1024,7 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_nl_pernet *pernet,
if (!entry->addr.id && needs_id) {
find_next:
- entry->addr.id = find_next_zero_bit(pernet->id_bitmap,
+ entry->addr.id = find_next_zero_bit(pernet->id_bitmap.map,
MPTCP_PM_MAX_ADDR_ID + 1,
pernet->next_id);
if (!entry->addr.id && pernet->next_id != 1) {
@@ -1036,7 +1036,7 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_nl_pernet *pernet,
if (!entry->addr.id && needs_id)
goto out;
- __set_bit(entry->addr.id, pernet->id_bitmap);
+ __set_bit(entry->addr.id, pernet->id_bitmap.map);
if (entry->addr.id > pernet->next_id)
pernet->next_id = entry->addr.id;
@@ -1484,7 +1484,7 @@ static bool mptcp_pm_remove_anno_addr(struct mptcp_sock *msk,
if (ret || force) {
spin_lock_bh(&msk->pm.lock);
if (ret) {
- __set_bit(addr->id, msk->pm.id_avail_bitmap);
+ __set_bit(addr->id, msk->pm.id_avail_bitmap.map);
msk->pm.add_addr_signaled--;
}
mptcp_pm_remove_addr(msk, &list);
@@ -1496,7 +1496,7 @@ static bool mptcp_pm_remove_anno_addr(struct mptcp_sock *msk,
static void __mark_subflow_endp_available(struct mptcp_sock *msk, u8 id)
{
/* If it was marked as used, and not ID 0, decrement local_addr_used */
- if (!__test_and_set_bit(id ? : msk->mpc_endpoint_id, msk->pm.id_avail_bitmap) &&
+ if (!__test_and_set_bit(id ? : msk->mpc_endpoint_id, msk->pm.id_avail_bitmap.map) &&
id && !WARN_ON_ONCE(msk->pm.local_addr_used == 0))
msk->pm.local_addr_used--;
}
@@ -1627,7 +1627,7 @@ int mptcp_pm_nl_del_addr_doit(struct sk_buff *skb, struct genl_info *info)
pernet->addrs--;
list_del_rcu(&entry->list);
- __clear_bit(entry->addr.id, pernet->id_bitmap);
+ __clear_bit(entry->addr.id, pernet->id_bitmap.map);
spin_unlock_bh(&pernet->lock);
mptcp_nl_remove_subflow_and_signal_addr(sock_net(skb->sk), entry);
@@ -1691,7 +1691,7 @@ static void mptcp_pm_flush_addrs_and_subflows(struct mptcp_sock *msk,
if (slist.nr)
mptcp_pm_nl_rm_subflow_received(msk, &slist);
/* Reset counters: maybe some subflows have been removed before */
- bitmap_fill(msk->pm.id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1);
+ bitmap_fill(msk->pm.id_avail_bitmap.map, MPTCP_PM_MAX_ADDR_ID + 1);
msk->pm.local_addr_used = 0;
spin_unlock_bh(&msk->pm.lock);
}
@@ -1749,7 +1749,7 @@ int mptcp_pm_nl_flush_addrs_doit(struct sk_buff *skb, struct genl_info *info)
list_splice_init(&pernet->local_addr_list, &free_list);
__reset_counters(pernet);
pernet->next_id = 1;
- bitmap_zero(pernet->id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1);
+ bitmap_zero(pernet->id_bitmap.map, MPTCP_PM_MAX_ADDR_ID + 1);
spin_unlock_bh(&pernet->lock);
mptcp_nl_flush_addrs_list(sock_net(skb->sk), &free_list);
synchronize_rcu();
@@ -1865,7 +1865,7 @@ int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
spin_lock_bh(&pernet->lock);
for (i = id; i < MPTCP_PM_MAX_ADDR_ID + 1; i++) {
- if (test_bit(i, pernet->id_bitmap)) {
+ if (test_bit(i, pernet->id_bitmap.map)) {
entry = __lookup_addr_by_id(pernet, i);
if (!entry)
break;
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index 2cceded3a83a..e3f29d8865f4 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -30,15 +30,15 @@ static int mptcp_userspace_pm_append_new_local_addr(struct mptcp_sock *msk,
struct mptcp_pm_addr_entry *entry,
bool needs_id)
{
- DECLARE_BITMAP(id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1);
struct mptcp_pm_addr_entry *match = NULL;
struct sock *sk = (struct sock *)msk;
+ struct mptcp_id_bitmap id_bitmap;
struct mptcp_pm_addr_entry *e;
bool addr_match = false;
bool id_match = false;
int ret = -EINVAL;
- bitmap_zero(id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1);
+ bitmap_zero(id_bitmap.map, MPTCP_PM_MAX_ADDR_ID + 1);
spin_lock_bh(&msk->pm.lock);
list_for_each_entry(e, &msk->pm.userspace_pm_local_addr_list, list) {
@@ -52,7 +52,7 @@ static int mptcp_userspace_pm_append_new_local_addr(struct mptcp_sock *msk,
} else if (addr_match || id_match) {
break;
}
- __set_bit(e->addr.id, id_bitmap);
+ __set_bit(e->addr.id, id_bitmap.map);
}
if (!match && !addr_match && !id_match) {
@@ -67,7 +67,7 @@ static int mptcp_userspace_pm_append_new_local_addr(struct mptcp_sock *msk,
*e = *entry;
if (!e->addr.id && needs_id)
- e->addr.id = find_next_zero_bit(id_bitmap,
+ e->addr.id = find_next_zero_bit(id_bitmap.map,
MPTCP_PM_MAX_ADDR_ID + 1,
1);
list_add_tail_rcu(&e->list, &msk->pm.userspace_pm_local_addr_list);
@@ -612,19 +612,17 @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
struct netlink_callback *cb)
{
- struct id_bitmap {
- DECLARE_BITMAP(map, MPTCP_PM_MAX_ADDR_ID + 1);
- } *bitmap;
const struct genl_info *info = genl_info_dump(cb);
struct net *net = sock_net(msg->sk);
struct mptcp_pm_addr_entry *entry;
+ struct mptcp_id_bitmap *bitmap;
struct mptcp_sock *msk;
struct nlattr *token;
int ret = -EINVAL;
struct sock *sk;
void *hdr;
- bitmap = (struct id_bitmap *)cb->ctx;
+ bitmap = (struct mptcp_id_bitmap *)cb->ctx;
token = info->attrs[MPTCP_PM_ATTR_TOKEN];
msk = mptcp_token_get_sock(net, nla_get_u32(token));
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index c3942416fa3a..ef50ef0c0829 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -211,6 +211,10 @@ enum mptcp_addr_signal_status {
/* max value of mptcp_addr_info.id */
#define MPTCP_PM_MAX_ADDR_ID U8_MAX
+struct mptcp_id_bitmap {
+ DECLARE_BITMAP(map, MPTCP_PM_MAX_ADDR_ID + 1);
+};
+
struct mptcp_pm_data {
struct mptcp_addr_info local;
struct mptcp_addr_info remote;
@@ -231,7 +235,7 @@ struct mptcp_pm_data {
u8 pm_type;
u8 subflows;
u8 status;
- DECLARE_BITMAP(id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1);
+ struct mptcp_id_bitmap id_avail_bitmap;
struct mptcp_rm_list rm_list_tx;
struct mptcp_rm_list rm_list_rx;
};
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH mptcp-next 2/8] mptcp: use __lookup_addr in pm_netlink
2024-09-30 2:14 [PATCH mptcp-next 0/8] cleanups for PM interfaces Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 1/8] mptcp: add struct mptcp_id_bitmap Geliang Tang
@ 2024-09-30 2:14 ` Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 3/8] mptcp: add lookup_addr for userspace pm Geliang Tang
` (7 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Geliang Tang @ 2024-09-30 2:14 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
The helper __lookup_addr() can be used in mptcp_pm_nl_get_local_id()
and mptcp_pm_nl_is_backup() to simplify the code if using
list_for_each_entry_rcu instead of list_for_each_entry in it.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
net/mptcp/pm_netlink.c | 20 +++++++-------------
1 file changed, 7 insertions(+), 13 deletions(-)
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 6fcbfcbc0edb..e1907dad3bc4 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -524,7 +524,7 @@ __lookup_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *info)
{
struct mptcp_pm_addr_entry *entry;
- list_for_each_entry(entry, &pernet->local_addr_list, list) {
+ list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) {
if (mptcp_addresses_equal(&entry->addr, info, entry->addr.port))
return entry;
}
@@ -1144,12 +1144,9 @@ int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_info *skc
pernet = pm_nl_get_pernet_from_msk(msk);
rcu_read_lock();
- list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) {
- if (mptcp_addresses_equal(&entry->addr, skc, entry->addr.port)) {
- ret = entry->addr.id;
- break;
- }
- }
+ entry = __lookup_addr(pernet, skc);
+ if (entry)
+ ret = entry->addr.id;
rcu_read_unlock();
if (ret >= 0)
return ret;
@@ -1179,12 +1176,9 @@ bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc)
bool backup = false;
rcu_read_lock();
- list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) {
- if (mptcp_addresses_equal(&entry->addr, skc, entry->addr.port)) {
- backup = !!(entry->flags & MPTCP_PM_ADDR_FLAG_BACKUP);
- break;
- }
- }
+ entry = __lookup_addr(pernet, skc);
+ if (entry)
+ backup = !!(entry->flags & MPTCP_PM_ADDR_FLAG_BACKUP);
rcu_read_unlock();
return backup;
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH mptcp-next 3/8] mptcp: add lookup_addr for userspace pm
2024-09-30 2:14 [PATCH mptcp-next 0/8] cleanups for PM interfaces Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 1/8] mptcp: add struct mptcp_id_bitmap Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 2/8] mptcp: use __lookup_addr in pm_netlink Geliang Tang
@ 2024-09-30 2:14 ` Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 4/8] mptcp: change remote as mptcp_addr_info Geliang Tang
` (6 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Geliang Tang @ 2024-09-30 2:14 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
Like __lookup_addr() helper in pm_netlink.c, a new helper
mptcp_userspace_pm_lookup_addr() is also defined in pm_userspace.c.
It looks up the corresponding mptcp_pm_addr_entry address in
userspace_pm_local_addr_list through the passed "addr" parameter
and returns it.
This helper can be used in mptcp_userspace_pm_delete_local_addr(),
mptcp_userspace_pm_get_local_id() and mptcp_userspace_pm_is_backup()
to simplify the code.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
net/mptcp/pm_userspace.c | 56 +++++++++++++++++++++-------------------
1 file changed, 29 insertions(+), 27 deletions(-)
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index e3f29d8865f4..60cd35942ee5 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -26,6 +26,18 @@ void mptcp_free_local_addr_list(struct mptcp_sock *msk)
}
}
+static struct mptcp_pm_addr_entry *
+mptcp_userspace_pm_lookup_addr(struct mptcp_sock *msk, const struct mptcp_addr_info *addr)
+{
+ struct mptcp_pm_addr_entry *entry, *tmp;
+
+ list_for_each_entry_safe(entry, tmp, &msk->pm.userspace_pm_local_addr_list, list) {
+ if (mptcp_addresses_equal(&entry->addr, addr, false))
+ return entry;
+ }
+ return NULL;
+}
+
static int mptcp_userspace_pm_append_new_local_addr(struct mptcp_sock *msk,
struct mptcp_pm_addr_entry *entry,
bool needs_id)
@@ -90,21 +102,19 @@ static int mptcp_userspace_pm_append_new_local_addr(struct mptcp_sock *msk,
static int mptcp_userspace_pm_delete_local_addr(struct mptcp_sock *msk,
struct mptcp_pm_addr_entry *addr)
{
- struct mptcp_pm_addr_entry *entry, *tmp;
-
- list_for_each_entry_safe(entry, tmp, &msk->pm.userspace_pm_local_addr_list, list) {
- if (mptcp_addresses_equal(&entry->addr, &addr->addr, false)) {
- /* TODO: a refcount is needed because the entry can
- * be used multiple times (e.g. fullmesh mode).
- */
- list_del_rcu(&entry->list);
- kfree(entry);
- msk->pm.local_addr_used--;
- return 0;
- }
- }
+ struct mptcp_pm_addr_entry *entry;
- return -EINVAL;
+ entry = mptcp_userspace_pm_lookup_addr(msk, &addr->addr);
+ if (!entry)
+ return -EINVAL;
+
+ /* TODO: a refcount is needed because the entry can
+ * be used multiple times (e.g. fullmesh mode).
+ */
+ list_del_rcu(&entry->list);
+ kfree(entry);
+ msk->pm.local_addr_used--;
+ return 0;
}
static struct mptcp_pm_addr_entry *
@@ -122,17 +132,12 @@ mptcp_userspace_pm_lookup_addr_by_id(struct mptcp_sock *msk, unsigned int id)
int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk,
struct mptcp_addr_info *skc)
{
- struct mptcp_pm_addr_entry *entry = NULL, *e, new_entry;
+ struct mptcp_pm_addr_entry *entry = NULL, new_entry;
__be16 msk_sport = ((struct inet_sock *)
inet_sk((struct sock *)msk))->inet_sport;
spin_lock_bh(&msk->pm.lock);
- list_for_each_entry(e, &msk->pm.userspace_pm_local_addr_list, list) {
- if (mptcp_addresses_equal(&e->addr, skc, false)) {
- entry = e;
- break;
- }
- }
+ entry = mptcp_userspace_pm_lookup_addr(msk, skc);
spin_unlock_bh(&msk->pm.lock);
if (entry)
return entry->addr.id;
@@ -155,12 +160,9 @@ bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk,
bool backup = false;
spin_lock_bh(&msk->pm.lock);
- list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) {
- if (mptcp_addresses_equal(&entry->addr, skc, false)) {
- backup = !!(entry->flags & MPTCP_PM_ADDR_FLAG_BACKUP);
- break;
- }
- }
+ entry = mptcp_userspace_pm_lookup_addr(msk, skc);
+ if (entry)
+ backup = !!(entry->flags & MPTCP_PM_ADDR_FLAG_BACKUP);
spin_unlock_bh(&msk->pm.lock);
return backup;
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH mptcp-next 4/8] mptcp: change remote as mptcp_addr_info
2024-09-30 2:14 [PATCH mptcp-next 0/8] cleanups for PM interfaces Geliang Tang
` (2 preceding siblings ...)
2024-09-30 2:14 ` [PATCH mptcp-next 3/8] mptcp: add lookup_addr for userspace pm Geliang Tang
@ 2024-09-30 2:14 ` Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 5/8] mptcp: change local as mptcp_pm_addr_entry Geliang Tang
` (5 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Geliang Tang @ 2024-09-30 2:14 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
Generally, in the path manager interfaces, the local address is defined as
an mptcp_pm_addr_entry type address, while the remote address is defined as
an mptcp_addr_info one:
(struct mptcp_pm_addr_entry *local, struct mptcp_addr_info *remote)
But the set_flags() interface uses two mptcp_pm_addr_entry type parameters.
This patch changes the second one to mptcp_addr_info type and use helper
mptcp_pm_parse_addr() to parse it instead of using mptcp_pm_parse_entry().
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
net/mptcp/pm_userspace.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index 60cd35942ee5..5ae19b96bfd5 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -556,10 +556,10 @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
{
struct mptcp_pm_addr_entry loc = { .addr = { .family = AF_UNSPEC }, };
- struct mptcp_pm_addr_entry rem = { .addr = { .family = AF_UNSPEC }, };
struct nlattr *attr_rem = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN];
struct nlattr *attr = info->attrs[MPTCP_PM_ATTR_ADDR];
+ struct mptcp_addr_info rem = { .family = AF_UNSPEC, };
struct net *net = sock_net(skb->sk);
struct mptcp_sock *msk;
int ret = -EINVAL;
@@ -587,13 +587,13 @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
goto set_flags_err;
if (attr_rem) {
- ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem);
+ ret = mptcp_pm_parse_addr(attr_rem, info, &rem);
if (ret < 0)
goto set_flags_err;
}
if (loc.addr.family == AF_UNSPEC ||
- rem.addr.family == AF_UNSPEC) {
+ rem.family == AF_UNSPEC) {
GENL_SET_ERR_MSG(info, "invalid address families");
ret = -EINVAL;
goto set_flags_err;
@@ -603,7 +603,7 @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
bkup = 1;
lock_sock(sk);
- ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem.addr, bkup);
+ ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem, bkup);
release_sock(sk);
set_flags_err:
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH mptcp-next 5/8] mptcp: change local as mptcp_pm_addr_entry
2024-09-30 2:14 [PATCH mptcp-next 0/8] cleanups for PM interfaces Geliang Tang
` (3 preceding siblings ...)
2024-09-30 2:14 ` [PATCH mptcp-next 4/8] mptcp: change remote as mptcp_addr_info Geliang Tang
@ 2024-09-30 2:14 ` Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 6/8] mptcp: make pm wrappers static Geliang Tang
` (4 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Geliang Tang @ 2024-09-30 2:14 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
Generally, in the path manager interfaces, the local address is defined as
an mptcp_pm_addr_entry type address, while the remote address is defined as
an mptcp_addr_info one:
(struct mptcp_pm_addr_entry *local, struct mptcp_addr_info *remote)
But the subflow_destroy() interface uses two mptcp_addr_info type parameters.
This patch changes the first one to mptcp_pm_addr_entry type and use helper
mptcp_pm_parse_entry() to parse it instead of using mptcp_pm_parse_addr().
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
net/mptcp/pm_userspace.c | 23 +++++++++++------------
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index 5ae19b96bfd5..ff82ae39d5cf 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -469,7 +469,7 @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
struct nlattr *raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN];
struct nlattr *laddr = info->attrs[MPTCP_PM_ATTR_ADDR];
- struct mptcp_addr_info addr_l;
+ struct mptcp_pm_addr_entry local;
struct mptcp_addr_info addr_r;
struct mptcp_sock *msk;
struct sock *sk, *ssk;
@@ -496,7 +496,7 @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
goto destroy_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 destroy_err;
@@ -509,35 +509,34 @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
}
#if IS_ENABLED(CONFIG_MPTCP_IPV6)
- if (addr_l.family == AF_INET && ipv6_addr_v4mapped(&addr_r.addr6)) {
- ipv6_addr_set_v4mapped(addr_l.addr.s_addr, &addr_l.addr6);
- addr_l.family = AF_INET6;
+ if (local.addr.family == AF_INET && ipv6_addr_v4mapped(&addr_r.addr6)) {
+ ipv6_addr_set_v4mapped(local.addr.addr.s_addr, &local.addr.addr6);
+ local.addr.family = AF_INET6;
}
- if (addr_r.family == AF_INET && ipv6_addr_v4mapped(&addr_l.addr6)) {
- ipv6_addr_set_v4mapped(addr_r.addr.s_addr, &addr_r.addr6);
+ if (addr_r.family == AF_INET && ipv6_addr_v4mapped(&local.addr.addr6)) {
+ ipv6_addr_set_v4mapped(addr_r.addr.s_addr, &local.addr.addr6);
addr_r.family = AF_INET6;
}
#endif
- if (addr_l.family != addr_r.family) {
+ if (local.addr.family != addr_r.family) {
GENL_SET_ERR_MSG(info, "address families do not match");
err = -EINVAL;
goto destroy_err;
}
- if (!addr_l.port || !addr_r.port) {
+ if (!local.addr.port || !addr_r.port) {
GENL_SET_ERR_MSG(info, "missing local or remote port");
err = -EINVAL;
goto destroy_err;
}
lock_sock(sk);
- ssk = mptcp_nl_find_ssk(msk, &addr_l, &addr_r);
+ ssk = mptcp_nl_find_ssk(msk, &local.addr, &addr_r);
if (ssk) {
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
- struct mptcp_pm_addr_entry entry = { .addr = addr_l };
spin_lock_bh(&msk->pm.lock);
- mptcp_userspace_pm_delete_local_addr(msk, &entry);
+ mptcp_userspace_pm_delete_local_addr(msk, &local);
spin_unlock_bh(&msk->pm.lock);
mptcp_subflow_shutdown(sk, ssk, RCV_SHUTDOWN | SEND_SHUTDOWN);
mptcp_close_ssk(sk, ssk, subflow);
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH mptcp-next 6/8] mptcp: make pm wrappers static
2024-09-30 2:14 [PATCH mptcp-next 0/8] cleanups for PM interfaces Geliang Tang
` (4 preceding siblings ...)
2024-09-30 2:14 ` [PATCH mptcp-next 5/8] mptcp: change local as mptcp_pm_addr_entry Geliang Tang
@ 2024-09-30 2:14 ` Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 7/8] mptcp: drop skb parameter of get_addr Geliang Tang
` (3 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Geliang Tang @ 2024-09-30 2:14 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
The path manager wrappers, mptcp_pm_get_addr(), mptcp_pm_dump_addr() and
mptcp_pm_set_flags() are used to switch the interfaces between in-kernel
PM and userspace PM.
These wrappers are defined in pm.c but only used in pm_netlink.c. It makes
more sense to move them to pm_netlink.c and make them all static.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
net/mptcp/pm.c | 23 -----------------------
net/mptcp/pm_netlink.c | 31 +++++++++++++++++++++++++++----
net/mptcp/protocol.h | 7 -------
3 files changed, 27 insertions(+), 34 deletions(-)
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
index 5afc1f8e5ca7..c051c1ec4de4 100644
--- a/net/mptcp/pm.c
+++ b/net/mptcp/pm.c
@@ -433,29 +433,6 @@ bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc)
return mptcp_pm_nl_is_backup(msk, &skc_local);
}
-int mptcp_pm_get_addr(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);
-}
-
-int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb)
-{
- const struct genl_info *info = genl_info_dump(cb);
-
- if (info->attrs[MPTCP_PM_ATTR_TOKEN])
- return mptcp_userspace_pm_dump_addr(msg, cb);
- return mptcp_pm_nl_dump_addr(msg, cb);
-}
-
-int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
-{
- if (info->attrs[MPTCP_PM_ATTR_TOKEN])
- return mptcp_userspace_pm_set_flags(skb, info);
- return mptcp_pm_nl_set_flags(skb, info);
-}
-
void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk)
{
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index e1907dad3bc4..d7a4199b142e 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -1790,7 +1790,7 @@ int mptcp_nl_fill_addr(struct sk_buff *skb,
return -EMSGSIZE;
}
-int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info)
+static 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);
@@ -1840,13 +1840,20 @@ int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info)
return ret;
}
+static int mptcp_pm_get_addr(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);
+}
+
int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info)
{
return mptcp_pm_get_addr(skb, info);
}
-int mptcp_pm_nl_dump_addr(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;
@@ -1888,6 +1895,15 @@ int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
return msg->len;
}
+static int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb)
+{
+ const struct genl_info *info = genl_info_dump(cb);
+
+ if (info->attrs[MPTCP_PM_ATTR_TOKEN])
+ return mptcp_userspace_pm_dump_addr(msg, cb);
+ return mptcp_pm_nl_dump_addr(msg, cb);
+}
+
int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg,
struct netlink_callback *cb)
{
@@ -2009,7 +2025,7 @@ static int mptcp_nl_set_flags(struct net *net,
return ret;
}
-int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info)
+static int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info)
{
struct mptcp_pm_addr_entry addr = { .addr = { .family = AF_UNSPEC }, };
struct nlattr *attr = info->attrs[MPTCP_PM_ATTR_ADDR];
@@ -2063,6 +2079,13 @@ int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info)
return 0;
}
+static int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
+{
+ if (info->attrs[MPTCP_PM_ATTR_TOKEN])
+ return mptcp_userspace_pm_set_flags(skb, info);
+ return mptcp_pm_nl_set_flags(skb, info);
+}
+
int mptcp_pm_nl_set_flags_doit(struct sk_buff *skb, struct genl_info *info)
{
return mptcp_pm_set_flags(skb, info);
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index ef50ef0c0829..95533d5b82c4 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -1035,8 +1035,6 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk,
struct mptcp_pm_add_entry *
mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk,
const struct mptcp_addr_info *addr);
-int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info);
-int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info);
int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info);
int mptcp_pm_announce_addr(struct mptcp_sock *msk,
const struct mptcp_addr_info *addr,
@@ -1127,13 +1125,8 @@ int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_in
bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc);
bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
-int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb);
-int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
- struct netlink_callback *cb);
int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
struct netlink_callback *cb);
-int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info);
-int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info);
int mptcp_userspace_pm_get_addr(struct sk_buff *skb,
struct genl_info *info);
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH mptcp-next 7/8] mptcp: drop skb parameter of get_addr
2024-09-30 2:14 [PATCH mptcp-next 0/8] cleanups for PM interfaces Geliang Tang
` (5 preceding siblings ...)
2024-09-30 2:14 ` [PATCH mptcp-next 6/8] mptcp: make pm wrappers static Geliang Tang
@ 2024-09-30 2:14 ` Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 8/8] mptcp: drop skb parameter of set_flags Geliang Tang
` (2 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Geliang Tang @ 2024-09-30 2:14 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
The first parameter "skb" in mptcp_userspace_pm_get_addr() is only used
to obtained the network namespace, which can also be obtained through the
second parameter "info" by using genl_info_net() helper. This patch drop
these useless parameters "skb" in all three get_addr() interfaces.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
net/mptcp/pm_netlink.c | 10 +++++-----
net/mptcp/pm_userspace.c | 5 ++---
net/mptcp/protocol.h | 3 +--
3 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index d7a4199b142e..f02378e9a9c8 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -1790,7 +1790,7 @@ int mptcp_nl_fill_addr(struct sk_buff *skb,
return -EMSGSIZE;
}
-static int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info)
+static int mptcp_pm_nl_get_addr(struct genl_info *info)
{
struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
@@ -1840,16 +1840,16 @@ static int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info)
return ret;
}
-static int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info)
+static int mptcp_pm_get_addr(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);
+ return mptcp_userspace_pm_get_addr(info);
+ return mptcp_pm_nl_get_addr(info);
}
int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info)
{
- return mptcp_pm_get_addr(skb, info);
+ return mptcp_pm_get_addr(info);
}
static int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index ff82ae39d5cf..afff0ab3d5e9 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -668,13 +668,12 @@ int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
return ret;
}
-int mptcp_userspace_pm_get_addr(struct sk_buff *skb,
- struct genl_info *info)
+int mptcp_userspace_pm_get_addr(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 net *net = genl_info_net(info);
struct mptcp_sock *msk;
struct sk_buff *msg;
int ret = -EINVAL;
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 95533d5b82c4..238fb2ddb68a 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -1127,8 +1127,7 @@ bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
bool mptcp_userspace_pm_is_backup(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);
+int mptcp_userspace_pm_get_addr(struct genl_info *info);
static inline u8 subflow_get_local_id(const struct mptcp_subflow_context *subflow)
{
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH mptcp-next 8/8] mptcp: drop skb parameter of set_flags
2024-09-30 2:14 [PATCH mptcp-next 0/8] cleanups for PM interfaces Geliang Tang
` (6 preceding siblings ...)
2024-09-30 2:14 ` [PATCH mptcp-next 7/8] mptcp: drop skb parameter of get_addr Geliang Tang
@ 2024-09-30 2:14 ` Geliang Tang
2024-09-30 2:41 ` [PATCH mptcp-next 0/8] cleanups for PM interfaces MPTCP CI
2024-09-30 3:20 ` MPTCP CI
9 siblings, 0 replies; 11+ messages in thread
From: Geliang Tang @ 2024-09-30 2:14 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
The first parameters "skb" in set_flags() interfaces are only used to
obtained the network namespace, which can also be obtained through the
second parameters "info" by using genl_info_net() helper. This patch
drop these useless parameters in all three set_flags() interfaces.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
net/mptcp/pm_netlink.c | 12 ++++++------
net/mptcp/pm_userspace.c | 4 ++--
net/mptcp/protocol.h | 2 +-
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index f02378e9a9c8..0f2fe64fd568 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -2025,13 +2025,13 @@ static int mptcp_nl_set_flags(struct net *net,
return ret;
}
-static int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info)
+static int mptcp_pm_nl_set_flags(struct genl_info *info)
{
struct mptcp_pm_addr_entry addr = { .addr = { .family = AF_UNSPEC }, };
struct nlattr *attr = info->attrs[MPTCP_PM_ATTR_ADDR];
u8 changed, mask = MPTCP_PM_ADDR_FLAG_BACKUP |
MPTCP_PM_ADDR_FLAG_FULLMESH;
- struct net *net = sock_net(skb->sk);
+ struct net *net = genl_info_net(info);
struct mptcp_pm_addr_entry *entry;
struct pm_nl_pernet *pernet;
u8 lookup_by_id = 0;
@@ -2079,16 +2079,16 @@ static int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info)
return 0;
}
-static int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
+static int mptcp_pm_set_flags(struct genl_info *info)
{
if (info->attrs[MPTCP_PM_ATTR_TOKEN])
- return mptcp_userspace_pm_set_flags(skb, info);
- return mptcp_pm_nl_set_flags(skb, info);
+ return mptcp_userspace_pm_set_flags(info);
+ return mptcp_pm_nl_set_flags(info);
}
int mptcp_pm_nl_set_flags_doit(struct sk_buff *skb, struct genl_info *info)
{
- return mptcp_pm_set_flags(skb, info);
+ return mptcp_pm_set_flags(info);
}
static void mptcp_nl_mcast_send(struct net *net, struct sk_buff *nlskb, gfp_t gfp)
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index afff0ab3d5e9..703d13ef50ad 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -552,14 +552,14 @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
return err;
}
-int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
+int mptcp_userspace_pm_set_flags(struct genl_info *info)
{
struct mptcp_pm_addr_entry loc = { .addr = { .family = AF_UNSPEC }, };
struct nlattr *attr_rem = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN];
struct nlattr *attr = info->attrs[MPTCP_PM_ATTR_ADDR];
struct mptcp_addr_info rem = { .family = AF_UNSPEC, };
- struct net *net = sock_net(skb->sk);
+ struct net *net = genl_info_net(info);
struct mptcp_sock *msk;
int ret = -EINVAL;
struct sock *sk;
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 238fb2ddb68a..41d01a046e27 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -1035,7 +1035,7 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk,
struct mptcp_pm_add_entry *
mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk,
const struct mptcp_addr_info *addr);
-int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info);
+int mptcp_userspace_pm_set_flags(struct genl_info *info);
int mptcp_pm_announce_addr(struct mptcp_sock *msk,
const struct mptcp_addr_info *addr,
bool echo);
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH mptcp-next 0/8] cleanups for PM interfaces
2024-09-30 2:14 [PATCH mptcp-next 0/8] cleanups for PM interfaces Geliang Tang
` (7 preceding siblings ...)
2024-09-30 2:14 ` [PATCH mptcp-next 8/8] mptcp: drop skb parameter of set_flags Geliang Tang
@ 2024-09-30 2:41 ` MPTCP CI
2024-09-30 3:20 ` MPTCP CI
9 siblings, 0 replies; 11+ messages in thread
From: MPTCP CI @ 2024-09-30 2: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://github.com/multipath-tcp/mptcp_net-next/actions/runs/11098291328
Status: failure
Initiator: Patchew Applier
Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/2d8847051143
Patchwork: https://patchwork.kernel.org/project/mptcp/list/?series=893831
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] 11+ messages in thread
* Re: [PATCH mptcp-next 0/8] cleanups for PM interfaces
2024-09-30 2:14 [PATCH mptcp-next 0/8] cleanups for PM interfaces Geliang Tang
` (8 preceding siblings ...)
2024-09-30 2:41 ` [PATCH mptcp-next 0/8] cleanups for PM interfaces MPTCP CI
@ 2024-09-30 3:20 ` MPTCP CI
9 siblings, 0 replies; 11+ messages in thread
From: MPTCP CI @ 2024-09-30 3:20 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:
- KVM Validation: normal: Success! ✅
- KVM Validation: debug: Success! ✅
- KVM Validation: btf (only bpftest_all): Success! ✅
- Task: https://github.com/multipath-tcp/mptcp_net-next/actions/runs/11098291326
Initiator: Patchew Applier
Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/2d8847051143
Patchwork: https://patchwork.kernel.org/project/mptcp/list/?series=893831
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-normal
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] 11+ messages in thread
end of thread, other threads:[~2024-09-30 3:20 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-30 2:14 [PATCH mptcp-next 0/8] cleanups for PM interfaces Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 1/8] mptcp: add struct mptcp_id_bitmap Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 2/8] mptcp: use __lookup_addr in pm_netlink Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 3/8] mptcp: add lookup_addr for userspace pm Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 4/8] mptcp: change remote as mptcp_addr_info Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 5/8] mptcp: change local as mptcp_pm_addr_entry Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 6/8] mptcp: make pm wrappers static Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 7/8] mptcp: drop skb parameter of get_addr Geliang Tang
2024-09-30 2:14 ` [PATCH mptcp-next 8/8] mptcp: drop skb parameter of set_flags Geliang Tang
2024-09-30 2:41 ` [PATCH mptcp-next 0/8] cleanups for PM interfaces MPTCP CI
2024-09-30 3:20 ` MPTCP CI
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.