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