Skip to content

Commit

Permalink
mptcp: send out dedicated packet for ADD_ADDR using port
Browse files Browse the repository at this point in the history
The process is similar to that of the ADD_ADDR IPv6, this patch also sent
out a pure ack for the ADD_ADDR using port.

Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: Geliang Tang <geliangtang@gmail.com>
  • Loading branch information
geliangtang authored and jenkins-tessares committed Dec 9, 2020
1 parent a7429bb commit 1bab32f
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 5 deletions.
3 changes: 2 additions & 1 deletion net/mptcp/options.c
Original file line number Diff line number Diff line change
Expand Up @@ -590,7 +590,8 @@ static bool mptcp_established_options_add_addr(struct sock *sk, struct sk_buff *
bool port;
int len;

if (mptcp_pm_should_add_signal_ipv6(msk) &&
if ((mptcp_pm_should_add_signal_ipv6(msk) ||
mptcp_pm_should_add_signal_port(msk)) &&
skb && skb_is_tcp_pure_ack(skb)) {
pr_debug("drop other suboptions");
opts->suboptions = 0;
Expand Down
3 changes: 2 additions & 1 deletion net/mptcp/pm.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,8 @@ void mptcp_pm_add_addr_received(struct mptcp_sock *msk,

void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk)
{
if (!mptcp_pm_should_add_signal_ipv6(msk))
if (!mptcp_pm_should_add_signal_ipv6(msk) &&
!mptcp_pm_should_add_signal_port(msk))
return;

mptcp_pm_schedule_work(msk, MPTCP_PM_ADD_ADDR_SEND_ACK);
Expand Down
14 changes: 11 additions & 3 deletions net/mptcp/pm_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -407,7 +407,8 @@ void mptcp_pm_nl_add_addr_send_ack(struct mptcp_sock *msk)
{
struct mptcp_subflow_context *subflow;

if (!mptcp_pm_should_add_signal_ipv6(msk))
if (!mptcp_pm_should_add_signal_ipv6(msk) &&
!mptcp_pm_should_add_signal_port(msk))
return;

__mptcp_flush_join_list(msk);
Expand All @@ -417,14 +418,21 @@ void mptcp_pm_nl_add_addr_send_ack(struct mptcp_sock *msk)
u8 add_addr;

spin_unlock_bh(&msk->pm.lock);
pr_debug("send ack for add_addr6");
if (mptcp_pm_should_add_signal_ipv6(msk))
pr_debug("send ack for add_addr6");
if (mptcp_pm_should_add_signal_port(msk))
pr_debug("send ack for add_addr_port");

lock_sock(ssk);
tcp_send_ack(ssk);
release_sock(ssk);
spin_lock_bh(&msk->pm.lock);

add_addr = READ_ONCE(msk->pm.add_addr_signal);
add_addr &= ~BIT(MPTCP_ADD_ADDR_IPV6);
if (mptcp_pm_should_add_signal_ipv6(msk))
add_addr &= ~BIT(MPTCP_ADD_ADDR_IPV6);
if (mptcp_pm_should_add_signal_port(msk))
add_addr &= ~BIT(MPTCP_ADD_ADDR_PORT);
WRITE_ONCE(msk->pm.add_addr_signal, add_addr);
}
}
Expand Down

0 comments on commit 1bab32f

Please sign in to comment.