mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	l2tp: remove pppol2tp_session_ioctl()
pppol2tp_ioctl() has everything in place for handling PPPIOCGL2TPSTATS on session sockets. We just need to copy the stats and set ->session_id. As a side effect of sharing session and tunnel code, ->using_ipsec is properly set even when the request was made using a session socket. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									528534f0de
								
							
						
					
					
						commit
						b0e29063dc
					
				
					 2 changed files with 4 additions and 48 deletions
				
			
		| 
						 | 
				
			
			@ -68,7 +68,7 @@ struct ppp_option_data {
 | 
			
		|||
struct pppol2tp_ioc_stats {
 | 
			
		||||
	__u16		tunnel_id;	/* redundant */
 | 
			
		||||
	__u16		session_id;	/* if zero, get tunnel stats */
 | 
			
		||||
	__u32		using_ipsec:1;	/* valid only for session_id == 0 */
 | 
			
		||||
	__u32		using_ipsec:1;
 | 
			
		||||
	__aligned_u64	tx_packets;
 | 
			
		||||
	__aligned_u64	tx_bytes;
 | 
			
		||||
	__aligned_u64	tx_errors;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1068,52 +1068,6 @@ static int pppol2tp_tunnel_copy_stats(struct pppol2tp_ioc_stats *stats,
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Session ioctl helper.
 | 
			
		||||
 */
 | 
			
		||||
static int pppol2tp_session_ioctl(struct l2tp_session *session,
 | 
			
		||||
				  unsigned int cmd, unsigned long arg)
 | 
			
		||||
{
 | 
			
		||||
	int err = 0;
 | 
			
		||||
	struct sock *sk;
 | 
			
		||||
	struct l2tp_tunnel *tunnel = session->tunnel;
 | 
			
		||||
	struct pppol2tp_ioc_stats stats;
 | 
			
		||||
 | 
			
		||||
	l2tp_dbg(session, L2TP_MSG_CONTROL,
 | 
			
		||||
		 "%s: pppol2tp_session_ioctl(cmd=%#x, arg=%#lx)\n",
 | 
			
		||||
		 session->name, cmd, arg);
 | 
			
		||||
 | 
			
		||||
	sk = pppol2tp_session_get_sock(session);
 | 
			
		||||
	if (!sk)
 | 
			
		||||
		return -EBADR;
 | 
			
		||||
 | 
			
		||||
	switch (cmd) {
 | 
			
		||||
	case PPPIOCGL2TPSTATS:
 | 
			
		||||
		err = -ENXIO;
 | 
			
		||||
		if (!(sk->sk_state & PPPOX_CONNECTED))
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		memset(&stats, 0, sizeof(stats));
 | 
			
		||||
		stats.tunnel_id = tunnel->tunnel_id;
 | 
			
		||||
		stats.session_id = session->session_id;
 | 
			
		||||
		pppol2tp_copy_stats(&stats, &session->stats);
 | 
			
		||||
		if (copy_to_user((void __user *) arg, &stats,
 | 
			
		||||
				 sizeof(stats)))
 | 
			
		||||
			break;
 | 
			
		||||
		l2tp_info(session, L2TP_MSG_CONTROL, "%s: get L2TP stats\n",
 | 
			
		||||
			  session->name);
 | 
			
		||||
		err = 0;
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	default:
 | 
			
		||||
		err = -ENOSYS;
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sock_put(sk);
 | 
			
		||||
 | 
			
		||||
	return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int pppol2tp_ioctl(struct socket *sock, unsigned int cmd,
 | 
			
		||||
			  unsigned long arg)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -1172,7 +1126,9 @@ static int pppol2tp_ioctl(struct socket *sock, unsigned int cmd,
 | 
			
		|||
 | 
			
		||||
			stats.session_id = session_id;
 | 
			
		||||
		} else {
 | 
			
		||||
			return pppol2tp_session_ioctl(session, cmd, arg);
 | 
			
		||||
			memset(&stats, 0, sizeof(stats));
 | 
			
		||||
			pppol2tp_copy_stats(&stats, &session->stats);
 | 
			
		||||
			stats.session_id = session->session_id;
 | 
			
		||||
		}
 | 
			
		||||
		stats.tunnel_id = session->tunnel->tunnel_id;
 | 
			
		||||
		stats.using_ipsec = l2tp_tunnel_uses_xfrm(session->tunnel);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue