Skip to content

Commit 8008e77

Browse files
Geliang Tangkuba-moo
authored andcommitted
mptcp: move mptcp_pm_remove_addrs into pm_userspace
Since mptcp_pm_remove_addrs() is only called from the userspace PM, this patch moves it into pm_userspace.c. For this, lookup_subflow_by_saddr() and remove_anno_list_by_saddr() helpers need to be exported in protocol.h. Also add "mptcp_" prefix for these helpers. Here, mptcp_pm_remove_addrs() is not changed to a static function because it will be used in BPF Path Manager. This patch doesn't change the behaviour of the code, just refactoring. Signed-off-by: Geliang Tang <[email protected]> Reviewed-by: Matthieu Baerts (NGI0) <[email protected]> Signed-off-by: Matthieu Baerts (NGI0) <[email protected]> Link: https://patch.msgid.link/20241213-net-next-mptcp-pm-misc-cleanup-v1-4-ddb6d00109a8@kernel.org Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 6a389c8 commit 8008e77

File tree

3 files changed

+40
-38
lines changed

3 files changed

+40
-38
lines changed

net/mptcp/pm_netlink.c

Lines changed: 8 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ static void remote_address(const struct sock_common *skc,
107107
#endif
108108
}
109109

110-
static bool lookup_subflow_by_saddr(const struct list_head *list,
111-
const struct mptcp_addr_info *saddr)
110+
bool mptcp_lookup_subflow_by_saddr(const struct list_head *list,
111+
const struct mptcp_addr_info *saddr)
112112
{
113113
struct mptcp_subflow_context *subflow;
114114
struct mptcp_addr_info cur;
@@ -1447,8 +1447,8 @@ int mptcp_pm_nl_add_addr_doit(struct sk_buff *skb, struct genl_info *info)
14471447
return ret;
14481448
}
14491449

1450-
static bool remove_anno_list_by_saddr(struct mptcp_sock *msk,
1451-
const struct mptcp_addr_info *addr)
1450+
bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk,
1451+
const struct mptcp_addr_info *addr)
14521452
{
14531453
struct mptcp_pm_add_entry *entry;
14541454

@@ -1476,7 +1476,7 @@ static bool mptcp_pm_remove_anno_addr(struct mptcp_sock *msk,
14761476

14771477
list.ids[list.nr++] = mptcp_endp_get_local_id(msk, addr);
14781478

1479-
ret = remove_anno_list_by_saddr(msk, addr);
1479+
ret = mptcp_remove_anno_list_by_saddr(msk, addr);
14801480
if (ret || force) {
14811481
spin_lock_bh(&msk->pm.lock);
14821482
if (ret) {
@@ -1520,7 +1520,7 @@ static int mptcp_nl_remove_subflow_and_signal_addr(struct net *net,
15201520
}
15211521

15221522
lock_sock(sk);
1523-
remove_subflow = lookup_subflow_by_saddr(&msk->conn_list, addr);
1523+
remove_subflow = mptcp_lookup_subflow_by_saddr(&msk->conn_list, addr);
15241524
mptcp_pm_remove_anno_addr(msk, addr, remove_subflow &&
15251525
!(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT));
15261526

@@ -1633,36 +1633,6 @@ int mptcp_pm_nl_del_addr_doit(struct sk_buff *skb, struct genl_info *info)
16331633
return ret;
16341634
}
16351635

1636-
/* Called from the userspace PM only */
1637-
void mptcp_pm_remove_addrs(struct mptcp_sock *msk, struct list_head *rm_list)
1638-
{
1639-
struct mptcp_rm_list alist = { .nr = 0 };
1640-
struct mptcp_pm_addr_entry *entry;
1641-
int anno_nr = 0;
1642-
1643-
list_for_each_entry(entry, rm_list, list) {
1644-
if (alist.nr >= MPTCP_RM_IDS_MAX)
1645-
break;
1646-
1647-
/* only delete if either announced or matching a subflow */
1648-
if (remove_anno_list_by_saddr(msk, &entry->addr))
1649-
anno_nr++;
1650-
else if (!lookup_subflow_by_saddr(&msk->conn_list,
1651-
&entry->addr))
1652-
continue;
1653-
1654-
alist.ids[alist.nr++] = entry->addr.id;
1655-
}
1656-
1657-
if (alist.nr) {
1658-
spin_lock_bh(&msk->pm.lock);
1659-
msk->pm.add_addr_signaled -= anno_nr;
1660-
mptcp_pm_remove_addr(msk, &alist);
1661-
spin_unlock_bh(&msk->pm.lock);
1662-
}
1663-
}
1664-
1665-
/* Called from the in-kernel PM only */
16661636
static void mptcp_pm_flush_addrs_and_subflows(struct mptcp_sock *msk,
16671637
struct list_head *rm_list)
16681638
{
@@ -1671,11 +1641,11 @@ static void mptcp_pm_flush_addrs_and_subflows(struct mptcp_sock *msk,
16711641

16721642
list_for_each_entry(entry, rm_list, list) {
16731643
if (slist.nr < MPTCP_RM_IDS_MAX &&
1674-
lookup_subflow_by_saddr(&msk->conn_list, &entry->addr))
1644+
mptcp_lookup_subflow_by_saddr(&msk->conn_list, &entry->addr))
16751645
slist.ids[slist.nr++] = mptcp_endp_get_local_id(msk, &entry->addr);
16761646

16771647
if (alist.nr < MPTCP_RM_IDS_MAX &&
1678-
remove_anno_list_by_saddr(msk, &entry->addr))
1648+
mptcp_remove_anno_list_by_saddr(msk, &entry->addr))
16791649
alist.ids[alist.nr++] = mptcp_endp_get_local_id(msk, &entry->addr);
16801650
}
16811651

net/mptcp/pm_userspace.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,34 @@ static int mptcp_userspace_pm_remove_id_zero_address(struct mptcp_sock *msk,
287287
return err;
288288
}
289289

290+
void mptcp_pm_remove_addrs(struct mptcp_sock *msk, struct list_head *rm_list)
291+
{
292+
struct mptcp_rm_list alist = { .nr = 0 };
293+
struct mptcp_pm_addr_entry *entry;
294+
int anno_nr = 0;
295+
296+
list_for_each_entry(entry, rm_list, list) {
297+
if (alist.nr >= MPTCP_RM_IDS_MAX)
298+
break;
299+
300+
/* only delete if either announced or matching a subflow */
301+
if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr))
302+
anno_nr++;
303+
else if (!mptcp_lookup_subflow_by_saddr(&msk->conn_list,
304+
&entry->addr))
305+
continue;
306+
307+
alist.ids[alist.nr++] = entry->addr.id;
308+
}
309+
310+
if (alist.nr) {
311+
spin_lock_bh(&msk->pm.lock);
312+
msk->pm.add_addr_signaled -= anno_nr;
313+
mptcp_pm_remove_addr(msk, &alist);
314+
spin_unlock_bh(&msk->pm.lock);
315+
}
316+
}
317+
290318
int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
291319
{
292320
struct nlattr *id = info->attrs[MPTCP_PM_ATTR_LOC_ID];

net/mptcp/protocol.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1027,6 +1027,10 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk,
10271027
struct mptcp_pm_add_entry *
10281028
mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk,
10291029
const struct mptcp_addr_info *addr);
1030+
bool mptcp_lookup_subflow_by_saddr(const struct list_head *list,
1031+
const struct mptcp_addr_info *saddr);
1032+
bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk,
1033+
const struct mptcp_addr_info *addr);
10301034
int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info);
10311035
int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info);
10321036
int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info);

0 commit comments

Comments
 (0)