Commit 8dd5efb1 authored by Geliang Tang's avatar Geliang Tang Committed by David S. Miller

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: default avatarGeliang Tang <geliangtang@gmail.com>
Signed-off-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b65d95ad
...@@ -53,6 +53,7 @@ int mptcp_pm_remove_addr(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_ ...@@ -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 { ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment