mirror of https://gitee.com/openkylin/linux.git
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
|
@ -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 New Issue