Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  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:     1.0.0
  8  *
  9  * Authors:     Martijn van Oosterhout <kleptog@svana.org>
 10  *              James Chapman (jchapman@katalix.com)
 11  * Contributors:
 12  *              Michal Ostrowski <mostrows@speakeasy.net>
 13  *              Arnaldo Carvalho de Melo <acme@xconectiva.com.br>
 14  *              David S. Miller (davem@redhat.com)
 15  *
 16  * License:
 17  *              This program is free software; you can redistribute it and/or
 18  *              modify it under the terms of the GNU General Public License
 19  *              as published by the Free Software Foundation; either version
 20  *              2 of the License, or (at your option) any later version.
 21  *
 22  */
 23 
 24 /* This driver handles only L2TP data frames; control frames are handled by a
 25  * userspace application.
 26  *
 27  * To send data in an L2TP session, userspace opens a PPPoL2TP socket and
 28  * attaches it to a bound UDP socket with local tunnel_id / session_id and
 29  * peer tunnel_id / session_id set. Data can then be sent or received using
 30  * regular socket sendmsg() / recvmsg() calls. Kernel parameters of the socket
 31  * can be read or modified using ioctl() or [gs]etsockopt() calls.
 32  *
 33  * When a PPPoL2TP socket is connected with local and peer session_id values
 34  * zero, the socket is treated as a special tunnel management socket.
 35  *
 36  * Here's example userspace code to create a socket for sending/receiving data
 37  * over an L2TP session:-
 38  *
 39  *      struct sockaddr_pppol2tp sax;
 40  *      int fd;
 41  *      int session_fd;
 42  *
 43  *      fd = socket(AF_PPPOX, SOCK_DGRAM, PX_PROTO_OL2TP);
 44  *
 45  *      sax.sa_family = AF_PPPOX;
 46  *      sax.sa_protocol = PX_PROTO_OL2TP;
 47  *      sax.pppol2tp.fd = tunnel_fd;    // bound UDP socket
 48  *      sax.pppol2tp.addr.sin_addr.s_addr = addr->sin_addr.s_addr;
 49  *      sax.pppol2tp.addr.sin_port = addr->sin_port;
 50  *      sax.pppol2tp.addr.sin_family = AF_INET;
 51  *      sax.pppol2tp.s_tunnel  = tunnel_id;
 52  *      sax.pppol2tp.s_session = session_id;
 53  *      sax.pppol2tp.d_tunnel  = peer_tunnel_id;
 54  *      sax.pppol2tp.d_session = peer_session_id;
 55  *
 56  *      session_fd = connect(fd, (struct sockaddr *)&sax, sizeof(sax));
 57  *
 58  * A pppd plugin that allows PPP traffic to be carried over L2TP using
 59  * this driver is available from the OpenL2TP project at
 60  * http://openl2tp.sourceforge.net.
 61  */
 62 
 63 #include <linux/module.h>
 64 #include <linux/version.h>
 65 #include <linux/string.h>
 66 #include <linux/list.h>
 67 #include <asm/uaccess.h>
 68 
 69 #include <linux/kernel.h>
 70 #include <linux/spinlock.h>
 71 #include <linux/kthread.h>
 72 #include <linux/sched.h>
 73 #include <linux/slab.h>
 74 #include <linux/errno.h>
 75 #include <linux/jiffies.h>
 76 
 77 #include <linux/netdevice.h>
 78 #include <linux/net.h>
 79 #include <linux/inetdevice.h>
 80 #include <linux/skbuff.h>
 81 #include <linux/init.h>
 82 #include <linux/ip.h>
 83 #include <linux/udp.h>
 84 #include <linux/if_pppox.h>
 85 #include <linux/if_pppol2tp.h>
 86 #include <net/sock.h>
 87 #include <linux/ppp_channel.h>
 88 #include <linux/ppp_defs.h>
 89 #include <linux/if_ppp.h>
 90 #include <linux/file.h>
 91 #include <linux/hash.h>
 92 #include <linux/sort.h>
 93 #include <linux/proc_fs.h>
 94 #include <net/net_namespace.h>
 95 #include <net/dst.h>
 96 #include <net/ip.h>
 97 #include <net/udp.h>
 98 #include <net/xfrm.h>
 99 
100 #include <asm/byteorder.h>
101 #include <asm/atomic.h>
102 
103 
104 #define PPPOL2TP_DRV_VERSION    "V1.0"
105 
106 /* L2TP header constants */
107 #define L2TP_HDRFLAG_T     0x8000
108 #define L2TP_HDRFLAG_L     0x4000
109 #define L2TP_HDRFLAG_S     0x0800
110 #define L2TP_HDRFLAG_O     0x0200
111 #define L2TP_HDRFLAG_P     0x0100
112 
113 #define L2TP_HDR_VER_MASK  0x000F
114 #define L2TP_HDR_VER       0x0002
115 
116 /* Space for UDP, L2TP and PPP headers */
117 #define PPPOL2TP_HEADER_OVERHEAD        40
118 
119 /* Just some random numbers */
120 #define L2TP_TUNNEL_MAGIC       0x42114DDA
121 #define L2TP_SESSION_MAGIC      0x0C04EB7D
122 
123 #define PPPOL2TP_HASH_BITS      4
124 #define PPPOL2TP_HASH_SIZE      (1 << PPPOL2TP_HASH_BITS)
125 
126 /* Default trace flags */
127 #define PPPOL2TP_DEFAULT_DEBUG_FLAGS    0
128 
129 #define PRINTK(_mask, _type, _lvl, _fmt, args...)                       \
130         do {                                                            \
131                 if ((_mask) & (_type))                                  \
132                         printk(_lvl "PPPOL2TP: " _fmt, ##args);         \
133         } while(0)
134 
135 /* Number of bytes to build transmit L2TP headers.
136  * Unfortunately the size is different depending on whether sequence numbers
137  * are enabled.
138  */
139 #define PPPOL2TP_L2TP_HDR_SIZE_SEQ              10
140 #define PPPOL2TP_L2TP_HDR_SIZE_NOSEQ            6
141 
142 struct pppol2tp_tunnel;
143 
144 /* Describes a session. It is the sk_user_data field in the PPPoL2TP
145  * socket. Contains information to determine incoming packets and transmit
146  * outgoing ones.
147  */
148 struct pppol2tp_session
149 {
150         int                     magic;          /* should be
151                                                  * L2TP_SESSION_MAGIC */
152         int                     owner;          /* pid that opened the socket */
153 
154         struct sock             *sock;          /* Pointer to the session
155                                                  * PPPoX socket */
156         struct sock             *tunnel_sock;   /* Pointer to the tunnel UDP
157                                                  * socket */
158 
159         struct pppol2tp_addr    tunnel_addr;    /* Description of tunnel */
160 
161         struct pppol2tp_tunnel  *tunnel;        /* back pointer to tunnel
162                                                  * context */
163 
164         char                    name[20];       /* "sess xxxxx/yyyyy", where
165                                                  * x=tunnel_id, y=session_id */
166         int                     mtu;
167         int                     mru;
168         int                     flags;          /* accessed by PPPIOCGFLAGS.
169                                                  * Unused. */
170         unsigned                recv_seq:1;     /* expect receive packets with
171                                                  * sequence numbers? */
172         unsigned                send_seq:1;     /* send packets with sequence
173                                                  * numbers? */
174         unsigned                lns_mode:1;     /* behave as LNS? LAC enables
175                                                  * sequence numbers under
176                                                  * control of LNS. */
177         int                     debug;          /* bitmask of debug message
178                                                  * categories */
179         int                     reorder_timeout; /* configured reorder timeout
180                                                   * (in jiffies) */
181         u16                     nr;             /* session NR state (receive) */
182         u16                     ns;             /* session NR state (send) */
183         struct sk_buff_head     reorder_q;      /* receive reorder queue */
184         struct pppol2tp_ioc_stats stats;
185         struct hlist_node       hlist;          /* Hash list node */
186 };
187 
188 /* The sk_user_data field of the tunnel's UDP socket. It contains info to track
189  * all the associated sessions so incoming packets can be sorted out
190  */
191 struct pppol2tp_tunnel
192 {
193         int                     magic;          /* Should be L2TP_TUNNEL_MAGIC */
194         rwlock_t                hlist_lock;     /* protect session_hlist */
195         struct hlist_head       session_hlist[PPPOL2TP_HASH_SIZE];
196                                                 /* hashed list of sessions,
197                                                  * hashed by id */
198         int                     debug;          /* bitmask of debug message
199                                                  * categories */
200         char                    name[12];       /* "tunl xxxxx" */
201         struct pppol2tp_ioc_stats stats;
202 
203         void (*old_sk_destruct)(struct sock *);
204 
205         struct sock             *sock;          /* Parent socket */
206         struct list_head        list;           /* Keep a list of all open
207                                                  * prepared sockets */
208 
209         atomic_t                ref_count;
210 };
211 
212 /* Private data stored for received packets in the skb.
213  */
214 struct pppol2tp_skb_cb {
215         u16                     ns;
216         u16                     nr;
217         u16                     has_seq;
218         u16                     length;
219         unsigned long           expires;
220 };
221 
222 #define PPPOL2TP_SKB_CB(skb)    ((struct pppol2tp_skb_cb *) &skb->cb[sizeof(struct inet_skb_parm)])
223 
224 static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb);
225 static void pppol2tp_tunnel_free(struct pppol2tp_tunnel *tunnel);
226 
227 static atomic_t pppol2tp_tunnel_count;
228 static atomic_t pppol2tp_session_count;
229 static struct ppp_channel_ops pppol2tp_chan_ops = { pppol2tp_xmit , NULL };
230 static struct proto_ops pppol2tp_ops;
231 static LIST_HEAD(pppol2tp_tunnel_list);
232 static DEFINE_RWLOCK(pppol2tp_tunnel_list_lock);
233 
234 /* Helpers to obtain tunnel/session contexts from sockets.
235  */
236 static inline struct pppol2tp_session *pppol2tp_sock_to_session(struct sock *sk)
237 {
238         struct pppol2tp_session *session;
239 
240         if (sk == NULL)
241                 return NULL;
242 
243         sock_hold(sk);
244         session = (struct pppol2tp_session *)(sk->sk_user_data);
245         if (session == NULL) {
246                 sock_put(sk);
247                 goto out;
248         }
249 
250         BUG_ON(session->magic != L2TP_SESSION_MAGIC);
251 out:
252         return session;
253 }
254 
255 static inline struct pppol2tp_tunnel *pppol2tp_sock_to_tunnel(struct sock *sk)
256 {
257         struct pppol2tp_tunnel *tunnel;
258 
259         if (sk == NULL)
260                 return NULL;
261 
262         sock_hold(sk);
263         tunnel = (struct pppol2tp_tunnel *)(sk->sk_user_data);
264         if (tunnel == NULL) {
265                 sock_put(sk);
266                 goto out;
267         }
268 
269         BUG_ON(tunnel->magic != L2TP_TUNNEL_MAGIC);
270 out:
271         return tunnel;
272 }
273 
274 /* Tunnel reference counts. Incremented per session that is added to
275  * the tunnel.
276  */
277 static inline void pppol2tp_tunnel_inc_refcount(struct pppol2tp_tunnel *tunnel)
278 {
279         atomic_inc(&tunnel->ref_count);
280 }
281 
282 static inline void pppol2tp_tunnel_dec_refcount(struct pppol2tp_tunnel *tunnel)
283 {
284         if (atomic_dec_and_test(&tunnel->ref_count))
285                 pppol2tp_tunnel_free(tunnel);
286 }
287 
288 /* Session hash list.
289  * The session_id SHOULD be random according to RFC2661, but several
290  * L2TP implementations (Cisco and Microsoft) use incrementing
291  * session_ids.  So we do a real hash on the session_id, rather than a
292  * simple bitmask.
293  */
294 static inline struct hlist_head *
295 pppol2tp_session_id_hash(struct pppol2tp_tunnel *tunnel, u16 session_id)
296 {
297         unsigned long hash_val = (unsigned long) session_id;
298         return &tunnel->session_hlist[hash_long(hash_val, PPPOL2TP_HASH_BITS)];
299 }
300 
301 /* Lookup a session by id
302  */
303 static struct pppol2tp_session *
304 pppol2tp_session_find(struct pppol2tp_tunnel *tunnel, u16 session_id)
305 {
306         struct hlist_head *session_list =
307                 pppol2tp_session_id_hash(tunnel, session_id);
308         struct pppol2tp_session *session;
309         struct hlist_node *walk;
310 
311         read_lock_bh(&tunnel->hlist_lock);
312         hlist_for_each_entry(session, walk, session_list, hlist) {
313                 if (session->tunnel_addr.s_session == session_id) {
314                         read_unlock_bh(&tunnel->hlist_lock);
315                         return session;
316                 }
317         }
318         read_unlock_bh(&tunnel->hlist_lock);
319 
320         return NULL;
321 }
322 
323 /* Lookup a tunnel by id
324  */
325 static struct pppol2tp_tunnel *pppol2tp_tunnel_find(u16 tunnel_id)
326 {
327         struct pppol2tp_tunnel *tunnel = NULL;
328 
329         read_lock_bh(&pppol2tp_tunnel_list_lock);
330         list_for_each_entry(tunnel, &pppol2tp_tunnel_list, list) {
331                 if (tunnel->stats.tunnel_id == tunnel_id) {
332                         read_unlock_bh(&pppol2tp_tunnel_list_lock);
333                         return tunnel;
334                 }
335         }
336         read_unlock_bh(&pppol2tp_tunnel_list_lock);
337 
338         return NULL;
339 }
340 
341 /*****************************************************************************
342  * Receive data handling
343  *****************************************************************************/
344 
345 /* Queue a skb in order. We come here only if the skb has an L2TP sequence
346  * number.
347  */
348 static void pppol2tp_recv_queue_skb(struct pppol2tp_session *session, struct sk_buff *skb)
349 {
350         struct sk_buff *skbp;
351         struct sk_buff *tmp;
352         u16 ns = PPPOL2TP_SKB_CB(skb)->ns;
353 
354         spin_lock_bh(&session->reorder_q.lock);
355         skb_queue_walk_safe(&session->reorder_q, skbp, tmp) {
356                 if (PPPOL2TP_SKB_CB(skbp)->ns > ns) {
357                         __skb_insert(skb, skbp->prev, skbp, &session->reorder_q);
358                         PRINTK(session->debug, PPPOL2TP_MSG_SEQ, KERN_DEBUG,
359                                "%s: pkt %hu, inserted before %hu, reorder_q len=%d\n",
360                                session->name, ns, PPPOL2TP_SKB_CB(skbp)->ns,
361                                skb_queue_len(&session->reorder_q));
362                         session->stats.rx_oos_packets++;
363                         goto out;
364                 }
365         }
366 
367         __skb_queue_tail(&session->reorder_q, skb);
368 
369 out:
370         spin_unlock_bh(&session->reorder_q.lock);
371 }
372 
373 /* Dequeue a single skb.
374  */
375 static void pppol2tp_recv_dequeue_skb(struct pppol2tp_session *session, struct sk_buff *skb)
376 {
377         struct pppol2tp_tunnel *tunnel = session->tunnel;
378         int length = PPPOL2TP_SKB_CB(skb)->length;
379         struct sock *session_sock = NULL;
380 
381         /* We're about to requeue the skb, so return resources
382          * to its current owner (a socket receive buffer).
383          */
384         skb_orphan(skb);
385 
386         tunnel->stats.rx_packets++;
387         tunnel->stats.rx_bytes += length;
388         session->stats.rx_packets++;
389         session->stats.rx_bytes += length;
390 
391         if (PPPOL2TP_SKB_CB(skb)->has_seq) {
392                 /* Bump our Nr */
393                 session->nr++;
394                 PRINTK(session->debug, PPPOL2TP_MSG_SEQ, KERN_DEBUG,
395                        "%s: updated nr to %hu\n", session->name, session->nr);
396         }
397 
398         /* If the socket is bound, send it in to PPP's input queue. Otherwise
399          * queue it on the session socket.
400          */
401         session_sock = session->sock;
402         if (session_sock->sk_state & PPPOX_BOUND) {
403                 struct pppox_sock *po;
404                 PRINTK(session->debug, PPPOL2TP_MSG_DATA, KERN_DEBUG,
405                        "%s: recv %d byte data frame, passing to ppp\n",
406                        session->name, length);
407 
408                 /* We need to forget all info related to the L2TP packet
409                  * gathered in the skb as we are going to reuse the same
410                  * skb for the inner packet.
411                  * Namely we need to:
412                  * - reset xfrm (IPSec) information as it applies to
413                  *   the outer L2TP packet and not to the inner one
414                  * - release the dst to force a route lookup on the inner
415                  *   IP packet since skb->dst currently points to the dst
416                  *   of the UDP tunnel
417                  * - reset netfilter information as it doesn't apply
418                  *   to the inner packet either
419                  */
420                 secpath_reset(skb);
421                 dst_release(skb->dst);
422                 skb->dst = NULL;
423                 nf_reset(skb);
424 
425                 po = pppox_sk(session_sock);
426                 ppp_input(&po->chan, skb);
427         } else {
428                 PRINTK(session->debug, PPPOL2TP_MSG_DATA, KERN_INFO,
429                        "%s: socket not bound\n", session->name);
430 
431                 /* Not bound. Nothing we can do, so discard. */
432                 session->stats.rx_errors++;
433                 kfree_skb(skb);
434         }
435 
436         sock_put(session->sock);
437 }
438 
439 /* Dequeue skbs from the session's reorder_q, subject to packet order.
440  * Skbs that have been in the queue for too long are simply discarded.
441  */
442 static void pppol2tp_recv_dequeue(struct pppol2tp_session *session)
443 {
444         struct sk_buff *skb;
445         struct sk_buff *tmp;
446 
447         /* If the pkt at the head of the queue has the nr that we
448          * expect to send up next, dequeue it and any other
449          * in-sequence packets behind it.
450          */
451         spin_lock_bh(&session->reorder_q.lock);
452         skb_queue_walk_safe(&session->reorder_q, skb, tmp) {
453                 if (time_after(jiffies, PPPOL2TP_SKB_CB(skb)->expires)) {
454                         session->stats.rx_seq_discards++;
455                         session->stats.rx_errors++;
456                         PRINTK(session->debug, PPPOL2TP_MSG_SEQ, KERN_DEBUG,
457                                "%s: oos pkt %hu len %d discarded (too old), "
458                                "waiting for %hu, reorder_q_len=%d\n",
459                                session->name, PPPOL2TP_SKB_CB(skb)->ns,
460                                PPPOL2TP_SKB_CB(skb)->length, session->nr,
461                                skb_queue_len(&session->reorder_q));
462                         __skb_unlink(skb, &session->reorder_q);
463                         kfree_skb(skb);
464                         sock_put(session->sock);
465                         continue;
466                 }
467 
468                 if (PPPOL2TP_SKB_CB(skb)->has_seq) {
469                         if (PPPOL2TP_SKB_CB(skb)->ns != session->nr) {
470                                 PRINTK(session->debug, PPPOL2TP_MSG_SEQ, KERN_DEBUG,
471                                        "%s: holding oos pkt %hu len %d, "
472                                        "waiting for %hu, reorder_q_len=%d\n",
473                                        session->name, PPPOL2TP_SKB_CB(skb)->ns,
474                                        PPPOL2TP_SKB_CB(skb)->length, session->nr,
475                                        skb_queue_len(&session->reorder_q));
476                                 goto out;
477                         }
478                 }
479                 __skb_unlink(skb, &session->reorder_q);
480 
481                 /* Process the skb. We release the queue lock while we
482                  * do so to let other contexts process the queue.
483                  */
484                 spin_unlock_bh(&session->reorder_q.lock);
485                 pppol2tp_recv_dequeue_skb(session, skb);
486                 spin_lock_bh(&session->reorder_q.lock);
487         }
488 
489 out:
490         spin_unlock_bh(&session->reorder_q.lock);
491 }
492 
493 /* Internal receive frame. Do the real work of receiving an L2TP data frame
494  * here. The skb is not on a list when we get here.
495  * Returns 0 if the packet was a data packet and was successfully passed on.
496  * Returns 1 if the packet was not a good data packet and could not be
497  * forwarded.  All such packets are passed up to userspace to deal with.
498  */
499 static int pppol2tp_recv_core(struct sock *sock, struct sk_buff *skb)
500 {
501         struct pppol2tp_session *session = NULL;
502         struct pppol2tp_tunnel *tunnel;
503         unsigned char *ptr, *optr;
504         u16 hdrflags;
505         u16 tunnel_id, session_id;
506         int length;
507         int offset;
508 
509         tunnel = pppol2tp_sock_to_tunnel(sock);
510         if (tunnel == NULL)
511                 goto no_tunnel;
512 
513         /* UDP always verifies the packet length. */
514         __skb_pull(skb, sizeof(struct udphdr));
515 
516         /* Short packet? */
517         if (!pskb_may_pull(skb, 12)) {
518                 PRINTK(tunnel->debug, PPPOL2TP_MSG_DATA, KERN_INFO,
519                        "%s: recv short packet (len=%d)\n", tunnel->name, skb->len);
520                 goto error;
521         }
522 
523         /* Point to L2TP header */
524         optr = ptr = skb->data;
525 
526         /* Get L2TP header flags */
527         hdrflags = ntohs(*(__be16*)ptr);
528 
529         /* Trace packet contents, if enabled */
530         if (tunnel->debug & PPPOL2TP_MSG_DATA) {
531                 length = min(16u, skb->len);
532                 if (!pskb_may_pull(skb, length))
533                         goto error;
534 
535                 printk(KERN_DEBUG "%s: recv: ", tunnel->name);
536 
537                 offset = 0;
538                 do {
539                         printk(" %02X", ptr[offset]);
540                 } while (++offset < length);
541 
542                 printk("\n");
543         }
544 
545         /* Get length of L2TP packet */
546         length = skb->len;
547 
548         /* If type is control packet, it is handled by userspace. */
549         if (hdrflags & L2TP_HDRFLAG_T) {
550                 PRINTK(tunnel->debug, PPPOL2TP_MSG_DATA, KERN_DEBUG,
551                        "%s: recv control packet, len=%d\n", tunnel->name, length);
552                 goto error;
553         }
554 
555         /* Skip flags */
556         ptr += 2;
557 
558         /* If length is present, skip it */
559         if (hdrflags & L2TP_HDRFLAG_L)
560                 ptr += 2;
561 
562         /* Extract tunnel and session ID */
563         tunnel_id = ntohs(*(__be16 *) ptr);
564         ptr += 2;
565         session_id = ntohs(*(__be16 *) ptr);
566         ptr += 2;
567 
568         /* Find the session context */
569         session = pppol2tp_session_find(tunnel, session_id);
570         if (!session) {
571                 /* Not found? Pass to userspace to deal with */
572                 PRINTK(tunnel->debug, PPPOL2TP_MSG_DATA, KERN_INFO,
573                        "%s: no socket found (%hu/%hu). Passing up.\n",
574                        tunnel->name, tunnel_id, session_id);
575                 goto error;
576         }
577         sock_hold(session->sock);
578 
579         /* The ref count on the socket was increased by the above call since
580          * we now hold a pointer to the session. Take care to do sock_put()
581          * when exiting this function from now on...
582          */
583 
584         /* Handle the optional sequence numbers.  If we are the LAC,
585          * enable/disable sequence numbers under the control of the LNS.  If
586          * no sequence numbers present but we were expecting them, discard
587          * frame.
588          */
589         if (hdrflags & L2TP_HDRFLAG_S) {
590                 u16 ns, nr;
591                 ns = ntohs(*(__be16 *) ptr);
592                 ptr += 2;
593                 nr = ntohs(*(__be16 *) ptr);
594                 ptr += 2;
595 
596                 /* Received a packet with sequence numbers. If we're the LNS,
597                  * check if we sre sending sequence numbers and if not,
598                  * configure it so.
599                  */
600                 if ((!session->lns_mode) && (!session->send_seq)) {
601                         PRINTK(session->debug, PPPOL2TP_MSG_SEQ, KERN_INFO,
602                                "%s: requested to enable seq numbers by LNS\n",
603                                session->name);
604                         session->send_seq = -1;
605                 }
606 
607                 /* Store L2TP info in the skb */
608                 PPPOL2TP_SKB_CB(skb)->ns = ns;
609                 PPPOL2TP_SKB_CB(skb)->nr = nr;
610                 PPPOL2TP_SKB_CB(skb)->has_seq = 1;
611 
612                 PRINTK(session->debug, PPPOL2TP_MSG_SEQ, KERN_DEBUG,
613                        "%s: recv data ns=%hu, nr=%hu, session nr=%hu\n",
614                        session->name, ns, nr, session->nr);
615         } else {
616                 /* No sequence numbers.
617                  * If user has configured mandatory sequence numbers, discard.
618                  */
619                 if (session->recv_seq) {
620                         PRINTK(session->debug, PPPOL2TP_MSG_SEQ, KERN_WARNING,
621                                "%s: recv data has no seq numbers when required. "
622                                "Discarding\n", session->name);
623                         session->stats.rx_seq_discards++;
624                         goto discard;
625                 }
626 
627                 /* If we're the LAC and we're sending sequence numbers, the
628                  * LNS has requested that we no longer send sequence numbers.
629                  * If we're the LNS and we're sending sequence numbers, the
630                  * LAC is broken. Discard the frame.
631                  */
632                 if ((!session->lns_mode) && (session->send_seq)) {
633                         PRINTK(session->debug, PPPOL2TP_MSG_SEQ, KERN_INFO,
634                                "%s: requested to disable seq numbers by LNS\n",
635                                session->name);
636                         session->send_seq = 0;
637                 } else if (session->send_seq) {
638                         PRINTK(session->debug, PPPOL2TP_MSG_SEQ, KERN_WARNING,
639                                "%s: recv data has no seq numbers when required. "
640                                "Discarding\n", session->name);
641                         session->stats.rx_seq_discards++;
642                         goto discard;
643                 }
644 
645                 /* Store L2TP info in the skb */
646                 PPPOL2TP_SKB_CB(skb)->has_seq = 0;
647         }
648 
649         /* If offset bit set, skip it. */
650         if (hdrflags & L2TP_HDRFLAG_O) {
651                 offset = ntohs(*(__be16 *)ptr);
652                 ptr += 2 + offset;
653         }
654 
655         offset = ptr - optr;
656         if (!pskb_may_pull(skb, offset))
657                 goto discard;
658 
659         __skb_pull(skb, offset);
660 
661         /* Skip PPP header, if present.  In testing, Microsoft L2TP clients
662          * don't send the PPP header (PPP header compression enabled), but
663          * other clients can include the header. So we cope with both cases
664          * here. The PPP header is always FF03 when using L2TP.
665          *
666          * Note that skb->data[] isn't dereferenced from a u16 ptr here since
667          * the field may be unaligned.
668          */
669         if (!pskb_may_pull(skb, 2))
670                 goto discard;
671 
672         if ((skb->data[0] == 0xff) && (skb->data[1] == 0x03))
673                 skb_pull(skb, 2);
674 
675         /* Prepare skb for adding to the session's reorder_q.  Hold
676          * packets for max reorder_timeout or 1 second if not
677          * reordering.
678          */
679         PPPOL2TP_SKB_CB(skb)->length = length;
680         PPPOL2TP_SKB_CB(skb)->expires = jiffies +
681                 (session->reorder_timeout ? session->reorder_timeout : HZ);
682 
683         /* Add packet to the session's receive queue. Reordering is done here, if
684          * enabled. Saved L2TP protocol info is stored in skb->sb[].
685          */
686         if (PPPOL2TP_SKB_CB(skb)->has_seq) {
687                 if (session->reorder_timeout != 0) {
688                         /* Packet reordering enabled. Add skb to session's
689                          * reorder queue, in order of ns.
690                          */
691                         pppol2tp_recv_queue_skb(session, skb);
692                 } else {
693                         /* Packet reordering disabled. Discard out-of-sequence
694                          * packets
695                          */
696                         if (PPPOL2TP_SKB_CB(skb)->ns != session->nr) {
697                                 session->stats.rx_seq_discards++;
698                                 PRINTK(session->debug, PPPOL2TP_MSG_SEQ, KERN_DEBUG,
699                                        "%s: oos pkt %hu len %d discarded, "
700                                        "waiting for %hu, reorder_q_len=%d\n",
701                                        session->name, PPPOL2TP_SKB_CB(skb)->ns,
702                                        PPPOL2TP_SKB_CB(skb)->length, session->nr,
703                                        skb_queue_len(&session->reorder_q));
704                                 goto discard;
705                         }
706                         skb_queue_tail(&session->reorder_q, skb);
707                 }
708         } else {
709                 /* No sequence numbers. Add the skb to the tail of the
710                  * reorder queue. This ensures that it will be
711                  * delivered after all previous sequenced skbs.
712                  */
713                 skb_queue_tail(&session->reorder_q, skb);
714         }
715 
716         /* Try to dequeue as many skbs from reorder_q as we can. */
717         pppol2tp_recv_dequeue(session);
718 
719         return 0;
720 
721 discard:
722         session->stats.rx_errors++;
723         kfree_skb(skb);
724         sock_put(session->sock);
725         sock_put(sock);
726 
727         return 0;
728 
729 error:
730         /* Put UDP header back */
731         __skb_push(skb, sizeof(struct udphdr));
732         sock_put(sock);
733 
734 no_tunnel:
735         return 1;
736 }
737 
738 /* UDP encapsulation receive handler. See net/ipv4/udp.c.
739  * Return codes:
740  * 0 : success.
741  * <0: error
742  * >0: skb should be passed up to userspace as UDP.
743  */
744 static int pppol2tp_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
745 {
746         struct pppol2tp_tunnel *tunnel;
747 
748         tunnel = pppol2tp_sock_to_tunnel(sk);
749         if (tunnel == NULL)
750                 goto pass_up;
751 
752         PRINTK(tunnel->debug, PPPOL2TP_MSG_DATA, KERN_DEBUG,
753                "%s: received %d bytes\n", tunnel->name, skb->len);
754 
755         if (pppol2tp_recv_core(sk, skb))
756                 goto pass_up_put;
757 
758         sock_put(sk);
759         return 0;
760 
761 pass_up_put:
762         sock_put(sk);
763 pass_up:
764         return 1;
765 }
766 
767 /* Receive message. This is the recvmsg for the PPPoL2TP socket.
768  */
769 static int pppol2tp_recvmsg(struct kiocb *iocb, struct socket *sock,
770                             struct msghdr *msg, size_t len,
771                             int flags)
772 {
773         int err;
774         struct sk_buff *skb;
775         struct sock *sk = sock->sk;
776 
777         err = -EIO;
778         if (sk->sk_state & PPPOX_BOUND)
779                 goto end;
780 
781         msg->msg_namelen = 0;
782 
783         err = 0;
784         skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
785                                 flags & MSG_DONTWAIT, &err);
786         if (skb) {
787                 err = memcpy_toiovec(msg->msg_iov, (unsigned char *) skb->data,
788                                      skb->len);
789                 if (err < 0)
790                         goto do_skb_free;
791                 err = skb->len;
792         }
793 do_skb_free:
794         kfree_skb(skb);
795 end:
796         return err;
797 }
798 
799 /************************************************************************
800  * Transmit handling
801  ***********************************************************************/
802 
803 /* Tell how big L2TP headers are for a particular session. This
804  * depends on whether sequence numbers are being used.
805  */
806 static inline int pppol2tp_l2tp_header_len(struct pppol2tp_session *session)
807 {
808         if (session->send_seq)
809                 return PPPOL2TP_L2TP_HDR_SIZE_SEQ;
810 
811         return PPPOL2TP_L2TP_HDR_SIZE_NOSEQ;
812 }
813 
814 /* Build an L2TP header for the session into the buffer provided.
815  */
816 static void pppol2tp_build_l2tp_header(struct pppol2tp_session *session,
817                                        void *buf)
818 {
819         __be16 *bufp = buf;
820         u16 flags = L2TP_HDR_VER;
821 
822         if (session->send_seq)
823                 flags |= L2TP_HDRFLAG_S;
824 
825         /* Setup L2TP header.
826          * FIXME: Can this ever be unaligned? Is direct dereferencing of
827          * 16-bit header fields safe here for all architectures?
828          */
829         *bufp++ = htons(flags);
830         *bufp++ = htons(session->tunnel_addr.d_tunnel);
831         *bufp++ = htons(session->tunnel_addr.d_session);
832         if (session->send_seq) {
833                 *bufp++ = htons(session->ns);
834                 *bufp++ = 0;
835                 session->ns++;
836                 PRINTK(session->debug, PPPOL2TP_MSG_SEQ, KERN_DEBUG,
837                        "%s: updated ns to %hu\n", session->name, session->ns);
838         }
839 }
840 
841 /* This is the sendmsg for the PPPoL2TP pppol2tp_session socket.  We come here
842  * when a user application does a sendmsg() on the session socket. L2TP and
843  * PPP headers must be inserted into the user's data.
844  */
845 static int pppol2tp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m,
846                             size_t total_len)
847 {
848         static const unsigned char ppph[2] = { 0xff, 0x03 };
849         struct sock *sk = sock->sk;
850         struct inet_sock *inet;
851         __wsum csum = 0;
852         struct sk_buff *skb;
853         int error;
854         int hdr_len;
855         struct pppol2tp_session *session;
856         struct pppol2tp_tunnel *tunnel;
857         struct udphdr *uh;
858         unsigned int len;
859 
860         error = -ENOTCONN;
861         if (sock_flag(sk, SOCK_DEAD) || !(sk->sk_state & PPPOX_CONNECTED))
862                 goto error;
863 
864         /* Get session and tunnel contexts */
865         error = -EBADF;
866         session = pppol2tp_sock_to_session(sk);
867         if (session == NULL)
868                 goto error;
869 
870         tunnel = pppol2tp_sock_to_tunnel(session->tunnel_sock);
871         if (tunnel == NULL)
872                 goto error_put_sess;
873 
874         /* What header length is configured for this session? */
875         hdr_len = pppol2tp_l2tp_header_len(session);
876 
877         /* Allocate a socket buffer */
878         error = -ENOMEM;
879         skb = sock_wmalloc(sk, NET_SKB_PAD + sizeof(struct iphdr) +
880                            sizeof(struct udphdr) + hdr_len +
881                            sizeof(ppph) + total_len,
882                            0, GFP_KERNEL);
883         if (!skb)
884                 goto error_put_sess_tun;
885 
886         /* Reserve space for headers. */
887         skb_reserve(skb, NET_SKB_PAD);
888         skb_reset_network_header(skb);
889         skb_reserve(skb, sizeof(struct iphdr));
890         skb_reset_transport_header(skb);
891 
892         /* Build UDP header */
893         inet = inet_sk(session->tunnel_sock);
894         uh = (struct udphdr *) skb->data;
895         uh->source = inet->sport;
896         uh->dest = inet->dport;
897         uh->len = htons(hdr_len + sizeof(ppph) + total_len);
898         uh->check = 0;
899         skb_put(skb, sizeof(struct udphdr));
900 
901         /* Build L2TP header */
902         pppol2tp_build_l2tp_header(session, skb->data);
903         skb_put(skb, hdr_len);
904 
905         /* Add PPP header */
906         skb->data[0] = ppph[0];
907         skb->data[1] = ppph[1];
908         skb_put(skb, 2);
909 
910         /* Copy user data into skb */
911         error = memcpy_fromiovec(skb->data, m->msg_iov, total_len);
912         if (error < 0) {
913                 kfree_skb(skb);
914                 goto error_put_sess_tun;
915         }
916         skb_put(skb, total_len);
917 
918         /* Calculate UDP checksum if configured to do so */
919         if (session->tunnel_sock->sk_no_check != UDP_CSUM_NOXMIT)
920                 csum = udp_csum_outgoing(sk, skb);
921 
922         /* Debug */
923         if (session->send_seq)
924                 PRINTK(session->debug, PPPOL2TP_MSG_DATA, KERN_DEBUG,
925                        "%s: send %Zd bytes, ns=%hu\n", session->name,
926                        total_len, session->ns - 1);
927         else
928                 PRINTK(session->debug, PPPOL2TP_MSG_DATA, KERN_DEBUG,
929                        "%s: send %Zd bytes\n", session->name, total_len);
930 
931         if (session->debug & PPPOL2TP_MSG_DATA) {
932                 int i;
933                 unsigned char *datap = skb->data;
934 
935                 printk(KERN_DEBUG "%s: xmit:", session->name);
936                 for (i = 0; i < total_len; i++) {
937                         printk(" %02X", *datap++);
938                         if (i == 15) {
939                                 printk(" ...");
940                                 break;
941                         }
942                 }
943                 printk("\n");
944         }
945 
946         /* Queue the packet to IP for output */
947         len = skb->len;
948         error = ip_queue_xmit(skb, 1);
949 
950         /* Update stats */
951         if (error >= 0) {
952                 tunnel->stats.tx_packets++;
953                 tunnel->stats.tx_bytes += len;
954                 session->stats.tx_packets++;
955                 session->stats.tx_bytes += len;
956         } else {
957                 tunnel->stats.tx_errors++;
958                 session->stats.tx_errors++;
959         }
960 
961         return error;
962 
963 error_put_sess_tun:
964         sock_put(session->tunnel_sock);
965 error_put_sess:
966         sock_put(sk);
967 error:
968         return error;
969 }
970 
971 /* Automatically called when the skb is freed.
972  */
973 static void pppol2tp_sock_wfree(struct sk_buff *skb)
974 {
975         sock_put(skb->sk);
976 }
977 
978 /* For data skbs that we transmit, we associate with the tunnel socket
979  * but don't do accounting.
980  */
981 static inline void pppol2tp_skb_set_owner_w(struct sk_buff *skb, struct sock *sk)
982 {
983         sock_hold(sk);
984         skb->sk = sk;
985         skb->destructor = pppol2tp_sock_wfree;
986 }
987 
988 /* Transmit function called by generic PPP driver.  Sends PPP frame
989  * over PPPoL2TP socket.
990  *
991  * This is almost the same as pppol2tp_sendmsg(), but rather than
992  * being called with a msghdr from userspace, it is called with a skb
993  * from the kernel.
994  *
995  * The supplied skb from ppp doesn't have enough headroom for the
996  * insertion of L2TP, UDP and IP headers so we need to allocate more
997  * headroom in the skb. This will create a cloned skb. But we must be
998  * careful in the error case because the caller will expect to free
999  * the skb it supplied, not our cloned skb. So we take care to always
1000  * leave the original skb unfreed if we return an error.
1001  */
1002 static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
1003 {
1004         static const u8 ppph[2] = { 0xff, 0x03 };
1005         struct sock *sk = (struct sock *) chan->private;
1006         struct sock *sk_tun;
1007         int hdr_len;
1008         struct pppol2tp_session *session;
1009         struct pppol2tp_tunnel *tunnel;
1010         int rc;
1011         int headroom;
1012         int data_len = skb->len;
1013         struct inet_sock *inet;
1014         __wsum csum = 0;
1015         struct udphdr *uh;
1016         unsigned int len;
1017         int old_headroom;
1018         int new_headroom;
1019 
1020         if (sock_flag(sk, SOCK_DEAD) || !(sk->sk_state & PPPOX_CONNECTED))
1021                 goto abort;
1022 
1023         /* Get session and tunnel contexts from the socket */
1024         session = pppol2tp_sock_to_session(sk);
1025         if (session == NULL)
1026                 goto abort;
1027 
1028         sk_tun = session->tunnel_sock;
1029         if (sk_tun == NULL)
1030                 goto abort_put_sess;
1031         tunnel = pppol2tp_sock_to_tunnel(sk_tun);
1032         if (tunnel == NULL)
1033                 goto abort_put_sess;
1034 
1035         /* What header length is configured for this session? */
1036         hdr_len = pppol2tp_l2tp_header_len(session);
1037 
1038         /* Check that there's enough headroom in the skb to insert IP,
1039          * UDP and L2TP and PPP headers. If not enough, expand it to
1040          * make room. Adjust truesize.
1041          */
1042         headroom = NET_SKB_PAD + sizeof(struct iphdr) +
1043                 sizeof(struct udphdr) + hdr_len + sizeof(ppph);
1044         old_headroom = skb_headroom(skb);
1045         if (skb_cow_head(skb, headroom))
1046                 goto abort_put_sess_tun;
1047 
1048         new_headroom = skb_headroom(skb);
1049         skb_orphan(skb);
1050         skb->truesize += new_headroom - old_headroom;
1051 
1052         /* Setup PPP header */
1053         __skb_push(skb, sizeof(ppph));
1054         skb->data[0] = ppph[0];
1055         skb->data[1] = ppph[1];
1056 
1057         /* Setup L2TP header */
1058         pppol2tp_build_l2tp_header(session, __skb_push(skb, hdr_len));
1059 
1060         /* Setup UDP header */
1061         inet = inet_sk(sk_tun);
1062         __skb_push(skb, sizeof(*uh));
1063         skb_reset_transport_header(skb);
1064         uh = udp_hdr(skb);
1065         uh->source = inet->sport;
1066         uh->dest = inet->dport;
1067         uh->len = htons(sizeof(struct udphdr) + hdr_len + sizeof(ppph) + data_len);
1068         uh->check = 0;
1069 
1070         /* *BROKEN* Calculate UDP checksum if configured to do so */
1071         if (sk_tun->sk_no_check != UDP_CSUM_NOXMIT)
1072                 csum = udp_csum_outgoing(sk_tun, skb);
1073 
1074         /* Debug */
1075         if (session->send_seq)
1076                 PRINTK(session->debug, PPPOL2TP_MSG_DATA, KERN_DEBUG,
1077                        "%s: send %d bytes, ns=%hu\n", session->name,
1078                        data_len, session->ns - 1);
1079         else
1080                 PRINTK(session->debug, PPPOL2TP_MSG_DATA, KERN_DEBUG,
1081                        "%s: send %d bytes\n", session->name, data_len);
1082 
1083         if (session->debug & PPPOL2TP_MSG_DATA) {
1084                 int i;
1085                 unsigned char *datap = skb->data;
1086 
1087                 printk(KERN_DEBUG "%s: xmit:", session->name);
1088                 for (i = 0; i < data_len; i++) {
1089                         printk(" %02X", *datap++);
1090                         if (i == 31) {
1091                                 printk(" ...");
1092                                 break;
1093                         }
1094                 }
1095                 printk("\n");
1096         }
1097 
1098         memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
1099         IPCB(skb)->flags &= ~(IPSKB_XFRM_TUNNEL_SIZE | IPSKB_XFRM_TRANSFORMED |
1100                               IPSKB_REROUTED);
1101         nf_reset(skb);
1102 
1103         /* Get routing info from the tunnel socket */
1104         dst_release(skb->dst);
1105         skb->dst = dst_clone(__sk_dst_get(sk_tun));
1106         pppol2tp_skb_set_owner_w(skb, sk_tun);
1107 
1108         /* Queue the packet to IP for output */
1109         len = skb->len;
1110         rc = ip_queue_xmit(skb, 1);
1111 
1112         /* Update stats */
1113         if (rc >= 0) {
1114                 tunnel->stats.tx_packets++;
1115                 tunnel->stats.tx_bytes += len;
1116                 session->stats.tx_packets++;
1117                 session->stats.tx_bytes += len;
1118         } else {
1119                 tunnel->stats.tx_errors++;
1120                 session->stats.tx_errors++;
1121         }
1122 
1123         sock_put(sk_tun);
1124         sock_put(sk);
1125         return 1;
1126 
1127 abort_put_sess_tun:
1128         sock_put(sk_tun);
1129 abort_put_sess:
1130         sock_put(sk);
1131 abort:
1132         /* Free the original skb */
1133         kfree_skb(skb);
1134         return 1;
1135 }
1136 
1137 /*****************************************************************************
1138  * Session (and tunnel control) socket create/destroy.
1139  *****************************************************************************/
1140 
1141 /* When the tunnel UDP socket is closed, all the attached sockets need to go
1142  * too.
1143  */
1144 static void pppol2tp_tunnel_closeall(struct pppol2tp_tunnel *tunnel)
1145 {
1146         int hash;
1147         struct hlist_node *walk;
1148         struct hlist_node *tmp;
1149         struct pppol2tp_session *session;
1150         struct sock *sk;
1151 
1152         if (tunnel == NULL)
1153                 BUG();
1154 
1155         PRINTK(tunnel->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
1156                "%s: closing all sessions...\n", tunnel->name);
1157 
1158         write_lock_bh(&tunnel->hlist_lock);
1159         for (hash = 0; hash < PPPOL2TP_HASH_SIZE; hash++) {
1160 again:
1161                 hlist_for_each_safe(walk, tmp, &tunnel->session_hlist[hash]) {
1162                         struct sk_buff *skb;
1163 
1164                         session = hlist_entry(walk, struct pppol2tp_session, hlist);
1165 
1166                         sk = session->sock;
1167 
1168                         PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
1169                                "%s: closing session\n", session->name);
1170 
1171                         hlist_del_init(&session->hlist);
1172 
1173                         /* Since we should hold the sock lock while
1174                          * doing any unbinding, we need to release the
1175                          * lock we're holding before taking that lock.
1176                          * Hold a reference to the sock so it doesn't
1177                          * disappear as we're jumping between locks.
1178                          */
1179                         sock_hold(sk);
1180                         write_unlock_bh(&tunnel->hlist_lock);
1181                         lock_sock(sk);
1182 
1183                         if (sk->sk_state & (PPPOX_CONNECTED | PPPOX_BOUND)) {
1184                                 pppox_unbind_sock(sk);
1185                                 sk->sk_state = PPPOX_DEAD;
1186                                 sk->sk_state_change(sk);
1187                         }
1188 
1189                         /* Purge any queued data */
1190                         skb_queue_purge(&sk->sk_receive_queue);
1191                         skb_queue_purge(&sk->sk_write_queue);
1192                         while ((skb = skb_dequeue(&session->reorder_q))) {
1193                                 kfree_skb(skb);
1194                                 sock_put(sk);
1195                         }
1196 
1197                         release_sock(sk);
1198                         sock_put(sk);
1199 
1200                         /* Now restart from the beginning of this hash
1201                          * chain.  We always remove a session from the
1202                          * list so we are guaranteed to make forward
1203                          * progress.
1204                          */
1205                         write_lock_bh(&tunnel->hlist_lock);
1206                         goto again;
1207                 }
1208         }
1209         write_unlock_bh(&tunnel->hlist_lock);
1210 }
1211 
1212 /* Really kill the tunnel.
1213  * Come here only when all sessions have been cleared from the tunnel.
1214  */
1215 static void pppol2tp_tunnel_free(struct pppol2tp_tunnel *tunnel)
1216 {
1217         /* Remove from socket list */
1218         write_lock_bh(&pppol2tp_tunnel_list_lock);
1219         list_del_init(&tunnel->list);
1220         write_unlock_bh(&pppol2tp_tunnel_list_lock);
1221 
1222         atomic_dec(&pppol2tp_tunnel_count);
1223         kfree(tunnel);
1224 }
1225 
1226 /* Tunnel UDP socket destruct hook.
1227  * The tunnel context is deleted only when all session sockets have been
1228  * closed.
1229  */
1230 static void pppol2tp_tunnel_destruct(struct sock *sk)
1231 {
1232         struct pppol2tp_tunnel *tunnel;
1233 
1234         tunnel = sk->sk_user_data;
1235         if (tunnel == NULL)
1236                 goto end;
1237 
1238         PRINTK(tunnel->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
1239                "%s: closing...\n", tunnel->name);
1240 
1241         /* Close all sessions */
1242         pppol2tp_tunnel_closeall(tunnel);
1243 
1244         /* No longer an encapsulation socket. See net/ipv4/udp.c */
1245         (udp_sk(sk))->encap_type = 0;
1246         (udp_sk(sk))->encap_rcv = NULL;
1247 
1248         /* Remove hooks into tunnel socket */
1249         tunnel->sock = NULL;
1250         sk->sk_destruct = tunnel->old_sk_destruct;
1251         sk->sk_user_data = NULL;
1252 
1253         /* Call original (UDP) socket descructor */
1254         if (sk->sk_destruct != NULL)
1255                 (*sk->sk_destruct)(sk);
1256 
1257         pppol2tp_tunnel_dec_refcount(tunnel);
1258 
1259 end:
1260         return;
1261 }
1262 
1263 /* Really kill the session socket. (Called from sock_put() if
1264  * refcnt == 0.)
1265  */
1266 static void pppol2tp_session_destruct(struct sock *sk)
1267 {
1268         struct pppol2tp_session *session = NULL;
1269 
1270         if (sk->sk_user_data != NULL) {
1271                 struct pppol2tp_tunnel *tunnel;
1272 
1273                 session = sk->sk_user_data;
1274                 if (session == NULL)
1275                         goto out;
1276 
1277                 BUG_ON(session->magic != L2TP_SESSION_MAGIC);
1278 
1279                 /* Don't use pppol2tp_sock_to_tunnel() here to
1280                  * get the tunnel context because the tunnel
1281                  * socket might have already been closed (its
1282                  * sk->sk_user_data will be NULL) so use the
1283                  * session's private tunnel ptr instead.
1284                  */
1285                 tunnel = session->tunnel;
1286                 if (tunnel != NULL) {
1287                         BUG_ON(tunnel->magic != L2TP_TUNNEL_MAGIC);
1288 
1289                         /* If session_id is zero, this is a null
1290                          * session context, which was created for a
1291                          * socket that is being used only to manage
1292                          * tunnels.
1293                          */
1294                         if (session->tunnel_addr.s_session != 0) {
1295                                 /* Delete the session socket from the
1296                                  * hash
1297                                  */
1298                                 write_lock_bh(&tunnel->hlist_lock);
1299                                 hlist_del_init(&session->hlist);
1300                                 write_unlock_bh(&tunnel->hlist_lock);
1301 
1302                                 atomic_dec(&pppol2tp_session_count);
1303                         }
1304 
1305                         /* This will delete the tunnel context if this
1306                          * is the last session on the tunnel.
1307                          */
1308                         session->tunnel = NULL;
1309                         session->tunnel_sock = NULL;
1310                         pppol2tp_tunnel_dec_refcount(tunnel);
1311                 }
1312         }
1313 
1314         kfree(session);
1315 out:
1316         return;
1317 }
1318 
1319 /* Called when the PPPoX socket (session) is closed.
1320  */
1321 static int pppol2tp_release(struct socket *sock)
1322 {
1323         struct sock *sk = sock->sk;
1324         struct pppol2tp_session *session;
1325         int error;
1326 
1327         if (!sk)
1328                 return 0;
1329 
1330         error = -EBADF;
1331         lock_sock(sk);
1332         if (sock_flag(sk, SOCK_DEAD) != 0)
1333                 goto error;
1334 
1335         pppox_unbind_sock(sk);
1336 
1337         /* Signal the death of the socket. */
1338         sk->sk_state = PPPOX_DEAD;
1339         sock_orphan(sk);
1340         sock->sk = NULL;
1341 
1342         session = pppol2tp_sock_to_session(sk);
1343 
1344         /* Purge any queued data */
1345         skb_queue_purge(&sk->sk_receive_queue);
1346         skb_queue_purge(&sk->sk_write_queue);
1347         if (session != NULL) {
1348                 struct sk_buff *skb;
1349                 while ((skb = skb_dequeue(&session->reorder_q))) {
1350                         kfree_skb(skb);
1351                         sock_put(sk);
1352                 }
1353         }
1354 
1355         release_sock(sk);
1356 
1357         /* This will delete the session context via
1358          * pppol2tp_session_destruct() if the socket's refcnt drops to
1359          * zero.
1360          */
1361         sock_put(sk);
1362 
1363         return 0;
1364 
1365 error:
1366         release_sock(sk);
1367         return error;
1368 }
1369 
1370 /* Internal function to prepare a tunnel (UDP) socket to have PPPoX
1371  * sockets attached to it.
1372  */
1373 static struct sock *pppol2tp_prepare_tunnel_socket(int fd, u16 tunnel_id,
1374                                                    int *error)
1375 {
1376         int err;
1377         struct socket *sock = NULL;
1378         struct sock *sk;
1379         struct pppol2tp_tunnel *tunnel;
1380         struct sock *ret = NULL;
1381 
1382         /* Get the tunnel UDP socket from the fd, which was opened by
1383          * the userspace L2TP daemon.
1384          */
1385         err = -EBADF;
1386         sock = sockfd_lookup(fd, &err);
1387         if (!sock) {
1388                 PRINTK(-1, PPPOL2TP_MSG_CONTROL, KERN_ERR,
1389                        "tunl %hu: sockfd_lookup(fd=%d) returned %d\n",
1390                        tunnel_id, fd, err);
1391                 goto err;
1392         }
1393 
1394         sk = sock->sk;
1395 
1396         /* Quick sanity checks */
1397         err = -EPROTONOSUPPORT;
1398         if (sk->sk_protocol != IPPROTO_UDP) {
1399                 PRINTK(-1, PPPOL2TP_MSG_CONTROL, KERN_ERR,
1400                        "tunl %hu: fd %d wrong protocol, got %d, expected %d\n",
1401                        tunnel_id, fd, sk->sk_protocol, IPPROTO_UDP);
1402                 goto err;
1403         }
1404         err = -EAFNOSUPPORT;
1405         if (sock->ops->family != AF_INET) {
1406                 PRINTK(-1, PPPOL2TP_MSG_CONTROL, KERN_ERR,
1407                        "tunl %hu: fd %d wrong family, got %d, expected %d\n",
1408                        tunnel_id, fd, sock->ops->family, AF_INET);
1409                 goto err;
1410         }
1411 
1412         err = -ENOTCONN;
1413 
1414         /* Check if this socket has already been prepped */
1415         tunnel = (struct pppol2tp_tunnel *)sk->sk_user_data;
1416         if (tunnel != NULL) {
1417                 /* User-data field already set */
1418                 err = -EBUSY;
1419                 BUG_ON(tunnel->magic != L2TP_TUNNEL_MAGIC);
1420 
1421                 /* This socket has already been prepped */
1422                 ret = tunnel->sock;
1423                 goto out;
1424         }
1425 
1426         /* This socket is available and needs prepping. Create a new tunnel
1427          * context and init it.
1428          */
1429         sk->sk_user_data = tunnel = kzalloc(sizeof(struct pppol2tp_tunnel), GFP_KERNEL);
1430         if (sk->sk_user_data == NULL) {
1431                 err = -ENOMEM;
1432                 goto err;
1433         }
1434 
1435         tunnel->magic = L2TP_TUNNEL_MAGIC;
1436         sprintf(&tunnel->name[0], "tunl %hu", tunnel_id);
1437 
1438         tunnel->stats.tunnel_id = tunnel_id;
1439         tunnel->debug = PPPOL2TP_DEFAULT_DEBUG_FLAGS;
1440 
1441         /* Hook on the tunnel socket destructor so that we can cleanup
1442          * if the tunnel socket goes away.
1443          */
1444         tunnel->old_sk_destruct = sk->sk_destruct;
1445         sk->sk_destruct = &pppol2tp_tunnel_destruct;
1446 
1447         tunnel->sock = sk;
1448         sk->sk_allocation = GFP_ATOMIC;
1449 
1450         /* Misc init */
1451         rwlock_init(&tunnel->hlist_lock);
1452 
1453         /* Add tunnel to our list */
1454         INIT_LIST_HEAD(&tunnel->list);
1455         write_lock_bh(&pppol2tp_tunnel_list_lock);
1456         list_add(&tunnel->list, &pppol2tp_tunnel_list);
1457         write_unlock_bh(&pppol2tp_tunnel_list_lock);
1458         atomic_inc(&pppol2tp_tunnel_count);
1459 
1460         /* Bump the reference count. The tunnel context is deleted
1461          * only when this drops to zero.
1462          */
1463         pppol2tp_tunnel_inc_refcount(tunnel);
1464 
1465         /* Mark socket as an encapsulation socket. See net/ipv4/udp.c */
1466         (udp_sk(sk))->encap_type = UDP_ENCAP_L2TPINUDP;
1467         (udp_sk(sk))->encap_rcv = pppol2tp_udp_encap_recv;
1468 
1469         ret = tunnel->sock;
1470 
1471         *error = 0;
1472 out:
1473         if (sock)
1474                 sockfd_put(sock);
1475 
1476         return ret;
1477 
1478 err:
1479         *error = err;
1480         goto out;
1481 }
1482 
1483 static struct proto pppol2tp_sk_proto = {
1484         .name     = "PPPOL2TP",
1485         .owner    = THIS_MODULE,
1486         .obj_size = sizeof(struct pppox_sock),
1487 };
1488 
1489 /* socket() handler. Initialize a new struct sock.
1490  */
1491 static int pppol2tp_create(struct net *net, struct socket *sock)
1492 {
1493         int error = -ENOMEM;
1494         struct sock *sk;
1495 
1496         sk = sk_alloc(net, PF_PPPOX, GFP_KERNEL, &pppol2tp_sk_proto);
1497         if (!sk)
1498                 goto out;
1499 
1500         sock_init_data(sock, sk);
1501 
1502         sock->state  = SS_UNCONNECTED;
1503         sock->ops    = &pppol2tp_ops;
1504 
1505         sk->sk_backlog_rcv = pppol2tp_recv_core;
1506         sk->sk_protocol    = PX_PROTO_OL2TP;
1507         sk->sk_family      = PF_PPPOX;
1508         sk->sk_state       = PPPOX_NONE;
1509         sk->sk_type        = SOCK_STREAM;
1510         sk->sk_destruct    = pppol2tp_session_destruct;
1511 
1512         error = 0;
1513 
1514 out:
1515         return error;
1516 }
1517 
1518 /* connect() handler. Attach a PPPoX socket to a tunnel UDP socket
1519  */
1520 static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr,
1521                             int sockaddr_len, int flags)
1522 {
1523         struct sock *sk = sock->sk;
1524         struct sockaddr_pppol2tp *sp = (struct sockaddr_pppol2tp *) uservaddr;
1525         struct pppox_sock *po = pppox_sk(sk);
1526         struct sock *tunnel_sock = NULL;
1527         struct pppol2tp_session *session = NULL;
1528         struct pppol2tp_tunnel *tunnel;
1529         struct dst_entry *dst;
1530         int error = 0;
1531 
1532         lock_sock(sk);
1533 
1534         error = -EINVAL;
1535         if (sp->sa_protocol != PX_PROTO_OL2TP)
1536                 goto end;
1537 
1538         /* Check for already bound sockets */
1539         error = -EBUSY;
1540         if (sk->sk_state & PPPOX_CONNECTED)
1541                 goto end;
1542 
1543         /* We don't supporting rebinding anyway */
1544         error = -EALREADY;
1545         if (sk->sk_user_data)
1546                 goto end; /* socket is already attached */
1547 
1548         /* Don't bind if s_tunnel is 0 */
1549         error = -EINVAL;
1550         if (sp->pppol2tp.s_tunnel == 0)
1551                 goto end;
1552 
1553         /* Special case: prepare tunnel socket if s_session and
1554          * d_session is 0. Otherwise look up tunnel using supplied
1555          * tunnel id.
1556          */
1557         if ((sp->pppol2tp.s_session == 0) && (sp->pppol2tp.d_session == 0)) {
1558                 tunnel_sock = pppol2tp_prepare_tunnel_socket(sp->pppol2tp.fd,
1559                                                              sp->pppol2tp.s_tunnel,
1560                                                              &error);
1561                 if (tunnel_sock == NULL)
1562                         goto end;
1563 
1564                 tunnel = tunnel_sock->sk_user_data;
1565         } else {
1566                 tunnel = pppol2tp_tunnel_find(sp->pppol2tp.s_tunnel);
1567 
1568                 /* Error if we can't find the tunnel */
1569                 error = -ENOENT;
1570                 if (tunnel == NULL)
1571                         goto end;
1572 
1573                 tunnel_sock = tunnel->sock;
1574         }
1575 
1576         /* Check that this session doesn't already exist */
1577         error = -EEXIST;
1578         session = pppol2tp_session_find(tunnel, sp->pppol2tp.s_session);
1579         if (session != NULL)
1580                 goto end;
1581 
1582         /* Allocate and initialize a new session context. */
1583         session = kzalloc(sizeof(struct pppol2tp_session), GFP_KERNEL);
1584         if (session == NULL) {
1585                 error = -ENOMEM;
1586                 goto end;
1587         }
1588 
1589         skb_queue_head_init(&session->reorder_q);
1590 
1591         session->magic       = L2TP_SESSION_MAGIC;
1592         session->owner       = current->pid;
1593         session->sock        = sk;
1594         session->tunnel      = tunnel;
1595         session->tunnel_sock = tunnel_sock;
1596         session->tunnel_addr = sp->pppol2tp;
1597         sprintf(&session->name[0], "sess %hu/%hu",
1598                 session->tunnel_addr.s_tunnel,
1599                 session->tunnel_addr.s_session);
1600 
1601         session->stats.tunnel_id  = session->tunnel_addr.s_tunnel;
1602         session->stats.session_id = session->tunnel_addr.s_session;
1603 
1604         INIT_HLIST_NODE(&session->hlist);
1605 
1606         /* Inherit debug options from tunnel */
1607         session->debug = tunnel->debug;
1608 
1609         /* Default MTU must allow space for UDP/L2TP/PPP
1610          * headers.
1611          */
1612         session->mtu = session->mru = 1500 - PPPOL2TP_HEADER_OVERHEAD;
1613 
1614         /* If PMTU discovery was enabled, use the MTU that was discovered */
1615         dst = sk_dst_get(sk);
1616         if (dst != NULL) {
1617                 u32 pmtu = dst_mtu(__sk_dst_get(sk));
1618                 if (pmtu != 0)
1619                         session->mtu = session->mru = pmtu -
1620                                 PPPOL2TP_HEADER_OVERHEAD;
1621                 dst_release(dst);
1622         }
1623 
1624         /* Special case: if source & dest session_id == 0x0000, this socket is
1625          * being created to manage the tunnel. Don't add the session to the
1626          * session hash list, just set up the internal context for use by
1627          * ioctl() and sockopt() handlers.
1628          */
1629         if ((session->tunnel_addr.s_session == 0) &&
1630             (session->tunnel_addr.d_session == 0)) {
1631                 error = 0;
1632                 sk->sk_user_data = session;
1633                 goto out_no_ppp;
1634         }
1635 
1636         /* Get tunnel context from the tunnel socket */
1637         tunnel = pppol2tp_sock_to_tunnel(tunnel_sock);
1638         if (tunnel == NULL) {
1639                 error = -EBADF;
1640                 goto end;
1641         }
1642 
1643         /* Right now, because we don't have a way to push the incoming skb's
1644          * straight through the UDP layer, the only header we need to worry
1645          * about is the L2TP header. This size is different depending on
1646          * whether sequence numbers are enabled for the data channel.
1647          */
1648         po->chan.hdrlen = PPPOL2TP_L2TP_HDR_SIZE_NOSEQ;
1649 
1650         po->chan.private = sk;
1651         po->chan.ops     = &pppol2tp_chan_ops;
1652         po->chan.mtu     = session->mtu;
1653 
1654         error = ppp_register_channel(&po->chan);
1655         if (error)
1656                 goto end_put_tun;
1657 
1658         /* This is how we get the session context from the socket. */
1659         sk->sk_user_data = session;
1660 
1661         /* Add session to the tunnel's hash list */
1662         write_lock_bh(&tunnel->hlist_lock);
1663         hlist_add_head(&session->hlist,
1664                        pppol2tp_session_id_hash(tunnel,
1665                                                 session->tunnel_addr.s_session));
1666         write_unlock_bh(&tunnel->hlist_lock);
1667 
1668         atomic_inc(&pppol2tp_session_count);
1669 
1670 out_no_ppp:
1671         pppol2tp_tunnel_inc_refcount(tunnel);
1672         sk->sk_state = PPPOX_CONNECTED;
1673         PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
1674                "%s: created\n", session->name);
1675 
1676 end_put_tun:
1677         sock_put(tunnel_sock);
1678 end:
1679         release_sock(sk);
1680 
1681         if (error != 0)
1682                 PRINTK(session ? session->debug : -1, PPPOL2TP_MSG_CONTROL, KERN_WARNING,
1683                        "%s: connect failed: %d\n", session->name, error);
1684 
1685         return error;
1686 }
1687 
1688 /* getname() support.
1689  */
1690 static int pppol2tp_getname(struct socket *sock, struct sockaddr *uaddr,
1691                             int *usockaddr_len, int peer)
1692 {
1693         int len = sizeof(struct sockaddr_pppol2tp);
1694         struct sockaddr_pppol2tp sp;
1695         int error = 0;
1696         struct pppol2tp_session *session;
1697 
1698         error = -ENOTCONN;
1699         if (sock->sk->sk_state != PPPOX_CONNECTED)
1700                 goto end;
1701 
1702         session = pppol2tp_sock_to_session(sock->sk);
1703         if (session == NULL) {
1704                 error = -EBADF;
1705                 goto end;
1706         }
1707 
1708         sp.sa_family    = AF_PPPOX;
1709         sp.sa_protocol  = PX_PROTO_OL2TP;
1710         memcpy(&sp.pppol2tp, &session->tunnel_addr,
1711                sizeof(struct pppol2tp_addr));
1712 
1713         memcpy(uaddr, &sp, len);
1714 
1715         *usockaddr_len = len;
1716 
1717         error = 0;
1718         sock_put(sock->sk);
1719 
1720 end:
1721         return error;
1722 }
1723 
1724 /****************************************************************************
1725  * ioctl() handlers.
1726  *
1727  * The PPPoX socket is created for L2TP sessions: tunnels have their own UDP
1728  * sockets. However, in order to control kernel tunnel features, we allow
1729  * userspace to create a special "tunnel" PPPoX socket which is used for
1730  * control only.  Tunnel PPPoX sockets have session_id == 0 and simply allow
1731  * the user application to issue L2TP setsockopt(), getsockopt() and ioctl()
1732  * calls.
1733  ****************************************************************************/
1734 
1735 /* Session ioctl helper.
1736  */
1737 static int pppol2tp_session_ioctl(struct pppol2tp_session *session,
1738                                   unsigned int cmd, unsigned long arg)
1739 {
1740         struct ifreq ifr;
1741         int err = 0;
1742         struct sock *sk = session->sock;
1743         int val = (int) arg;
1744 
1745         PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_DEBUG,
1746                "%s: pppol2tp_session_ioctl(cmd=%#x, arg=%#lx)\n",
1747                session->name, cmd, arg);
1748 
1749         sock_hold(sk);
1750 
1751         switch (cmd) {
1752         case SIOCGIFMTU:
1753                 err = -ENXIO;
1754                 if (!(sk->sk_state & PPPOX_CONNECTED))
1755                         break;
1756 
1757                 err = -EFAULT;
1758                 if (copy_from_user(&ifr, (void __user *) arg, sizeof(struct ifreq)))
1759                         break;
1760                 ifr.ifr_mtu = session->mtu;
1761                 if (copy_to_user((void __user *) arg, &ifr, sizeof(struct ifreq)))
1762                         break;
1763 
1764                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
1765                        "%s: get mtu=%d\n", session->name, session->mtu);
1766                 err = 0;
1767                 break;
1768 
1769         case SIOCSIFMTU:
1770                 err = -ENXIO;
1771                 if (!(sk->sk_state & PPPOX_CONNECTED))
1772                         break;
1773 
1774                 err = -EFAULT;
1775                 if (copy_from_user(&ifr, (void __user *) arg, sizeof(struct ifreq)))
1776                         break;
1777 
1778                 session->mtu = ifr.ifr_mtu;
1779 
1780                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
1781                        "%s: set mtu=%d\n", session->name, session->mtu);
1782                 err = 0;
1783                 break;
1784 
1785         case PPPIOCGMRU:
1786                 err = -ENXIO;
1787                 if (!(sk->sk_state & PPPOX_CONNECTED))
1788                         break;
1789 
1790                 err = -EFAULT;
1791                 if (put_user(session->mru, (int __user *) arg))
1792                         break;
1793 
1794                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
1795                        "%s: get mru=%d\n", session->name, session->mru);
1796                 err = 0;
1797                 break;
1798 
1799         case PPPIOCSMRU:
1800                 err = -ENXIO;
1801                 if (!(sk->sk_state & PPPOX_CONNECTED))
1802                         break;
1803 
1804                 err = -EFAULT;
1805                 if (get_user(val,(int __user *) arg))
1806                         break;
1807 
1808                 session->mru = val;
1809                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
1810                        "%s: set mru=%d\n", session->name, session->mru);
1811                 err = 0;
1812                 break;
1813 
1814         case PPPIOCGFLAGS:
1815                 err = -EFAULT;
1816                 if (put_user(session->flags, (int __user *) arg))
1817                         break;
1818 
1819                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
1820                        "%s: get flags=%d\n", session->name, session->flags);
1821                 err = 0;
1822                 break;
1823 
1824         case PPPIOCSFLAGS:
1825                 err = -EFAULT;
1826                 if (get_user(val, (int __user *) arg))
1827                         break;
1828                 session->flags = val;
1829                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
1830                        "%s: set flags=%d\n", session->name, session->flags);
1831                 err = 0;
1832                 break;
1833 
1834         case PPPIOCGL2TPSTATS:
1835                 err = -ENXIO;
1836                 if (!(sk->sk_state & PPPOX_CONNECTED))
1837                         break;
1838 
1839                 if (copy_to_user((void __user *) arg, &session->stats,
1840                                  sizeof(session->stats)))
1841                         break;
1842                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
1843                        "%s: get L2TP stats\n", session->name);
1844                 err = 0;
1845                 break;
1846 
1847         default:
1848                 err = -ENOSYS;
1849                 break;
1850         }
1851 
1852         sock_put(sk);
1853 
1854         return err;
1855 }
1856 
1857 /* Tunnel ioctl helper.
1858  *
1859  * Note the special handling for PPPIOCGL2TPSTATS below. If the ioctl data
1860  * specifies a session_id, the session ioctl handler is called. This allows an
1861  * application to retrieve session stats via a tunnel socket.
1862  */
1863 static int pppol2tp_tunnel_ioctl(struct pppol2tp_tunnel *tunnel,
1864                                  unsigned int cmd, unsigned long arg)
1865 {
1866         int err = 0;
1867         struct sock *sk = tunnel->sock;
1868         struct pppol2tp_ioc_stats stats_req;
1869 
1870         PRINTK(tunnel->debug, PPPOL2TP_MSG_CONTROL, KERN_DEBUG,
1871                "%s: pppol2tp_tunnel_ioctl(cmd=%#x, arg=%#lx)\n", tunnel->name,
1872                cmd, arg);
1873 
1874         sock_hold(sk);
1875 
1876         switch (cmd) {
1877         case PPPIOCGL2TPSTATS:
1878                 err = -ENXIO;
1879                 if (!(sk->sk_state & PPPOX_CONNECTED))
1880                         break;
1881 
1882                 if (copy_from_user(&stats_req, (void __user *) arg,
1883                                    sizeof(stats_req))) {
1884                         err = -EFAULT;
1885                         break;
1886                 }
1887                 if (stats_req.session_id != 0) {
1888                         /* resend to session ioctl handler */
1889                         struct pppol2tp_session *session =
1890                                 pppol2tp_session_find(tunnel, stats_req.session_id);
1891                         if (session != NULL)
1892                                 err = pppol2tp_session_ioctl(session, cmd, arg);
1893                         else
1894                                 err = -EBADR;
1895                         break;
1896                 }
1897 #ifdef CONFIG_XFRM
1898                 tunnel->stats.using_ipsec = (sk->sk_policy[0] || sk->sk_policy[1]) ? 1 : 0;
1899 #endif
1900                 if (copy_to_user((void __user *) arg, &tunnel->stats,
1901                                  sizeof(tunnel->stats))) {
1902                         err = -EFAULT;
1903                         break;
1904                 }
1905                 PRINTK(tunnel->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
1906                        "%s: get L2TP stats\n", tunnel->name);
1907                 err = 0;
1908                 break;
1909 
1910         default:
1911                 err = -ENOSYS;
1912                 break;
1913         }
1914 
1915         sock_put(sk);
1916 
1917         return err;
1918 }
1919 
1920 /* Main ioctl() handler.
1921  * Dispatch to tunnel or session helpers depending on the socket.
1922  */
1923 static int pppol2tp_ioctl(struct socket *sock, unsigned int cmd,
1924                           unsigned long arg)
1925 {
1926         struct sock *sk = sock->sk;
1927         struct pppol2tp_session *session;
1928         struct pppol2tp_tunnel *tunnel;
1929         int err;
1930 
1931         if (!sk)
1932                 return 0;
1933 
1934         err = -EBADF;
1935         if (sock_flag(sk, SOCK_DEAD) != 0)
1936                 goto end;
1937 
1938         err = -ENOTCONN;
1939         if ((sk->sk_user_data == NULL) ||
1940             (!(sk->sk_state & (PPPOX_CONNECTED | PPPOX_BOUND))))
1941                 goto end;
1942 
1943         /* Get session context from the socket */
1944         err = -EBADF;
1945         session = pppol2tp_sock_to_session(sk);
1946         if (session == NULL)
1947                 goto end;
1948 
1949         /* Special case: if session's session_id is zero, treat ioctl as a
1950          * tunnel ioctl
1951          */
1952         if ((session->tunnel_addr.s_session == 0) &&
1953             (session->tunnel_addr.d_session == 0)) {
1954                 err = -EBADF;
1955                 tunnel = pppol2tp_sock_to_tunnel(session->tunnel_sock);
1956                 if (tunnel == NULL)
1957                         goto end_put_sess;
1958 
1959                 err = pppol2tp_tunnel_ioctl(tunnel, cmd, arg);
1960                 sock_put(session->tunnel_sock);
1961                 goto end_put_sess;
1962         }
1963 
1964         err = pppol2tp_session_ioctl(session, cmd, arg);
1965 
1966 end_put_sess:
1967         sock_put(sk);
1968 end:
1969         return err;
1970 }
1971 
1972 /*****************************************************************************
1973  * setsockopt() / getsockopt() support.
1974  *
1975  * The PPPoX socket is created for L2TP sessions: tunnels have their own UDP
1976  * sockets. In order to control kernel tunnel features, we allow userspace to
1977  * create a special "tunnel" PPPoX socket which is used for control only.
1978  * Tunnel PPPoX sockets have session_id == 0 and simply allow the user
1979  * application to issue L2TP setsockopt(), getsockopt() and ioctl() calls.
1980  *****************************************************************************/
1981 
1982 /* Tunnel setsockopt() helper.
1983  */
1984 static int pppol2tp_tunnel_setsockopt(struct sock *sk,
1985                                       struct pppol2tp_tunnel *tunnel,
1986                                       int optname, int val)
1987 {
1988         int err = 0;
1989 
1990         switch (optname) {
1991         case PPPOL2TP_SO_DEBUG:
1992                 tunnel->debug = val;
1993                 PRINTK(tunnel->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
1994                        "%s: set debug=%x\n", tunnel->name, tunnel->debug);
1995                 break;
1996 
1997         default:
1998                 err = -ENOPROTOOPT;
1999                 break;
2000         }
2001 
2002         return err;
2003 }
2004 
2005 /* Session setsockopt helper.
2006  */
2007 static int pppol2tp_session_setsockopt(struct sock *sk,
2008                                        struct pppol2tp_session *session,
2009                                        int optname, int val)
2010 {
2011         int err = 0;
2012 
2013         switch (optname) {
2014         case PPPOL2TP_SO_RECVSEQ:
2015                 if ((val != 0) && (val != 1)) {
2016                         err = -EINVAL;
2017                         break;
2018                 }
2019                 session->recv_seq = val ? -1 : 0;
2020                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
2021                        "%s: set recv_seq=%d\n", session->name,
2022                        session->recv_seq);
2023                 break;
2024 
2025         case PPPOL2TP_SO_SENDSEQ:
2026                 if ((val != 0) && (val != 1)) {
2027                         err = -EINVAL;
2028                         break;
2029                 }
2030                 session->send_seq = val ? -1 : 0;
2031                 {
2032                         struct sock *ssk      = session->sock;
2033                         struct pppox_sock *po = pppox_sk(ssk);
2034                         po->chan.hdrlen = val ? PPPOL2TP_L2TP_HDR_SIZE_SEQ :
2035                                 PPPOL2TP_L2TP_HDR_SIZE_NOSEQ;
2036                 }
2037                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
2038                        "%s: set send_seq=%d\n", session->name, session->send_seq);
2039                 break;
2040 
2041         case PPPOL2TP_SO_LNSMODE:
2042                 if ((val != 0) && (val != 1)) {
2043                         err = -EINVAL;
2044                         break;
2045                 }
2046                 session->lns_mode = val ? -1 : 0;
2047                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
2048                        "%s: set lns_mode=%d\n", session->name,
2049                        session->lns_mode);
2050                 break;
2051 
2052         case PPPOL2TP_SO_DEBUG:
2053                 session->debug = val;
2054                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
2055                        "%s: set debug=%x\n", session->name, session->debug);
2056                 break;
2057 
2058         case PPPOL2TP_SO_REORDERTO:
2059                 session->reorder_timeout = msecs_to_jiffies(val);
2060                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
2061                        "%s: set reorder_timeout=%d\n", session->name,
2062                        session->reorder_timeout);
2063                 break;
2064 
2065         default:
2066                 err = -ENOPROTOOPT;
2067                 break;
2068         }
2069 
2070         return err;
2071 }
2072 
2073 /* Main setsockopt() entry point.
2074  * Does API checks, then calls either the tunnel or session setsockopt
2075  * handler, according to whether the PPPoL2TP socket is a for a regular
2076  * session or the special tunnel type.
2077  */
2078 static int pppol2tp_setsockopt(struct socket *sock, int level, int optname,
2079                                char __user *optval, int optlen)
2080 {
2081         struct sock *sk = sock->sk;
2082         struct pppol2tp_session *session = sk->sk_user_data;
2083         struct pppol2tp_tunnel *tunnel;
2084         int val;
2085         int err;
2086 
2087         if (level != SOL_PPPOL2TP)
2088                 return udp_prot.setsockopt(sk, level, optname, optval, optlen);
2089 
2090         if (optlen < sizeof(int))
2091                 return -EINVAL;
2092 
2093         if (get_user(val, (int __user *)optval))
2094                 return -EFAULT;
2095 
2096         err = -ENOTCONN;
2097         if (sk->sk_user_data == NULL)
2098                 goto end;
2099 
2100         /* Get session context from the socket */
2101         err = -EBADF;
2102         session = pppol2tp_sock_to_session(sk);
2103         if (session == NULL)
2104                 goto end;
2105 
2106         /* Special case: if session_id == 0x0000, treat as operation on tunnel
2107          */
2108         if ((session->tunnel_addr.s_session == 0) &&
2109             (session->tunnel_addr.d_session == 0)) {
2110                 err = -EBADF;
2111                 tunnel = pppol2tp_sock_to_tunnel(session->tunnel_sock);
2112                 if (tunnel == NULL)
2113                         goto end_put_sess;
2114 
2115                 err = pppol2tp_tunnel_setsockopt(sk, tunnel, optname, val);
2116                 sock_put(session->tunnel_sock);
2117         } else
2118                 err = pppol2tp_session_setsockopt(sk, session, optname, val);
2119 
2120         err = 0;
2121 
2122 end_put_sess:
2123         sock_put(sk);
2124 end:
2125         return err;
2126 }
2127 
2128 /* Tunnel getsockopt helper. Called with sock locked.
2129  */
2130 static int pppol2tp_tunnel_getsockopt(struct sock *sk,
2131                                       struct pppol2tp_tunnel *tunnel,
2132                                       int optname, int *val)
2133 {
2134         int err = 0;
2135 
2136         switch (optname) {
2137         case PPPOL2TP_SO_DEBUG:
2138                 *val = tunnel->debug;
2139                 PRINTK(tunnel->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
2140                        "%s: get debug=%x\n", tunnel->name, tunnel->debug);
2141                 break;
2142 
2143         default:
2144                 err = -ENOPROTOOPT;
2145                 break;
2146         }
2147 
2148         return err;
2149 }
2150 
2151 /* Session getsockopt helper. Called with sock locked.
2152  */
2153 static int pppol2tp_session_getsockopt(struct sock *sk,
2154                                        struct pppol2tp_session *session,
2155                                        int optname, int *val)
2156 {
2157         int err = 0;
2158 
2159         switch (optname) {
2160         case PPPOL2TP_SO_RECVSEQ:
2161                 *val = session->recv_seq;
2162                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
2163                        "%s: get recv_seq=%d\n", session->name, *val);
2164                 break;
2165 
2166         case PPPOL2TP_SO_SENDSEQ:
2167                 *val = session->send_seq;
2168                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
2169                        "%s: get send_seq=%d\n", session->name, *val);
2170                 break;
2171 
2172         case PPPOL2TP_SO_LNSMODE:
2173                 *val = session->lns_mode;
2174                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
2175                        "%s: get lns_mode=%d\n", session->name, *val);
2176                 break;
2177 
2178         case PPPOL2TP_SO_DEBUG:
2179                 *val = session->debug;
2180                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
2181                        "%s: get debug=%d\n", session->name, *val);
2182                 break;
2183 
2184         case PPPOL2TP_SO_REORDERTO:
2185                 *val = (int) jiffies_to_msecs(session->reorder_timeout);
2186                 PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
2187                        "%s: get reorder_timeout=%d\n", session->name, *val);
2188                 break;
2189 
2190         default:
2191                 err = -ENOPROTOOPT;
2192         }
2193 
2194         return err;
2195 }
2196 
2197 /* Main getsockopt() entry point.
2198  * Does API checks, then calls either the tunnel or session getsockopt
2199  * handler, according to whether the PPPoX socket is a for a regular session
2200  * or the special tunnel type.
2201  */
2202 static int pppol2tp_getsockopt(struct socket *sock, int level,
2203                                int optname, char __user *optval, int __user *optlen)
2204 {
2205         struct sock *sk = sock->sk;
2206         struct pppol2tp_session *session = sk->sk_user_data;
2207         struct pppol2tp_tunnel *tunnel;
2208         int val, len;
2209         int err;
2210 
2211         if (level != SOL_PPPOL2TP)
2212                 return udp_prot.getsockopt(sk, level, optname, optval, optlen);
2213 
2214         if (get_user(len, (int __user *) optlen))
2215                 return -EFAULT;
2216 
2217         len = min_t(unsigned int, len, sizeof(int));
2218 
2219         if (len < 0)
2220                 return -EINVAL;
2221 
2222         err = -ENOTCONN;
2223         if (sk->sk_user_data == NULL)
2224                 goto end;
2225 
2226         /* Get the session context */
2227         err = -EBADF;
2228         session = pppol2tp_sock_to_session(sk);
2229         if (session == NULL)
2230                 goto end;
2231 
2232         /* Special case: if session_id == 0x0000, treat as operation on tunnel */
2233         if ((session->tunnel_addr.s_session == 0) &&
2234             (session->tunnel_addr.d_session == 0)) {
2235                 err = -EBADF;
2236                 tunnel = pppol2tp_sock_to_tunnel(session->tunnel_sock);
2237                 if (tunnel == NULL)
2238                         goto end_put_sess;
2239 
2240                 err = pppol2tp_tunnel_getsockopt(sk, tunnel, optname, &val);
2241                 sock_put(session->tunnel_sock);
2242         } else
2243                 err = pppol2tp_session_getsockopt(sk, session, optname, &val);
2244 
2245         err = -EFAULT;
2246         if (put_user(len, (int __user *) optlen))
2247                 goto end_put_sess;
2248 
2249         if (copy_to_user((void __user *) optval, &val, len))
2250                 goto end_put_sess;
2251 
2252         err = 0;
2253 
2254 end_put_sess:
2255         sock_put(sk);
2256 end:
2257         return err;
2258 }
2259 
2260 /*****************************************************************************
2261  * /proc filesystem for debug
2262  *****************************************************************************/
2263 
2264 #ifdef CONFIG_PROC_FS
2265 
2266 #include <linux/seq_file.h>
2267 
2268 struct pppol2tp_seq_data {
2269         struct pppol2tp_tunnel *tunnel; /* current tunnel */
2270         struct pppol2tp_session *session; /* NULL means get first session in tunnel */
2271 };
2272 
2273 static struct pppol2tp_session *next_session(struct pppol2tp_tunnel *tunnel, struct pppol2tp_session *curr)
2274 {
2275         struct pppol2tp_session *session = NULL;
2276         struct hlist_node *walk;
2277         int found = 0;
2278         int next = 0;
2279         int i;
2280 
2281         read_lock_bh(&tunnel->hlist_lock);
2282         for (i = 0; i < PPPOL2TP_HASH_SIZE; i++) {
2283                 hlist_for_each_entry(session, walk, &tunnel->session_hlist[i], hlist) {
2284                         if (curr == NULL) {
2285                                 found = 1;
2286                                 goto out;
2287                         }
2288                         if (session == curr) {
2289                                 next = 1;
2290                                 continue;
2291                         }
2292                         if (next) {
2293                                 found = 1;
2294                                 goto out;
2295                         }
2296                 }
2297         }
2298 out:
2299         read_unlock_bh(&tunnel->hlist_lock);
2300         if (!found)
2301                 session = NULL;
2302 
2303         return session;
2304 }
2305 
2306 static struct pppol2tp_tunnel *next_tunnel(struct pppol2tp_tunnel *curr)
2307 {
2308         struct pppol2tp_tunnel *tunnel = NULL;
2309 
2310         read_lock_bh(&pppol2tp_tunnel_list_lock);
2311         if (list_is_last(&curr->list, &pppol2tp_tunnel_list)) {
2312                 goto out;
2313         }
2314         tunnel = list_entry(curr->list.next, struct pppol2tp_tunnel, list);
2315 out:
2316         read_unlock_bh(&pppol2tp_tunnel_list_lock);
2317 
2318         return tunnel;
2319 }
2320 
2321 static void *pppol2tp_seq_start(struct seq_file *m, loff_t *offs)
2322 {
2323         struct pppol2tp_seq_data *pd = SEQ_START_TOKEN;
2324         loff_t pos = *offs;
2325 
2326         if (!pos)
2327                 goto out;
2328 
2329         BUG_ON(m->private == NULL);
2330         pd = m->private;
2331 
2332         if (pd->tunnel == NULL) {
2333                 if (!list_empty(&pppol2tp_tunnel_list))
2334                         pd->tunnel = list_entry(pppol2tp_tunnel_list.next, struct pppol2tp_tunnel, list);
2335         } else {
2336                 pd->session = next_session(pd->tunnel, pd->session);
2337                 if (pd->session == NULL) {
2338                         pd->tunnel = next_tunnel(pd->tunnel);
2339                 }
2340         }
2341 
2342         /* NULL tunnel and session indicates end of list */
2343         if ((pd->tunnel == NULL) && (pd->session == NULL))
2344                 pd = NULL;
2345 
2346 out:
2347         return pd;
2348 }
2349 
2350 static void *pppol2tp_seq_next(struct seq_file *m, void *v, loff_t *pos)
2351 {
2352         (*pos)++;
2353         return NULL;
2354 }
2355 
2356 static void pppol2tp_seq_stop(struct seq_file *p, void *v)
2357 {
2358         /* nothing to do */
2359 }
2360 
2361 static void pppol2tp_seq_tunnel_show(struct seq_file *m, void *v)
2362 {
2363         struct pppol2tp_tunnel *tunnel = v;
2364 
2365         seq_printf(m, "\nTUNNEL '%s', %c %d\n",
2366                    tunnel->name,
2367                    (tunnel == tunnel->sock->sk_user_data) ? 'Y':'N',
2368                    atomic_read(&tunnel->ref_count) - 1);
2369         seq_printf(m, " %08x %llu/%llu/%llu %llu/%llu/%llu\n",
2370                    tunnel->debug,
2371                    (unsigned long long)tunnel->stats.tx_packets,
2372                    (unsigned long long)tunnel->stats.tx_bytes,
2373                    (unsigned long long)tunnel->stats.tx_errors,
2374                    (unsigned long long)tunnel->stats.rx_packets,
2375                    (unsigned long long)tunnel->stats.rx_bytes,
2376                    (unsigned long long)tunnel->stats.rx_errors);
2377 }
2378 
2379 static void pppol2tp_seq_session_show(struct seq_file *m, void *v)
2380 {
2381         struct pppol2tp_session *session = v;
2382 
2383         seq_printf(m, "  SESSION '%s' %08X/%d %04X/%04X -> "
2384                    "%04X/%04X %d %c\n",
2385                    session->name,
2386                    ntohl(session->tunnel_addr.addr.sin_addr.s_addr),
2387                    ntohs(session->tunnel_addr.addr.sin_port),
2388                    session->tunnel_addr.s_tunnel,
2389                    session->tunnel_addr.s_session,
2390                    session->tunnel_addr.d_tunnel,
2391                    session->tunnel_addr.d_session,
2392                    session->sock->sk_state,
2393                    (session == session->sock->sk_user_data) ?
2394                    'Y' : 'N');
2395         seq_printf(m, "   %d/%d/%c/%c/%s %08x %u\n",
2396                    session->mtu, session->mru,
2397                    session->recv_seq ? 'R' : '-',
2398                    session->send_seq ? 'S' : '-',
2399                    session->lns_mode ? "LNS" : "LAC",
2400                    session->debug,
2401                    jiffies_to_msecs(session->reorder_timeout));
2402         seq_printf(m, "   %hu/%hu %llu/%llu/%llu %llu/%llu/%llu\n",
2403                    session->nr, session->ns,
2404                    (unsigned long long)session->stats.tx_packets,
2405                    (unsigned long long)session->stats.tx_bytes,
2406                    (unsigned long long)session->stats.tx_errors,
2407                    (unsigned long long)session->stats.rx_packets,
2408                    (unsigned long long)session->stats.rx_bytes,
2409                    (unsigned long long)session->stats.rx_errors);
2410 }
2411 
2412 static int pppol2tp_seq_show(struct seq_file *m, void *v)
2413 {
2414         struct pppol2tp_seq_data *pd = v;
2415 
2416         /* display header on line 1 */
2417         if (v == SEQ_START_TOKEN) {
2418                 seq_puts(m, "PPPoL2TP driver info, " PPPOL2TP_DRV_VERSION "\n");
2419                 seq_puts(m, "TUNNEL name, user-data-ok session-count\n");
2420                 seq_puts(m, " debug tx-pkts/bytes/errs rx-pkts/bytes/errs\n");
2421                 seq_puts(m, "  SESSION name, addr/port src-tid/sid "
2422                          "dest-tid/sid state user-data-ok\n");
2423                 seq_puts(m, "   mtu/mru/rcvseq/sendseq/lns debug reorderto\n");
2424                 seq_puts(m, "   nr/ns tx-pkts/bytes/errs rx-pkts/bytes/errs\n");
2425                 goto out;
2426         }
2427 
2428         /* Show the tunnel or session context.
2429          */
2430         if (pd->session == NULL)
2431                 pppol2tp_seq_tunnel_show(m, pd->tunnel);
2432         else
2433                 pppol2tp_seq_session_show(m, pd->session);
2434 
2435 out:
2436         return 0;
2437 }
2438 
2439 static struct seq_operations pppol2tp_seq_ops = {
2440         .start          = pppol2tp_seq_start,
2441         .next           = pppol2tp_seq_next,
2442         .stop           = pppol2tp_seq_stop,
2443         .show           = pppol2tp_seq_show,
2444 };
2445 
2446 /* Called when our /proc file is opened. We allocate data for use when
2447  * iterating our tunnel / session contexts and store it in the private
2448  * data of the seq_file.
2449  */
2450 static int pppol2tp_proc_open(struct inode *inode, struct file *file)
2451 {
2452         struct seq_file *m;
2453         struct pppol2tp_seq_data *pd;
2454         int ret = 0;
2455 
2456         ret = seq_open(file, &pppol2tp_seq_ops);
2457         if (ret < 0)
2458                 goto out;
2459 
2460         m = file->private_data;
2461 
2462         /* Allocate and fill our proc_data for access later */
2463         ret = -ENOMEM;
2464         m->private = kzalloc(sizeof(struct pppol2tp_seq_data), GFP_KERNEL);
2465         if (m->private == NULL)
2466                 goto out;
2467 
2468         pd = m->private;
2469         ret = 0;
2470 
2471 out:
2472         return ret;
2473 }
2474 
2475 /* Called when /proc file access completes.
2476  */
2477 static int pppol2tp_proc_release(struct inode *inode, struct file *file)
2478 {
2479         struct seq_file *m = (struct seq_file *)file->private_data;
2480 
2481         kfree(m->private);
2482         m->private = NULL;
2483 
2484         return seq_release(inode, file);
2485 }
2486 
2487 static struct file_operations pppol2tp_proc_fops = {
2488         .owner          = THIS_MODULE,
2489         .open           = pppol2tp_proc_open,
2490         .read           = seq_read,
2491         .llseek         = seq_lseek,
2492         .release        = pppol2tp_proc_release,
2493 };
2494 
2495 static struct proc_dir_entry *pppol2tp_proc;
2496 
2497 #endif /* CONFIG_PROC_FS */
2498 
2499 /*****************************************************************************
2500  * Init and cleanup
2501  *****************************************************************************/
2502 
2503 static struct proto_ops pppol2tp_ops = {
2504         .family         = AF_PPPOX,
2505         .owner          = THIS_MODULE,
2506         .release        = pppol2tp_release,
2507         .bind           = sock_no_bind,
2508         .connect        = pppol2tp_connect,
2509         .socketpair     = sock_no_socketpair,
2510         .accept         = sock_no_accept,
2511         .getname        = pppol2tp_getname,
2512         .poll           = datagram_poll,
2513         .listen         = sock_no_listen,
2514         .shutdown       = sock_no_shutdown,
2515         .setsockopt     = pppol2tp_setsockopt,
2516         .getsockopt     = pppol2tp_getsockopt,
2517         .sendmsg        = pppol2tp_sendmsg,
2518         .recvmsg        = pppol2tp_recvmsg,
2519         .mmap           = sock_no_mmap,
2520         .ioctl          = pppox_ioctl,
2521 };
2522 
2523 static struct pppox_proto pppol2tp_proto = {
2524         .create         = pppol2tp_create,
2525         .ioctl          = pppol2tp_ioctl
2526 };
2527 
2528 static int __init pppol2tp_init(void)
2529 {
2530         int err;
2531 
2532         err = proto_register(&pppol2tp_sk_proto, 0);
2533         if (err)
2534                 goto out;
2535         err = register_pppox_proto(PX_PROTO_OL2TP, &pppol2tp_proto);
2536         if (err)
2537                 goto out_unregister_pppol2tp_proto;
2538 
2539 #ifdef CONFIG_PROC_FS
2540         pppol2tp_proc = create_proc_entry("pppol2tp", 0, init_net.proc_net);
2541         if (!pppol2tp_proc) {
2542                 err = -ENOMEM;
2543                 goto out_unregister_pppox_proto;
2544         }
2545         pppol2tp_proc->proc_fops = &pppol2tp_proc_fops;
2546 #endif /* CONFIG_PROC_FS */
2547         printk(KERN_INFO "PPPoL2TP kernel driver, %s\n",
2548                PPPOL2TP_DRV_VERSION);
2549 
2550 out:
2551         return err;
2552 #ifdef CONFIG_PROC_FS
2553 out_unregister_pppox_proto:
2554         unregister_pppox_proto(PX_PROTO_OL2TP);
2555 #endif
2556 out_unregister_pppol2tp_proto:
2557         proto_unregister(&pppol2tp_sk_proto);
2558         goto out;
2559 }
2560 
2561 static void __exit pppol2tp_exit(void)
2562 {
2563         unregister_pppox_proto(PX_PROTO_OL2TP);
2564 
2565 #ifdef CONFIG_PROC_FS
2566         remove_proc_entry("pppol2tp", init_net.proc_net);
2567 #endif
2568         proto_unregister(&pppol2tp_sk_proto);
2569 }
2570 
2571 module_init(pppol2tp_init);
2572 module_exit(pppol2tp_exit);
2573 
2574 MODULE_AUTHOR("Martijn van Oosterhout <kleptog@svana.org>, "
2575               "James Chapman <jchapman@katalix.com>");
2576 MODULE_DESCRIPTION("PPP over L2TP over UDP");
2577 MODULE_LICENSE("GPL");
2578 MODULE_VERSION(PPPOL2TP_DRV_VERSION);
2579 
  This page was automatically generated by the LXR engine.