mptcp: Track received DATA_FIN sequence number and add related helpers
Incoming DATA_FIN headers need to propagate the presence of the DATA_FIN bit and the associated sequence number to the MPTCP layer, even when arriving on a bare ACK that does not get added to the receive queue. Add structure members to store the DATA_FIN information and helpers to set and check those values. 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:
committed by
David S. Miller
parent
7279da6145
commit
3721b9b646
@@ -782,6 +782,22 @@ static void update_una(struct mptcp_sock *msk,
|
||||
}
|
||||
}
|
||||
|
||||
bool mptcp_update_rcv_data_fin(struct mptcp_sock *msk, u64 data_fin_seq)
|
||||
{
|
||||
/* Skip if DATA_FIN was already received.
|
||||
* If updating simultaneously with the recvmsg loop, values
|
||||
* should match. If they mismatch, the peer is misbehaving and
|
||||
* we will prefer the most recent information.
|
||||
*/
|
||||
if (READ_ONCE(msk->rcv_data_fin) || !READ_ONCE(msk->first))
|
||||
return false;
|
||||
|
||||
WRITE_ONCE(msk->rcv_data_fin_seq, data_fin_seq);
|
||||
WRITE_ONCE(msk->rcv_data_fin, 1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool add_addr_hmac_valid(struct mptcp_sock *msk,
|
||||
struct mptcp_options_received *mp_opt)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user