mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	mptcp: add CurrEstab MIB counter support
Add a new MIB counter named MPTCP_MIB_CURRESTAB to count current established MPTCP connections, similar to TCP_MIB_CURRESTAB. This is useful to quickly list the number of MPTCP connections without having to iterate over all of them. This patch adds a new helper function mptcp_set_state(): if the state switches from or to ESTABLISHED state, this newly added counter is incremented. This helper is going to be used in the following patch. Similar to MPTCP_INC_STATS(), a new helper called MPTCP_DEC_STATS() is also needed to decrement a MIB counter. Signed-off-by: Geliang Tang <geliang.tang@linux.dev> Acked-by: Paolo Abeni <pabeni@redhat.com> Reviewed-by: Matthieu Baerts <matttbe@kernel.org> Signed-off-by: Matthieu Baerts <matttbe@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									42a7889a19
								
							
						
					
					
						commit
						d9cd27b8cd
					
				
					 4 changed files with 28 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -66,6 +66,7 @@ static const struct snmp_mib mptcp_snmp_list[] = {
 | 
			
		|||
	SNMP_MIB_ITEM("RcvWndShared", MPTCP_MIB_RCVWNDSHARED),
 | 
			
		||||
	SNMP_MIB_ITEM("RcvWndConflictUpdate", MPTCP_MIB_RCVWNDCONFLICTUPDATE),
 | 
			
		||||
	SNMP_MIB_ITEM("RcvWndConflict", MPTCP_MIB_RCVWNDCONFLICT),
 | 
			
		||||
	SNMP_MIB_ITEM("MPCurrEstab", MPTCP_MIB_CURRESTAB),
 | 
			
		||||
	SNMP_MIB_SENTINEL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,6 +65,7 @@ enum linux_mptcp_mib_field {
 | 
			
		|||
					 * conflict with another subflow while updating msk rcv wnd
 | 
			
		||||
					 */
 | 
			
		||||
	MPTCP_MIB_RCVWNDCONFLICT,	/* Conflict with while updating msk rcv wnd */
 | 
			
		||||
	MPTCP_MIB_CURRESTAB,		/* Current established MPTCP connections */
 | 
			
		||||
	__MPTCP_MIB_MAX
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -95,4 +96,11 @@ static inline void __MPTCP_INC_STATS(struct net *net,
 | 
			
		|||
		__SNMP_INC_STATS(net->mib.mptcp_statistics, field);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void MPTCP_DEC_STATS(struct net *net,
 | 
			
		||||
				   enum linux_mptcp_mib_field field)
 | 
			
		||||
{
 | 
			
		||||
	if (likely(net->mib.mptcp_statistics))
 | 
			
		||||
		SNMP_DEC_STATS(net->mib.mptcp_statistics, field);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool mptcp_mib_alloc(struct net *net);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2871,6 +2871,24 @@ void mptcp_subflow_shutdown(struct sock *sk, struct sock *ssk, int how)
 | 
			
		|||
	release_sock(ssk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void mptcp_set_state(struct sock *sk, int state)
 | 
			
		||||
{
 | 
			
		||||
	int oldstate = sk->sk_state;
 | 
			
		||||
 | 
			
		||||
	switch (state) {
 | 
			
		||||
	case TCP_ESTABLISHED:
 | 
			
		||||
		if (oldstate != TCP_ESTABLISHED)
 | 
			
		||||
			MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_CURRESTAB);
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	default:
 | 
			
		||||
		if (oldstate == TCP_ESTABLISHED)
 | 
			
		||||
			MPTCP_DEC_STATS(sock_net(sk), MPTCP_MIB_CURRESTAB);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	inet_sk_state_store(sk, state);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const unsigned char new_state[16] = {
 | 
			
		||||
	/* current state:     new state:      action:	*/
 | 
			
		||||
	[0 /* (Invalid) */] = TCP_CLOSE,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -641,6 +641,7 @@ bool __mptcp_close(struct sock *sk, long timeout);
 | 
			
		|||
void mptcp_cancel_work(struct sock *sk);
 | 
			
		||||
void __mptcp_unaccepted_force_close(struct sock *sk);
 | 
			
		||||
void mptcp_set_owner_r(struct sk_buff *skb, struct sock *sk);
 | 
			
		||||
void mptcp_set_state(struct sock *sk, int state);
 | 
			
		||||
 | 
			
		||||
bool mptcp_addresses_equal(const struct mptcp_addr_info *a,
 | 
			
		||||
			   const struct mptcp_addr_info *b, bool use_port);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue