mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 14:42:08 +02:00
mptcp: send ack for rm_addr
This patch changes the sending ACK conditions for the ADD_ADDR, send an ACK packet for RM_ADDR too. In mptcp_pm_remove_addr, invoke mptcp_pm_nl_add_addr_send_ack to send the ACK packet. Signed-off-by: Geliang Tang <geliangtang@gmail.com> Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b65d95adb8
commit
8dd5efb1f9
|
|
@ -53,6 +53,7 @@ int mptcp_pm_remove_addr(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_
|
||||||
msk->pm.rm_list_tx = *rm_list;
|
msk->pm.rm_list_tx = *rm_list;
|
||||||
rm_addr |= BIT(MPTCP_RM_ADDR_SIGNAL);
|
rm_addr |= BIT(MPTCP_RM_ADDR_SIGNAL);
|
||||||
WRITE_ONCE(msk->pm.addr_signal, rm_addr);
|
WRITE_ONCE(msk->pm.addr_signal, rm_addr);
|
||||||
|
mptcp_pm_nl_add_addr_send_ack(msk);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -56,8 +56,6 @@ struct pm_nl_pernet {
|
||||||
#define MPTCP_PM_ADDR_MAX 8
|
#define MPTCP_PM_ADDR_MAX 8
|
||||||
#define ADD_ADDR_RETRANS_MAX 3
|
#define ADD_ADDR_RETRANS_MAX 3
|
||||||
|
|
||||||
static void mptcp_pm_nl_add_addr_send_ack(struct mptcp_sock *msk);
|
|
||||||
|
|
||||||
static bool addresses_equal(const struct mptcp_addr_info *a,
|
static bool addresses_equal(const struct mptcp_addr_info *a,
|
||||||
struct mptcp_addr_info *b, bool use_port)
|
struct mptcp_addr_info *b, bool use_port)
|
||||||
{
|
{
|
||||||
|
|
@ -524,14 +522,15 @@ static void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk)
|
||||||
mptcp_pm_nl_add_addr_send_ack(msk);
|
mptcp_pm_nl_add_addr_send_ack(msk);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mptcp_pm_nl_add_addr_send_ack(struct mptcp_sock *msk)
|
void mptcp_pm_nl_add_addr_send_ack(struct mptcp_sock *msk)
|
||||||
{
|
{
|
||||||
struct mptcp_subflow_context *subflow;
|
struct mptcp_subflow_context *subflow;
|
||||||
|
|
||||||
msk_owned_by_me(msk);
|
msk_owned_by_me(msk);
|
||||||
lockdep_assert_held(&msk->pm.lock);
|
lockdep_assert_held(&msk->pm.lock);
|
||||||
|
|
||||||
if (!mptcp_pm_should_add_signal(msk))
|
if (!mptcp_pm_should_add_signal(msk) &&
|
||||||
|
!mptcp_pm_should_rm_signal(msk))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
__mptcp_flush_join_list(msk);
|
__mptcp_flush_join_list(msk);
|
||||||
|
|
@ -540,7 +539,8 @@ static void mptcp_pm_nl_add_addr_send_ack(struct mptcp_sock *msk)
|
||||||
struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
|
struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
|
||||||
|
|
||||||
spin_unlock_bh(&msk->pm.lock);
|
spin_unlock_bh(&msk->pm.lock);
|
||||||
pr_debug("send ack for add_addr%s%s",
|
pr_debug("send ack for %s%s%s",
|
||||||
|
mptcp_pm_should_add_signal(msk) ? "add_addr" : "rm_addr",
|
||||||
mptcp_pm_should_add_signal_ipv6(msk) ? " [ipv6]" : "",
|
mptcp_pm_should_add_signal_ipv6(msk) ? " [ipv6]" : "",
|
||||||
mptcp_pm_should_add_signal_port(msk) ? " [port]" : "");
|
mptcp_pm_should_add_signal_port(msk) ? " [port]" : "");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -650,6 +650,7 @@ void mptcp_pm_add_addr_received(struct mptcp_sock *msk,
|
||||||
void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk,
|
void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk,
|
||||||
struct mptcp_addr_info *addr);
|
struct mptcp_addr_info *addr);
|
||||||
void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk);
|
void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk);
|
||||||
|
void mptcp_pm_nl_add_addr_send_ack(struct mptcp_sock *msk);
|
||||||
void mptcp_pm_rm_addr_received(struct mptcp_sock *msk,
|
void mptcp_pm_rm_addr_received(struct mptcp_sock *msk,
|
||||||
const struct mptcp_rm_list *rm_list);
|
const struct mptcp_rm_list *rm_list);
|
||||||
void mptcp_pm_mp_prio_received(struct sock *sk, u8 bkup);
|
void mptcp_pm_mp_prio_received(struct sock *sk, u8 bkup);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user