Commit 0bac966a authored by Mat Martineau's avatar Mat Martineau Committed by David S. Miller

mptcp: Allow DATA_FIN in headers without TCP FIN

RFC 8684-compliant DATA_FIN needs to be sent and ack'd before subflows
are closed with TCP FIN, so write DATA_FIN DSS headers whenever their
transmission has been enabled by the MPTCP connection-level socket.
Signed-off-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0003041e
...@@ -482,17 +482,10 @@ static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb, ...@@ -482,17 +482,10 @@ static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb,
struct mptcp_sock *msk; struct mptcp_sock *msk;
unsigned int ack_size; unsigned int ack_size;
bool ret = false; bool ret = false;
u8 tcp_fin;
if (skb) { mpext = skb ? mptcp_get_ext(skb) : NULL;
mpext = mptcp_get_ext(skb);
tcp_fin = TCP_SKB_CB(skb)->tcp_flags & TCPHDR_FIN;
} else {
mpext = NULL;
tcp_fin = 0;
}
if (!skb || (mpext && mpext->use_map) || tcp_fin) { if (!skb || (mpext && mpext->use_map) || subflow->data_fin_tx_enable) {
unsigned int map_size; unsigned int map_size;
map_size = TCPOLEN_MPTCP_DSS_BASE + TCPOLEN_MPTCP_DSS_MAP64; map_size = TCPOLEN_MPTCP_DSS_BASE + TCPOLEN_MPTCP_DSS_MAP64;
...@@ -502,7 +495,7 @@ static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb, ...@@ -502,7 +495,7 @@ static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb,
if (mpext) if (mpext)
opts->ext_copy = *mpext; opts->ext_copy = *mpext;
if (skb && tcp_fin && subflow->data_fin_tx_enable) if (skb && subflow->data_fin_tx_enable)
mptcp_write_data_fin(subflow, skb, &opts->ext_copy); mptcp_write_data_fin(subflow, skb, &opts->ext_copy);
ret = true; ret = true;
} }
......
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