mptcp: pm: rename 'subflows' to 'extra_subflows'
A few variables linked to the Path-Managers are confusing, and it would help current and future developers, to clarify them. One of them is 'subflows', which in fact represents the number of extra subflows: all the additional subflows created after the initial one, and not the total number of subflows. While at it, add an additional name for the corresponding variable in MPTCP INFO: mptcpi_extra_subflows. Not to break the current uAPI, the new name is added as a 'define' pointing to the former name. This will then also help userspace devs. No functional changes intended. Reviewed-by: Geliang Tang <geliang@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://patch.msgid.link/20250925-net-next-mptcp-c-flag-laminar-v1-5-ad126cc47c6b@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>pull/1354/merge
parent
a845b2bbf2
commit
c5273f6ca1
|
|
@ -42,6 +42,7 @@
|
||||||
|
|
||||||
struct mptcp_info {
|
struct mptcp_info {
|
||||||
__u8 mptcpi_subflows;
|
__u8 mptcpi_subflows;
|
||||||
|
#define mptcpi_extra_subflows mptcpi_subflows
|
||||||
__u8 mptcpi_add_addr_signal;
|
__u8 mptcpi_add_addr_signal;
|
||||||
__u8 mptcpi_add_addr_accepted;
|
__u8 mptcpi_add_addr_accepted;
|
||||||
__u8 mptcpi_subflows_max;
|
__u8 mptcpi_subflows_max;
|
||||||
|
|
|
||||||
|
|
@ -489,7 +489,7 @@ bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk)
|
||||||
if (mptcp_pm_is_userspace(msk)) {
|
if (mptcp_pm_is_userspace(msk)) {
|
||||||
if (mptcp_userspace_pm_active(msk)) {
|
if (mptcp_userspace_pm_active(msk)) {
|
||||||
spin_lock_bh(&pm->lock);
|
spin_lock_bh(&pm->lock);
|
||||||
pm->subflows++;
|
pm->extra_subflows++;
|
||||||
spin_unlock_bh(&pm->lock);
|
spin_unlock_bh(&pm->lock);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -498,8 +498,9 @@ bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk)
|
||||||
|
|
||||||
subflows_max = mptcp_pm_get_subflows_max(msk);
|
subflows_max = mptcp_pm_get_subflows_max(msk);
|
||||||
|
|
||||||
pr_debug("msk=%p subflows=%d max=%d allow=%d\n", msk, pm->subflows,
|
pr_debug("msk=%p subflows=%d max=%d allow=%d\n", msk,
|
||||||
subflows_max, READ_ONCE(pm->accept_subflow));
|
pm->extra_subflows, subflows_max,
|
||||||
|
READ_ONCE(pm->accept_subflow));
|
||||||
|
|
||||||
/* try to avoid acquiring the lock below */
|
/* try to avoid acquiring the lock below */
|
||||||
if (!READ_ONCE(pm->accept_subflow))
|
if (!READ_ONCE(pm->accept_subflow))
|
||||||
|
|
@ -507,8 +508,8 @@ bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk)
|
||||||
|
|
||||||
spin_lock_bh(&pm->lock);
|
spin_lock_bh(&pm->lock);
|
||||||
if (READ_ONCE(pm->accept_subflow)) {
|
if (READ_ONCE(pm->accept_subflow)) {
|
||||||
ret = pm->subflows < subflows_max;
|
ret = pm->extra_subflows < subflows_max;
|
||||||
if (ret && ++pm->subflows == subflows_max)
|
if (ret && ++pm->extra_subflows == subflows_max)
|
||||||
WRITE_ONCE(pm->accept_subflow, false);
|
WRITE_ONCE(pm->accept_subflow, false);
|
||||||
}
|
}
|
||||||
spin_unlock_bh(&pm->lock);
|
spin_unlock_bh(&pm->lock);
|
||||||
|
|
@ -594,7 +595,7 @@ void mptcp_pm_subflow_check_next(struct mptcp_sock *msk,
|
||||||
if (mptcp_pm_is_userspace(msk)) {
|
if (mptcp_pm_is_userspace(msk)) {
|
||||||
if (update_subflows) {
|
if (update_subflows) {
|
||||||
spin_lock_bh(&pm->lock);
|
spin_lock_bh(&pm->lock);
|
||||||
pm->subflows--;
|
pm->extra_subflows--;
|
||||||
spin_unlock_bh(&pm->lock);
|
spin_unlock_bh(&pm->lock);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -175,7 +175,7 @@ fill_remote_addr(struct mptcp_sock *msk, struct mptcp_addr_info *local,
|
||||||
if (!mptcp_pm_addr_families_match(sk, local, &remote))
|
if (!mptcp_pm_addr_families_match(sk, local, &remote))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
msk->pm.subflows++;
|
msk->pm.extra_subflows++;
|
||||||
*addrs = remote;
|
*addrs = remote;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
@ -218,10 +218,10 @@ fill_remote_addresses_fullmesh(struct mptcp_sock *msk,
|
||||||
|
|
||||||
/* forbid creating multiple address towards this id */
|
/* forbid creating multiple address towards this id */
|
||||||
__set_bit(addrs[i].id, unavail_id);
|
__set_bit(addrs[i].id, unavail_id);
|
||||||
msk->pm.subflows++;
|
msk->pm.extra_subflows++;
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
if (msk->pm.subflows >= subflows_max)
|
if (msk->pm.extra_subflows >= subflows_max)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -313,7 +313,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk)
|
||||||
pr_debug("local %d:%d signal %d:%d subflows %d:%d\n",
|
pr_debug("local %d:%d signal %d:%d subflows %d:%d\n",
|
||||||
msk->pm.local_addr_used, local_addr_max,
|
msk->pm.local_addr_used, local_addr_max,
|
||||||
msk->pm.add_addr_signaled, add_addr_signal_max,
|
msk->pm.add_addr_signaled, add_addr_signal_max,
|
||||||
msk->pm.subflows, subflows_max);
|
msk->pm.extra_subflows, subflows_max);
|
||||||
|
|
||||||
/* check first for announce */
|
/* check first for announce */
|
||||||
if (msk->pm.add_addr_signaled < add_addr_signal_max) {
|
if (msk->pm.add_addr_signaled < add_addr_signal_max) {
|
||||||
|
|
@ -353,7 +353,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk)
|
||||||
subflow:
|
subflow:
|
||||||
/* check if should create a new subflow */
|
/* check if should create a new subflow */
|
||||||
while (msk->pm.local_addr_used < local_addr_max &&
|
while (msk->pm.local_addr_used < local_addr_max &&
|
||||||
msk->pm.subflows < subflows_max) {
|
msk->pm.extra_subflows < subflows_max) {
|
||||||
struct mptcp_addr_info addrs[MPTCP_PM_ADDR_MAX];
|
struct mptcp_addr_info addrs[MPTCP_PM_ADDR_MAX];
|
||||||
bool fullmesh;
|
bool fullmesh;
|
||||||
int i, nr;
|
int i, nr;
|
||||||
|
|
@ -441,10 +441,10 @@ fill_local_addresses_vec_fullmesh(struct mptcp_sock *msk,
|
||||||
if (is_id0)
|
if (is_id0)
|
||||||
local->addr.id = 0;
|
local->addr.id = 0;
|
||||||
|
|
||||||
msk->pm.subflows++;
|
msk->pm.extra_subflows++;
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
if (msk->pm.subflows >= subflows_max)
|
if (msk->pm.extra_subflows >= subflows_max)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
|
@ -483,10 +483,10 @@ fill_local_addresses_vec_c_flag(struct mptcp_sock *msk,
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
msk->pm.local_addr_used++;
|
msk->pm.local_addr_used++;
|
||||||
msk->pm.subflows++;
|
msk->pm.extra_subflows++;
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
if (msk->pm.subflows >= subflows_max)
|
if (msk->pm.extra_subflows >= subflows_max)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -510,7 +510,7 @@ fill_local_address_any(struct mptcp_sock *msk, struct mptcp_addr_info *remote,
|
||||||
if (!mptcp_pm_addr_families_match(sk, &local->addr, remote))
|
if (!mptcp_pm_addr_families_match(sk, &local->addr, remote))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
msk->pm.subflows++;
|
msk->pm.extra_subflows++;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
@ -586,7 +586,7 @@ static void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk)
|
||||||
if (remote.id)
|
if (remote.id)
|
||||||
msk->pm.add_addr_accepted++;
|
msk->pm.add_addr_accepted++;
|
||||||
if (msk->pm.add_addr_accepted >= add_addr_accept_max ||
|
if (msk->pm.add_addr_accepted >= add_addr_accept_max ||
|
||||||
msk->pm.subflows >= subflows_max)
|
msk->pm.extra_subflows >= subflows_max)
|
||||||
WRITE_ONCE(msk->pm.accept_addr, false);
|
WRITE_ONCE(msk->pm.accept_addr, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1427,7 +1427,7 @@ bool mptcp_pm_nl_check_work_pending(struct mptcp_sock *msk)
|
||||||
{
|
{
|
||||||
struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk);
|
struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk);
|
||||||
|
|
||||||
if (msk->pm.subflows == mptcp_pm_get_subflows_max(msk) ||
|
if (msk->pm.extra_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, msk->pm.id_avail_bitmap,
|
||||||
MPTCP_PM_MAX_ADDR_ID + 1, 0) == MPTCP_PM_MAX_ADDR_ID + 1)) {
|
MPTCP_PM_MAX_ADDR_ID + 1, 0) == MPTCP_PM_MAX_ADDR_ID + 1)) {
|
||||||
WRITE_ONCE(msk->pm.work_pending, false);
|
WRITE_ONCE(msk->pm.work_pending, false);
|
||||||
|
|
|
||||||
|
|
@ -419,7 +419,7 @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
|
||||||
if (err)
|
if (err)
|
||||||
mptcp_userspace_pm_delete_local_addr(msk, &entry);
|
mptcp_userspace_pm_delete_local_addr(msk, &entry);
|
||||||
else
|
else
|
||||||
msk->pm.subflows++;
|
msk->pm.extra_subflows++;
|
||||||
spin_unlock_bh(&msk->pm.lock);
|
spin_unlock_bh(&msk->pm.lock);
|
||||||
|
|
||||||
create_err:
|
create_err:
|
||||||
|
|
|
||||||
|
|
@ -235,7 +235,7 @@ struct mptcp_pm_data {
|
||||||
u8 add_addr_accepted;
|
u8 add_addr_accepted;
|
||||||
u8 local_addr_used;
|
u8 local_addr_used;
|
||||||
u8 pm_type;
|
u8 pm_type;
|
||||||
u8 subflows;
|
u8 extra_subflows;
|
||||||
u8 status;
|
u8 status;
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
@ -1188,7 +1188,7 @@ unsigned int mptcp_pm_get_local_addr_max(const struct mptcp_sock *msk);
|
||||||
/* called under PM lock */
|
/* called under PM lock */
|
||||||
static inline void __mptcp_pm_close_subflow(struct mptcp_sock *msk)
|
static inline void __mptcp_pm_close_subflow(struct mptcp_sock *msk)
|
||||||
{
|
{
|
||||||
if (--msk->pm.subflows < mptcp_pm_get_subflows_max(msk))
|
if (--msk->pm.extra_subflows < mptcp_pm_get_subflows_max(msk))
|
||||||
WRITE_ONCE(msk->pm.accept_subflow, true);
|
WRITE_ONCE(msk->pm.accept_subflow, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1204,7 +1204,7 @@ static inline bool mptcp_pm_add_addr_c_flag_case(struct mptcp_sock *msk)
|
||||||
return READ_ONCE(msk->pm.remote_deny_join_id0) &&
|
return READ_ONCE(msk->pm.remote_deny_join_id0) &&
|
||||||
msk->pm.local_addr_used == 0 &&
|
msk->pm.local_addr_used == 0 &&
|
||||||
mptcp_pm_get_add_addr_accept_max(msk) == 0 &&
|
mptcp_pm_get_add_addr_accept_max(msk) == 0 &&
|
||||||
msk->pm.subflows < mptcp_pm_get_subflows_max(msk);
|
msk->pm.extra_subflows < mptcp_pm_get_subflows_max(msk);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk);
|
void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk);
|
||||||
|
|
|
||||||
|
|
@ -962,7 +962,7 @@ void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info)
|
||||||
|
|
||||||
memset(info, 0, sizeof(*info));
|
memset(info, 0, sizeof(*info));
|
||||||
|
|
||||||
info->mptcpi_subflows = READ_ONCE(msk->pm.subflows);
|
info->mptcpi_extra_subflows = READ_ONCE(msk->pm.extra_subflows);
|
||||||
info->mptcpi_add_addr_signal = READ_ONCE(msk->pm.add_addr_signaled);
|
info->mptcpi_add_addr_signal = READ_ONCE(msk->pm.add_addr_signaled);
|
||||||
info->mptcpi_add_addr_accepted = READ_ONCE(msk->pm.add_addr_accepted);
|
info->mptcpi_add_addr_accepted = READ_ONCE(msk->pm.add_addr_accepted);
|
||||||
info->mptcpi_local_addr_used = READ_ONCE(msk->pm.local_addr_used);
|
info->mptcpi_local_addr_used = READ_ONCE(msk->pm.local_addr_used);
|
||||||
|
|
@ -996,7 +996,7 @@ void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info)
|
||||||
info->mptcpi_bytes_sent = msk->bytes_sent;
|
info->mptcpi_bytes_sent = msk->bytes_sent;
|
||||||
info->mptcpi_bytes_received = msk->bytes_received;
|
info->mptcpi_bytes_received = msk->bytes_received;
|
||||||
info->mptcpi_bytes_retrans = msk->bytes_retrans;
|
info->mptcpi_bytes_retrans = msk->bytes_retrans;
|
||||||
info->mptcpi_subflows_total = info->mptcpi_subflows +
|
info->mptcpi_subflows_total = info->mptcpi_extra_subflows +
|
||||||
__mptcp_has_initial_subflow(msk);
|
__mptcp_has_initial_subflow(msk);
|
||||||
now = tcp_jiffies32;
|
now = tcp_jiffies32;
|
||||||
info->mptcpi_last_data_sent = jiffies_to_msecs(now - msk->last_data_sent);
|
info->mptcpi_last_data_sent = jiffies_to_msecs(now - msk->last_data_sent);
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,7 @@ int _getsockopt_subflow(struct bpf_sockopt *ctx)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
msk = bpf_core_cast(sk, struct mptcp_sock);
|
msk = bpf_core_cast(sk, struct mptcp_sock);
|
||||||
if (msk->pm.subflows != 1) {
|
if (msk->pm.extra_subflows != 1) {
|
||||||
ctx->retval = -1;
|
ctx->retval = -1;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue