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