[PPPoX/E]: return ENOTTY on unknown ioctl requests
[linux-2.6] / drivers / net / pppoe.c
1 /** -*- linux-c -*- ***********************************************************
2  * Linux PPP over Ethernet (PPPoX/PPPoE) Sockets
3  *
4  * PPPoX --- Generic PPP encapsulation socket family
5  * PPPoE --- PPP over Ethernet (RFC 2516)
6  *
7  *
8  * Version:     0.7.0
9  *
10  * 070228 :     Fix to allow multiple sessions with same remote MAC and same
11  *              session id by including the local device ifindex in the
12  *              tuple identifying a session. This also ensures packets can't
13  *              be injected into a session from interfaces other than the one
14  *              specified by userspace. Florian Zumbiehl <florz@florz.de>
15  *              (Oh, BTW, this one is YYMMDD, in case you were wondering ...)
16  * 220102 :     Fix module use count on failure in pppoe_create, pppox_sk -acme
17  * 030700 :     Fixed connect logic to allow for disconnect.
18  * 270700 :     Fixed potential SMP problems; we must protect against
19  *              simultaneous invocation of ppp_input
20  *              and ppp_unregister_channel.
21  * 040800 :     Respect reference count mechanisms on net-devices.
22  * 200800 :     fix kfree(skb) in pppoe_rcv (acme)
23  *              Module reference count is decremented in the right spot now,
24  *              guards against sock_put not actually freeing the sk
25  *              in pppoe_release.
26  * 051000 :     Initialization cleanup.
27  * 111100 :     Fix recvmsg.
28  * 050101 :     Fix PADT procesing.
29  * 140501 :     Use pppoe_rcv_core to handle all backlog. (Alexey)
30  * 170701 :     Do not lock_sock with rwlock held. (DaveM)
31  *              Ignore discovery frames if user has socket
32  *              locked. (DaveM)
33  *              Ignore return value of dev_queue_xmit in __pppoe_xmit
34  *              or else we may kfree an SKB twice. (DaveM)
35  * 190701 :     When doing copies of skb's in __pppoe_xmit, always delete
36  *              the original skb that was passed in on success, never on
37  *              failure.  Delete the copy of the skb on failure to avoid
38  *              a memory leak.
39  * 081001 :     Misc. cleanup (licence string, non-blocking, prevent
40  *              reference of device on close).
41  * 121301 :     New ppp channels interface; cannot unregister a channel
42  *              from interrupts.  Thus, we mark the socket as a ZOMBIE
43  *              and do the unregistration later.
44  * 081002 :     seq_file support for proc stuff -acme
45  * 111602 :     Merge all 2.4 fixes into 2.5/2.6 tree.  Label 2.5/2.6
46  *              as version 0.7.  Spacing cleanup.
47  * Author:      Michal Ostrowski <mostrows@speakeasy.net>
48  * Contributors:
49  *              Arnaldo Carvalho de Melo <acme@conectiva.com.br>
50  *              David S. Miller (davem@redhat.com)
51  *
52  * License:
53  *              This program is free software; you can redistribute it and/or
54  *              modify it under the terms of the GNU General Public License
55  *              as published by the Free Software Foundation; either version
56  *              2 of the License, or (at your option) any later version.
57  *
58  */
59
60 #include <linux/string.h>
61 #include <linux/module.h>
62 #include <linux/kernel.h>
63 #include <linux/slab.h>
64 #include <linux/errno.h>
65 #include <linux/netdevice.h>
66 #include <linux/net.h>
67 #include <linux/inetdevice.h>
68 #include <linux/etherdevice.h>
69 #include <linux/skbuff.h>
70 #include <linux/init.h>
71 #include <linux/if_ether.h>
72 #include <linux/if_pppox.h>
73 #include <linux/ppp_channel.h>
74 #include <linux/ppp_defs.h>
75 #include <linux/if_ppp.h>
76 #include <linux/notifier.h>
77 #include <linux/file.h>
78 #include <linux/proc_fs.h>
79 #include <linux/seq_file.h>
80
81 #include <net/sock.h>
82
83 #include <asm/uaccess.h>
84
85 #define PPPOE_HASH_BITS 4
86 #define PPPOE_HASH_SIZE (1<<PPPOE_HASH_BITS)
87
88 static struct ppp_channel_ops pppoe_chan_ops;
89
90 static int pppoe_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
91 static int pppoe_xmit(struct ppp_channel *chan, struct sk_buff *skb);
92 static int __pppoe_xmit(struct sock *sk, struct sk_buff *skb);
93
94 static const struct proto_ops pppoe_ops;
95 static DEFINE_RWLOCK(pppoe_hash_lock);
96
97 static struct ppp_channel_ops pppoe_chan_ops;
98
99 static inline int cmp_2_addr(struct pppoe_addr *a, struct pppoe_addr *b)
100 {
101         return (a->sid == b->sid &&
102                 (memcmp(a->remote, b->remote, ETH_ALEN) == 0));
103 }
104
105 static inline int cmp_addr(struct pppoe_addr *a, unsigned long sid, char *addr)
106 {
107         return (a->sid == sid &&
108                 (memcmp(a->remote,addr,ETH_ALEN) == 0));
109 }
110
111 static int hash_item(unsigned long sid, unsigned char *addr)
112 {
113         char hash = 0;
114         int i, j;
115
116         for (i = 0; i < ETH_ALEN ; ++i) {
117                 for (j = 0; j < 8/PPPOE_HASH_BITS ; ++j) {
118                         hash ^= addr[i] >> ( j * PPPOE_HASH_BITS );
119                 }
120         }
121
122         for (i = 0; i < (sizeof(unsigned long)*8) / PPPOE_HASH_BITS ; ++i)
123                 hash ^= sid >> (i*PPPOE_HASH_BITS);
124
125         return hash & ( PPPOE_HASH_SIZE - 1 );
126 }
127
128 /* zeroed because its in .bss */
129 static struct pppox_sock *item_hash_table[PPPOE_HASH_SIZE];
130
131 /**********************************************************************
132  *
133  *  Set/get/delete/rehash items  (internal versions)
134  *
135  **********************************************************************/
136 static struct pppox_sock *__get_item(unsigned long sid, unsigned char *addr, int ifindex)
137 {
138         int hash = hash_item(sid, addr);
139         struct pppox_sock *ret;
140
141         ret = item_hash_table[hash];
142
143         while (ret && !(cmp_addr(&ret->pppoe_pa, sid, addr) && ret->pppoe_ifindex == ifindex))
144                 ret = ret->next;
145
146         return ret;
147 }
148
149 static int __set_item(struct pppox_sock *po)
150 {
151         int hash = hash_item(po->pppoe_pa.sid, po->pppoe_pa.remote);
152         struct pppox_sock *ret;
153
154         ret = item_hash_table[hash];
155         while (ret) {
156                 if (cmp_2_addr(&ret->pppoe_pa, &po->pppoe_pa) && ret->pppoe_ifindex == po->pppoe_ifindex)
157                         return -EALREADY;
158
159                 ret = ret->next;
160         }
161
162         po->next = item_hash_table[hash];
163         item_hash_table[hash] = po;
164
165         return 0;
166 }
167
168 static struct pppox_sock *__delete_item(unsigned long sid, char *addr, int ifindex)
169 {
170         int hash = hash_item(sid, addr);
171         struct pppox_sock *ret, **src;
172
173         ret = item_hash_table[hash];
174         src = &item_hash_table[hash];
175
176         while (ret) {
177                 if (cmp_addr(&ret->pppoe_pa, sid, addr) && ret->pppoe_ifindex == ifindex) {
178                         *src = ret->next;
179                         break;
180                 }
181
182                 src = &ret->next;
183                 ret = ret->next;
184         }
185
186         return ret;
187 }
188
189 /**********************************************************************
190  *
191  *  Set/get/delete/rehash items
192  *
193  **********************************************************************/
194 static inline struct pppox_sock *get_item(unsigned long sid,
195                                          unsigned char *addr, int ifindex)
196 {
197         struct pppox_sock *po;
198
199         read_lock_bh(&pppoe_hash_lock);
200         po = __get_item(sid, addr, ifindex);
201         if (po)
202                 sock_hold(sk_pppox(po));
203         read_unlock_bh(&pppoe_hash_lock);
204
205         return po;
206 }
207
208 static inline struct pppox_sock *get_item_by_addr(struct sockaddr_pppox *sp)
209 {
210         struct net_device *dev;
211         int ifindex;
212
213         dev = dev_get_by_name(sp->sa_addr.pppoe.dev);
214         if(!dev)
215                 return NULL;
216         ifindex = dev->ifindex;
217         dev_put(dev);
218         return get_item(sp->sa_addr.pppoe.sid, sp->sa_addr.pppoe.remote, ifindex);
219 }
220
221 static inline struct pppox_sock *delete_item(unsigned long sid, char *addr, int ifindex)
222 {
223         struct pppox_sock *ret;
224
225         write_lock_bh(&pppoe_hash_lock);
226         ret = __delete_item(sid, addr, ifindex);
227         write_unlock_bh(&pppoe_hash_lock);
228
229         return ret;
230 }
231
232
233
234 /***************************************************************************
235  *
236  *  Handler for device events.
237  *  Certain device events require that sockets be unconnected.
238  *
239  **************************************************************************/
240
241 static void pppoe_flush_dev(struct net_device *dev)
242 {
243         int hash;
244         BUG_ON(dev == NULL);
245
246         write_lock_bh(&pppoe_hash_lock);
247         for (hash = 0; hash < PPPOE_HASH_SIZE; hash++) {
248                 struct pppox_sock *po = item_hash_table[hash];
249
250                 while (po != NULL) {
251                         struct sock *sk = sk_pppox(po);
252                         if (po->pppoe_dev != dev) {
253                                 po = po->next;
254                                 continue;
255                         }
256                         po->pppoe_dev = NULL;
257                         dev_put(dev);
258
259
260                         /* We always grab the socket lock, followed by the
261                          * pppoe_hash_lock, in that order.  Since we should
262                          * hold the sock lock while doing any unbinding,
263                          * we need to release the lock we're holding.
264                          * Hold a reference to the sock so it doesn't disappear
265                          * as we're jumping between locks.
266                          */
267
268                         sock_hold(sk);
269
270                         write_unlock_bh(&pppoe_hash_lock);
271                         lock_sock(sk);
272
273                         if (sk->sk_state & (PPPOX_CONNECTED | PPPOX_BOUND)) {
274                                 pppox_unbind_sock(sk);
275                                 sk->sk_state = PPPOX_ZOMBIE;
276                                 sk->sk_state_change(sk);
277                         }
278
279                         release_sock(sk);
280                         sock_put(sk);
281
282                         /* Restart scan at the beginning of this hash chain.
283                          * While the lock was dropped the chain contents may
284                          * have changed.
285                          */
286                         write_lock_bh(&pppoe_hash_lock);
287                         po = item_hash_table[hash];
288                 }
289         }
290         write_unlock_bh(&pppoe_hash_lock);
291 }
292
293 static int pppoe_device_event(struct notifier_block *this,
294                               unsigned long event, void *ptr)
295 {
296         struct net_device *dev = (struct net_device *) ptr;
297
298         /* Only look at sockets that are using this specific device. */
299         switch (event) {
300         case NETDEV_CHANGEMTU:
301                 /* A change in mtu is a bad thing, requiring
302                  * LCP re-negotiation.
303                  */
304
305         case NETDEV_GOING_DOWN:
306         case NETDEV_DOWN:
307                 /* Find every socket on this device and kill it. */
308                 pppoe_flush_dev(dev);
309                 break;
310
311         default:
312                 break;
313         };
314
315         return NOTIFY_DONE;
316 }
317
318
319 static struct notifier_block pppoe_notifier = {
320         .notifier_call = pppoe_device_event,
321 };
322
323
324 /************************************************************************
325  *
326  * Do the real work of receiving a PPPoE Session frame.
327  *
328  ***********************************************************************/
329 static int pppoe_rcv_core(struct sock *sk, struct sk_buff *skb)
330 {
331         struct pppox_sock *po = pppox_sk(sk);
332         struct pppox_sock *relay_po;
333
334         if (sk->sk_state & PPPOX_BOUND) {
335                 struct pppoe_hdr *ph = pppoe_hdr(skb);
336                 int len = ntohs(ph->length);
337                 skb_pull_rcsum(skb, sizeof(struct pppoe_hdr));
338                 if (pskb_trim_rcsum(skb, len))
339                         goto abort_kfree;
340
341                 ppp_input(&po->chan, skb);
342         } else if (sk->sk_state & PPPOX_RELAY) {
343                 relay_po = get_item_by_addr(&po->pppoe_relay);
344
345                 if (relay_po == NULL)
346                         goto abort_kfree;
347
348                 if ((sk_pppox(relay_po)->sk_state & PPPOX_CONNECTED) == 0)
349                         goto abort_put;
350
351                 skb_pull(skb, sizeof(struct pppoe_hdr));
352                 if (!__pppoe_xmit(sk_pppox(relay_po), skb))
353                         goto abort_put;
354         } else {
355                 if (sock_queue_rcv_skb(sk, skb))
356                         goto abort_kfree;
357         }
358
359         return NET_RX_SUCCESS;
360
361 abort_put:
362         sock_put(sk_pppox(relay_po));
363
364 abort_kfree:
365         kfree_skb(skb);
366         return NET_RX_DROP;
367 }
368
369 /************************************************************************
370  *
371  * Receive wrapper called in BH context.
372  *
373  ***********************************************************************/
374 static int pppoe_rcv(struct sk_buff *skb,
375                      struct net_device *dev,
376                      struct packet_type *pt,
377                      struct net_device *orig_dev)
378
379 {
380         struct pppoe_hdr *ph;
381         struct pppox_sock *po;
382
383         if (!pskb_may_pull(skb, sizeof(struct pppoe_hdr)))
384                 goto drop;
385
386         if (!(skb = skb_share_check(skb, GFP_ATOMIC)))
387                 goto out;
388
389         ph = pppoe_hdr(skb);
390
391         po = get_item((unsigned long) ph->sid, eth_hdr(skb)->h_source, dev->ifindex);
392         if (po != NULL)
393                 return sk_receive_skb(sk_pppox(po), skb, 0);
394 drop:
395         kfree_skb(skb);
396 out:
397         return NET_RX_DROP;
398 }
399
400 /************************************************************************
401  *
402  * Receive a PPPoE Discovery frame.
403  * This is solely for detection of PADT frames
404  *
405  ***********************************************************************/
406 static int pppoe_disc_rcv(struct sk_buff *skb,
407                           struct net_device *dev,
408                           struct packet_type *pt,
409                           struct net_device *orig_dev)
410
411 {
412         struct pppoe_hdr *ph;
413         struct pppox_sock *po;
414
415         if (!pskb_may_pull(skb, sizeof(struct pppoe_hdr)))
416                 goto abort;
417
418         if (!(skb = skb_share_check(skb, GFP_ATOMIC)))
419                 goto out;
420
421         ph = pppoe_hdr(skb);
422         if (ph->code != PADT_CODE)
423                 goto abort;
424
425         po = get_item((unsigned long) ph->sid, eth_hdr(skb)->h_source, dev->ifindex);
426         if (po) {
427                 struct sock *sk = sk_pppox(po);
428
429                 bh_lock_sock(sk);
430
431                 /* If the user has locked the socket, just ignore
432                  * the packet.  With the way two rcv protocols hook into
433                  * one socket family type, we cannot (easily) distinguish
434                  * what kind of SKB it is during backlog rcv.
435                  */
436                 if (sock_owned_by_user(sk) == 0) {
437                         /* We're no longer connect at the PPPOE layer,
438                          * and must wait for ppp channel to disconnect us.
439                          */
440                         sk->sk_state = PPPOX_ZOMBIE;
441                 }
442
443                 bh_unlock_sock(sk);
444                 sock_put(sk);
445         }
446
447 abort:
448         kfree_skb(skb);
449 out:
450         return NET_RX_SUCCESS; /* Lies... :-) */
451 }
452
453 static struct packet_type pppoes_ptype = {
454         .type   = __constant_htons(ETH_P_PPP_SES),
455         .func   = pppoe_rcv,
456 };
457
458 static struct packet_type pppoed_ptype = {
459         .type   = __constant_htons(ETH_P_PPP_DISC),
460         .func   = pppoe_disc_rcv,
461 };
462
463 static struct proto pppoe_sk_proto = {
464         .name     = "PPPOE",
465         .owner    = THIS_MODULE,
466         .obj_size = sizeof(struct pppox_sock),
467 };
468
469 /***********************************************************************
470  *
471  * Initialize a new struct sock.
472  *
473  **********************************************************************/
474 static int pppoe_create(struct socket *sock)
475 {
476         int error = -ENOMEM;
477         struct sock *sk;
478
479         sk = sk_alloc(PF_PPPOX, GFP_KERNEL, &pppoe_sk_proto, 1);
480         if (!sk)
481                 goto out;
482
483         sock_init_data(sock, sk);
484
485         sock->state = SS_UNCONNECTED;
486         sock->ops   = &pppoe_ops;
487
488         sk->sk_backlog_rcv = pppoe_rcv_core;
489         sk->sk_state       = PPPOX_NONE;
490         sk->sk_type        = SOCK_STREAM;
491         sk->sk_family      = PF_PPPOX;
492         sk->sk_protocol    = PX_PROTO_OE;
493
494         error = 0;
495 out:    return error;
496 }
497
498 static int pppoe_release(struct socket *sock)
499 {
500         struct sock *sk = sock->sk;
501         struct pppox_sock *po;
502
503         if (!sk)
504                 return 0;
505
506         lock_sock(sk);
507         if (sock_flag(sk, SOCK_DEAD)){
508                 release_sock(sk);
509                 return -EBADF;
510         }
511
512         pppox_unbind_sock(sk);
513
514         /* Signal the death of the socket. */
515         sk->sk_state = PPPOX_DEAD;
516
517
518         /* Write lock on hash lock protects the entire "po" struct from
519          * concurrent updates via pppoe_flush_dev. The "po" struct should
520          * be considered part of the hash table contents, thus protected
521          * by the hash table lock */
522         write_lock_bh(&pppoe_hash_lock);
523
524         po = pppox_sk(sk);
525         if (po->pppoe_pa.sid) {
526                 __delete_item(po->pppoe_pa.sid,
527                               po->pppoe_pa.remote, po->pppoe_ifindex);
528         }
529
530         if (po->pppoe_dev) {
531                 dev_put(po->pppoe_dev);
532                 po->pppoe_dev = NULL;
533         }
534
535         write_unlock_bh(&pppoe_hash_lock);
536
537         sock_orphan(sk);
538         sock->sk = NULL;
539
540         skb_queue_purge(&sk->sk_receive_queue);
541         release_sock(sk);
542         sock_put(sk);
543
544         return 0;
545 }
546
547
548 static int pppoe_connect(struct socket *sock, struct sockaddr *uservaddr,
549                   int sockaddr_len, int flags)
550 {
551         struct sock *sk = sock->sk;
552         struct net_device *dev;
553         struct sockaddr_pppox *sp = (struct sockaddr_pppox *) uservaddr;
554         struct pppox_sock *po = pppox_sk(sk);
555         int error;
556
557         lock_sock(sk);
558
559         error = -EINVAL;
560         if (sp->sa_protocol != PX_PROTO_OE)
561                 goto end;
562
563         /* Check for already bound sockets */
564         error = -EBUSY;
565         if ((sk->sk_state & PPPOX_CONNECTED) && sp->sa_addr.pppoe.sid)
566                 goto end;
567
568         /* Check for already disconnected sockets, on attempts to disconnect */
569         error = -EALREADY;
570         if ((sk->sk_state & PPPOX_DEAD) && !sp->sa_addr.pppoe.sid )
571                 goto end;
572
573         error = 0;
574         if (po->pppoe_pa.sid) {
575                 pppox_unbind_sock(sk);
576
577                 /* Delete the old binding */
578                 delete_item(po->pppoe_pa.sid,po->pppoe_pa.remote,po->pppoe_ifindex);
579
580                 if(po->pppoe_dev)
581                         dev_put(po->pppoe_dev);
582
583                 memset(sk_pppox(po) + 1, 0,
584                        sizeof(struct pppox_sock) - sizeof(struct sock));
585
586                 sk->sk_state = PPPOX_NONE;
587         }
588
589         /* Don't re-bind if sid==0 */
590         if (sp->sa_addr.pppoe.sid != 0) {
591                 dev = dev_get_by_name(sp->sa_addr.pppoe.dev);
592
593                 error = -ENODEV;
594                 if (!dev)
595                         goto end;
596
597                 po->pppoe_dev = dev;
598                 po->pppoe_ifindex = dev->ifindex;
599
600                 write_lock_bh(&pppoe_hash_lock);
601                 if (!(dev->flags & IFF_UP)){
602                         write_unlock_bh(&pppoe_hash_lock);
603                         goto err_put;
604                 }
605
606                 memcpy(&po->pppoe_pa,
607                        &sp->sa_addr.pppoe,
608                        sizeof(struct pppoe_addr));
609
610                 error = __set_item(po);
611                 write_unlock_bh(&pppoe_hash_lock);
612                 if (error < 0)
613                         goto err_put;
614
615                 po->chan.hdrlen = (sizeof(struct pppoe_hdr) +
616                                    dev->hard_header_len);
617
618                 po->chan.mtu = dev->mtu - sizeof(struct pppoe_hdr);
619                 po->chan.private = sk;
620                 po->chan.ops = &pppoe_chan_ops;
621
622                 error = ppp_register_channel(&po->chan);
623                 if (error)
624                         goto err_put;
625
626                 sk->sk_state = PPPOX_CONNECTED;
627         }
628
629         po->num = sp->sa_addr.pppoe.sid;
630
631  end:
632         release_sock(sk);
633         return error;
634 err_put:
635         if (po->pppoe_dev) {
636                 dev_put(po->pppoe_dev);
637                 po->pppoe_dev = NULL;
638         }
639         goto end;
640 }
641
642
643 static int pppoe_getname(struct socket *sock, struct sockaddr *uaddr,
644                   int *usockaddr_len, int peer)
645 {
646         int len = sizeof(struct sockaddr_pppox);
647         struct sockaddr_pppox sp;
648
649         sp.sa_family    = AF_PPPOX;
650         sp.sa_protocol  = PX_PROTO_OE;
651         memcpy(&sp.sa_addr.pppoe, &pppox_sk(sock->sk)->pppoe_pa,
652                sizeof(struct pppoe_addr));
653
654         memcpy(uaddr, &sp, len);
655
656         *usockaddr_len = len;
657
658         return 0;
659 }
660
661
662 static int pppoe_ioctl(struct socket *sock, unsigned int cmd,
663                 unsigned long arg)
664 {
665         struct sock *sk = sock->sk;
666         struct pppox_sock *po = pppox_sk(sk);
667         int val;
668         int err;
669
670         switch (cmd) {
671         case PPPIOCGMRU:
672                 err = -ENXIO;
673
674                 if (!(sk->sk_state & PPPOX_CONNECTED))
675                         break;
676
677                 err = -EFAULT;
678                 if (put_user(po->pppoe_dev->mtu -
679                              sizeof(struct pppoe_hdr) -
680                              PPP_HDRLEN,
681                              (int __user *) arg))
682                         break;
683                 err = 0;
684                 break;
685
686         case PPPIOCSMRU:
687                 err = -ENXIO;
688                 if (!(sk->sk_state & PPPOX_CONNECTED))
689                         break;
690
691                 err = -EFAULT;
692                 if (get_user(val,(int __user *) arg))
693                         break;
694
695                 if (val < (po->pppoe_dev->mtu
696                            - sizeof(struct pppoe_hdr)
697                            - PPP_HDRLEN))
698                         err = 0;
699                 else
700                         err = -EINVAL;
701                 break;
702
703         case PPPIOCSFLAGS:
704                 err = -EFAULT;
705                 if (get_user(val, (int __user *) arg))
706                         break;
707                 err = 0;
708                 break;
709
710         case PPPOEIOCSFWD:
711         {
712                 struct pppox_sock *relay_po;
713
714                 err = -EBUSY;
715                 if (sk->sk_state & (PPPOX_BOUND | PPPOX_ZOMBIE | PPPOX_DEAD))
716                         break;
717
718                 err = -ENOTCONN;
719                 if (!(sk->sk_state & PPPOX_CONNECTED))
720                         break;
721
722                 /* PPPoE address from the user specifies an outbound
723                    PPPoE address which frames are forwarded to */
724                 err = -EFAULT;
725                 if (copy_from_user(&po->pppoe_relay,
726                                    (void __user *)arg,
727                                    sizeof(struct sockaddr_pppox)))
728                         break;
729
730                 err = -EINVAL;
731                 if (po->pppoe_relay.sa_family != AF_PPPOX ||
732                     po->pppoe_relay.sa_protocol!= PX_PROTO_OE)
733                         break;
734
735                 /* Check that the socket referenced by the address
736                    actually exists. */
737                 relay_po = get_item_by_addr(&po->pppoe_relay);
738
739                 if (!relay_po)
740                         break;
741
742                 sock_put(sk_pppox(relay_po));
743                 sk->sk_state |= PPPOX_RELAY;
744                 err = 0;
745                 break;
746         }
747
748         case PPPOEIOCDFWD:
749                 err = -EALREADY;
750                 if (!(sk->sk_state & PPPOX_RELAY))
751                         break;
752
753                 sk->sk_state &= ~PPPOX_RELAY;
754                 err = 0;
755                 break;
756
757         default:
758                 err = -ENOTTY;
759         }
760
761         return err;
762 }
763
764
765 static int pppoe_sendmsg(struct kiocb *iocb, struct socket *sock,
766                   struct msghdr *m, size_t total_len)
767 {
768         struct sk_buff *skb;
769         struct sock *sk = sock->sk;
770         struct pppox_sock *po = pppox_sk(sk);
771         int error;
772         struct pppoe_hdr hdr;
773         struct pppoe_hdr *ph;
774         struct net_device *dev;
775         char *start;
776
777         if (sock_flag(sk, SOCK_DEAD) || !(sk->sk_state & PPPOX_CONNECTED)) {
778                 error = -ENOTCONN;
779                 goto end;
780         }
781
782         hdr.ver = 1;
783         hdr.type = 1;
784         hdr.code = 0;
785         hdr.sid = po->num;
786
787         lock_sock(sk);
788
789         dev = po->pppoe_dev;
790
791         error = -EMSGSIZE;
792         if (total_len > (dev->mtu + dev->hard_header_len))
793                 goto end;
794
795
796         skb = sock_wmalloc(sk, total_len + dev->hard_header_len + 32,
797                            0, GFP_KERNEL);
798         if (!skb) {
799                 error = -ENOMEM;
800                 goto end;
801         }
802
803         /* Reserve space for headers. */
804         skb_reserve(skb, dev->hard_header_len);
805         skb_reset_network_header(skb);
806
807         skb->dev = dev;
808
809         skb->priority = sk->sk_priority;
810         skb->protocol = __constant_htons(ETH_P_PPP_SES);
811
812         ph = (struct pppoe_hdr *) skb_put(skb, total_len + sizeof(struct pppoe_hdr));
813         start = (char *) &ph->tag[0];
814
815         error = memcpy_fromiovec(start, m->msg_iov, total_len);
816
817         if (error < 0) {
818                 kfree_skb(skb);
819                 goto end;
820         }
821
822         error = total_len;
823         dev->hard_header(skb, dev, ETH_P_PPP_SES,
824                          po->pppoe_pa.remote, NULL, total_len);
825
826         memcpy(ph, &hdr, sizeof(struct pppoe_hdr));
827
828         ph->length = htons(total_len);
829
830         dev_queue_xmit(skb);
831
832 end:
833         release_sock(sk);
834         return error;
835 }
836
837
838 /************************************************************************
839  *
840  * xmit function for internal use.
841  *
842  ***********************************************************************/
843 static int __pppoe_xmit(struct sock *sk, struct sk_buff *skb)
844 {
845         struct pppox_sock *po = pppox_sk(sk);
846         struct net_device *dev = po->pppoe_dev;
847         struct pppoe_hdr hdr;
848         struct pppoe_hdr *ph;
849         int headroom = skb_headroom(skb);
850         int data_len = skb->len;
851         struct sk_buff *skb2;
852
853         if (sock_flag(sk, SOCK_DEAD) || !(sk->sk_state & PPPOX_CONNECTED))
854                 goto abort;
855
856         hdr.ver = 1;
857         hdr.type = 1;
858         hdr.code = 0;
859         hdr.sid = po->num;
860         hdr.length = htons(skb->len);
861
862         if (!dev)
863                 goto abort;
864
865         /* Copy the skb if there is no space for the header. */
866         if (headroom < (sizeof(struct pppoe_hdr) + dev->hard_header_len)) {
867                 skb2 = dev_alloc_skb(32+skb->len +
868                                      sizeof(struct pppoe_hdr) +
869                                      dev->hard_header_len);
870
871                 if (skb2 == NULL)
872                         goto abort;
873
874                 skb_reserve(skb2, dev->hard_header_len + sizeof(struct pppoe_hdr));
875                 skb_copy_from_linear_data(skb, skb_put(skb2, skb->len),
876                                           skb->len);
877         } else {
878                 /* Make a clone so as to not disturb the original skb,
879                  * give dev_queue_xmit something it can free.
880                  */
881                 skb2 = skb_clone(skb, GFP_ATOMIC);
882
883                 if (skb2 == NULL)
884                         goto abort;
885         }
886
887         ph = (struct pppoe_hdr *) skb_push(skb2, sizeof(struct pppoe_hdr));
888         memcpy(ph, &hdr, sizeof(struct pppoe_hdr));
889         skb2->protocol = __constant_htons(ETH_P_PPP_SES);
890
891         skb_reset_network_header(skb2);
892
893         skb2->dev = dev;
894
895         dev->hard_header(skb2, dev, ETH_P_PPP_SES,
896                          po->pppoe_pa.remote, NULL, data_len);
897
898         /* We're transmitting skb2, and assuming that dev_queue_xmit
899          * will free it.  The generic ppp layer however, is expecting
900          * that we give back 'skb' (not 'skb2') in case of failure,
901          * but free it in case of success.
902          */
903
904         if (dev_queue_xmit(skb2) < 0)
905                 goto abort;
906
907         kfree_skb(skb);
908         return 1;
909
910 abort:
911         return 0;
912 }
913
914
915 /************************************************************************
916  *
917  * xmit function called by generic PPP driver
918  * sends PPP frame over PPPoE socket
919  *
920  ***********************************************************************/
921 static int pppoe_xmit(struct ppp_channel *chan, struct sk_buff *skb)
922 {
923         struct sock *sk = (struct sock *) chan->private;
924         return __pppoe_xmit(sk, skb);
925 }
926
927
928 static struct ppp_channel_ops pppoe_chan_ops = {
929         .start_xmit = pppoe_xmit,
930 };
931
932 static int pppoe_recvmsg(struct kiocb *iocb, struct socket *sock,
933                   struct msghdr *m, size_t total_len, int flags)
934 {
935         struct sock *sk = sock->sk;
936         struct sk_buff *skb;
937         int error = 0;
938
939         if (sk->sk_state & PPPOX_BOUND) {
940                 error = -EIO;
941                 goto end;
942         }
943
944         skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
945                                 flags & MSG_DONTWAIT, &error);
946
947         if (error < 0)
948                 goto end;
949
950         m->msg_namelen = 0;
951
952         if (skb) {
953                 struct pppoe_hdr *ph = pppoe_hdr(skb);
954                 const int len = ntohs(ph->length);
955
956                 error = memcpy_toiovec(m->msg_iov, (unsigned char *) &ph->tag[0], len);
957                 if (error == 0)
958                         error = len;
959         }
960
961         kfree_skb(skb);
962 end:
963         return error;
964 }
965
966 #ifdef CONFIG_PROC_FS
967 static int pppoe_seq_show(struct seq_file *seq, void *v)
968 {
969         struct pppox_sock *po;
970         char *dev_name;
971
972         if (v == SEQ_START_TOKEN) {
973                 seq_puts(seq, "Id       Address              Device\n");
974                 goto out;
975         }
976
977         po = v;
978         dev_name = po->pppoe_pa.dev;
979
980         seq_printf(seq, "%08X %02X:%02X:%02X:%02X:%02X:%02X %8s\n",
981                    po->pppoe_pa.sid,
982                    po->pppoe_pa.remote[0], po->pppoe_pa.remote[1],
983                    po->pppoe_pa.remote[2], po->pppoe_pa.remote[3],
984                    po->pppoe_pa.remote[4], po->pppoe_pa.remote[5], dev_name);
985 out:
986         return 0;
987 }
988
989 static __inline__ struct pppox_sock *pppoe_get_idx(loff_t pos)
990 {
991         struct pppox_sock *po;
992         int i = 0;
993
994         for (; i < PPPOE_HASH_SIZE; i++) {
995                 po = item_hash_table[i];
996                 while (po) {
997                         if (!pos--)
998                                 goto out;
999                         po = po->next;
1000                 }
1001         }
1002 out:
1003         return po;
1004 }
1005
1006 static void *pppoe_seq_start(struct seq_file *seq, loff_t *pos)
1007 {
1008         loff_t l = *pos;
1009
1010         read_lock_bh(&pppoe_hash_lock);
1011         return l ? pppoe_get_idx(--l) : SEQ_START_TOKEN;
1012 }
1013
1014 static void *pppoe_seq_next(struct seq_file *seq, void *v, loff_t *pos)
1015 {
1016         struct pppox_sock *po;
1017
1018         ++*pos;
1019         if (v == SEQ_START_TOKEN) {
1020                 po = pppoe_get_idx(0);
1021                 goto out;
1022         }
1023         po = v;
1024         if (po->next)
1025                 po = po->next;
1026         else {
1027                 int hash = hash_item(po->pppoe_pa.sid, po->pppoe_pa.remote);
1028
1029                 while (++hash < PPPOE_HASH_SIZE) {
1030                         po = item_hash_table[hash];
1031                         if (po)
1032                                 break;
1033                 }
1034         }
1035 out:
1036         return po;
1037 }
1038
1039 static void pppoe_seq_stop(struct seq_file *seq, void *v)
1040 {
1041         read_unlock_bh(&pppoe_hash_lock);
1042 }
1043
1044 static struct seq_operations pppoe_seq_ops = {
1045         .start          = pppoe_seq_start,
1046         .next           = pppoe_seq_next,
1047         .stop           = pppoe_seq_stop,
1048         .show           = pppoe_seq_show,
1049 };
1050
1051 static int pppoe_seq_open(struct inode *inode, struct file *file)
1052 {
1053         return seq_open(file, &pppoe_seq_ops);
1054 }
1055
1056 static const struct file_operations pppoe_seq_fops = {
1057         .owner          = THIS_MODULE,
1058         .open           = pppoe_seq_open,
1059         .read           = seq_read,
1060         .llseek         = seq_lseek,
1061         .release        = seq_release,
1062 };
1063
1064 static int __init pppoe_proc_init(void)
1065 {
1066         struct proc_dir_entry *p;
1067
1068         p = create_proc_entry("net/pppoe", S_IRUGO, NULL);
1069         if (!p)
1070                 return -ENOMEM;
1071
1072         p->proc_fops = &pppoe_seq_fops;
1073         return 0;
1074 }
1075 #else /* CONFIG_PROC_FS */
1076 static inline int pppoe_proc_init(void) { return 0; }
1077 #endif /* CONFIG_PROC_FS */
1078
1079 static const struct proto_ops pppoe_ops = {
1080     .family             = AF_PPPOX,
1081     .owner              = THIS_MODULE,
1082     .release            = pppoe_release,
1083     .bind               = sock_no_bind,
1084     .connect            = pppoe_connect,
1085     .socketpair         = sock_no_socketpair,
1086     .accept             = sock_no_accept,
1087     .getname            = pppoe_getname,
1088     .poll               = datagram_poll,
1089     .listen             = sock_no_listen,
1090     .shutdown           = sock_no_shutdown,
1091     .setsockopt         = sock_no_setsockopt,
1092     .getsockopt         = sock_no_getsockopt,
1093     .sendmsg            = pppoe_sendmsg,
1094     .recvmsg            = pppoe_recvmsg,
1095     .mmap               = sock_no_mmap,
1096     .ioctl              = pppox_ioctl,
1097 };
1098
1099 static struct pppox_proto pppoe_proto = {
1100     .create     = pppoe_create,
1101     .ioctl      = pppoe_ioctl,
1102     .owner      = THIS_MODULE,
1103 };
1104
1105
1106 static int __init pppoe_init(void)
1107 {
1108         int err = proto_register(&pppoe_sk_proto, 0);
1109
1110         if (err)
1111                 goto out;
1112
1113         err = register_pppox_proto(PX_PROTO_OE, &pppoe_proto);
1114         if (err)
1115                 goto out_unregister_pppoe_proto;
1116
1117         err = pppoe_proc_init();
1118         if (err)
1119                 goto out_unregister_pppox_proto;
1120
1121         dev_add_pack(&pppoes_ptype);
1122         dev_add_pack(&pppoed_ptype);
1123         register_netdevice_notifier(&pppoe_notifier);
1124 out:
1125         return err;
1126 out_unregister_pppox_proto:
1127         unregister_pppox_proto(PX_PROTO_OE);
1128 out_unregister_pppoe_proto:
1129         proto_unregister(&pppoe_sk_proto);
1130         goto out;
1131 }
1132
1133 static void __exit pppoe_exit(void)
1134 {
1135         unregister_pppox_proto(PX_PROTO_OE);
1136         dev_remove_pack(&pppoes_ptype);
1137         dev_remove_pack(&pppoed_ptype);
1138         unregister_netdevice_notifier(&pppoe_notifier);
1139         remove_proc_entry("net/pppoe", NULL);
1140         proto_unregister(&pppoe_sk_proto);
1141 }
1142
1143 module_init(pppoe_init);
1144 module_exit(pppoe_exit);
1145
1146 MODULE_AUTHOR("Michal Ostrowski <mostrows@speakeasy.net>");
1147 MODULE_DESCRIPTION("PPP over Ethernet driver");
1148 MODULE_LICENSE("GPL");
1149 MODULE_ALIAS_NETPROTO(PF_PPPOX);