linux/net/l2tp/l2tp_ppp.c
<<
>>
Prefs
   1/*****************************************************************************
   2 * Linux PPP over L2TP (PPPoX/PPPoL2TP) Sockets
   3 *
   4 * PPPoX    --- Generic PPP encapsulation socket family
   5 * PPPoL2TP --- PPP over L2TP (RFC 2661)
   6 *
   7 * Version:     2.0.0
   8 *
   9 * Authors:     James Chapman (jchapman@katalix.com)
  10 *
  11 * Based on original work by Martijn van Oosterhout <kleptog@svana.org>
  12 *
  13 * License:
  14 *              This program is free software; you can redistribute it and/or
  15 *              modify it under the terms of the GNU General Public License
  16 *              as published by the Free Software Foundation; either version
  17 *              2 of the License, or (at your option) any later version.
  18 *
  19 */
  20
  21/* This driver handles only L2TP data frames; control frames are handled by a
  22 * userspace application.
  23 *
  24 * To send data in an L2TP session, userspace opens a PPPoL2TP socket and
  25 * attaches it to a bound UDP socket with local tunnel_id / session_id and
  26 * peer tunnel_id / session_id set. Data can then be sent or received using
  27 * regular socket sendmsg() / recvmsg() calls. Kernel parameters of the socket
  28 * can be read or modified using ioctl() or [gs]etsockopt() calls.
  29 *
  30 * When a PPPoL2TP socket is connected with local and peer session_id values
  31 * zero, the socket is treated as a special tunnel management socket.
  32 *
  33 * Here's example userspace code to create a socket for sending/receiving data
  34 * over an L2TP session:-
  35 *
  36 *      struct sockaddr_pppol2tp sax;
  37 *      int fd;
  38 *      int session_fd;
  39 *
  40 *      fd = socket(AF_PPPOX, SOCK_DGRAM, PX_PROTO_OL2TP);
  41 *
  42 *      sax.sa_family = AF_PPPOX;
  43 *      sax.sa_protocol = PX_PROTO_OL2TP;
  44 *      sax.pppol2tp.fd = tunnel_fd;    // bound UDP socket
  45 *      sax.pppol2tp.addr.sin_addr.s_addr = addr->sin_addr.s_addr;
  46 *      sax.pppol2tp.addr.sin_port = addr->sin_port;
  47 *      sax.pppol2tp.addr.sin_family = AF_INET;
  48 *      sax.pppol2tp.s_tunnel  = tunnel_id;
  49 *      sax.pppol2tp.s_session = session_id;
  50 *      sax.pppol2tp.d_tunnel  = peer_tunnel_id;
  51 *      sax.pppol2tp.d_session = peer_session_id;
  52 *
  53 *      session_fd = connect(fd, (struct sockaddr *)&sax, sizeof(sax));
  54 *
  55 * A pppd plugin that allows PPP traffic to be carried over L2TP using
  56 * this driver is available from the OpenL2TP project at
  57 * http://openl2tp.sourceforge.net.
  58 */
  59
  60#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  61
  62#include <linux/module.h>
  63#include <linux/string.h>
  64#include <linux/list.h>
  65#include <linux/uaccess.h>
  66
  67#include <linux/kernel.h>
  68#include <linux/spinlock.h>
  69#include <linux/kthread.h>
  70#include <linux/sched.h>
  71#include <linux/slab.h>
  72#include <linux/errno.h>
  73#include <linux/jiffies.h>
  74
  75#include <linux/netdevice.h>
  76#include <linux/net.h>
  77#include <linux/inetdevice.h>
  78#include <linux/skbuff.h>
  79#include <linux/init.h>
  80#include <linux/ip.h>
  81#include <linux/udp.h>
  82#include <linux/if_pppox.h>
  83#include <linux/if_pppol2tp.h>
  84#include <net/sock.h>
  85#include <linux/ppp_channel.h>
  86#include <linux/ppp_defs.h>
  87#include <linux/ppp-ioctl.h>
  88#include <linux/file.h>
  89#include <linux/hash.h>
  90#include <linux/sort.h>
  91#include <linux/proc_fs.h>
  92#include <linux/l2tp.h>
  93#include <linux/nsproxy.h>
  94#include <net/net_namespace.h>
  95#include <net/netns/generic.h>
  96#include <net/dst.h>
  97#include <net/ip.h>
  98#include <net/udp.h>
  99#include <net/xfrm.h>
 100#include <net/inet_common.h>
 101
 102#include <asm/byteorder.h>
 103#include <linux/atomic.h>
 104
 105#include "l2tp_core.h"
 106
 107#define PPPOL2TP_DRV_VERSION    "V2.0"
 108
 109/* Space for UDP, L2TP and PPP headers */
 110#define PPPOL2TP_HEADER_OVERHEAD        40
 111
 112/* Number of bytes to build transmit L2TP headers.
 113 * Unfortunately the size is different depending on whether sequence numbers
 114 * are enabled.
 115 */
 116#define PPPOL2TP_L2TP_HDR_SIZE_SEQ              10
 117#define PPPOL2TP_L2TP_HDR_SIZE_NOSEQ            6
 118
 119/* Private data of each session. This data lives at the end of struct
 120 * l2tp_session, referenced via session->priv[].
 121 */
 122struct pppol2tp_session {
 123        int                     owner;          /* pid that opened the socket */
 124
 125        struct sock             *sock;          /* Pointer to the session
 126                                                 * PPPoX socket */
 127        struct sock             *tunnel_sock;   /* Pointer to the tunnel UDP
 128                                                 * socket */
 129        int                     flags;          /* accessed by PPPIOCGFLAGS.
 130                                                 * Unused. */
 131};
 132
 133static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb);
 134
 135static const struct ppp_channel_ops pppol2tp_chan_ops = {
 136        .start_xmit =  pppol2tp_xmit,
 137};
 138
 139static const struct proto_ops pppol2tp_ops;
 140
 141/* Helpers to obtain tunnel/session contexts from sockets.
 142 */
 143static inline struct l2tp_session *pppol2tp_sock_to_session(struct sock *sk)
 144{
 145        struct l2tp_session *session;
 146
 147        if (sk == NULL)
 148                return NULL;
 149
 150        sock_hold(sk);
 151        session = (struct l2tp_session *)(sk->sk_user_data);
 152        if (session == NULL) {
 153                sock_put(sk);
 154                goto out;
 155        }
 156
 157        BUG_ON(session->magic != L2TP_SESSION_MAGIC);
 158
 159out:
 160        return session;
 161}
 162
 163/*****************************************************************************
 164 * Receive data handling
 165 *****************************************************************************/
 166
 167static int pppol2tp_recv_payload_hook(struct sk_buff *skb)
 168{
 169        /* Skip PPP header, if present.  In testing, Microsoft L2TP clients
 170         * don't send the PPP header (PPP header compression enabled), but
 171         * other clients can include the header. So we cope with both cases
 172         * here. The PPP header is always FF03 when using L2TP.
 173         *
 174         * Note that skb->data[] isn't dereferenced from a u16 ptr here since
 175         * the field may be unaligned.
 176         */
 177        if (!pskb_may_pull(skb, 2))
 178                return 1;
 179
 180        if ((skb->data[0] == 0xff) && (skb->data[1] == 0x03))
 181                skb_pull(skb, 2);
 182
 183        return 0;
 184}
 185
 186/* Receive message. This is the recvmsg for the PPPoL2TP socket.
 187 */
 188static int pppol2tp_recvmsg(struct socket *sock, struct msghdr *msg,
 189                            size_t len, int flags)
 190{
 191        int err;
 192        struct sk_buff *skb;
 193        struct sock *sk = sock->sk;
 194
 195        err = -EIO;
 196        if (sk->sk_state & PPPOX_BOUND)
 197                goto end;
 198
 199        err = 0;
 200        skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
 201                                flags & MSG_DONTWAIT, &err);
 202        if (!skb)
 203                goto end;
 204
 205        if (len > skb->len)
 206                len = skb->len;
 207        else if (len < skb->len)
 208                msg->msg_flags |= MSG_TRUNC;
 209
 210        err = skb_copy_datagram_msg(skb, 0, msg, len);
 211        if (likely(err == 0))
 212                err = len;
 213
 214        kfree_skb(skb);
 215end:
 216        return err;
 217}
 218
 219static void pppol2tp_recv(struct l2tp_session *session, struct sk_buff *skb, int data_len)
 220{
 221        struct pppol2tp_session *ps = l2tp_session_priv(session);
 222        struct sock *sk = NULL;
 223
 224        /* If the socket is bound, send it in to PPP's input queue. Otherwise
 225         * queue it on the session socket.
 226         */
 227        sk = ps->sock;
 228        if (sk == NULL)
 229                goto no_sock;
 230
 231        if (sk->sk_state & PPPOX_BOUND) {
 232                struct pppox_sock *po;
 233                l2tp_dbg(session, PPPOL2TP_MSG_DATA,
 234                         "%s: recv %d byte data frame, passing to ppp\n",
 235                         session->name, data_len);
 236
 237                /* We need to forget all info related to the L2TP packet
 238                 * gathered in the skb as we are going to reuse the same
 239                 * skb for the inner packet.
 240                 * Namely we need to:
 241                 * - reset xfrm (IPSec) information as it applies to
 242                 *   the outer L2TP packet and not to the inner one
 243                 * - release the dst to force a route lookup on the inner
 244                 *   IP packet since skb->dst currently points to the dst
 245                 *   of the UDP tunnel
 246                 * - reset netfilter information as it doesn't apply
 247                 *   to the inner packet either
 248                 */
 249                secpath_reset(skb);
 250                skb_dst_drop(skb);
 251                nf_reset(skb);
 252
 253                po = pppox_sk(sk);
 254                ppp_input(&po->chan, skb);
 255        } else {
 256                l2tp_dbg(session, PPPOL2TP_MSG_DATA,
 257                         "%s: recv %d byte data frame, passing to L2TP socket\n",
 258                         session->name, data_len);
 259
 260                if (sock_queue_rcv_skb(sk, skb) < 0) {
 261                        atomic_long_inc(&session->stats.rx_errors);
 262                        kfree_skb(skb);
 263                }
 264        }
 265
 266        return;
 267
 268no_sock:
 269        l2tp_info(session, PPPOL2TP_MSG_DATA, "%s: no socket\n", session->name);
 270        kfree_skb(skb);
 271}
 272
 273static void pppol2tp_session_sock_hold(struct l2tp_session *session)
 274{
 275        struct pppol2tp_session *ps = l2tp_session_priv(session);
 276
 277        if (ps->sock)
 278                sock_hold(ps->sock);
 279}
 280
 281static void pppol2tp_session_sock_put(struct l2tp_session *session)
 282{
 283        struct pppol2tp_session *ps = l2tp_session_priv(session);
 284
 285        if (ps->sock)
 286                sock_put(ps->sock);
 287}
 288
 289/************************************************************************
 290 * Transmit handling
 291 ***********************************************************************/
 292
 293/* This is the sendmsg for the PPPoL2TP pppol2tp_session socket.  We come here
 294 * when a user application does a sendmsg() on the session socket. L2TP and
 295 * PPP headers must be inserted into the user's data.
 296 */
 297static int pppol2tp_sendmsg(struct socket *sock, struct msghdr *m,
 298                            size_t total_len)
 299{
 300        static const unsigned char ppph[2] = { 0xff, 0x03 };
 301        struct sock *sk = sock->sk;
 302        struct sk_buff *skb;
 303        int error;
 304        struct l2tp_session *session;
 305        struct l2tp_tunnel *tunnel;
 306        struct pppol2tp_session *ps;
 307        int uhlen;
 308
 309        error = -ENOTCONN;
 310        if (sock_flag(sk, SOCK_DEAD) || !(sk->sk_state & PPPOX_CONNECTED))
 311                goto error;
 312
 313        /* Get session and tunnel contexts */
 314        error = -EBADF;
 315        session = pppol2tp_sock_to_session(sk);
 316        if (session == NULL)
 317                goto error;
 318
 319        ps = l2tp_session_priv(session);
 320        tunnel = l2tp_sock_to_tunnel(ps->tunnel_sock);
 321        if (tunnel == NULL)
 322                goto error_put_sess;
 323
 324        uhlen = (tunnel->encap == L2TP_ENCAPTYPE_UDP) ? sizeof(struct udphdr) : 0;
 325
 326        /* Allocate a socket buffer */
 327        error = -ENOMEM;
 328        skb = sock_wmalloc(sk, NET_SKB_PAD + sizeof(struct iphdr) +
 329                           uhlen + session->hdr_len +
 330                           sizeof(ppph) + total_len,
 331                           0, GFP_KERNEL);
 332        if (!skb)
 333                goto error_put_sess_tun;
 334
 335        /* Reserve space for headers. */
 336        skb_reserve(skb, NET_SKB_PAD);
 337        skb_reset_network_header(skb);
 338        skb_reserve(skb, sizeof(struct iphdr));
 339        skb_reset_transport_header(skb);
 340        skb_reserve(skb, uhlen);
 341
 342        /* Add PPP header */
 343        skb->data[0] = ppph[0];
 344        skb->data[1] = ppph[1];
 345        skb_put(skb, 2);
 346
 347        /* Copy user data into skb */
 348        error = memcpy_from_msg(skb_put(skb, total_len), m, total_len);
 349        if (error < 0) {
 350                kfree_skb(skb);
 351                goto error_put_sess_tun;
 352        }
 353
 354        local_bh_disable();
 355        l2tp_xmit_skb(session, skb, session->hdr_len);
 356        local_bh_enable();
 357
 358        sock_put(ps->tunnel_sock);
 359        sock_put(sk);
 360
 361        return total_len;
 362
 363error_put_sess_tun:
 364        sock_put(ps->tunnel_sock);
 365error_put_sess:
 366        sock_put(sk);
 367error:
 368        return error;
 369}
 370
 371/* Transmit function called by generic PPP driver.  Sends PPP frame
 372 * over PPPoL2TP socket.
 373 *
 374 * This is almost the same as pppol2tp_sendmsg(), but rather than
 375 * being called with a msghdr from userspace, it is called with a skb
 376 * from the kernel.
 377 *
 378 * The supplied skb from ppp doesn't have enough headroom for the
 379 * insertion of L2TP, UDP and IP headers so we need to allocate more
 380 * headroom in the skb. This will create a cloned skb. But we must be
 381 * careful in the error case because the caller will expect to free
 382 * the skb it supplied, not our cloned skb. So we take care to always
 383 * leave the original skb unfreed if we return an error.
 384 */
 385static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
 386{
 387        static const u8 ppph[2] = { 0xff, 0x03 };
 388        struct sock *sk = (struct sock *) chan->private;
 389        struct sock *sk_tun;
 390        struct l2tp_session *session;
 391        struct l2tp_tunnel *tunnel;
 392        struct pppol2tp_session *ps;
 393        int uhlen, headroom;
 394
 395        if (sock_flag(sk, SOCK_DEAD) || !(sk->sk_state & PPPOX_CONNECTED))
 396                goto abort;
 397
 398        /* Get session and tunnel contexts from the socket */
 399        session = pppol2tp_sock_to_session(sk);
 400        if (session == NULL)
 401                goto abort;
 402
 403        ps = l2tp_session_priv(session);
 404        sk_tun = ps->tunnel_sock;
 405        if (sk_tun == NULL)
 406                goto abort_put_sess;
 407        tunnel = l2tp_sock_to_tunnel(sk_tun);
 408        if (tunnel == NULL)
 409                goto abort_put_sess;
 410
 411        uhlen = (tunnel->encap == L2TP_ENCAPTYPE_UDP) ? sizeof(struct udphdr) : 0;
 412        headroom = NET_SKB_PAD +
 413                   sizeof(struct iphdr) + /* IP header */
 414                   uhlen +              /* UDP header (if L2TP_ENCAPTYPE_UDP) */
 415                   session->hdr_len +   /* L2TP header */
 416                   sizeof(ppph);        /* PPP header */
 417        if (skb_cow_head(skb, headroom))
 418                goto abort_put_sess_tun;
 419
 420        /* Setup PPP header */
 421        __skb_push(skb, sizeof(ppph));
 422        skb->data[0] = ppph[0];
 423        skb->data[1] = ppph[1];
 424
 425        local_bh_disable();
 426        l2tp_xmit_skb(session, skb, session->hdr_len);
 427        local_bh_enable();
 428
 429        sock_put(sk_tun);
 430        sock_put(sk);
 431        return 1;
 432
 433abort_put_sess_tun:
 434        sock_put(sk_tun);
 435abort_put_sess:
 436        sock_put(sk);
 437abort:
 438        /* Free the original skb */
 439        kfree_skb(skb);
 440        return 1;
 441}
 442
 443/*****************************************************************************
 444 * Session (and tunnel control) socket create/destroy.
 445 *****************************************************************************/
 446
 447/* Called by l2tp_core when a session socket is being closed.
 448 */
 449static void pppol2tp_session_close(struct l2tp_session *session)
 450{
 451        struct pppol2tp_session *ps = l2tp_session_priv(session);
 452        struct sock *sk = ps->sock;
 453        struct socket *sock = sk->sk_socket;
 454
 455        BUG_ON(session->magic != L2TP_SESSION_MAGIC);
 456
 457        if (sock) {
 458                inet_shutdown(sock, 2);
 459                /* Don't let the session go away before our socket does */
 460                l2tp_session_inc_refcount(session);
 461        }
 462}
 463
 464/* Really kill the session socket. (Called from sock_put() if
 465 * refcnt == 0.)
 466 */
 467static void pppol2tp_session_destruct(struct sock *sk)
 468{
 469        struct l2tp_session *session = sk->sk_user_data;
 470        if (session) {
 471                sk->sk_user_data = NULL;
 472                BUG_ON(session->magic != L2TP_SESSION_MAGIC);
 473                l2tp_session_dec_refcount(session);
 474        }
 475}
 476
 477/* Called when the PPPoX socket (session) is closed.
 478 */
 479static int pppol2tp_release(struct socket *sock)
 480{
 481        struct sock *sk = sock->sk;
 482        struct l2tp_session *session;
 483        int error;
 484
 485        if (!sk)
 486                return 0;
 487
 488        error = -EBADF;
 489        lock_sock(sk);
 490        if (sock_flag(sk, SOCK_DEAD) != 0)
 491                goto error;
 492
 493        pppox_unbind_sock(sk);
 494
 495        /* Signal the death of the socket. */
 496        sk->sk_state = PPPOX_DEAD;
 497        sock_orphan(sk);
 498        sock->sk = NULL;
 499
 500        session = pppol2tp_sock_to_session(sk);
 501
 502        /* Purge any queued data */
 503        if (session != NULL) {
 504                __l2tp_session_unhash(session);
 505                l2tp_session_queue_purge(session);
 506                sock_put(sk);
 507        }
 508        skb_queue_purge(&sk->sk_receive_queue);
 509        skb_queue_purge(&sk->sk_write_queue);
 510
 511        release_sock(sk);
 512
 513        /* This will delete the session context via
 514         * pppol2tp_session_destruct() if the socket's refcnt drops to
 515         * zero.
 516         */
 517        sock_put(sk);
 518
 519        return 0;
 520
 521error:
 522        release_sock(sk);
 523        return error;
 524}
 525
 526static struct proto pppol2tp_sk_proto = {
 527        .name     = "PPPOL2TP",
 528        .owner    = THIS_MODULE,
 529        .obj_size = sizeof(struct pppox_sock),
 530};
 531
 532static int pppol2tp_backlog_recv(struct sock *sk, struct sk_buff *skb)
 533{
 534        int rc;
 535
 536        rc = l2tp_udp_encap_recv(sk, skb);
 537        if (rc)
 538                kfree_skb(skb);
 539
 540        return NET_RX_SUCCESS;
 541}
 542
 543/* socket() handler. Initialize a new struct sock.
 544 */
 545static int pppol2tp_create(struct net *net, struct socket *sock)
 546{
 547        int error = -ENOMEM;
 548        struct sock *sk;
 549
 550        sk = sk_alloc(net, PF_PPPOX, GFP_KERNEL, &pppol2tp_sk_proto);
 551        if (!sk)
 552                goto out;
 553
 554        sock_init_data(sock, sk);
 555
 556        sock->state  = SS_UNCONNECTED;
 557        sock->ops    = &pppol2tp_ops;
 558
 559        sk->sk_backlog_rcv = pppol2tp_backlog_recv;
 560        sk->sk_protocol    = PX_PROTO_OL2TP;
 561        sk->sk_family      = PF_PPPOX;
 562        sk->sk_state       = PPPOX_NONE;
 563        sk->sk_type        = SOCK_STREAM;
 564        sk->sk_destruct    = pppol2tp_session_destruct;
 565
 566        error = 0;
 567
 568out:
 569        return error;
 570}
 571
 572#if defined(CONFIG_L2TP_DEBUGFS) || defined(CONFIG_L2TP_DEBUGFS_MODULE)
 573static void pppol2tp_show(struct seq_file *m, void *arg)
 574{
 575        struct l2tp_session *session = arg;
 576        struct pppol2tp_session *ps = l2tp_session_priv(session);
 577
 578        if (ps) {
 579                struct pppox_sock *po = pppox_sk(ps->sock);
 580                if (po)
 581                        seq_printf(m, "   interface %s\n", ppp_dev_name(&po->chan));
 582        }
 583}
 584#endif
 585
 586/* connect() handler. Attach a PPPoX socket to a tunnel UDP socket
 587 */
 588static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr,
 589                            int sockaddr_len, int flags)
 590{
 591        struct sock *sk = sock->sk;
 592        struct sockaddr_pppol2tp *sp = (struct sockaddr_pppol2tp *) uservaddr;
 593        struct pppox_sock *po = pppox_sk(sk);
 594        struct l2tp_session *session = NULL;
 595        struct l2tp_tunnel *tunnel;
 596        struct pppol2tp_session *ps;
 597        struct dst_entry *dst;
 598        struct l2tp_session_cfg cfg = { 0, };
 599        int error = 0;
 600        u32 tunnel_id, peer_tunnel_id;
 601        u32 session_id, peer_session_id;
 602        int ver = 2;
 603        int fd;
 604
 605        lock_sock(sk);
 606
 607        error = -EINVAL;
 608        if (sp->sa_protocol != PX_PROTO_OL2TP)
 609                goto end;
 610
 611        /* Check for already bound sockets */
 612        error = -EBUSY;
 613        if (sk->sk_state & PPPOX_CONNECTED)
 614                goto end;
 615
 616        /* We don't supporting rebinding anyway */
 617        error = -EALREADY;
 618        if (sk->sk_user_data)
 619                goto end; /* socket is already attached */
 620
 621        /* Get params from socket address. Handle L2TPv2 and L2TPv3.
 622         * This is nasty because there are different sockaddr_pppol2tp
 623         * structs for L2TPv2, L2TPv3, over IPv4 and IPv6. We use
 624         * the sockaddr size to determine which structure the caller
 625         * is using.
 626         */
 627        peer_tunnel_id = 0;
 628        if (sockaddr_len == sizeof(struct sockaddr_pppol2tp)) {
 629                fd = sp->pppol2tp.fd;
 630                tunnel_id = sp->pppol2tp.s_tunnel;
 631                peer_tunnel_id = sp->pppol2tp.d_tunnel;
 632                session_id = sp->pppol2tp.s_session;
 633                peer_session_id = sp->pppol2tp.d_session;
 634        } else if (sockaddr_len == sizeof(struct sockaddr_pppol2tpv3)) {
 635                struct sockaddr_pppol2tpv3 *sp3 =
 636                        (struct sockaddr_pppol2tpv3 *) sp;
 637                ver = 3;
 638                fd = sp3->pppol2tp.fd;
 639                tunnel_id = sp3->pppol2tp.s_tunnel;
 640                peer_tunnel_id = sp3->pppol2tp.d_tunnel;
 641                session_id = sp3->pppol2tp.s_session;
 642                peer_session_id = sp3->pppol2tp.d_session;
 643        } else if (sockaddr_len == sizeof(struct sockaddr_pppol2tpin6)) {
 644                struct sockaddr_pppol2tpin6 *sp6 =
 645                        (struct sockaddr_pppol2tpin6 *) sp;
 646                fd = sp6->pppol2tp.fd;
 647                tunnel_id = sp6->pppol2tp.s_tunnel;
 648                peer_tunnel_id = sp6->pppol2tp.d_tunnel;
 649                session_id = sp6->pppol2tp.s_session;
 650                peer_session_id = sp6->pppol2tp.d_session;
 651        } else if (sockaddr_len == sizeof(struct sockaddr_pppol2tpv3in6)) {
 652                struct sockaddr_pppol2tpv3in6 *sp6 =
 653                        (struct sockaddr_pppol2tpv3in6 *) sp;
 654                ver = 3;
 655                fd = sp6->pppol2tp.fd;
 656                tunnel_id = sp6->pppol2tp.s_tunnel;
 657                peer_tunnel_id = sp6->pppol2tp.d_tunnel;
 658                session_id = sp6->pppol2tp.s_session;
 659                peer_session_id = sp6->pppol2tp.d_session;
 660        } else {
 661                error = -EINVAL;
 662                goto end; /* bad socket address */
 663        }
 664
 665        /* Don't bind if tunnel_id is 0 */
 666        error = -EINVAL;
 667        if (tunnel_id == 0)
 668                goto end;
 669
 670        tunnel = l2tp_tunnel_find(sock_net(sk), tunnel_id);
 671
 672        /* Special case: create tunnel context if session_id and
 673         * peer_session_id is 0. Otherwise look up tunnel using supplied
 674         * tunnel id.
 675         */
 676        if ((session_id == 0) && (peer_session_id == 0)) {
 677                if (tunnel == NULL) {
 678                        struct l2tp_tunnel_cfg tcfg = {
 679                                .encap = L2TP_ENCAPTYPE_UDP,
 680                                .debug = 0,
 681                        };
 682                        error = l2tp_tunnel_create(sock_net(sk), fd, ver, tunnel_id, peer_tunnel_id, &tcfg, &tunnel);
 683                        if (error < 0)
 684                                goto end;
 685                }
 686        } else {
 687                /* Error if we can't find the tunnel */
 688                error = -ENOENT;
 689                if (tunnel == NULL)
 690                        goto end;
 691
 692                /* Error if socket is not prepped */
 693                if (tunnel->sock == NULL)
 694                        goto end;
 695        }
 696
 697        if (tunnel->recv_payload_hook == NULL)
 698                tunnel->recv_payload_hook = pppol2tp_recv_payload_hook;
 699
 700        if (tunnel->peer_tunnel_id == 0)
 701                tunnel->peer_tunnel_id = peer_tunnel_id;
 702
 703        /* Create session if it doesn't already exist. We handle the
 704         * case where a session was previously created by the netlink
 705         * interface by checking that the session doesn't already have
 706         * a socket and its tunnel socket are what we expect. If any
 707         * of those checks fail, return EEXIST to the caller.
 708         */
 709        session = l2tp_session_find(sock_net(sk), tunnel, session_id);
 710        if (session == NULL) {
 711                /* Default MTU must allow space for UDP/L2TP/PPP
 712                 * headers.
 713                 */
 714                cfg.mtu = cfg.mru = 1500 - PPPOL2TP_HEADER_OVERHEAD;
 715
 716                /* Allocate and initialize a new session context. */
 717                session = l2tp_session_create(sizeof(struct pppol2tp_session),
 718                                              tunnel, session_id,
 719                                              peer_session_id, &cfg);
 720                if (session == NULL) {
 721                        error = -ENOMEM;
 722                        goto end;
 723                }
 724        } else {
 725                ps = l2tp_session_priv(session);
 726                error = -EEXIST;
 727                if (ps->sock != NULL)
 728                        goto end;
 729
 730                /* consistency checks */
 731                if (ps->tunnel_sock != tunnel->sock)
 732                        goto end;
 733        }
 734
 735        /* Associate session with its PPPoL2TP socket */
 736        ps = l2tp_session_priv(session);
 737        ps->owner            = current->pid;
 738        ps->sock             = sk;
 739        ps->tunnel_sock = tunnel->sock;
 740
 741        session->recv_skb       = pppol2tp_recv;
 742        session->session_close  = pppol2tp_session_close;
 743#if defined(CONFIG_L2TP_DEBUGFS) || defined(CONFIG_L2TP_DEBUGFS_MODULE)
 744        session->show           = pppol2tp_show;
 745#endif
 746
 747        /* We need to know each time a skb is dropped from the reorder
 748         * queue.
 749         */
 750        session->ref = pppol2tp_session_sock_hold;
 751        session->deref = pppol2tp_session_sock_put;
 752
 753        /* If PMTU discovery was enabled, use the MTU that was discovered */
 754        dst = sk_dst_get(tunnel->sock);
 755        if (dst != NULL) {
 756                u32 pmtu = dst_mtu(dst);
 757
 758                if (pmtu != 0)
 759                        session->mtu = session->mru = pmtu -
 760                                PPPOL2TP_HEADER_OVERHEAD;
 761                dst_release(dst);
 762        }
 763
 764        /* Special case: if source & dest session_id == 0x0000, this
 765         * socket is being created to manage the tunnel. Just set up
 766         * the internal context for use by ioctl() and sockopt()
 767         * handlers.
 768         */
 769        if ((session->session_id == 0) &&
 770            (session->peer_session_id == 0)) {
 771                error = 0;
 772                goto out_no_ppp;
 773        }
 774
 775        /* The only header we need to worry about is the L2TP
 776         * header. This size is different depending on whether
 777         * sequence numbers are enabled for the data channel.
 778         */
 779        po->chan.hdrlen = PPPOL2TP_L2TP_HDR_SIZE_NOSEQ;
 780
 781        po->chan.private = sk;
 782        po->chan.ops     = &pppol2tp_chan_ops;
 783        po->chan.mtu     = session->mtu;
 784
 785        error = ppp_register_net_channel(sock_net(sk), &po->chan);
 786        if (error)
 787                goto end;
 788
 789out_no_ppp:
 790        /* This is how we get the session context from the socket. */
 791        sk->sk_user_data = session;
 792        sk->sk_state = PPPOX_CONNECTED;
 793        l2tp_info(session, PPPOL2TP_MSG_CONTROL, "%s: created\n",
 794                  session->name);
 795
 796end:
 797        release_sock(sk);
 798
 799        return error;
 800}
 801
 802#ifdef CONFIG_L2TP_V3
 803
 804/* Called when creating sessions via the netlink interface.
 805 */
 806static int pppol2tp_session_create(struct net *net, u32 tunnel_id, u32 session_id, u32 peer_session_id, struct l2tp_session_cfg *cfg)
 807{
 808        int error;
 809        struct l2tp_tunnel *tunnel;
 810        struct l2tp_session *session;
 811        struct pppol2tp_session *ps;
 812
 813        tunnel = l2tp_tunnel_find(net, tunnel_id);
 814
 815        /* Error if we can't find the tunnel */
 816        error = -ENOENT;
 817        if (tunnel == NULL)
 818                goto out;
 819
 820        /* Error if tunnel socket is not prepped */
 821        if (tunnel->sock == NULL)
 822                goto out;
 823
 824        /* Check that this session doesn't already exist */
 825        error = -EEXIST;
 826        session = l2tp_session_find(net, tunnel, session_id);
 827        if (session != NULL)
 828                goto out;
 829
 830        /* Default MTU values. */
 831        if (cfg->mtu == 0)
 832                cfg->mtu = 1500 - PPPOL2TP_HEADER_OVERHEAD;
 833        if (cfg->mru == 0)
 834                cfg->mru = cfg->mtu;
 835
 836        /* Allocate and initialize a new session context. */
 837        error = -ENOMEM;
 838        session = l2tp_session_create(sizeof(struct pppol2tp_session),
 839                                      tunnel, session_id,
 840                                      peer_session_id, cfg);
 841        if (session == NULL)
 842                goto out;
 843
 844        ps = l2tp_session_priv(session);
 845        ps->tunnel_sock = tunnel->sock;
 846
 847        l2tp_info(session, PPPOL2TP_MSG_CONTROL, "%s: created\n",
 848                  session->name);
 849
 850        error = 0;
 851
 852out:
 853        return error;
 854}
 855
 856#endif /* CONFIG_L2TP_V3 */
 857
 858/* getname() support.
 859 */
 860static int pppol2tp_getname(struct socket *sock, struct sockaddr *uaddr,
 861                            int *usockaddr_len, int peer)
 862{
 863        int len = 0;
 864        int error = 0;
 865        struct l2tp_session *session;
 866        struct l2tp_tunnel *tunnel;
 867        struct sock *sk = sock->sk;
 868        struct inet_sock *inet;
 869        struct pppol2tp_session *pls;
 870
 871        error = -ENOTCONN;
 872        if (sk == NULL)
 873                goto end;
 874        if (sk->sk_state != PPPOX_CONNECTED)
 875                goto end;
 876
 877        error = -EBADF;
 878        session = pppol2tp_sock_to_session(sk);
 879        if (session == NULL)
 880                goto end;
 881
 882        pls = l2tp_session_priv(session);
 883        tunnel = l2tp_sock_to_tunnel(pls->tunnel_sock);
 884        if (tunnel == NULL) {
 885                error = -EBADF;
 886                goto end_put_sess;
 887        }
 888
 889        inet = inet_sk(tunnel->sock);
 890        if ((tunnel->version == 2) && (tunnel->sock->sk_family == AF_INET)) {
 891                struct sockaddr_pppol2tp sp;
 892                len = sizeof(sp);
 893                memset(&sp, 0, len);
 894                sp.sa_family    = AF_PPPOX;
 895                sp.sa_protocol  = PX_PROTO_OL2TP;
 896                sp.pppol2tp.fd  = tunnel->fd;
 897                sp.pppol2tp.pid = pls->owner;
 898                sp.pppol2tp.s_tunnel = tunnel->tunnel_id;
 899                sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id;
 900                sp.pppol2tp.s_session = session->session_id;
 901                sp.pppol2tp.d_session = session->peer_session_id;
 902                sp.pppol2tp.addr.sin_family = AF_INET;
 903                sp.pppol2tp.addr.sin_port = inet->inet_dport;
 904                sp.pppol2tp.addr.sin_addr.s_addr = inet->inet_daddr;
 905                memcpy(uaddr, &sp, len);
 906#if IS_ENABLED(CONFIG_IPV6)
 907        } else if ((tunnel->version == 2) &&
 908                   (tunnel->sock->sk_family == AF_INET6)) {
 909                struct sockaddr_pppol2tpin6 sp;
 910
 911                len = sizeof(sp);
 912                memset(&sp, 0, len);
 913                sp.sa_family    = AF_PPPOX;
 914                sp.sa_protocol  = PX_PROTO_OL2TP;
 915                sp.pppol2tp.fd  = tunnel->fd;
 916                sp.pppol2tp.pid = pls->owner;
 917                sp.pppol2tp.s_tunnel = tunnel->tunnel_id;
 918                sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id;
 919                sp.pppol2tp.s_session = session->session_id;
 920                sp.pppol2tp.d_session = session->peer_session_id;
 921                sp.pppol2tp.addr.sin6_family = AF_INET6;
 922                sp.pppol2tp.addr.sin6_port = inet->inet_dport;
 923                memcpy(&sp.pppol2tp.addr.sin6_addr, &tunnel->sock->sk_v6_daddr,
 924                       sizeof(tunnel->sock->sk_v6_daddr));
 925                memcpy(uaddr, &sp, len);
 926        } else if ((tunnel->version == 3) &&
 927                   (tunnel->sock->sk_family == AF_INET6)) {
 928                struct sockaddr_pppol2tpv3in6 sp;
 929
 930                len = sizeof(sp);
 931                memset(&sp, 0, len);
 932                sp.sa_family    = AF_PPPOX;
 933                sp.sa_protocol  = PX_PROTO_OL2TP;
 934                sp.pppol2tp.fd  = tunnel->fd;
 935                sp.pppol2tp.pid = pls->owner;
 936                sp.pppol2tp.s_tunnel = tunnel->tunnel_id;
 937                sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id;
 938                sp.pppol2tp.s_session = session->session_id;
 939                sp.pppol2tp.d_session = session->peer_session_id;
 940                sp.pppol2tp.addr.sin6_family = AF_INET6;
 941                sp.pppol2tp.addr.sin6_port = inet->inet_dport;
 942                memcpy(&sp.pppol2tp.addr.sin6_addr, &tunnel->sock->sk_v6_daddr,
 943                       sizeof(tunnel->sock->sk_v6_daddr));
 944                memcpy(uaddr, &sp, len);
 945#endif
 946        } else if (tunnel->version == 3) {
 947                struct sockaddr_pppol2tpv3 sp;
 948                len = sizeof(sp);
 949                memset(&sp, 0, len);
 950                sp.sa_family    = AF_PPPOX;
 951                sp.sa_protocol  = PX_PROTO_OL2TP;
 952                sp.pppol2tp.fd  = tunnel->fd;
 953                sp.pppol2tp.pid = pls->owner;
 954                sp.pppol2tp.s_tunnel = tunnel->tunnel_id;
 955                sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id;
 956                sp.pppol2tp.s_session = session->session_id;
 957                sp.pppol2tp.d_session = session->peer_session_id;
 958                sp.pppol2tp.addr.sin_family = AF_INET;
 959                sp.pppol2tp.addr.sin_port = inet->inet_dport;
 960                sp.pppol2tp.addr.sin_addr.s_addr = inet->inet_daddr;
 961                memcpy(uaddr, &sp, len);
 962        }
 963
 964        *usockaddr_len = len;
 965
 966        sock_put(pls->tunnel_sock);
 967end_put_sess:
 968        sock_put(sk);
 969        error = 0;
 970
 971end:
 972        return error;
 973}
 974
 975/****************************************************************************
 976 * ioctl() handlers.
 977 *
 978 * The PPPoX socket is created for L2TP sessions: tunnels have their own UDP
 979 * sockets. However, in order to control kernel tunnel features, we allow
 980 * userspace to create a special "tunnel" PPPoX socket which is used for
 981 * control only.  Tunnel PPPoX sockets have session_id == 0 and simply allow
 982 * the user application to issue L2TP setsockopt(), getsockopt() and ioctl()
 983 * calls.
 984 ****************************************************************************/
 985
 986static void pppol2tp_copy_stats(struct pppol2tp_ioc_stats *dest,
 987                                struct l2tp_stats *stats)
 988{
 989        dest->tx_packets = atomic_long_read(&stats->tx_packets);
 990        dest->tx_bytes = atomic_long_read(&stats->tx_bytes);
 991        dest->tx_errors = atomic_long_read(&stats->tx_errors);
 992        dest->rx_packets = atomic_long_read(&stats->rx_packets);
 993        dest->rx_bytes = atomic_long_read(&stats->rx_bytes);
 994        dest->rx_seq_discards = atomic_long_read(&stats->rx_seq_discards);
 995        dest->rx_oos_packets = atomic_long_read(&stats->rx_oos_packets);
 996        dest->rx_errors = atomic_long_read(&stats->rx_errors);
 997}
 998
 999/* Session ioctl helper.
1000 */
1001static int pppol2tp_session_ioctl(struct l2tp_session *session,
1002                                  unsigned int cmd, unsigned long arg)
1003{
1004        struct ifreq ifr;
1005        int err = 0;
1006        struct sock *sk;
1007        int val = (int) arg;
1008        struct pppol2tp_session *ps = l2tp_session_priv(session);
1009        struct l2tp_tunnel *tunnel = session->tunnel;
1010        struct pppol2tp_ioc_stats stats;
1011
1012        l2tp_dbg(session, PPPOL2TP_MSG_CONTROL,
1013                 "%s: pppol2tp_session_ioctl(cmd=%#x, arg=%#lx)\n",
1014                 session->name, cmd, arg);
1015
1016        sk = ps->sock;
1017        sock_hold(sk);
1018
1019        switch (cmd) {
1020        case SIOCGIFMTU:
1021                err = -ENXIO;
1022                if (!(sk->sk_state & PPPOX_CONNECTED))
1023                        break;
1024
1025                err = -EFAULT;
1026                if (copy_from_user(&ifr, (void __user *) arg, sizeof(struct ifreq)))
1027                        break;
1028                ifr.ifr_mtu = session->mtu;
1029                if (copy_to_user((void __user *) arg, &ifr, sizeof(struct ifreq)))
1030                        break;
1031
1032                l2tp_info(session, PPPOL2TP_MSG_CONTROL, "%s: get mtu=%d\n",
1033                          session->name, session->mtu);
1034                err = 0;
1035                break;
1036
1037        case SIOCSIFMTU:
1038                err = -ENXIO;
1039                if (!(sk->sk_state & PPPOX_CONNECTED))
1040                        break;
1041
1042                err = -EFAULT;
1043                if (copy_from_user(&ifr, (void __user *) arg, sizeof(struct ifreq)))
1044                        break;
1045
1046                session->mtu = ifr.ifr_mtu;
1047
1048                l2tp_info(session, PPPOL2TP_MSG_CONTROL, "%s: set mtu=%d\n",
1049                          session->name, session->mtu);
1050                err = 0;
1051                break;
1052
1053        case PPPIOCGMRU:
1054                err = -ENXIO;
1055                if (!(sk->sk_state & PPPOX_CONNECTED))
1056                        break;
1057
1058                err = -EFAULT;
1059                if (put_user(session->mru, (int __user *) arg))
1060                        break;
1061
1062                l2tp_info(session, PPPOL2TP_MSG_CONTROL, "%s: get mru=%d\n",
1063                          session->name, session->mru);
1064                err = 0;
1065                break;
1066
1067        case PPPIOCSMRU:
1068                err = -ENXIO;
1069                if (!(sk->sk_state & PPPOX_CONNECTED))
1070                        break;
1071
1072                err = -EFAULT;
1073                if (get_user(val, (int __user *) arg))
1074                        break;
1075
1076                session->mru = val;
1077                l2tp_info(session, PPPOL2TP_MSG_CONTROL, "%s: set mru=%d\n",
1078                          session->name, session->mru);
1079                err = 0;
1080                break;
1081
1082        case PPPIOCGFLAGS:
1083                err = -EFAULT;
1084                if (put_user(ps->flags, (int __user *) arg))
1085                        break;
1086
1087                l2tp_info(session, PPPOL2TP_MSG_CONTROL, "%s: get flags=%d\n",
1088                          session->name, ps->flags);
1089                err = 0;
1090                break;
1091
1092        case PPPIOCSFLAGS:
1093                err = -EFAULT;
1094                if (get_user(val, (int __user *) arg))
1095                        break;
1096                ps->flags = val;
1097                l2tp_info(session, PPPOL2TP_MSG_CONTROL, "%s: set flags=%d\n",
1098                          session->name, ps->flags);
1099                err = 0;
1100                break;
1101
1102        case PPPIOCGL2TPSTATS:
1103                err = -ENXIO;
1104                if (!(sk->sk_state & PPPOX_CONNECTED))
1105                        break;
1106
1107                memset(&stats, 0, sizeof(stats));
1108                stats.tunnel_id = tunnel->tunnel_id;
1109                stats.session_id = session->session_id;
1110                pppol2tp_copy_stats(&stats, &session->stats);
1111                if (copy_to_user((void __user *) arg, &stats,
1112                                 sizeof(stats)))
1113                        break;
1114                l2tp_info(session, PPPOL2TP_MSG_CONTROL, "%s: get L2TP stats\n",
1115                          session->name);
1116                err = 0;
1117                break;
1118
1119        default:
1120                err = -ENOSYS;
1121                break;
1122        }
1123
1124        sock_put(sk);
1125
1126        return err;
1127}
1128
1129/* Tunnel ioctl helper.
1130 *
1131 * Note the special handling for PPPIOCGL2TPSTATS below. If the ioctl data
1132 * specifies a session_id, the session ioctl handler is called. This allows an
1133 * application to retrieve session stats via a tunnel socket.
1134 */
1135static int pppol2tp_tunnel_ioctl(struct l2tp_tunnel *tunnel,
1136                                 unsigned int cmd, unsigned long arg)
1137{
1138        int err = 0;
1139        struct sock *sk;
1140        struct pppol2tp_ioc_stats stats;
1141
1142        l2tp_dbg(tunnel, PPPOL2TP_MSG_CONTROL,
1143                 "%s: pppol2tp_tunnel_ioctl(cmd=%#x, arg=%#lx)\n",
1144                 tunnel->name, cmd, arg);
1145
1146        sk = tunnel->sock;
1147        sock_hold(sk);
1148
1149        switch (cmd) {
1150        case PPPIOCGL2TPSTATS:
1151                err = -ENXIO;
1152                if (!(sk->sk_state & PPPOX_CONNECTED))
1153                        break;
1154
1155                if (copy_from_user(&stats, (void __user *) arg,
1156                                   sizeof(stats))) {
1157                        err = -EFAULT;
1158                        break;
1159                }
1160                if (stats.session_id != 0) {
1161                        /* resend to session ioctl handler */
1162                        struct l2tp_session *session =
1163                                l2tp_session_find(sock_net(sk), tunnel, stats.session_id);
1164                        if (session != NULL)
1165                                err = pppol2tp_session_ioctl(session, cmd, arg);
1166                        else
1167                                err = -EBADR;
1168                        break;
1169                }
1170#ifdef CONFIG_XFRM
1171                stats.using_ipsec = (sk->sk_policy[0] || sk->sk_policy[1]) ? 1 : 0;
1172#endif
1173                pppol2tp_copy_stats(&stats, &tunnel->stats);
1174                if (copy_to_user((void __user *) arg, &stats, sizeof(stats))) {
1175                        err = -EFAULT;
1176                        break;
1177                }
1178                l2tp_info(tunnel, PPPOL2TP_MSG_CONTROL, "%s: get L2TP stats\n",
1179                          tunnel->name);
1180                err = 0;
1181                break;
1182
1183        default:
1184                err = -ENOSYS;
1185                break;
1186        }
1187
1188        sock_put(sk);
1189
1190        return err;
1191}
1192
1193/* Main ioctl() handler.
1194 * Dispatch to tunnel or session helpers depending on the socket.
1195 */
1196static int pppol2tp_ioctl(struct socket *sock, unsigned int cmd,
1197                          unsigned long arg)
1198{
1199        struct sock *sk = sock->sk;
1200        struct l2tp_session *session;
1201        struct l2tp_tunnel *tunnel;
1202        struct pppol2tp_session *ps;
1203        int err;
1204
1205        if (!sk)
1206                return 0;
1207
1208        err = -EBADF;
1209        if (sock_flag(sk, SOCK_DEAD) != 0)
1210                goto end;
1211
1212        err = -ENOTCONN;
1213        if ((sk->sk_user_data == NULL) ||
1214            (!(sk->sk_state & (PPPOX_CONNECTED | PPPOX_BOUND))))
1215                goto end;
1216
1217        /* Get session context from the socket */
1218        err = -EBADF;
1219        session = pppol2tp_sock_to_session(sk);
1220        if (session == NULL)
1221                goto end;
1222
1223        /* Special case: if session's session_id is zero, treat ioctl as a
1224         * tunnel ioctl
1225         */
1226        ps = l2tp_session_priv(session);
1227        if ((session->session_id == 0) &&
1228            (session->peer_session_id == 0)) {
1229                err = -EBADF;
1230                tunnel = l2tp_sock_to_tunnel(ps->tunnel_sock);
1231                if (tunnel == NULL)
1232                        goto end_put_sess;
1233
1234                err = pppol2tp_tunnel_ioctl(tunnel, cmd, arg);
1235                sock_put(ps->tunnel_sock);
1236                goto end_put_sess;
1237        }
1238
1239        err = pppol2tp_session_ioctl(session, cmd, arg);
1240
1241end_put_sess:
1242        sock_put(sk);
1243end:
1244        return err;
1245}
1246
1247/*****************************************************************************
1248 * setsockopt() / getsockopt() support.
1249 *
1250 * The PPPoX socket is created for L2TP sessions: tunnels have their own UDP
1251 * sockets. In order to control kernel tunnel features, we allow userspace to
1252 * create a special "tunnel" PPPoX socket which is used for control only.
1253 * Tunnel PPPoX sockets have session_id == 0 and simply allow the user
1254 * application to issue L2TP setsockopt(), getsockopt() and ioctl() calls.
1255 *****************************************************************************/
1256
1257/* Tunnel setsockopt() helper.
1258 */
1259static int pppol2tp_tunnel_setsockopt(struct sock *sk,
1260                                      struct l2tp_tunnel *tunnel,
1261                                      int optname, int val)
1262{
1263        int err = 0;
1264
1265        switch (optname) {
1266        case PPPOL2TP_SO_DEBUG:
1267                tunnel->debug = val;
1268                l2tp_info(tunnel, PPPOL2TP_MSG_CONTROL, "%s: set debug=%x\n",
1269                          tunnel->name, tunnel->debug);
1270                break;
1271
1272        default:
1273                err = -ENOPROTOOPT;
1274                break;
1275        }
1276
1277        return err;
1278}
1279
1280/* Session setsockopt helper.
1281 */
1282static int pppol2tp_session_setsockopt(struct sock *sk,
1283                                       struct l2tp_session *session,
1284                                       int optname, int val)
1285{
1286        int err = 0;
1287        struct pppol2tp_session *ps = l2tp_session_priv(session);
1288
1289        switch (optname) {
1290        case PPPOL2TP_SO_RECVSEQ:
1291                if ((val != 0) && (val != 1)) {
1292                        err = -EINVAL;
1293                        break;
1294                }
1295                session->recv_seq = val ? -1 : 0;
1296                l2tp_info(session, PPPOL2TP_MSG_CONTROL,
1297                          "%s: set recv_seq=%d\n",
1298                          session->name, session->recv_seq);
1299                break;
1300
1301        case PPPOL2TP_SO_SENDSEQ:
1302                if ((val != 0) && (val != 1)) {
1303                        err = -EINVAL;
1304                        break;
1305                }
1306                session->send_seq = val ? -1 : 0;
1307                {
1308                        struct sock *ssk      = ps->sock;
1309                        struct pppox_sock *po = pppox_sk(ssk);
1310                        po->chan.hdrlen = val ? PPPOL2TP_L2TP_HDR_SIZE_SEQ :
1311                                PPPOL2TP_L2TP_HDR_SIZE_NOSEQ;
1312                }
1313                l2tp_session_set_header_len(session, session->tunnel->version);
1314                l2tp_info(session, PPPOL2TP_MSG_CONTROL,
1315                          "%s: set send_seq=%d\n",
1316                          session->name, session->send_seq);
1317                break;
1318
1319        case PPPOL2TP_SO_LNSMODE:
1320                if ((val != 0) && (val != 1)) {
1321                        err = -EINVAL;
1322                        break;
1323                }
1324                session->lns_mode = val ? -1 : 0;
1325                l2tp_info(session, PPPOL2TP_MSG_CONTROL,
1326                          "%s: set lns_mode=%d\n",
1327                          session->name, session->lns_mode);
1328                break;
1329
1330        case PPPOL2TP_SO_DEBUG:
1331                session->debug = val;
1332                l2tp_info(session, PPPOL2TP_MSG_CONTROL, "%s: set debug=%x\n",
1333                          session->name, session->debug);
1334                break;
1335
1336        case PPPOL2TP_SO_REORDERTO:
1337                session->reorder_timeout = msecs_to_jiffies(val);
1338                l2tp_info(session, PPPOL2TP_MSG_CONTROL,
1339                          "%s: set reorder_timeout=%d\n",
1340                          session->name, session->reorder_timeout);
1341                break;
1342
1343        default:
1344                err = -ENOPROTOOPT;
1345                break;
1346        }
1347
1348        return err;
1349}
1350
1351/* Main setsockopt() entry point.
1352 * Does API checks, then calls either the tunnel or session setsockopt
1353 * handler, according to whether the PPPoL2TP socket is a for a regular
1354 * session or the special tunnel type.
1355 */
1356static int pppol2tp_setsockopt(struct socket *sock, int level, int optname,
1357                               char __user *optval, unsigned int optlen)
1358{
1359        struct sock *sk = sock->sk;
1360        struct l2tp_session *session;
1361        struct l2tp_tunnel *tunnel;
1362        struct pppol2tp_session *ps;
1363        int val;
1364        int err;
1365
1366        if (level != SOL_PPPOL2TP)
1367                return -EINVAL;
1368
1369        if (optlen < sizeof(int))
1370                return -EINVAL;
1371
1372        if (get_user(val, (int __user *)optval))
1373                return -EFAULT;
1374
1375        err = -ENOTCONN;
1376        if (sk->sk_user_data == NULL)
1377                goto end;
1378
1379        /* Get session context from the socket */
1380        err = -EBADF;
1381        session = pppol2tp_sock_to_session(sk);
1382        if (session == NULL)
1383                goto end;
1384
1385        /* Special case: if session_id == 0x0000, treat as operation on tunnel
1386         */
1387        ps = l2tp_session_priv(session);
1388        if ((session->session_id == 0) &&
1389            (session->peer_session_id == 0)) {
1390                err = -EBADF;
1391                tunnel = l2tp_sock_to_tunnel(ps->tunnel_sock);
1392                if (tunnel == NULL)
1393                        goto end_put_sess;
1394
1395                err = pppol2tp_tunnel_setsockopt(sk, tunnel, optname, val);
1396                sock_put(ps->tunnel_sock);
1397        } else
1398                err = pppol2tp_session_setsockopt(sk, session, optname, val);
1399
1400        err = 0;
1401
1402end_put_sess:
1403        sock_put(sk);
1404end:
1405        return err;
1406}
1407
1408/* Tunnel getsockopt helper. Called with sock locked.
1409 */
1410static int pppol2tp_tunnel_getsockopt(struct sock *sk,
1411                                      struct l2tp_tunnel *tunnel,
1412                                      int optname, int *val)
1413{
1414        int err = 0;
1415
1416        switch (optname) {
1417        case PPPOL2TP_SO_DEBUG:
1418                *val = tunnel->debug;
1419                l2tp_info(tunnel, PPPOL2TP_MSG_CONTROL, "%s: get debug=%x\n",
1420                          tunnel->name, tunnel->debug);
1421                break;
1422
1423        default:
1424                err = -ENOPROTOOPT;
1425                break;
1426        }
1427
1428        return err;
1429}
1430
1431/* Session getsockopt helper. Called with sock locked.
1432 */
1433static int pppol2tp_session_getsockopt(struct sock *sk,
1434                                       struct l2tp_session *session,
1435                                       int optname, int *val)
1436{
1437        int err = 0;
1438
1439        switch (optname) {
1440        case PPPOL2TP_SO_RECVSEQ:
1441                *val = session->recv_seq;
1442                l2tp_info(session, PPPOL2TP_MSG_CONTROL,
1443                          "%s: get recv_seq=%d\n", session->name, *val);
1444                break;
1445
1446        case PPPOL2TP_SO_SENDSEQ:
1447                *val = session->send_seq;
1448                l2tp_info(session, PPPOL2TP_MSG_CONTROL,
1449                          "%s: get send_seq=%d\n", session->name, *val);
1450                break;
1451
1452        case PPPOL2TP_SO_LNSMODE:
1453                *val = session->lns_mode;
1454                l2tp_info(session, PPPOL2TP_MSG_CONTROL,
1455                          "%s: get lns_mode=%d\n", session->name, *val);
1456                break;
1457
1458        case PPPOL2TP_SO_DEBUG:
1459                *val = session->debug;
1460                l2tp_info(session, PPPOL2TP_MSG_CONTROL, "%s: get debug=%d\n",
1461                          session->name, *val);
1462                break;
1463
1464        case PPPOL2TP_SO_REORDERTO:
1465                *val = (int) jiffies_to_msecs(session->reorder_timeout);
1466                l2tp_info(session, PPPOL2TP_MSG_CONTROL,
1467                          "%s: get reorder_timeout=%d\n", session->name, *val);
1468                break;
1469
1470        default:
1471                err = -ENOPROTOOPT;
1472        }
1473
1474        return err;
1475}
1476
1477/* Main getsockopt() entry point.
1478 * Does API checks, then calls either the tunnel or session getsockopt
1479 * handler, according to whether the PPPoX socket is a for a regular session
1480 * or the special tunnel type.
1481 */
1482static int pppol2tp_getsockopt(struct socket *sock, int level, int optname,
1483                               char __user *optval, int __user *optlen)
1484{
1485        struct sock *sk = sock->sk;
1486        struct l2tp_session *session;
1487        struct l2tp_tunnel *tunnel;
1488        int val, len;
1489        int err;
1490        struct pppol2tp_session *ps;
1491
1492        if (level != SOL_PPPOL2TP)
1493                return -EINVAL;
1494
1495        if (get_user(len, optlen))
1496                return -EFAULT;
1497
1498        len = min_t(unsigned int, len, sizeof(int));
1499
1500        if (len < 0)
1501                return -EINVAL;
1502
1503        err = -ENOTCONN;
1504        if (sk->sk_user_data == NULL)
1505                goto end;
1506
1507        /* Get the session context */
1508        err = -EBADF;
1509        session = pppol2tp_sock_to_session(sk);
1510        if (session == NULL)
1511                goto end;
1512
1513        /* Special case: if session_id == 0x0000, treat as operation on tunnel */
1514        ps = l2tp_session_priv(session);
1515        if ((session->session_id == 0) &&
1516            (session->peer_session_id == 0)) {
1517                err = -EBADF;
1518                tunnel = l2tp_sock_to_tunnel(ps->tunnel_sock);
1519                if (tunnel == NULL)
1520                        goto end_put_sess;
1521
1522                err = pppol2tp_tunnel_getsockopt(sk, tunnel, optname, &val);
1523                sock_put(ps->tunnel_sock);
1524        } else
1525                err = pppol2tp_session_getsockopt(sk, session, optname, &val);
1526
1527        err = -EFAULT;
1528        if (put_user(len, optlen))
1529                goto end_put_sess;
1530
1531        if (copy_to_user((void __user *) optval, &val, len))
1532                goto end_put_sess;
1533
1534        err = 0;
1535
1536end_put_sess:
1537        sock_put(sk);
1538end:
1539        return err;
1540}
1541
1542/*****************************************************************************
1543 * /proc filesystem for debug
1544 * Since the original pppol2tp driver provided /proc/net/pppol2tp for
1545 * L2TPv2, we dump only L2TPv2 tunnels and sessions here.
1546 *****************************************************************************/
1547
1548static unsigned int pppol2tp_net_id;
1549
1550#ifdef CONFIG_PROC_FS
1551
1552struct pppol2tp_seq_data {
1553        struct seq_net_private p;
1554        int tunnel_idx;                 /* current tunnel */
1555        int session_idx;                /* index of session within current tunnel */
1556        struct l2tp_tunnel *tunnel;
1557        struct l2tp_session *session;   /* NULL means get next tunnel */
1558};
1559
1560static void pppol2tp_next_tunnel(struct net *net, struct pppol2tp_seq_data *pd)
1561{
1562        for (;;) {
1563                pd->tunnel = l2tp_tunnel_find_nth(net, pd->tunnel_idx);
1564                pd->tunnel_idx++;
1565
1566                if (pd->tunnel == NULL)
1567                        break;
1568
1569                /* Ignore L2TPv3 tunnels */
1570                if (pd->tunnel->version < 3)
1571                        break;
1572        }
1573}
1574
1575static void pppol2tp_next_session(struct net *net, struct pppol2tp_seq_data *pd)
1576{
1577        pd->session = l2tp_session_find_nth(pd->tunnel, pd->session_idx);
1578        pd->session_idx++;
1579
1580        if (pd->session == NULL) {
1581                pd->session_idx = 0;
1582                pppol2tp_next_tunnel(net, pd);
1583        }
1584}
1585
1586static void *pppol2tp_seq_start(struct seq_file *m, loff_t *offs)
1587{
1588        struct pppol2tp_seq_data *pd = SEQ_START_TOKEN;
1589        loff_t pos = *offs;
1590        struct net *net;
1591
1592        if (!pos)
1593                goto out;
1594
1595        BUG_ON(m->private == NULL);
1596        pd = m->private;
1597        net = seq_file_net(m);
1598
1599        if (pd->tunnel == NULL)
1600                pppol2tp_next_tunnel(net, pd);
1601        else
1602                pppol2tp_next_session(net, pd);
1603
1604        /* NULL tunnel and session indicates end of list */
1605        if ((pd->tunnel == NULL) && (pd->session == NULL))
1606                pd = NULL;
1607
1608out:
1609        return pd;
1610}
1611
1612static void *pppol2tp_seq_next(struct seq_file *m, void *v, loff_t *pos)
1613{
1614        (*pos)++;
1615        return NULL;
1616}
1617
1618static void pppol2tp_seq_stop(struct seq_file *p, void *v)
1619{
1620        /* nothing to do */
1621}
1622
1623static void pppol2tp_seq_tunnel_show(struct seq_file *m, void *v)
1624{
1625        struct l2tp_tunnel *tunnel = v;
1626
1627        seq_printf(m, "\nTUNNEL '%s', %c %d\n",
1628                   tunnel->name,
1629                   (tunnel == tunnel->sock->sk_user_data) ? 'Y' : 'N',
1630                   atomic_read(&tunnel->ref_count) - 1);
1631        seq_printf(m, " %08x %ld/%ld/%ld %ld/%ld/%ld\n",
1632                   tunnel->debug,
1633                   atomic_long_read(&tunnel->stats.tx_packets),
1634                   atomic_long_read(&tunnel->stats.tx_bytes),
1635                   atomic_long_read(&tunnel->stats.tx_errors),
1636                   atomic_long_read(&tunnel->stats.rx_packets),
1637                   atomic_long_read(&tunnel->stats.rx_bytes),
1638                   atomic_long_read(&tunnel->stats.rx_errors));
1639}
1640
1641static void pppol2tp_seq_session_show(struct seq_file *m, void *v)
1642{
1643        struct l2tp_session *session = v;
1644        struct l2tp_tunnel *tunnel = session->tunnel;
1645        struct pppol2tp_session *ps = l2tp_session_priv(session);
1646        struct pppox_sock *po = pppox_sk(ps->sock);
1647        u32 ip = 0;
1648        u16 port = 0;
1649
1650        if (tunnel->sock) {
1651                struct inet_sock *inet = inet_sk(tunnel->sock);
1652                ip = ntohl(inet->inet_saddr);
1653                port = ntohs(inet->inet_sport);
1654        }
1655
1656        seq_printf(m, "  SESSION '%s' %08X/%d %04X/%04X -> "
1657                   "%04X/%04X %d %c\n",
1658                   session->name, ip, port,
1659                   tunnel->tunnel_id,
1660                   session->session_id,
1661                   tunnel->peer_tunnel_id,
1662                   session->peer_session_id,
1663                   ps->sock->sk_state,
1664                   (session == ps->sock->sk_user_data) ?
1665                   'Y' : 'N');
1666        seq_printf(m, "   %d/%d/%c/%c/%s %08x %u\n",
1667                   session->mtu, session->mru,
1668                   session->recv_seq ? 'R' : '-',
1669                   session->send_seq ? 'S' : '-',
1670                   session->lns_mode ? "LNS" : "LAC",
1671                   session->debug,
1672                   jiffies_to_msecs(session->reorder_timeout));
1673        seq_printf(m, "   %hu/%hu %ld/%ld/%ld %ld/%ld/%ld\n",
1674                   session->nr, session->ns,
1675                   atomic_long_read(&session->stats.tx_packets),
1676                   atomic_long_read(&session->stats.tx_bytes),
1677                   atomic_long_read(&session->stats.tx_errors),
1678                   atomic_long_read(&session->stats.rx_packets),
1679                   atomic_long_read(&session->stats.rx_bytes),
1680                   atomic_long_read(&session->stats.rx_errors));
1681
1682        if (po)
1683                seq_printf(m, "   interface %s\n", ppp_dev_name(&po->chan));
1684}
1685
1686static int pppol2tp_seq_show(struct seq_file *m, void *v)
1687{
1688        struct pppol2tp_seq_data *pd = v;
1689
1690        /* display header on line 1 */
1691        if (v == SEQ_START_TOKEN) {
1692                seq_puts(m, "PPPoL2TP driver info, " PPPOL2TP_DRV_VERSION "\n");
1693                seq_puts(m, "TUNNEL name, user-data-ok session-count\n");
1694                seq_puts(m, " debug tx-pkts/bytes/errs rx-pkts/bytes/errs\n");
1695                seq_puts(m, "  SESSION name, addr/port src-tid/sid "
1696                         "dest-tid/sid state user-data-ok\n");
1697                seq_puts(m, "   mtu/mru/rcvseq/sendseq/lns debug reorderto\n");
1698                seq_puts(m, "   nr/ns tx-pkts/bytes/errs rx-pkts/bytes/errs\n");
1699                goto out;
1700        }
1701
1702        /* Show the tunnel or session context.
1703         */
1704        if (pd->session == NULL)
1705                pppol2tp_seq_tunnel_show(m, pd->tunnel);
1706        else
1707                pppol2tp_seq_session_show(m, pd->session);
1708
1709out:
1710        return 0;
1711}
1712
1713static const struct seq_operations pppol2tp_seq_ops = {
1714        .start          = pppol2tp_seq_start,
1715        .next           = pppol2tp_seq_next,
1716        .stop           = pppol2tp_seq_stop,
1717        .show           = pppol2tp_seq_show,
1718};
1719
1720/* Called when our /proc file is opened. We allocate data for use when
1721 * iterating our tunnel / session contexts and store it in the private
1722 * data of the seq_file.
1723 */
1724static int pppol2tp_proc_open(struct inode *inode, struct file *file)
1725{
1726        return seq_open_net(inode, file, &pppol2tp_seq_ops,
1727                            sizeof(struct pppol2tp_seq_data));
1728}
1729
1730static const struct file_operations pppol2tp_proc_fops = {
1731        .owner          = THIS_MODULE,
1732        .open           = pppol2tp_proc_open,
1733        .read           = seq_read,
1734        .llseek         = seq_lseek,
1735        .release        = seq_release_net,
1736};
1737
1738#endif /* CONFIG_PROC_FS */
1739
1740/*****************************************************************************
1741 * Network namespace
1742 *****************************************************************************/
1743
1744static __net_init int pppol2tp_init_net(struct net *net)
1745{
1746        struct proc_dir_entry *pde;
1747        int err = 0;
1748
1749        pde = proc_create("pppol2tp", S_IRUGO, net->proc_net,
1750                          &pppol2tp_proc_fops);
1751        if (!pde) {
1752                err = -ENOMEM;
1753                goto out;
1754        }
1755
1756out:
1757        return err;
1758}
1759
1760static __net_exit void pppol2tp_exit_net(struct net *net)
1761{
1762        remove_proc_entry("pppol2tp", net->proc_net);
1763}
1764
1765static struct pernet_operations pppol2tp_net_ops = {
1766        .init = pppol2tp_init_net,
1767        .exit = pppol2tp_exit_net,
1768        .id   = &pppol2tp_net_id,
1769};
1770
1771/*****************************************************************************
1772 * Init and cleanup
1773 *****************************************************************************/
1774
1775static const struct proto_ops pppol2tp_ops = {
1776        .family         = AF_PPPOX,
1777        .owner          = THIS_MODULE,
1778        .release        = pppol2tp_release,
1779        .bind           = sock_no_bind,
1780        .connect        = pppol2tp_connect,
1781        .socketpair     = sock_no_socketpair,
1782        .accept         = sock_no_accept,
1783        .getname        = pppol2tp_getname,
1784        .poll           = datagram_poll,
1785        .listen         = sock_no_listen,
1786        .shutdown       = sock_no_shutdown,
1787        .setsockopt     = pppol2tp_setsockopt,
1788        .getsockopt     = pppol2tp_getsockopt,
1789        .sendmsg        = pppol2tp_sendmsg,
1790        .recvmsg        = pppol2tp_recvmsg,
1791        .mmap           = sock_no_mmap,
1792        .ioctl          = pppox_ioctl,
1793};
1794
1795static const struct pppox_proto pppol2tp_proto = {
1796        .create         = pppol2tp_create,
1797        .ioctl          = pppol2tp_ioctl,
1798        .owner          = THIS_MODULE,
1799};
1800
1801#ifdef CONFIG_L2TP_V3
1802
1803static const struct l2tp_nl_cmd_ops pppol2tp_nl_cmd_ops = {
1804        .session_create = pppol2tp_session_create,
1805        .session_delete = l2tp_session_delete,
1806};
1807
1808#endif /* CONFIG_L2TP_V3 */
1809
1810static int __init pppol2tp_init(void)
1811{
1812        int err;
1813
1814        err = register_pernet_device(&pppol2tp_net_ops);
1815        if (err)
1816                goto out;
1817
1818        err = proto_register(&pppol2tp_sk_proto, 0);
1819        if (err)
1820                goto out_unregister_pppol2tp_pernet;
1821
1822        err = register_pppox_proto(PX_PROTO_OL2TP, &pppol2tp_proto);
1823        if (err)
1824                goto out_unregister_pppol2tp_proto;
1825
1826#ifdef CONFIG_L2TP_V3
1827        err = l2tp_nl_register_ops(L2TP_PWTYPE_PPP, &pppol2tp_nl_cmd_ops);
1828        if (err)
1829                goto out_unregister_pppox;
1830#endif
1831
1832        pr_info("PPPoL2TP kernel driver, %s\n", PPPOL2TP_DRV_VERSION);
1833
1834out:
1835        return err;
1836
1837#ifdef CONFIG_L2TP_V3
1838out_unregister_pppox:
1839        unregister_pppox_proto(PX_PROTO_OL2TP);
1840#endif
1841out_unregister_pppol2tp_proto:
1842        proto_unregister(&pppol2tp_sk_proto);
1843out_unregister_pppol2tp_pernet:
1844        unregister_pernet_device(&pppol2tp_net_ops);
1845        goto out;
1846}
1847
1848static void __exit pppol2tp_exit(void)
1849{
1850#ifdef CONFIG_L2TP_V3
1851        l2tp_nl_unregister_ops(L2TP_PWTYPE_PPP);
1852#endif
1853        unregister_pppox_proto(PX_PROTO_OL2TP);
1854        proto_unregister(&pppol2tp_sk_proto);
1855        unregister_pernet_device(&pppol2tp_net_ops);
1856}
1857
1858module_init(pppol2tp_init);
1859module_exit(pppol2tp_exit);
1860
1861MODULE_AUTHOR("James Chapman <jchapman@katalix.com>");
1862MODULE_DESCRIPTION("PPP over L2TP over UDP");
1863MODULE_LICENSE("GPL");
1864MODULE_VERSION(PPPOL2TP_DRV_VERSION);
1865MODULE_ALIAS("pppox-proto-" __stringify(PX_PROTO_OL2TP));
1866