l2tp: remove pppol2tp_session_ioctl()
authorGuillaume Nault <g.nault@alphalink.fr>
Fri, 10 Aug 2018 11:22:01 +0000 (13:22 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 11 Aug 2018 19:13:49 +0000 (12:13 -0700)
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>
include/uapi/linux/ppp-ioctl.h
net/l2tp/l2tp_ppp.c

index 784c2e3e572e013a24aeabf96ef400f453ffb72e..88b5f99903201fa6ca2f0f62cdd2b0e65540952c 100644 (file)
@@ -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;
index 2afd3ab8a551c86ac9834ecefc792b146643e623..bdfbd3ed7e1476558db86077563831248602bc37 100644 (file)
@@ -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);