diff options
Diffstat (limited to 'net/mptcp/protocol.h')
| -rw-r--r-- | net/mptcp/protocol.h | 15 | 
1 files changed, 12 insertions, 3 deletions
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index ed50f2015dc3..631a7f445f34 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -491,10 +491,9 @@ struct mptcp_subflow_context {  		remote_key_valid : 1,        /* received the peer key from */  		disposable : 1,	    /* ctx can be free at ulp release time */  		stale : 1,	    /* unable to snd/rcv data, do not use for xmit */ -		local_id_valid : 1, /* local_id is correctly initialized */  		valid_csum_seen : 1,        /* at least one csum validated */  		is_mptfo : 1,	    /* subflow is doing TFO */ -		__unused : 9; +		__unused : 10;  	bool	data_avail;  	bool	scheduled;  	u32	remote_nonce; @@ -505,7 +504,7 @@ struct mptcp_subflow_context {  		u8	hmac[MPTCPOPT_HMAC_LEN]; /* MPJ subflow only */  		u64	iasn;	    /* initial ack sequence number, MPC subflows only */  	}; -	u8	local_id; +	s16	local_id;	    /* if negative not initialized yet */  	u8	remote_id;  	u8	reset_seen:1;  	u8	reset_transient:1; @@ -556,6 +555,7 @@ mptcp_subflow_ctx_reset(struct mptcp_subflow_context *subflow)  {  	memset(&subflow->reset, 0, sizeof(subflow->reset));  	subflow->request_mptcp = 1; +	WRITE_ONCE(subflow->local_id, -1);  }  static inline u64 @@ -1022,6 +1022,15 @@ int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);  int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_info *skc);  int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_info *skc); +static inline u8 subflow_get_local_id(const struct mptcp_subflow_context *subflow) +{ +	int local_id = READ_ONCE(subflow->local_id); + +	if (local_id < 0) +		return 0; +	return local_id; +} +  void __init mptcp_pm_nl_init(void);  void mptcp_pm_nl_work(struct mptcp_sock *msk);  void mptcp_pm_nl_rm_subflow_received(struct mptcp_sock *msk,  |