e6f884696eff7ccd99349c324187e78940d5ef8f
[bcm963xx.git] / kernel / linux / net / core / dev.c
1 /*
2  *      NET3    Protocol independent device support routines.
3  *
4  *              This program is free software; you can redistribute it and/or
5  *              modify it under the terms of the GNU General Public License
6  *              as published by the Free Software Foundation; either version
7  *              2 of the License, or (at your option) any later version.
8  *
9  *      Derived from the non IP parts of dev.c 1.0.19
10  *              Authors:        Ross Biro, <bir7@leland.Stanford.Edu>
11  *                              Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
12  *                              Mark Evans, <evansmp@uhura.aston.ac.uk>
13  *
14  *      Additional Authors:
15  *              Florian la Roche <rzsfl@rz.uni-sb.de>
16  *              Alan Cox <gw4pts@gw4pts.ampr.org>
17  *              David Hinds <dahinds@users.sourceforge.net>
18  *              Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
19  *              Adam Sulmicki <adam@cfar.umd.edu>
20  *              Pekka Riikonen <priikone@poesidon.pspt.fi>
21  *
22  *      Changes:
23  *              D.J. Barrow     :       Fixed bug where dev->refcnt gets set
24  *                                      to 2 if register_netdev gets called
25  *                                      before net_dev_init & also removed a
26  *                                      few lines of code in the process.
27  *              Alan Cox        :       device private ioctl copies fields back.
28  *              Alan Cox        :       Transmit queue code does relevant
29  *                                      stunts to keep the queue safe.
30  *              Alan Cox        :       Fixed double lock.
31  *              Alan Cox        :       Fixed promisc NULL pointer trap
32  *              ????????        :       Support the full private ioctl range
33  *              Alan Cox        :       Moved ioctl permission check into
34  *                                      drivers
35  *              Tim Kordas      :       SIOCADDMULTI/SIOCDELMULTI
36  *              Alan Cox        :       100 backlog just doesn't cut it when
37  *                                      you start doing multicast video 8)
38  *              Alan Cox        :       Rewrote net_bh and list manager.
39  *              Alan Cox        :       Fix ETH_P_ALL echoback lengths.
40  *              Alan Cox        :       Took out transmit every packet pass
41  *                                      Saved a few bytes in the ioctl handler
42  *              Alan Cox        :       Network driver sets packet type before
43  *                                      calling netif_rx. Saves a function
44  *                                      call a packet.
45  *              Alan Cox        :       Hashed net_bh()
46  *              Richard Kooijman:       Timestamp fixes.
47  *              Alan Cox        :       Wrong field in SIOCGIFDSTADDR
48  *              Alan Cox        :       Device lock protection.
49  *              Alan Cox        :       Fixed nasty side effect of device close
50  *                                      changes.
51  *              Rudi Cilibrasi  :       Pass the right thing to
52  *                                      set_mac_address()
53  *              Dave Miller     :       32bit quantity for the device lock to
54  *                                      make it work out on a Sparc.
55  *              Bjorn Ekwall    :       Added KERNELD hack.
56  *              Alan Cox        :       Cleaned up the backlog initialise.
57  *              Craig Metz      :       SIOCGIFCONF fix if space for under
58  *                                      1 device.
59  *          Thomas Bogendoerfer :       Return ENODEV for dev_open, if there
60  *                                      is no device open function.
61  *              Andi Kleen      :       Fix error reporting for SIOCGIFCONF
62  *          Michael Chastain    :       Fix signed/unsigned for SIOCGIFCONF
63  *              Cyrus Durgin    :       Cleaned for KMOD
64  *              Adam Sulmicki   :       Bug Fix : Network Device Unload
65  *                                      A network device unload needs to purge
66  *                                      the backlog queue.
67  *      Paul Rusty Russell      :       SIOCSIFNAME
68  *              Pekka Riikonen  :       Netdev boot-time settings code
69  *              Andrew Morton   :       Make unregister_netdevice wait
70  *                                      indefinitely on dev->refcnt
71  *              J Hadi Salim    :       - Backlog queue sampling
72  *                                      - netif_rx() feedback
73  */
74
75 #include <asm/uaccess.h>
76 #include <asm/system.h>
77 #include <asm/bitops.h>
78 #include <linux/config.h>
79 #include <linux/cpu.h>
80 #include <linux/types.h>
81 #include <linux/kernel.h>
82 #include <linux/sched.h>
83 #include <linux/string.h>
84 #include <linux/mm.h>
85 #include <linux/socket.h>
86 #include <linux/sockios.h>
87 #include <linux/errno.h>
88 #include <linux/interrupt.h>
89 #include <linux/if_ether.h>
90 #include <linux/netdevice.h>
91 #include <linux/etherdevice.h>
92 #include <linux/notifier.h>
93 #include <linux/skbuff.h>
94 #include <net/sock.h>
95 #include <linux/rtnetlink.h>
96 #include <linux/proc_fs.h>
97 #include <linux/seq_file.h>
98 #include <linux/stat.h>
99 #include <linux/if_bridge.h>
100 #include <linux/divert.h>
101 #include <net/dst.h>
102 #include <net/pkt_sched.h>
103 #include <net/checksum.h>
104 #include <linux/highmem.h>
105 #include <linux/init.h>
106 #include <linux/kmod.h>
107 #include <linux/module.h>
108 #include <linux/kallsyms.h>
109 #include <linux/netpoll.h>
110 #include <linux/rcupdate.h>
111 #ifdef CONFIG_NET_RADIO
112 #include <linux/wireless.h>             /* Note : will define WIRELESS_EXT */
113 #include <net/iw_handler.h>
114 #endif  /* CONFIG_NET_RADIO */
115 #include <asm/current.h>
116
117 /* This define, if set, will randomly drop a packet when congestion
118  * is more than moderate.  It helps fairness in the multi-interface
119  * case when one of them is a hog, but it kills performance for the
120  * single interface case so it is off now by default.
121  */
122 #undef RAND_LIE
123
124 /* Setting this will sample the queue lengths and thus congestion
125  * via a timer instead of as each packet is received.
126  */
127 #undef OFFLINE_SAMPLE
128
129 /*
130  *      The list of packet types we will receive (as opposed to discard)
131  *      and the routines to invoke.
132  *
133  *      Why 16. Because with 16 the only overlap we get on a hash of the
134  *      low nibble of the protocol value is RARP/SNAP/X.25.
135  *
136  *      NOTE:  That is no longer true with the addition of VLAN tags.  Not
137  *             sure which should go first, but I bet it won't make much
138  *             difference if we are running VLANs.  The good news is that
139  *             this protocol won't be in the list unless compiled in, so
140  *             the average user (w/out VLANs) will not be adversly affected.
141  *             --BLG
142  *
143  *              0800    IP
144  *              8100    802.1Q VLAN
145  *              0001    802.3
146  *              0002    AX.25
147  *              0004    802.2
148  *              8035    RARP
149  *              0005    SNAP
150  *              0805    X.25
151  *              0806    ARP
152  *              8137    IPX
153  *              0009    Localtalk
154  *              86DD    IPv6
155  */
156
157 static spinlock_t ptype_lock = SPIN_LOCK_UNLOCKED;
158 static struct list_head ptype_base[16]; /* 16 way hashed list */
159 static struct list_head ptype_all;              /* Taps */
160
161 #ifdef OFFLINE_SAMPLE
162 static void sample_queue(unsigned long dummy);
163 static struct timer_list samp_timer = TIMER_INITIALIZER(sample_queue, 0, 0);
164 #endif
165
166 /*
167  * The @dev_base list is protected by @dev_base_lock and the rtln
168  * semaphore.
169  *
170  * Pure readers hold dev_base_lock for reading.
171  *
172  * Writers must hold the rtnl semaphore while they loop through the
173  * dev_base list, and hold dev_base_lock for writing when they do the
174  * actual updates.  This allows pure readers to access the list even
175  * while a writer is preparing to update it.
176  *
177  * To put it another way, dev_base_lock is held for writing only to
178  * protect against pure readers; the rtnl semaphore provides the
179  * protection against other writers.
180  *
181  * See, for example usages, register_netdevice() and
182  * unregister_netdevice(), which must be called with the rtnl
183  * semaphore held.
184  */
185 struct net_device *dev_base;
186 struct net_device **dev_tail = &dev_base;
187 rwlock_t dev_base_lock = RW_LOCK_UNLOCKED;
188
189 EXPORT_SYMBOL(dev_base);
190 EXPORT_SYMBOL(dev_base_lock);
191
192 #define NETDEV_HASHBITS 8
193 static struct hlist_head dev_name_head[1<<NETDEV_HASHBITS];
194 static struct hlist_head dev_index_head[1<<NETDEV_HASHBITS];
195
196 static inline struct hlist_head *dev_name_hash(const char *name)
197 {
198         unsigned hash = full_name_hash(name, strnlen(name, IFNAMSIZ));
199         return &dev_name_head[hash & ((1<<NETDEV_HASHBITS)-1)];
200 }
201
202 static inline struct hlist_head *dev_index_hash(int ifindex)
203 {
204         return &dev_index_head[ifindex & ((1<<NETDEV_HASHBITS)-1)];
205 }
206
207 /*
208  *      Our notifier list
209  */
210
211 static struct notifier_block *netdev_chain;
212
213 /*
214  *      Device drivers call our routines to queue packets here. We empty the
215  *      queue in the local softnet handler.
216  */
217 DEFINE_PER_CPU(struct softnet_data, softnet_data) = { 0, };
218
219 #ifdef CONFIG_SYSFS
220 extern int netdev_sysfs_init(void);
221 extern int netdev_register_sysfs(struct net_device *);
222 extern void netdev_unregister_sysfs(struct net_device *);
223 #else
224 #define netdev_sysfs_init()             (0)
225 #define netdev_register_sysfs(dev)      (0)
226 #define netdev_unregister_sysfs(dev)    do { } while(0)
227 #endif
228
229
230 /*******************************************************************************
231
232                 Protocol management and registration routines
233
234 *******************************************************************************/
235
236 /*
237  *      For efficiency
238  */
239
240 int netdev_nit;
241
242 /*
243  *      Add a protocol ID to the list. Now that the input handler is
244  *      smarter we can dispense with all the messy stuff that used to be
245  *      here.
246  *
247  *      BEWARE!!! Protocol handlers, mangling input packets,
248  *      MUST BE last in hash buckets and checking protocol handlers
249  *      MUST start from promiscuous ptype_all chain in net_bh.
250  *      It is true now, do not change it.
251  *      Explanation follows: if protocol handler, mangling packet, will
252  *      be the first on list, it is not able to sense, that packet
253  *      is cloned and should be copied-on-write, so that it will
254  *      change it and subsequent readers will get broken packet.
255  *                                                      --ANK (980803)
256  */
257
258 /**
259  *      dev_add_pack - add packet handler
260  *      @pt: packet type declaration
261  *
262  *      Add a protocol handler to the networking stack. The passed &packet_type
263  *      is linked into kernel lists and may not be freed until it has been
264  *      removed from the kernel lists.
265  *
266  *      This call does not sleep therefore it can not 
267  *      guarantee all CPU's that are in middle of receiving packets
268  *      will see the new packet type (until the next received packet).
269  */
270
271 void dev_add_pack(struct packet_type *pt)
272 {
273         int hash;
274
275         spin_lock_bh(&ptype_lock);
276         if (pt->type == htons(ETH_P_ALL)) {
277                 netdev_nit++;
278                 list_add_rcu(&pt->list, &ptype_all);
279         } else {
280                 hash = ntohs(pt->type) & 15;
281                 list_add_rcu(&pt->list, &ptype_base[hash]);
282         }
283         spin_unlock_bh(&ptype_lock);
284 }
285
286 extern void linkwatch_run_queue(void);
287
288
289
290 /**
291  *      __dev_remove_pack        - remove packet handler
292  *      @pt: packet type declaration
293  *
294  *      Remove a protocol handler that was previously added to the kernel
295  *      protocol handlers by dev_add_pack(). The passed &packet_type is removed
296  *      from the kernel lists and can be freed or reused once this function
297  *      returns. 
298  *
299  *      The packet type might still be in use by receivers
300  *      and must not be freed until after all the CPU's have gone
301  *      through a quiescent state.
302  */
303 void __dev_remove_pack(struct packet_type *pt)
304 {
305         struct list_head *head;
306         struct packet_type *pt1;
307
308         spin_lock_bh(&ptype_lock);
309
310         if (pt->type == htons(ETH_P_ALL)) {
311                 netdev_nit--;
312                 head = &ptype_all;
313         } else
314                 head = &ptype_base[ntohs(pt->type) & 15];
315
316         list_for_each_entry(pt1, head, list) {
317                 if (pt == pt1) {
318                         list_del_rcu(&pt->list);
319                         goto out;
320                 }
321         }
322
323         printk(KERN_WARNING "dev_remove_pack: %p not found.\n", pt);
324 out:
325         spin_unlock_bh(&ptype_lock);
326 }
327 /**
328  *      dev_remove_pack  - remove packet handler
329  *      @pt: packet type declaration
330  *
331  *      Remove a protocol handler that was previously added to the kernel
332  *      protocol handlers by dev_add_pack(). The passed &packet_type is removed
333  *      from the kernel lists and can be freed or reused once this function
334  *      returns.
335  *
336  *      This call sleeps to guarantee that no CPU is looking at the packet
337  *      type after return.
338  */
339 void dev_remove_pack(struct packet_type *pt)
340 {
341         __dev_remove_pack(pt);
342         
343         synchronize_net();
344 }
345
346 /******************************************************************************
347
348                       Device Boot-time Settings Routines
349
350 *******************************************************************************/
351
352 /* Boot time configuration table */
353 static struct netdev_boot_setup dev_boot_setup[NETDEV_BOOT_SETUP_MAX];
354
355 /**
356  *      netdev_boot_setup_add   - add new setup entry
357  *      @name: name of the device
358  *      @map: configured settings for the device
359  *
360  *      Adds new setup entry to the dev_boot_setup list.  The function
361  *      returns 0 on error and 1 on success.  This is a generic routine to
362  *      all netdevices.
363  */
364 int netdev_boot_setup_add(char *name, struct ifmap *map)
365 {
366         struct netdev_boot_setup *s;
367         int i;
368
369         s = dev_boot_setup;
370         for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++) {
371                 if (s[i].name[0] == '\0' || s[i].name[0] == ' ') {
372                         memset(s[i].name, 0, sizeof(s[i].name));
373                         strcpy(s[i].name, name);
374                         memcpy(&s[i].map, map, sizeof(s[i].map));
375                         break;
376                 }
377         }
378
379         return i >= NETDEV_BOOT_SETUP_MAX ? 0 : 1;
380 }
381
382 /**
383  *      netdev_boot_setup_check - check boot time settings
384  *      @dev: the netdevice
385  *
386  *      Check boot time settings for the device.
387  *      The found settings are set for the device to be used
388  *      later in the device probing.
389  *      Returns 0 if no settings found, 1 if they are.
390  */
391 int netdev_boot_setup_check(struct net_device *dev)
392 {
393         struct netdev_boot_setup *s = dev_boot_setup;
394         int i;
395
396         for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++) {
397                 if (s[i].name[0] != '\0' && s[i].name[0] != ' ' &&
398                     !strncmp(dev->name, s[i].name, strlen(s[i].name))) {
399                         dev->irq        = s[i].map.irq;
400                         dev->base_addr  = s[i].map.base_addr;
401                         dev->mem_start  = s[i].map.mem_start;
402                         dev->mem_end    = s[i].map.mem_end;
403                         return 1;
404                 }
405         }
406         return 0;
407 }
408
409
410 /**
411  *      netdev_boot_base        - get address from boot time settings
412  *      @prefix: prefix for network device
413  *      @unit: id for network device
414  *
415  *      Check boot time settings for the base address of device.
416  *      The found settings are set for the device to be used
417  *      later in the device probing.
418  *      Returns 0 if no settings found.
419  */
420 unsigned long netdev_boot_base(const char *prefix, int unit)
421 {
422         const struct netdev_boot_setup *s = dev_boot_setup;
423         char name[IFNAMSIZ];
424         int i;
425
426         sprintf(name, "%s%d", prefix, unit);
427
428         /*
429          * If device already registered then return base of 1
430          * to indicate not to probe for this interface
431          */
432         if (__dev_get_by_name(name))
433                 return 1;
434
435         for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++)
436                 if (!strcmp(name, s[i].name))
437                         return s[i].map.base_addr;
438         return 0;
439 }
440
441 /*
442  * Saves at boot time configured settings for any netdevice.
443  */
444 int __init netdev_boot_setup(char *str)
445 {
446         int ints[5];
447         struct ifmap map;
448
449         str = get_options(str, ARRAY_SIZE(ints), ints);
450         if (!str || !*str)
451                 return 0;
452
453         /* Save settings */
454         memset(&map, 0, sizeof(map));
455         if (ints[0] > 0)
456                 map.irq = ints[1];
457         if (ints[0] > 1)
458                 map.base_addr = ints[2];
459         if (ints[0] > 2)
460                 map.mem_start = ints[3];
461         if (ints[0] > 3)
462                 map.mem_end = ints[4];
463
464         /* Add new entry to the list */
465         return netdev_boot_setup_add(str, &map);
466 }
467
468 __setup("netdev=", netdev_boot_setup);
469
470 /*******************************************************************************
471
472                             Device Interface Subroutines
473
474 *******************************************************************************/
475
476 /**
477  *      __dev_get_by_name       - find a device by its name
478  *      @name: name to find
479  *
480  *      Find an interface by name. Must be called under RTNL semaphore
481  *      or @dev_base_lock. If the name is found a pointer to the device
482  *      is returned. If the name is not found then %NULL is returned. The
483  *      reference counters are not incremented so the caller must be
484  *      careful with locks.
485  */
486
487 struct net_device *__dev_get_by_name(const char *name)
488 {
489         struct hlist_node *p;
490
491         hlist_for_each(p, dev_name_hash(name)) {
492                 struct net_device *dev
493                         = hlist_entry(p, struct net_device, name_hlist);
494                 if (!strncmp(dev->name, name, IFNAMSIZ))
495                         return dev;
496         }
497         return NULL;
498 }
499
500 /**
501  *      dev_get_by_name         - find a device by its name
502  *      @name: name to find
503  *
504  *      Find an interface by name. This can be called from any
505  *      context and does its own locking. The returned handle has
506  *      the usage count incremented and the caller must use dev_put() to
507  *      release it when it is no longer needed. %NULL is returned if no
508  *      matching device is found.
509  */
510
511 struct net_device *dev_get_by_name(const char *name)
512 {
513         struct net_device *dev;
514
515         read_lock(&dev_base_lock);
516         dev = __dev_get_by_name(name);
517         if (dev)
518                 dev_hold(dev);
519         read_unlock(&dev_base_lock);
520         return dev;
521 }
522
523 /*
524    Return value is changed to int to prevent illegal usage in future.
525    It is still legal to use to check for device existence.
526
527    User should understand, that the result returned by this function
528    is meaningless, if it was not issued under rtnl semaphore.
529  */
530
531 /**
532  *      dev_get -       test if a device exists
533  *      @name:  name to test for
534  *
535  *      Test if a name exists. Returns true if the name is found. In order
536  *      to be sure the name is not allocated or removed during the test the
537  *      caller must hold the rtnl semaphore.
538  *
539  *      This function exists only for back compatibility with older
540  *      drivers.
541  */
542 int __dev_get(const char *name)
543 {
544         struct net_device *dev;
545
546         read_lock(&dev_base_lock);
547         dev = __dev_get_by_name(name);
548         read_unlock(&dev_base_lock);
549         return dev != NULL;
550 }
551
552 /**
553  *      __dev_get_by_index - find a device by its ifindex
554  *      @ifindex: index of device
555  *
556  *      Search for an interface by index. Returns %NULL if the device
557  *      is not found or a pointer to the device. The device has not
558  *      had its reference counter increased so the caller must be careful
559  *      about locking. The caller must hold either the RTNL semaphore
560  *      or @dev_base_lock.
561  */
562
563 struct net_device *__dev_get_by_index(int ifindex)
564 {
565         struct hlist_node *p;
566
567         hlist_for_each(p, dev_index_hash(ifindex)) {
568                 struct net_device *dev
569                         = hlist_entry(p, struct net_device, index_hlist);
570                 if (dev->ifindex == ifindex)
571                         return dev;
572         }
573         return NULL;
574 }
575
576
577 /**
578  *      dev_get_by_index - find a device by its ifindex
579  *      @ifindex: index of device
580  *
581  *      Search for an interface by index. Returns NULL if the device
582  *      is not found or a pointer to the device. The device returned has
583  *      had a reference added and the pointer is safe until the user calls
584  *      dev_put to indicate they have finished with it.
585  */
586
587 struct net_device *dev_get_by_index(int ifindex)
588 {
589         struct net_device *dev;
590
591         read_lock(&dev_base_lock);
592         dev = __dev_get_by_index(ifindex);
593         if (dev)
594                 dev_hold(dev);
595         read_unlock(&dev_base_lock);
596         return dev;
597 }
598
599 /**
600  *      dev_getbyhwaddr - find a device by its hardware address
601  *      @type: media type of device
602  *      @ha: hardware address
603  *
604  *      Search for an interface by MAC address. Returns NULL if the device
605  *      is not found or a pointer to the device. The caller must hold the
606  *      rtnl semaphore. The returned device has not had its ref count increased
607  *      and the caller must therefore be careful about locking
608  *
609  *      BUGS:
610  *      If the API was consistent this would be __dev_get_by_hwaddr
611  */
612
613 struct net_device *dev_getbyhwaddr(unsigned short type, char *ha)
614 {
615         struct net_device *dev;
616
617         ASSERT_RTNL();
618
619         for (dev = dev_base; dev; dev = dev->next)
620                 if (dev->type == type &&
621                     !memcmp(dev->dev_addr, ha, dev->addr_len))
622                         break;
623         return dev;
624 }
625
626 struct net_device *__dev_getfirstbyhwtype(unsigned short type)
627 {
628         struct net_device *dev;
629
630         for (dev = dev_base; dev; dev = dev->next)
631                 if (dev->type == type)
632                         break;
633         return dev;
634 }
635
636 EXPORT_SYMBOL(__dev_getfirstbyhwtype);
637
638 struct net_device *dev_getfirstbyhwtype(unsigned short type)
639 {
640         struct net_device *dev;
641
642         rtnl_lock();
643         dev = __dev_getfirstbyhwtype(type);
644         if (dev)
645                 dev_hold(dev);
646         rtnl_unlock();
647         return dev;
648 }
649
650 EXPORT_SYMBOL(dev_getfirstbyhwtype);
651
652 /**
653  *      dev_get_by_flags - find any device with given flags
654  *      @if_flags: IFF_* values
655  *      @mask: bitmask of bits in if_flags to check
656  *
657  *      Search for any interface with the given flags. Returns NULL if a device
658  *      is not found or a pointer to the device. The device returned has 
659  *      had a reference added and the pointer is safe until the user calls
660  *      dev_put to indicate they have finished with it.
661  */
662
663 struct net_device * dev_get_by_flags(unsigned short if_flags, unsigned short mask)
664 {
665         struct net_device *dev;
666
667         read_lock(&dev_base_lock);
668         dev = __dev_get_by_flags(if_flags, mask);
669         if (dev)
670                 dev_hold(dev);
671         read_unlock(&dev_base_lock);
672         return dev;
673 }
674
675 /**
676  *      __dev_get_by_flags - find any device with given flags
677  *      @if_flags: IFF_* values
678  *      @mask: bitmask of bits in if_flags to check
679  *
680  *      Search for any interface with the given flags. Returns NULL if a device
681  *      is not found or a pointer to the device. The caller must hold either
682  *      the RTNL semaphore or @dev_base_lock.
683  */
684
685 struct net_device *__dev_get_by_flags(unsigned short if_flags, unsigned short mask)
686 {
687         struct net_device *dev;
688
689         for (dev = dev_base; dev != NULL; dev = dev->next) {
690                 if (((dev->flags ^ if_flags) & mask) == 0)
691                         return dev;
692         }
693         return NULL;
694 }
695
696 /**
697  *      dev_valid_name - check if name is okay for network device
698  *      @name: name string
699  *
700  *      Network device names need to be valid file names to
701  *      to allow sysfs to work
702  */
703 int dev_valid_name(const char *name)
704 {
705         return !(*name == '\0' 
706                  || !strcmp(name, ".")
707                  || !strcmp(name, "..")
708                  || strchr(name, '/'));
709 }
710
711 /**
712  *      dev_alloc_name - allocate a name for a device
713  *      @dev: device
714  *      @name: name format string
715  *
716  *      Passed a format string - eg "lt%d" it will try and find a suitable
717  *      id. Not efficient for many devices, not called a lot. The caller
718  *      must hold the dev_base or rtnl lock while allocating the name and
719  *      adding the device in order to avoid duplicates. Returns the number
720  *      of the unit assigned or a negative errno code.
721  */
722
723 int dev_alloc_name(struct net_device *dev, const char *name)
724 {
725         int i = 0;
726         char buf[IFNAMSIZ];
727         const char *p;
728         const int max_netdevices = 8*PAGE_SIZE;
729         long *inuse;
730         struct net_device *d;
731
732         p = strnchr(name, IFNAMSIZ-1, '%');
733         if (p) {
734                 /*
735                  * Verify the string as this thing may have come from
736                  * the user.  There must be either one "%d" and no other "%"
737                  * characters.
738                  */
739                 if (p[1] != 'd' || strchr(p + 2, '%'))
740                         return -EINVAL;
741
742                 /* Use one page as a bit array of possible slots */
743                 inuse = (long *) get_zeroed_page(GFP_ATOMIC);
744                 if (!inuse)
745                         return -ENOMEM;
746
747                 for (d = dev_base; d; d = d->next) {
748                         if (!sscanf(d->name, name, &i))
749                                 continue;
750                         if (i < 0 || i >= max_netdevices)
751                                 continue;
752
753                         /*  avoid cases where sscanf is not exact inverse of printf */
754                         snprintf(buf, sizeof(buf), name, i);
755                         if (!strncmp(buf, d->name, IFNAMSIZ))
756                                 set_bit(i, inuse);
757                 }
758
759                 i = find_first_zero_bit(inuse, max_netdevices);
760                 free_page((unsigned long) inuse);
761         }
762
763         snprintf(buf, sizeof(buf), name, i);
764         if (!__dev_get_by_name(buf)) {
765                 strlcpy(dev->name, buf, IFNAMSIZ);
766                 return i;
767         }
768
769         /* It is possible to run out of possible slots
770          * when the name is long and there isn't enough space left
771          * for the digits, or if all bits are used.
772          */
773         return -ENFILE;
774 }
775
776
777 /**
778  *      dev_change_name - change name of a device
779  *      @dev: device
780  *      @newname: name (or format string) must be at least IFNAMSIZ
781  *
782  *      Change name of a device, can pass format strings "eth%d".
783  *      for wildcarding.
784  */
785 int dev_change_name(struct net_device *dev, char *newname)
786 {
787         int err = 0;
788
789         ASSERT_RTNL();
790
791         if (dev->flags & IFF_UP)
792                 return -EBUSY;
793
794         if (!dev_valid_name(newname))
795                 return -EINVAL;
796
797         if (strchr(newname, '%')) {
798                 err = dev_alloc_name(dev, newname);
799                 if (err < 0)
800                         return err;
801                 strcpy(newname, dev->name);
802         }
803         else if (__dev_get_by_name(newname))
804                 return -EEXIST;
805         else
806                 strlcpy(dev->name, newname, IFNAMSIZ);
807
808         err = class_device_rename(&dev->class_dev, dev->name);
809         if (!err) {
810                 hlist_del(&dev->name_hlist);
811                 hlist_add_head(&dev->name_hlist, dev_name_hash(dev->name));
812                 notifier_call_chain(&netdev_chain, NETDEV_CHANGENAME, dev);
813         }
814
815         return err;
816 }
817
818 /**
819  *      netdev_state_change - device changes state
820  *      @dev: device to cause notification
821  *
822  *      Called to indicate a device has changed state. This function calls
823  *      the notifier chains for netdev_chain and sends a NEWLINK message
824  *      to the routing socket.
825  */
826 void netdev_state_change(struct net_device *dev)
827 {
828         if (dev->flags & IFF_UP) {
829                 notifier_call_chain(&netdev_chain, NETDEV_CHANGE, dev);
830                 rtmsg_ifinfo(RTM_NEWLINK, dev, 0);
831         }
832 }
833
834 /**
835  *      dev_load        - load a network module
836  *      @name: name of interface
837  *
838  *      If a network interface is not present and the process has suitable
839  *      privileges this function loads the module. If module loading is not
840  *      available in this kernel then it becomes a nop.
841  */
842
843 void dev_load(const char *name)
844 {
845         struct net_device *dev;  
846
847         read_lock(&dev_base_lock);
848         dev = __dev_get_by_name(name);
849         read_unlock(&dev_base_lock);
850
851         if (!dev && capable(CAP_SYS_MODULE))
852                 request_module("%s", name);
853 }
854
855 static int default_rebuild_header(struct sk_buff *skb)
856 {
857         printk(KERN_DEBUG "%s: default_rebuild_header called -- BUG!\n",
858                skb->dev ? skb->dev->name : "NULL!!!");
859         kfree_skb(skb);
860         return 1;
861 }
862
863
864 /*
865  * Some old buggy device drivers change get_stats after registering
866  * the device.  Try and trap them here.
867  * This can be elimnated when all devices are known fixed.
868  */
869 static inline int get_stats_changed(struct net_device *dev)
870 {
871         int changed = dev->last_stats != dev->get_stats;
872         dev->last_stats = dev->get_stats;
873         return changed;
874 }
875
876 /**
877  *      dev_open        - prepare an interface for use.
878  *      @dev:   device to open
879  *
880  *      Takes a device from down to up state. The device's private open
881  *      function is invoked and then the multicast lists are loaded. Finally
882  *      the device is moved into the up state and a %NETDEV_UP message is
883  *      sent to the netdev notifier chain.
884  *
885  *      Calling this function on an active interface is a nop. On a failure
886  *      a negative errno code is returned.
887  */
888 int dev_open(struct net_device *dev)
889 {
890         int ret = 0;
891
892         /*
893          *      Is it already up?
894          */
895
896         if (dev->flags & IFF_UP)
897                 return 0;
898
899         /*
900          *       Check for broken device drivers.
901          */
902         if (get_stats_changed(dev) && net_ratelimit()) {
903                 printk(KERN_ERR "%s: driver changed get_stats after register\n",
904                        dev->name);
905         }
906
907         /*
908          *      Is it even present?
909          */
910         if (!netif_device_present(dev))
911                 return -ENODEV;
912
913         /*
914          *      Call device private open method
915          */
916         set_bit(__LINK_STATE_START, &dev->state);
917         if (dev->open) {
918                 ret = dev->open(dev);
919                 if (ret)
920                         clear_bit(__LINK_STATE_START, &dev->state);
921         }
922
923         /*
924          *      Check for more broken device drivers.
925          */
926         if (get_stats_changed(dev) && net_ratelimit()) {
927                 printk(KERN_ERR "%s: driver changed get_stats in open\n",
928                        dev->name);
929         }
930
931         /*
932          *      If it went open OK then:
933          */
934
935         if (!ret) {
936                 /*
937                  *      Set the flags.
938                  */
939                 dev->flags |= IFF_UP;
940
941                 /*
942                  *      Initialize multicasting status
943                  */
944                 dev_mc_upload(dev);
945
946                 /*
947                  *      Wakeup transmit queue engine
948                  */
949                 dev_activate(dev);
950
951                 /*
952                  *      ... and announce new interface.
953                  */
954                 notifier_call_chain(&netdev_chain, NETDEV_UP, dev);
955         }
956         return ret;
957 }
958
959 /**
960  *      dev_close - shutdown an interface.
961  *      @dev: device to shutdown
962  *
963  *      This function moves an active device into down state. A
964  *      %NETDEV_GOING_DOWN is sent to the netdev notifier chain. The device
965  *      is then deactivated and finally a %NETDEV_DOWN is sent to the notifier
966  *      chain.
967  */
968 int dev_close(struct net_device *dev)
969 {
970         if (!(dev->flags & IFF_UP))
971                 return 0;
972
973         /*
974          *      Tell people we are going down, so that they can
975          *      prepare to death, when device is still operating.
976          */
977         notifier_call_chain(&netdev_chain, NETDEV_GOING_DOWN, dev);
978
979         dev_deactivate(dev);
980
981         clear_bit(__LINK_STATE_START, &dev->state);
982
983         /* Synchronize to scheduled poll. We cannot touch poll list,
984          * it can be even on different cpu. So just clear netif_running(),
985          * and wait when poll really will happen. Actually, the best place
986          * for this is inside dev->stop() after device stopped its irq
987          * engine, but this requires more changes in devices. */
988
989         smp_mb__after_clear_bit(); /* Commit netif_running(). */
990         while (test_bit(__LINK_STATE_RX_SCHED, &dev->state)) {
991                 /* No hurry. */
992                 current->state = TASK_INTERRUPTIBLE;
993                 schedule_timeout(1);
994         }
995
996         /*
997          *      Call the device specific close. This cannot fail.
998          *      Only if device is UP
999          *
1000          *      We allow it to be called even after a DETACH hot-plug
1001          *      event.
1002          */
1003         if (dev->stop)
1004                 dev->stop(dev);
1005
1006         /*
1007          *      Device is now down.
1008          */
1009
1010         dev->flags &= ~IFF_UP;
1011
1012         /*
1013          * Tell people we are down
1014          */
1015         notifier_call_chain(&netdev_chain, NETDEV_DOWN, dev);
1016
1017         return 0;
1018 }
1019
1020
1021 /*
1022  *      Device change register/unregister. These are not inline or static
1023  *      as we export them to the world.
1024  */
1025
1026 /**
1027  *      register_netdevice_notifier - register a network notifier block
1028  *      @nb: notifier
1029  *
1030  *      Register a notifier to be called when network device events occur.
1031  *      The notifier passed is linked into the kernel structures and must
1032  *      not be reused until it has been unregistered. A negative errno code
1033  *      is returned on a failure.
1034  *
1035  *      When registered all registration and up events are replayed
1036  *      to the new notifier to allow device to have a race free 
1037  *      view of the network device list.
1038  */
1039
1040 int register_netdevice_notifier(struct notifier_block *nb)
1041 {
1042         struct net_device *dev;
1043         int err;
1044
1045         rtnl_lock();
1046         err = notifier_chain_register(&netdev_chain, nb);
1047         if (!err) {
1048                 for (dev = dev_base; dev; dev = dev->next) {
1049                         nb->notifier_call(nb, NETDEV_REGISTER, dev);
1050
1051                         if (dev->flags & IFF_UP) 
1052                                 nb->notifier_call(nb, NETDEV_UP, dev);
1053                 }
1054         }
1055         rtnl_unlock();
1056         return err;
1057 }
1058
1059 /**
1060  *      unregister_netdevice_notifier - unregister a network notifier block
1061  *      @nb: notifier
1062  *
1063  *      Unregister a notifier previously registered by
1064  *      register_netdevice_notifier(). The notifier is unlinked into the
1065  *      kernel structures and may then be reused. A negative errno code
1066  *      is returned on a failure.
1067  */
1068
1069 int unregister_netdevice_notifier(struct notifier_block *nb)
1070 {
1071         return notifier_chain_unregister(&netdev_chain, nb);
1072 }
1073
1074 /**
1075  *      call_netdevice_notifiers - call all network notifier blocks
1076  *      @val: value passed unmodified to notifier function
1077  *      @v:   pointer passed unmodified to notifier function
1078  *
1079  *      Call all network notifier blocks.  Parameters and return value
1080  *      are as for notifier_call_chain().
1081  */
1082
1083 int call_netdevice_notifiers(unsigned long val, void *v)
1084 {
1085         return notifier_call_chain(&netdev_chain, val, v);
1086 }
1087
1088 /*
1089  *      Support routine. Sends outgoing frames to any network
1090  *      taps currently in use.
1091  */
1092
1093 void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev)
1094 {
1095         struct packet_type *ptype;
1096         net_timestamp(&skb->stamp);
1097
1098         rcu_read_lock();
1099         list_for_each_entry_rcu(ptype, &ptype_all, list) {
1100                 /* Never send packets back to the socket
1101                  * they originated from - MvS (miquels@drinkel.ow.org)
1102                  */
1103                 if ((ptype->dev == dev || !ptype->dev) &&
1104                     (ptype->af_packet_priv == NULL ||
1105                      (struct sock *)ptype->af_packet_priv != skb->sk)) {
1106                         struct sk_buff *skb2= skb_clone(skb, GFP_ATOMIC);
1107                         if (!skb2)
1108                                 break;
1109
1110                         /* skb->nh should be correctly
1111                            set by sender, so that the second statement is
1112                            just protection against buggy protocols.
1113                          */
1114                         skb2->mac.raw = skb2->data;
1115
1116                         if (skb2->nh.raw < skb2->data ||
1117                             skb2->nh.raw > skb2->tail) {
1118                                 if (net_ratelimit())
1119                                         printk(KERN_CRIT "protocol %04x is "
1120                                                "buggy, dev %s\n",
1121                                                skb2->protocol, dev->name);
1122                                 skb2->nh.raw = skb2->data;
1123                         }
1124
1125                         skb2->h.raw = skb2->nh.raw;
1126                         skb2->pkt_type = PACKET_OUTGOING;
1127                         ptype->func(skb2, skb->dev, ptype);
1128                 }
1129         }
1130         rcu_read_unlock();
1131 }
1132
1133 /*
1134  * Invalidate hardware checksum when packet is to be mangled, and
1135  * complete checksum manually on outgoing path.
1136  */
1137 int skb_checksum_help(struct sk_buff **pskb, int inward)
1138 {
1139         unsigned int csum;
1140         int ret = 0, offset = (*pskb)->h.raw - (*pskb)->data;
1141
1142         if (inward) {
1143                 (*pskb)->ip_summed = CHECKSUM_NONE;
1144                 goto out;
1145         }
1146
1147         if (skb_shared(*pskb)  || skb_cloned(*pskb)) {
1148                 struct sk_buff *newskb = skb_copy(*pskb, GFP_ATOMIC);
1149                 if (!newskb) {
1150                         ret = -ENOMEM;
1151                         goto out;
1152                 }
1153                 if ((*pskb)->sk)
1154                         skb_set_owner_w(newskb, (*pskb)->sk);
1155                 kfree_skb(*pskb);
1156                 *pskb = newskb;
1157         }
1158
1159         if (offset > (int)(*pskb)->len)
1160                 BUG();
1161         csum = skb_checksum(*pskb, offset, (*pskb)->len-offset, 0);
1162
1163         offset = (*pskb)->tail - (*pskb)->h.raw;
1164         if (offset <= 0)
1165                 BUG();
1166         if ((*pskb)->csum + 2 > offset)
1167                 BUG();
1168
1169         *(u16*)((*pskb)->h.raw + (*pskb)->csum) = csum_fold(csum);
1170         (*pskb)->ip_summed = CHECKSUM_NONE;
1171 out:    
1172         return ret;
1173 }
1174
1175 #ifdef CONFIG_HIGHMEM
1176 /* Actually, we should eliminate this check as soon as we know, that:
1177  * 1. IOMMU is present and allows to map all the memory.
1178  * 2. No high memory really exists on this machine.
1179  */
1180
1181 static inline int illegal_highdma(struct net_device *dev, struct sk_buff *skb)
1182 {
1183         int i;
1184
1185         if (dev->features & NETIF_F_HIGHDMA)
1186                 return 0;
1187
1188         for (i = 0; i < skb_shinfo(skb)->nr_frags; i++)
1189                 if (skb_shinfo(skb)->frags[i].page >= highmem_start_page)
1190                         return 1;
1191
1192         return 0;
1193 }
1194 #else
1195 #define illegal_highdma(dev, skb)       (0)
1196 #endif
1197
1198 extern void skb_release_data(struct sk_buff *);
1199
1200 /* Keep head the same: replace data */
1201 int __skb_linearize(struct sk_buff *skb, int gfp_mask)
1202 {
1203         unsigned int size;
1204         u8 *data;
1205         long offset;
1206         struct skb_shared_info *ninfo;
1207         int headerlen = skb->data - skb->head;
1208         int expand = (skb->tail + skb->data_len) - skb->end;
1209
1210         if (skb_shared(skb))
1211                 BUG();
1212
1213         if (expand <= 0)
1214                 expand = 0;
1215
1216         size = skb->end - skb->head + expand;
1217         size = SKB_DATA_ALIGN(size);
1218         data = kmalloc(size + sizeof(struct skb_shared_info), gfp_mask);
1219         if (!data)
1220                 return -ENOMEM;
1221
1222         /* Copy entire thing */
1223         if (skb_copy_bits(skb, -headerlen, data, headerlen + skb->len))
1224                 BUG();
1225
1226         /* Set up shinfo */
1227         ninfo = (struct skb_shared_info*)(data + size);
1228         atomic_set(&ninfo->dataref, 1);
1229         ninfo->tso_size = skb_shinfo(skb)->tso_size;
1230         ninfo->tso_segs = skb_shinfo(skb)->tso_segs;
1231         ninfo->nr_frags = 0;
1232         ninfo->frag_list = NULL;
1233
1234         /* Offset between the two in bytes */
1235         offset = data - skb->head;
1236
1237         /* Free old data. */
1238         skb_release_data(skb);
1239
1240         skb->head = data;
1241         skb->end  = data + size;
1242
1243         /* Set up new pointers */
1244         skb->h.raw   += offset;
1245         skb->nh.raw  += offset;
1246         skb->mac.raw += offset;
1247         skb->tail    += offset;
1248         skb->data    += offset;
1249
1250         /* We are no longer a clone, even if we were. */
1251         skb->cloned    = 0;
1252 #if defined(CONFIG_MIPS_BRCM)
1253     /* The data buffer of this skb is not pre-allocated any more
1254      * even the skb itself is pre-allocated. (songw)
1255      */
1256     skb->retfreeq_data_prealloc = 0;
1257 #endif
1258
1259         skb->tail     += skb->data_len;
1260         skb->data_len  = 0;
1261         return 0;
1262 }
1263
1264 #define HARD_TX_LOCK_BH(dev, cpu) {                     \
1265         if ((dev->features & NETIF_F_LLTX) == 0) {      \
1266                 spin_lock_bh(&dev->xmit_lock);          \
1267                 dev->xmit_lock_owner = cpu;             \
1268         }                                               \
1269 }
1270
1271 #define HARD_TX_UNLOCK_BH(dev) {                        \
1272         if ((dev->features & NETIF_F_LLTX) == 0) {      \
1273                 dev->xmit_lock_owner = -1;              \
1274                 spin_unlock_bh(&dev->xmit_lock);        \
1275         }                                               \
1276 }
1277
1278 static inline void qdisc_run(struct net_device *dev)
1279 {
1280         while (!netif_queue_stopped(dev) &&
1281                qdisc_restart(dev)<0)
1282                 /* NOTHING */;
1283 }
1284
1285 /**
1286  *      dev_queue_xmit - transmit a buffer
1287  *      @skb: buffer to transmit
1288  *
1289  *      Queue a buffer for transmission to a network device. The caller must
1290  *      have set the device and priority and built the buffer before calling
1291  *      this function. The function can be called from an interrupt.
1292  *
1293  *      A negative errno code is returned on a failure. A success does not
1294  *      guarantee the frame will be transmitted as it may be dropped due
1295  *      to congestion or traffic shaping.
1296  */
1297
1298 int dev_queue_xmit(struct sk_buff *skb)
1299 {
1300         struct net_device *dev = skb->dev;
1301         struct Qdisc *q;
1302         int rc = -ENOMEM;
1303
1304         if (skb_shinfo(skb)->frag_list &&
1305             !(dev->features & NETIF_F_FRAGLIST) &&
1306             __skb_linearize(skb, GFP_ATOMIC))
1307                 goto out_kfree_skb;
1308
1309         /* Fragmented skb is linearized if device does not support SG,
1310          * or if at least one of fragments is in highmem and device
1311          * does not support DMA from it.
1312          */
1313         if (skb_shinfo(skb)->nr_frags &&
1314             (!(dev->features & NETIF_F_SG) || illegal_highdma(dev, skb)) &&
1315             __skb_linearize(skb, GFP_ATOMIC))
1316                 goto out_kfree_skb;
1317
1318         /* If packet is not checksummed and device does not support
1319          * checksumming for this protocol, complete checksumming here.
1320          */
1321         if (skb->ip_summed == CHECKSUM_HW &&
1322             (!(dev->features & (NETIF_F_HW_CSUM | NETIF_F_NO_CSUM)) &&
1323              (!(dev->features & NETIF_F_IP_CSUM) ||
1324               skb->protocol != htons(ETH_P_IP))))
1325                 if (skb_checksum_help(&skb, 0))
1326                         goto out_kfree_skb;
1327
1328         rcu_read_lock();
1329         /* Updates of qdisc are serialized by queue_lock. 
1330          * The struct Qdisc which is pointed to by qdisc is now a 
1331          * rcu structure - it may be accessed without acquiring 
1332          * a lock (but the structure may be stale.) The freeing of the
1333          * qdisc will be deferred until it's known that there are no 
1334          * more references to it.
1335          * 
1336          * If the qdisc has an enqueue function, we still need to 
1337          * hold the queue_lock before calling it, since queue_lock
1338          * also serializes access to the device queue.
1339          */
1340
1341         q = dev->qdisc;
1342         smp_read_barrier_depends();
1343 #ifdef CONFIG_NET_CLS_ACT
1344         skb->tc_verd = SET_TC_AT(skb->tc_verd,AT_EGRESS);
1345 #endif
1346         if (q->enqueue) {
1347                 /* Grab device queue */
1348                 spin_lock_bh(&dev->queue_lock);
1349
1350                 rc = q->enqueue(skb, q);
1351
1352                 qdisc_run(dev);
1353
1354                 spin_unlock_bh(&dev->queue_lock);
1355                 rcu_read_unlock();
1356                 rc = rc == NET_XMIT_BYPASS ? NET_XMIT_SUCCESS : rc;
1357                 goto out;
1358         }
1359         rcu_read_unlock();
1360
1361         /* The device has no queue. Common case for software devices:
1362            loopback, all the sorts of tunnels...
1363
1364            Really, it is unlikely that xmit_lock protection is necessary here.
1365            (f.e. loopback and IP tunnels are clean ignoring statistics
1366            counters.)
1367            However, it is possible, that they rely on protection
1368            made by us here.
1369
1370            Check this and shot the lock. It is not prone from deadlocks.
1371            Either shot noqueue qdisc, it is even simpler 8)
1372          */
1373         if (dev->flags & IFF_UP) {
1374                 int cpu = get_cpu();
1375
1376                 if (dev->xmit_lock_owner != cpu) {
1377
1378                         HARD_TX_LOCK_BH(dev, cpu);
1379                         put_cpu();
1380
1381                         if (!netif_queue_stopped(dev)) {
1382                                 if (netdev_nit)
1383                                         dev_queue_xmit_nit(skb, dev);
1384
1385                                 rc = 0;
1386                                 if (!dev->hard_start_xmit(skb, dev)) {
1387                                         HARD_TX_UNLOCK_BH(dev);
1388                                         goto out;
1389                                 }
1390                         }
1391                         HARD_TX_UNLOCK_BH(dev);
1392                         if (net_ratelimit())
1393                                 printk(KERN_CRIT "Virtual device %s asks to "
1394                                        "queue packet!\n", dev->name);
1395                         goto out_enetdown;
1396                 } else {
1397                         put_cpu();
1398                         /* Recursion is detected! It is possible,
1399                          * unfortunately */
1400                         if (net_ratelimit())
1401                                 printk(KERN_CRIT "Dead loop on virtual device "
1402                                        "%s, fix it urgently!\n", dev->name);
1403                 }
1404         }
1405 out_enetdown:
1406         rc = -ENETDOWN;
1407 out_kfree_skb:
1408         kfree_skb(skb);
1409 out:
1410         return rc;
1411 }
1412
1413
1414 /*=======================================================================
1415                         Receiver routines
1416   =======================================================================*/
1417
1418 int netdev_max_backlog = 300;
1419 int weight_p = 64;            /* old backlog weight */
1420 /* These numbers are selected based on intuition and some
1421  * experimentatiom, if you have more scientific way of doing this
1422  * please go ahead and fix things.
1423  */
1424 int no_cong_thresh = 10;
1425 int no_cong = 20;
1426 int lo_cong = 100;
1427 int mod_cong = 290;
1428
1429 DEFINE_PER_CPU(struct netif_rx_stats, netdev_rx_stat) = { 0, };
1430
1431
1432 #ifdef CONFIG_NET_HW_FLOWCONTROL
1433 atomic_t netdev_dropping = ATOMIC_INIT(0);
1434 static unsigned long netdev_fc_mask = 1;
1435 unsigned long netdev_fc_xoff;
1436 spinlock_t netdev_fc_lock = SPIN_LOCK_UNLOCKED;
1437
1438 static struct
1439 {
1440         void (*stimul)(struct net_device *);
1441         struct net_device *dev;
1442 } netdev_fc_slots[BITS_PER_LONG];
1443
1444 int netdev_register_fc(struct net_device *dev,
1445                        void (*stimul)(struct net_device *dev))
1446 {
1447         int bit = 0;
1448         unsigned long flags;
1449
1450         spin_lock_irqsave(&netdev_fc_lock, flags);
1451         if (netdev_fc_mask != ~0UL) {
1452                 bit = ffz(netdev_fc_mask);
1453                 netdev_fc_slots[bit].stimul = stimul;
1454                 netdev_fc_slots[bit].dev = dev;
1455                 set_bit(bit, &netdev_fc_mask);
1456                 clear_bit(bit, &netdev_fc_xoff);
1457         }
1458         spin_unlock_irqrestore(&netdev_fc_lock, flags);
1459         return bit;
1460 }
1461
1462 void netdev_unregister_fc(int bit)
1463 {
1464         unsigned long flags;
1465
1466         spin_lock_irqsave(&netdev_fc_lock, flags);
1467         if (bit > 0) {
1468                 netdev_fc_slots[bit].stimul = NULL;
1469                 netdev_fc_slots[bit].dev = NULL;
1470                 clear_bit(bit, &netdev_fc_mask);
1471                 clear_bit(bit, &netdev_fc_xoff);
1472         }
1473         spin_unlock_irqrestore(&netdev_fc_lock, flags);
1474 }
1475
1476 static void netdev_wakeup(void)
1477 {
1478         unsigned long xoff;
1479
1480         spin_lock(&netdev_fc_lock);
1481         xoff = netdev_fc_xoff;
1482         netdev_fc_xoff = 0;
1483         while (xoff) {
1484                 int i = ffz(~xoff);
1485                 xoff &= ~(1 << i);
1486                 netdev_fc_slots[i].stimul(netdev_fc_slots[i].dev);
1487         }
1488         spin_unlock(&netdev_fc_lock);
1489 }
1490 #endif
1491
1492 static void get_sample_stats(int cpu)
1493 {
1494 #ifdef RAND_LIE
1495         unsigned long rd;
1496         int rq;
1497 #endif
1498         struct softnet_data *sd = &per_cpu(softnet_data, cpu);
1499         int blog = sd->input_pkt_queue.qlen;
1500         int avg_blog = sd->avg_blog;
1501
1502         avg_blog = (avg_blog >> 1) + (blog >> 1);
1503
1504         if (avg_blog > mod_cong) {
1505                 /* Above moderate congestion levels. */
1506                 sd->cng_level = NET_RX_CN_HIGH;
1507 #ifdef RAND_LIE
1508                 rd = net_random();
1509                 rq = rd % netdev_max_backlog;
1510                 if (rq < avg_blog) /* unlucky bastard */
1511                         sd->cng_level = NET_RX_DROP;
1512 #endif
1513         } else if (avg_blog > lo_cong) {
1514                 sd->cng_level = NET_RX_CN_MOD;
1515 #ifdef RAND_LIE
1516                 rd = net_random();
1517                 rq = rd % netdev_max_backlog;
1518                         if (rq < avg_blog) /* unlucky bastard */
1519                                 sd->cng_level = NET_RX_CN_HIGH;
1520 #endif
1521         } else if (avg_blog > no_cong)
1522                 sd->cng_level = NET_RX_CN_LOW;
1523         else  /* no congestion */
1524                 sd->cng_level = NET_RX_SUCCESS;
1525
1526         sd->avg_blog = avg_blog;
1527 }
1528
1529 #ifdef OFFLINE_SAMPLE
1530 static void sample_queue(unsigned long dummy)
1531 {
1532 /* 10 ms 0r 1ms -- i don't care -- JHS */
1533         int next_tick = 1;
1534         int cpu = smp_processor_id();
1535
1536         get_sample_stats(cpu);
1537         next_tick += jiffies;
1538         mod_timer(&samp_timer, next_tick);
1539 }
1540 #endif
1541
1542
1543 /**
1544  *      netif_rx        -       post buffer to the network code
1545  *      @skb: buffer to post
1546  *
1547  *      This function receives a packet from a device driver and queues it for
1548  *      the upper (protocol) levels to process.  It always succeeds. The buffer
1549  *      may be dropped during processing for congestion control or by the
1550  *      protocol layers.
1551  *
1552  *      return values:
1553  *      NET_RX_SUCCESS  (no congestion)
1554  *      NET_RX_CN_LOW   (low congestion)
1555  *      NET_RX_CN_MOD   (moderate congestion)
1556  *      NET_RX_CN_HIGH  (high congestion)
1557  *      NET_RX_DROP     (packet was dropped)
1558  *
1559  */
1560
1561 int netif_rx(struct sk_buff *skb)
1562 {
1563         int this_cpu;
1564         struct softnet_data *queue;
1565         unsigned long flags;
1566
1567 #ifdef CONFIG_NETPOLL_RX
1568         if (skb->dev->netpoll_rx && netpoll_rx(skb)) {
1569                 kfree_skb(skb);
1570                 return NET_RX_DROP;
1571         }
1572 #endif
1573         
1574         if (!skb->stamp.tv_sec)
1575                 net_timestamp(&skb->stamp);
1576
1577         /*
1578          * The code is rearranged so that the path is the most
1579          * short when CPU is congested, but is still operating.
1580          */
1581         local_irq_save(flags);
1582         this_cpu = smp_processor_id();
1583         queue = &__get_cpu_var(softnet_data);
1584
1585         __get_cpu_var(netdev_rx_stat).total++;
1586         if (queue->input_pkt_queue.qlen <= netdev_max_backlog) {
1587                 if (queue->input_pkt_queue.qlen) {
1588                         if (queue->throttle)
1589                                 goto drop;
1590
1591 enqueue:
1592                         dev_hold(skb->dev);
1593                         __skb_queue_tail(&queue->input_pkt_queue, skb);
1594 #ifndef OFFLINE_SAMPLE
1595                         get_sample_stats(this_cpu);
1596 #endif
1597                         local_irq_restore(flags);
1598                         return queue->cng_level;
1599                 }
1600
1601                 if (queue->throttle) {
1602                         queue->throttle = 0;
1603 #ifdef CONFIG_NET_HW_FLOWCONTROL
1604                         if (atomic_dec_and_test(&netdev_dropping))
1605                                 netdev_wakeup();
1606 #endif
1607                 }
1608
1609                 netif_rx_schedule(&queue->backlog_dev);
1610                 goto enqueue;
1611         }
1612
1613         if (!queue->throttle) {
1614                 queue->throttle = 1;
1615                 __get_cpu_var(netdev_rx_stat).throttled++;
1616 #ifdef CONFIG_NET_HW_FLOWCONTROL
1617                 atomic_inc(&netdev_dropping);
1618 #endif
1619         }
1620
1621 drop:
1622         __get_cpu_var(netdev_rx_stat).dropped++;
1623         local_irq_restore(flags);
1624
1625         kfree_skb(skb);
1626         return NET_RX_DROP;
1627 }
1628
1629 static __inline__ void skb_bond(struct sk_buff *skb)
1630 {
1631         struct net_device *dev = skb->dev;
1632
1633         if (dev->master) {
1634                 skb->real_dev = skb->dev;
1635                 skb->dev = dev->master;
1636         }
1637 }
1638
1639 static void net_tx_action(struct softirq_action *h)
1640 {
1641         struct softnet_data *sd = &__get_cpu_var(softnet_data);
1642
1643         if (sd->completion_queue) {
1644                 struct sk_buff *clist;
1645
1646                 local_irq_disable();
1647                 clist = sd->completion_queue;
1648                 sd->completion_queue = NULL;
1649                 local_irq_enable();
1650
1651                 while (clist) {
1652                         struct sk_buff *skb = clist;
1653                         clist = clist->next;
1654
1655                         BUG_TRAP(!atomic_read(&skb->users));
1656                         __kfree_skb(skb);
1657                 }
1658         }
1659
1660         if (sd->output_queue) {
1661                 struct net_device *head;
1662
1663                 local_irq_disable();
1664                 head = sd->output_queue;
1665                 sd->output_queue = NULL;
1666                 local_irq_enable();
1667
1668                 while (head) {
1669                         struct net_device *dev = head;
1670                         head = head->next_sched;
1671
1672                         smp_mb__before_clear_bit();
1673                         clear_bit(__LINK_STATE_SCHED, &dev->state);
1674
1675                         if (spin_trylock(&dev->queue_lock)) {
1676                                 qdisc_run(dev);
1677                                 spin_unlock(&dev->queue_lock);
1678                         } else {
1679                                 netif_schedule(dev);
1680                         }
1681                 }
1682         }
1683 }
1684
1685 static __inline__ int deliver_skb(struct sk_buff *skb,
1686                                   struct packet_type *pt_prev, int last)
1687 {
1688         atomic_inc(&skb->users);
1689         return pt_prev->func(skb, skb->dev, pt_prev);
1690 }
1691
1692
1693 #if defined(CONFIG_BRIDGE) || defined (CONFIG_BRIDGE_MODULE)
1694 int (*br_handle_frame_hook)(struct sk_buff *skb);
1695
1696 static __inline__ int handle_bridge(struct sk_buff *skb,
1697                                      struct packet_type *pt_prev)
1698 {
1699         int ret = NET_RX_DROP;
1700         if (pt_prev)
1701                 ret = deliver_skb(skb, pt_prev, 0);
1702
1703         return ret;
1704 }
1705
1706 #endif
1707
1708 static inline int __handle_bridge(struct sk_buff *skb,
1709                         struct packet_type **pt_prev, int *ret)
1710 {
1711 #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
1712 #if defined(CONFIG_MIPS_BRCM)
1713         if (skb->dev->br_port && skb->pkt_type != PACKET_LOOPBACK) {
1714             if (skb->protocol == __constant_htons(ETH_P_PPP_SES)||
1715                 skb->protocol == __constant_htons(ETH_P_PPP_DISC)) {
1716                     if (!memcmp(skb->mac.ethernet->h_dest,skb->dev->dev_addr,ETH_ALEN))
1717                         goto skipbridge;
1718             }
1719             *ret = handle_bridge(skb, *pt_prev);
1720             if (br_handle_frame_hook(skb) == 0)
1721                 return 1;
1722
1723             *pt_prev = NULL;
1724         }
1725 skipbridge:
1726 #else
1727         if (skb->dev->br_port && skb->pkt_type != PACKET_LOOPBACK) {
1728                 *ret = handle_bridge(skb, *pt_prev);
1729                 if (br_handle_frame_hook(skb) == 0)
1730                         return 1;
1731
1732                 *pt_prev = NULL;
1733         }
1734 #endif
1735 #endif
1736         return 0;
1737 }
1738
1739
1740 #ifdef CONFIG_NET_CLS_ACT
1741 /* TODO: Maybe we should just force sch_ingress to be compiled in
1742  * when CONFIG_NET_CLS_ACT is? otherwise some useless instructions
1743  * a compare and 2 stores extra right now if we dont have it on
1744  * but have CONFIG_NET_CLS_ACT
1745  * NOTE: This doesnt stop any functionality; if you dont have 
1746  * the ingress scheduler, you just cant add policies on ingress.
1747  *
1748  */
1749 int ing_filter(struct sk_buff *skb) 
1750 {
1751         struct Qdisc *q;
1752         struct net_device *dev = skb->dev;
1753         int result = TC_ACT_OK;
1754         
1755         if (dev->qdisc_ingress) {
1756                 __u32 ttl = (__u32) G_TC_RTTL(skb->tc_verd);
1757                 if (MAX_RED_LOOP < ttl++) {
1758                         printk("Redir loop detected Dropping packet (%s->%s)\n",
1759                                 skb->input_dev?skb->input_dev->name:"??",skb->dev->name);
1760                         return TC_ACT_SHOT;
1761                 }
1762
1763                 skb->tc_verd = SET_TC_RTTL(skb->tc_verd,ttl);
1764
1765                 skb->tc_verd = SET_TC_AT(skb->tc_verd,AT_INGRESS);
1766                 if (NULL == skb->input_dev) {
1767                         skb->input_dev = skb->dev;
1768                         printk("ing_filter:  fixed  %s out %s\n",skb->input_dev->name,skb->dev->name);
1769                 }
1770                 spin_lock(&dev->ingress_lock);
1771                 if ((q = dev->qdisc_ingress) != NULL)
1772                         result = q->enqueue(skb, q);
1773                 spin_unlock(&dev->ingress_lock);
1774
1775         }
1776
1777         return result;
1778 }
1779 #endif
1780
1781 int netif_receive_skb(struct sk_buff *skb)
1782 {
1783         struct packet_type *ptype, *pt_prev;
1784         int ret = NET_RX_DROP;
1785         unsigned short type;
1786
1787 #ifdef CONFIG_NETPOLL_RX
1788         if (skb->dev->netpoll_rx && skb->dev->poll && netpoll_rx(skb)) {
1789                 kfree_skb(skb);
1790                 return NET_RX_DROP;
1791         }
1792 #endif
1793
1794         if (!skb->stamp.tv_sec)
1795                 net_timestamp(&skb->stamp);
1796
1797         skb_bond(skb);
1798
1799         __get_cpu_var(netdev_rx_stat).total++;
1800
1801         skb->h.raw = skb->nh.raw = skb->data;
1802         skb->mac_len = skb->nh.raw - skb->mac.raw;
1803
1804         pt_prev = NULL;
1805 #ifdef CONFIG_NET_CLS_ACT
1806         if (skb->tc_verd & TC_NCLS) {
1807                 skb->tc_verd = CLR_TC_NCLS(skb->tc_verd);
1808                 rcu_read_lock();
1809                 goto ncls;
1810         }
1811  #endif
1812
1813         rcu_read_lock();
1814         list_for_each_entry_rcu(ptype, &ptype_all, list) {
1815                 if (!ptype->dev || ptype->dev == skb->dev) {
1816                         if (pt_prev) 
1817                                 ret = deliver_skb(skb, pt_prev, 0);
1818                         pt_prev = ptype;
1819                 }
1820         }
1821
1822 #ifdef CONFIG_NET_CLS_ACT
1823         if (pt_prev) {
1824                 atomic_inc(&skb->users);
1825                 ret = pt_prev->func(skb, skb->dev, pt_prev);
1826                 pt_prev = NULL; /* noone else should process this after*/
1827         } else {
1828                 skb->tc_verd = SET_TC_OK2MUNGE(skb->tc_verd);
1829         }
1830
1831         ret = ing_filter(skb);
1832
1833         if (ret == TC_ACT_SHOT || (ret == TC_ACT_STOLEN)) {
1834                 kfree_skb(skb);
1835                 goto out;
1836         }
1837
1838         skb->tc_verd = 0;
1839 ncls:
1840 #endif
1841
1842         handle_diverter(skb);
1843
1844         if (__handle_bridge(skb, &pt_prev, &ret))
1845                 goto out;
1846
1847         type = skb->protocol;
1848         list_for_each_entry_rcu(ptype, &ptype_base[ntohs(type)&15], list) {
1849                 if (ptype->type == type &&
1850                     (!ptype->dev || ptype->dev == skb->dev)) {
1851                         if (pt_prev) 
1852                                 ret = deliver_skb(skb, pt_prev, 0);
1853                         pt_prev = ptype;
1854                 }
1855         }
1856
1857         if (pt_prev) {
1858                 ret = pt_prev->func(skb, skb->dev, pt_prev);
1859         } else {
1860                 kfree_skb(skb);
1861                 /* Jamal, now you will not able to escape explaining
1862                  * me how you were going to use this. :-)
1863                  */
1864                 ret = NET_RX_DROP;
1865         }
1866
1867 out:
1868         rcu_read_unlock();
1869         return ret;
1870 }
1871
1872 static int process_backlog(struct net_device *backlog_dev, int *budget)
1873 {
1874         int work = 0;
1875         int quota = min(backlog_dev->quota, *budget);
1876         struct softnet_data *queue = &__get_cpu_var(softnet_data);
1877         unsigned long start_time = jiffies;
1878
1879         for (;;) {
1880                 struct sk_buff *skb;
1881                 struct net_device *dev;
1882
1883                 local_irq_disable();
1884                 skb = __skb_dequeue(&queue->input_pkt_queue);
1885                 if (!skb)
1886                         goto job_done;
1887                 local_irq_enable();
1888
1889                 dev = skb->dev;
1890
1891                 netif_receive_skb(skb);
1892
1893                 dev_put(dev);
1894
1895                 work++;
1896
1897                 if (work >= quota || jiffies - start_time > 1)
1898                         break;
1899
1900 #ifdef CONFIG_NET_HW_FLOWCONTROL
1901                 if (queue->throttle &&
1902                     queue->input_pkt_queue.qlen < no_cong_thresh ) {
1903                         queue->throttle = 0;
1904                         if (atomic_dec_and_test(&netdev_dropping)) {
1905                                 netdev_wakeup();
1906                                 break;
1907                         }
1908                 }
1909 #endif
1910         }
1911
1912         backlog_dev->quota -= work;
1913         *budget -= work;
1914         return -1;
1915
1916 job_done:
1917         backlog_dev->quota -= work;
1918         *budget -= work;
1919
1920         list_del(&backlog_dev->poll_list);
1921         smp_mb__before_clear_bit();
1922         netif_poll_enable(backlog_dev);
1923
1924         if (queue->throttle) {
1925                 queue->throttle = 0;
1926 #ifdef CONFIG_NET_HW_FLOWCONTROL
1927                 if (atomic_dec_and_test(&netdev_dropping))
1928                         netdev_wakeup();
1929 #endif
1930         }
1931         local_irq_enable();
1932         return 0;
1933 }
1934
1935 static void net_rx_action(struct softirq_action *h)
1936 {
1937         struct softnet_data *queue = &__get_cpu_var(softnet_data);
1938         unsigned long start_time = jiffies;
1939         int budget = netdev_max_backlog;
1940
1941         
1942         local_irq_disable();
1943
1944         while (!list_empty(&queue->poll_list)) {
1945                 struct net_device *dev;
1946
1947                 if (budget <= 0 || jiffies - start_time > 1)
1948                         goto softnet_break;
1949
1950                 local_irq_enable();
1951
1952                 dev = list_entry(queue->poll_list.next,
1953                                  struct net_device, poll_list);
1954
1955                 if (dev->quota <= 0 || dev->poll(dev, &budget)) {
1956                         local_irq_disable();
1957                         list_del(&dev->poll_list);
1958                         list_add_tail(&dev->poll_list, &queue->poll_list);
1959                         if (dev->quota < 0)
1960                                 dev->quota += dev->weight;
1961                         else
1962                                 dev->quota = dev->weight;
1963                 } else {
1964                         dev_put(dev);
1965                         local_irq_disable();
1966                 }
1967         }
1968 out:
1969         local_irq_enable();
1970         return;
1971
1972 softnet_break:
1973         __get_cpu_var(netdev_rx_stat).time_squeeze++;
1974         __raise_softirq_irqoff(NET_RX_SOFTIRQ);
1975         goto out;
1976 }
1977
1978 static gifconf_func_t * gifconf_list [NPROTO];
1979
1980 /**
1981  *      register_gifconf        -       register a SIOCGIF handler
1982  *      @family: Address family
1983  *      @gifconf: Function handler
1984  *
1985  *      Register protocol dependent address dumping routines. The handler
1986  *      that is passed must not be freed or reused until it has been replaced
1987  *      by another handler.
1988  */
1989 int register_gifconf(unsigned int family, gifconf_func_t * gifconf)
1990 {
1991         if (family >= NPROTO)
1992                 return -EINVAL;
1993         gifconf_list[family] = gifconf;
1994         return 0;
1995 }
1996
1997
1998 /*
1999  *      Map an interface index to its name (SIOCGIFNAME)
2000  */
2001
2002 /*
2003  *      We need this ioctl for efficient implementation of the
2004  *      if_indextoname() function required by the IPv6 API.  Without
2005  *      it, we would have to search all the interfaces to find a
2006  *      match.  --pb
2007  */
2008
2009 static int dev_ifname(struct ifreq __user *arg)
2010 {
2011         struct net_device *dev;
2012         struct ifreq ifr;
2013
2014         /*
2015          *      Fetch the caller's info block.
2016          */
2017
2018         if (copy_from_user(&ifr, arg, sizeof(struct ifreq)))
2019                 return -EFAULT;
2020
2021         read_lock(&dev_base_lock);
2022         dev = __dev_get_by_index(ifr.ifr_ifindex);
2023         if (!dev) {
2024                 read_unlock(&dev_base_lock);
2025                 return -ENODEV;
2026         }
2027
2028         strcpy(ifr.ifr_name, dev->name);
2029         read_unlock(&dev_base_lock);
2030
2031         if (copy_to_user(arg, &ifr, sizeof(struct ifreq)))
2032                 return -EFAULT;
2033         return 0;
2034 }
2035
2036 /*
2037  *      Perform a SIOCGIFCONF call. This structure will change
2038  *      size eventually, and there is nothing I can do about it.
2039  *      Thus we will need a 'compatibility mode'.
2040  */
2041
2042 static int dev_ifconf(char __user *arg)
2043 {
2044         struct ifconf ifc;
2045         struct net_device *dev;
2046         char __user *pos;
2047         int len;
2048         int total;
2049         int i;
2050
2051         /*
2052          *      Fetch the caller's info block.
2053          */
2054
2055         if (copy_from_user(&ifc, arg, sizeof(struct ifconf)))
2056                 return -EFAULT;
2057
2058         pos = ifc.ifc_buf;
2059         len = ifc.ifc_len;
2060
2061         /*
2062          *      Loop over the interfaces, and write an info block for each.
2063          */
2064
2065         total = 0;
2066         for (dev = dev_base; dev; dev = dev->next) {
2067                 for (i = 0; i < NPROTO; i++) {
2068                         if (gifconf_list[i]) {
2069                                 int done;
2070                                 if (!pos)
2071                                         done = gifconf_list[i](dev, NULL, 0);
2072                                 else
2073                                         done = gifconf_list[i](dev, pos + total,
2074                                                                len - total);
2075                                 if (done < 0)
2076                                         return -EFAULT;
2077                                 total += done;
2078                         }
2079                 }
2080         }
2081
2082         /*
2083          *      All done.  Write the updated control block back to the caller.
2084          */
2085         ifc.ifc_len = total;
2086
2087         /*
2088          *      Both BSD and Solaris return 0 here, so we do too.
2089          */
2090         return copy_to_user(arg, &ifc, sizeof(struct ifconf)) ? -EFAULT : 0;
2091 }
2092
2093 #ifdef CONFIG_PROC_FS
2094 /*
2095  *      This is invoked by the /proc filesystem handler to display a device
2096  *      in detail.
2097  */
2098 static __inline__ struct net_device *dev_get_idx(loff_t pos)
2099 {
2100         struct net_device *dev;
2101         loff_t i;
2102
2103         for (i = 0, dev = dev_base; dev && i < pos; ++i, dev = dev->next);
2104
2105         return i == pos ? dev : NULL;
2106 }
2107
2108 void *dev_seq_start(struct seq_file *seq, loff_t *pos)
2109 {
2110         read_lock(&dev_base_lock);
2111         return *pos ? dev_get_idx(*pos - 1) : SEQ_START_TOKEN;
2112 }
2113
2114 void *dev_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2115 {
2116         ++*pos;
2117         return v == SEQ_START_TOKEN ? dev_base : ((struct net_device *)v)->next;
2118 }
2119
2120 void dev_seq_stop(struct seq_file *seq, void *v)
2121 {
2122         read_unlock(&dev_base_lock);
2123 }
2124
2125 static void dev_seq_printf_stats(struct seq_file *seq, struct net_device *dev)
2126 {
2127         if (dev->get_stats) {
2128                 struct net_device_stats *stats = dev->get_stats(dev);
2129
2130                 seq_printf(seq, "%6s:%8lu %7lu %4lu %4lu %4lu %5lu %10lu %9lu "
2131                                 "%8lu %7lu %4lu %4lu %4lu %5lu %7lu %10lu\n",
2132                            dev->name, stats->rx_bytes, stats->rx_packets,
2133                            stats->rx_errors,
2134                            stats->rx_dropped + stats->rx_missed_errors,
2135                            stats->rx_fifo_errors,
2136                            stats->rx_length_errors + stats->rx_over_errors +
2137                              stats->rx_crc_errors + stats->rx_frame_errors,
2138                            stats->rx_compressed, stats->multicast,
2139                            stats->tx_bytes, stats->tx_packets,
2140                            stats->tx_errors, stats->tx_dropped,
2141                            stats->tx_fifo_errors, stats->collisions,
2142                            stats->tx_carrier_errors +
2143                              stats->tx_aborted_errors +
2144                              stats->tx_window_errors +
2145                              stats->tx_heartbeat_errors,
2146                            stats->tx_compressed);
2147         } else
2148                 seq_printf(seq, "%6s: No statistics available.\n", dev->name);
2149 }
2150
2151 /*
2152  *      Called from the PROCfs module. This now uses the new arbitrary sized
2153  *      /proc/net interface to create /proc/net/dev
2154  */
2155 static int dev_seq_show(struct seq_file *seq, void *v)
2156 {
2157         if (v == SEQ_START_TOKEN)
2158                 seq_puts(seq, "Inter-|   Receive                            "
2159                               "                    |  Transmit\n"
2160                               " face |bytes    packets errs drop fifo frame "
2161                               "compressed multicast|bytes    packets errs "
2162                               "drop fifo colls carrier compressed\n");
2163         else
2164                 dev_seq_printf_stats(seq, v);
2165         return 0;
2166 }
2167
2168 static struct netif_rx_stats *softnet_get_online(loff_t *pos)
2169 {
2170         struct netif_rx_stats *rc = NULL;
2171
2172         while (*pos < NR_CPUS)
2173                 if (cpu_online(*pos)) {
2174                         rc = &per_cpu(netdev_rx_stat, *pos);
2175                         break;
2176                 } else
2177                         ++*pos;
2178         return rc;
2179 }
2180
2181 static void *softnet_seq_start(struct seq_file *seq, loff_t *pos)
2182 {
2183         return softnet_get_online(pos);
2184 }
2185
2186 static void *softnet_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2187 {
2188         ++*pos;
2189         return softnet_get_online(pos);
2190 }
2191
2192 static void softnet_seq_stop(struct seq_file *seq, void *v)
2193 {
2194 }
2195
2196 static int softnet_seq_show(struct seq_file *seq, void *v)
2197 {
2198         struct netif_rx_stats *s = v;
2199
2200         seq_printf(seq, "%08x %08x %08x %08x %08x %08x %08x %08x %08x\n",
2201                    s->total, s->dropped, s->time_squeeze, s->throttled,
2202                    s->fastroute_hit, s->fastroute_success, s->fastroute_defer,
2203                    s->fastroute_deferred_out,
2204 #if 0
2205                    s->fastroute_latency_reduction
2206 #else
2207                    s->cpu_collision
2208 #endif
2209                   );
2210         return 0;
2211 }
2212
2213 static struct seq_operations dev_seq_ops = {
2214         .start = dev_seq_start,
2215         .next  = dev_seq_next,
2216         .stop  = dev_seq_stop,
2217         .show  = dev_seq_show,
2218 };
2219
2220 static int dev_seq_open(struct inode *inode, struct file *file)
2221 {
2222         return seq_open(file, &dev_seq_ops);
2223 }
2224
2225 static struct file_operations dev_seq_fops = {
2226         .owner   = THIS_MODULE,
2227         .open    = dev_seq_open,
2228         .read    = seq_read,
2229         .llseek  = seq_lseek,
2230         .release = seq_release,
2231 };
2232
2233 static struct seq_operations softnet_seq_ops = {
2234         .start = softnet_seq_start,
2235         .next  = softnet_seq_next,
2236         .stop  = softnet_seq_stop,
2237         .show  = softnet_seq_show,
2238 };
2239
2240 static int softnet_seq_open(struct inode *inode, struct file *file)
2241 {
2242         return seq_open(file, &softnet_seq_ops);
2243 }
2244
2245 static struct file_operations softnet_seq_fops = {
2246         .owner   = THIS_MODULE,
2247         .open    = softnet_seq_open,
2248         .read    = seq_read,
2249         .llseek  = seq_lseek,
2250         .release = seq_release,
2251 };
2252
2253 #ifdef WIRELESS_EXT
2254 extern int wireless_proc_init(void);
2255 #else
2256 #define wireless_proc_init() 0
2257 #endif
2258
2259 static int __init dev_proc_init(void)
2260 {
2261         int rc = -ENOMEM;
2262
2263         if (!proc_net_fops_create("dev", S_IRUGO, &dev_seq_fops))
2264                 goto out;
2265         if (!proc_net_fops_create("softnet_stat", S_IRUGO, &softnet_seq_fops))
2266                 goto out_dev;
2267         if (wireless_proc_init())
2268                 goto out_softnet;
2269         rc = 0;
2270 out:
2271         return rc;
2272 out_softnet:
2273         proc_net_remove("softnet_stat");
2274 out_dev:
2275         proc_net_remove("dev");
2276         goto out;
2277 }
2278 #else
2279 #define dev_proc_init() 0
2280 #endif  /* CONFIG_PROC_FS */
2281
2282
2283 /**
2284  *      netdev_set_master       -       set up master/slave pair
2285  *      @slave: slave device
2286  *      @master: new master device
2287  *
2288  *      Changes the master device of the slave. Pass %NULL to break the
2289  *      bonding. The caller must hold the RTNL semaphore. On a failure
2290  *      a negative errno code is returned. On success the reference counts
2291  *      are adjusted, %RTM_NEWLINK is sent to the routing socket and the
2292  *      function returns zero.
2293  */
2294 int netdev_set_master(struct net_device *slave, struct net_device *master)
2295 {
2296         struct net_device *old = slave->master;
2297
2298         ASSERT_RTNL();
2299
2300         if (master) {
2301                 if (old)
2302                         return -EBUSY;
2303                 dev_hold(master);
2304         }
2305
2306         slave->master = master;
2307         
2308         synchronize_net();
2309
2310         if (old)
2311                 dev_put(old);
2312
2313         if (master)
2314                 slave->flags |= IFF_SLAVE;
2315         else
2316                 slave->flags &= ~IFF_SLAVE;
2317
2318         rtmsg_ifinfo(RTM_NEWLINK, slave, IFF_SLAVE);
2319         return 0;
2320 }
2321
2322 /**
2323  *      dev_set_promiscuity     - update promiscuity count on a device
2324  *      @dev: device
2325  *      @inc: modifier
2326  *
2327  *      Add or remove promsicuity from a device. While the count in the device
2328  *      remains above zero the interface remains promiscuous. Once it hits zero
2329  *      the device reverts back to normal filtering operation. A negative inc
2330  *      value is used to drop promiscuity on the device.
2331  */
2332 void dev_set_promiscuity(struct net_device *dev, int inc)
2333 {
2334         unsigned short old_flags = dev->flags;
2335
2336         dev->flags |= IFF_PROMISC;
2337         if ((dev->promiscuity += inc) == 0)
2338                 dev->flags &= ~IFF_PROMISC;
2339         if (dev->flags ^ old_flags) {
2340                 dev_mc_upload(dev);
2341                 printk(KERN_INFO "device %s %s promiscuous mode\n",
2342                        dev->name, (dev->flags & IFF_PROMISC) ? "entered" :
2343                                                                "left");
2344         }
2345 }
2346
2347 /**
2348  *      dev_set_allmulti        - update allmulti count on a device
2349  *      @dev: device
2350  *      @inc: modifier
2351  *
2352  *      Add or remove reception of all multicast frames to a device. While the
2353  *      count in the device remains above zero the interface remains listening
2354  *      to all interfaces. Once it hits zero the device reverts back to normal
2355  *      filtering operation. A negative @inc value is used to drop the counter
2356  *      when releasing a resource needing all multicasts.
2357  */
2358
2359 void dev_set_allmulti(struct net_device *dev, int inc)
2360 {
2361         unsigned short old_flags = dev->flags;
2362
2363         dev->flags |= IFF_ALLMULTI;
2364         if ((dev->allmulti += inc) == 0)
2365                 dev->flags &= ~IFF_ALLMULTI;
2366         if (dev->flags ^ old_flags)
2367                 dev_mc_upload(dev);
2368 }
2369
2370 unsigned dev_get_flags(const struct net_device *dev)
2371 {
2372         unsigned flags;
2373
2374         flags = (dev->flags & ~(IFF_PROMISC |
2375                                 IFF_ALLMULTI |
2376                                 IFF_RUNNING)) | 
2377                 (dev->gflags & (IFF_PROMISC |
2378                                 IFF_ALLMULTI));
2379
2380         if (netif_running(dev) && netif_carrier_ok(dev))
2381                 flags |= IFF_RUNNING;
2382
2383         return flags;
2384 }
2385
2386 int dev_change_flags(struct net_device *dev, unsigned flags)
2387 {
2388         int ret;
2389         int old_flags = dev->flags;
2390
2391         /*
2392          *      Set the flags on our device.
2393          */
2394
2395         dev->flags = (flags & (IFF_DEBUG | IFF_NOTRAILERS | IFF_NOARP |
2396                                IFF_DYNAMIC | IFF_MULTICAST | IFF_PORTSEL |
2397                                IFF_AUTOMEDIA)) |
2398                      (dev->flags & (IFF_UP | IFF_VOLATILE | IFF_PROMISC |
2399                                     IFF_ALLMULTI));
2400
2401         /*
2402          *      Load in the correct multicast list now the flags have changed.
2403          */
2404
2405         dev_mc_upload(dev);
2406
2407         /*
2408          *      Have we downed the interface. We handle IFF_UP ourselves
2409          *      according to user attempts to set it, rather than blindly
2410          *      setting it.
2411          */
2412
2413         ret = 0;
2414         if ((old_flags ^ flags) & IFF_UP) {     /* Bit is different  ? */
2415                 ret = ((old_flags & IFF_UP) ? dev_close : dev_open)(dev);
2416
2417                 if (!ret)
2418                         dev_mc_upload(dev);
2419         }
2420
2421         if (dev->flags & IFF_UP &&
2422             ((old_flags ^ dev->flags) &~ (IFF_UP | IFF_PROMISC | IFF_ALLMULTI |
2423                                           IFF_VOLATILE)))
2424                 notifier_call_chain(&netdev_chain, NETDEV_CHANGE, dev);
2425
2426         if ((flags ^ dev->gflags) & IFF_PROMISC) {
2427                 int inc = (flags & IFF_PROMISC) ? +1 : -1;
2428                 dev->gflags ^= IFF_PROMISC;
2429                 dev_set_promiscuity(dev, inc);
2430         }
2431
2432         /* NOTE: order of synchronization of IFF_PROMISC and IFF_ALLMULTI
2433            is important. Some (broken) drivers set IFF_PROMISC, when
2434            IFF_ALLMULTI is requested not asking us and not reporting.
2435          */
2436         if ((flags ^ dev->gflags) & IFF_ALLMULTI) {
2437                 int inc = (flags & IFF_ALLMULTI) ? +1 : -1;
2438                 dev->gflags ^= IFF_ALLMULTI;
2439                 dev_set_allmulti(dev, inc);
2440         }
2441
2442         if (old_flags ^ dev->flags)
2443                 rtmsg_ifinfo(RTM_NEWLINK, dev, old_flags ^ dev->flags);
2444
2445         return ret;
2446 }
2447
2448 int dev_set_mtu(struct net_device *dev, int new_mtu)
2449 {
2450         int err;
2451
2452         if (new_mtu == dev->mtu)
2453                 return 0;
2454
2455         /*      MTU must be positive.    */
2456         if (new_mtu < 0)
2457                 return -EINVAL;
2458
2459         if (!netif_device_present(dev))
2460                 return -ENODEV;
2461
2462         err = 0;
2463         if (dev->change_mtu)
2464                 err = dev->change_mtu(dev, new_mtu);
2465         else
2466                 dev->mtu = new_mtu;
2467         if (!err && dev->flags & IFF_UP)
2468                 notifier_call_chain(&netdev_chain,
2469                                     NETDEV_CHANGEMTU, dev);
2470         return err;
2471 }
2472
2473
2474 /*
2475  *      Perform the SIOCxIFxxx calls.
2476  */
2477 static int dev_ifsioc(struct ifreq *ifr, unsigned int cmd)
2478 {
2479         int err;
2480         struct net_device *dev = __dev_get_by_name(ifr->ifr_name);
2481
2482         if (!dev)
2483                 return -ENODEV;
2484
2485         switch (cmd) {
2486                 case SIOCGIFFLAGS:      /* Get interface flags */
2487                         ifr->ifr_flags = dev_get_flags(dev);
2488                         return 0;
2489
2490                 case SIOCSIFFLAGS:      /* Set interface flags */
2491                         return dev_change_flags(dev, ifr->ifr_flags);
2492
2493                 case SIOCGIFMETRIC:     /* Get the metric on the interface
2494                                            (currently unused) */
2495                         ifr->ifr_metric = 0;
2496                         return 0;
2497
2498                 case SIOCSIFMETRIC:     /* Set the metric on the interface
2499                                            (currently unused) */
2500                         return -EOPNOTSUPP;
2501
2502 #if defined(CONFIG_MIPS_BRCM)
2503                 case SIOCGIFTRANSSTART:
2504                    ifr->ifr_ifru.ifru_ivalue = dev->trans_start;
2505                    return 0;
2506 #endif
2507
2508                 case SIOCGIFMTU:        /* Get the MTU of a device */
2509                         ifr->ifr_mtu = dev->mtu;
2510                         return 0;
2511
2512 #if defined(CONFIG_MIPS_BRCM)
2513                 case SIOCCIFSTATS:      /* Clean up the Stats of a device */
2514                         {
2515                         struct net_device_stats * pStats = dev->get_stats(dev);
2516                         memset(pStats, 0, sizeof(struct net_device_stats));
2517                         }
2518                         return 0;
2519 #endif
2520
2521                 case SIOCSIFMTU:        /* Set the MTU of a device */
2522                         return dev_set_mtu(dev, ifr->ifr_mtu);
2523
2524                 case SIOCGIFHWADDR:
2525                         memcpy(ifr->ifr_hwaddr.sa_data, dev->dev_addr,
2526                                min(sizeof ifr->ifr_hwaddr.sa_data, (size_t) dev->addr_len));
2527                         ifr->ifr_hwaddr.sa_family = dev->type;
2528                         return 0;
2529
2530                 case SIOCSIFHWADDR:
2531                         if (!dev->set_mac_address)
2532                                 return -EOPNOTSUPP;
2533                         if (ifr->ifr_hwaddr.sa_family != dev->type)
2534                                 return -EINVAL;
2535                         if (!netif_device_present(dev))
2536                                 return -ENODEV;
2537                         err = dev->set_mac_address(dev, &ifr->ifr_hwaddr);
2538                         if (!err)
2539                                 notifier_call_chain(&netdev_chain,
2540                                                     NETDEV_CHANGEADDR, dev);
2541                         return err;
2542
2543                 case SIOCSIFHWBROADCAST:
2544                         if (ifr->ifr_hwaddr.sa_family != dev->type)
2545                                 return -EINVAL;
2546                         memcpy(dev->broadcast, ifr->ifr_hwaddr.sa_data,
2547                                min(sizeof ifr->ifr_hwaddr.sa_data, (size_t) dev->addr_len));
2548                         notifier_call_chain(&netdev_chain,
2549                                             NETDEV_CHANGEADDR, dev);
2550                         return 0;
2551
2552                 case SIOCGIFMAP:
2553                         ifr->ifr_map.mem_start = dev->mem_start;
2554                         ifr->ifr_map.mem_end   = dev->mem_end;
2555                         ifr->ifr_map.base_addr = dev->base_addr;
2556                         ifr->ifr_map.irq       = dev->irq;
2557                         ifr->ifr_map.dma       = dev->dma;
2558                         ifr->ifr_map.port      = dev->if_port;
2559                         return 0;
2560
2561                 case SIOCSIFMAP:
2562                         if (dev->set_config) {
2563                                 if (!netif_device_present(dev))
2564                                         return -ENODEV;
2565                                 return dev->set_config(dev, &ifr->ifr_map);
2566                         }
2567                         return -EOPNOTSUPP;
2568
2569                 case SIOCADDMULTI:
2570                         if (!dev->set_multicast_list ||
2571                             ifr->ifr_hwaddr.sa_family != AF_UNSPEC)
2572                                 return -EINVAL;
2573                         if (!netif_device_present(dev))
2574                                 return -ENODEV;
2575                         return dev_mc_add(dev, ifr->ifr_hwaddr.sa_data,
2576                                           dev->addr_len, 1);
2577
2578                 case SIOCDELMULTI:
2579                         if (!dev->set_multicast_list ||
2580                             ifr->ifr_hwaddr.sa_family != AF_UNSPEC)
2581                                 return -EINVAL;
2582                         if (!netif_device_present(dev))
2583                                 return -ENODEV;
2584                         return dev_mc_delete(dev, ifr->ifr_hwaddr.sa_data,
2585                                              dev->addr_len, 1);
2586
2587                 case SIOCGIFINDEX:
2588                         ifr->ifr_ifindex = dev->ifindex;
2589                         return 0;
2590
2591                 case SIOCGIFTXQLEN:
2592                         ifr->ifr_qlen = dev->tx_queue_len;
2593                         return 0;
2594
2595                 case SIOCSIFTXQLEN:
2596                         if (ifr->ifr_qlen < 0)
2597                                 return -EINVAL;
2598                         dev->tx_queue_len = ifr->ifr_qlen;
2599                         return 0;
2600
2601                 case SIOCSIFNAME:
2602                         ifr->ifr_newname[IFNAMSIZ-1] = '\0';
2603                         return dev_change_name(dev, ifr->ifr_newname);
2604
2605                 /*
2606                  *      Unknown or private ioctl
2607                  */
2608
2609                 default:
2610                         if ((cmd >= SIOCDEVPRIVATE &&
2611                             cmd <= SIOCDEVPRIVATE + 15) ||
2612                             cmd == SIOCBONDENSLAVE ||
2613                             cmd == SIOCBONDRELEASE ||
2614                             cmd == SIOCBONDSETHWADDR ||
2615                             cmd == SIOCBONDSLAVEINFOQUERY ||
2616                             cmd == SIOCBONDINFOQUERY ||
2617                             cmd == SIOCBONDCHANGEACTIVE ||
2618                             cmd == SIOCGMIIPHY ||
2619                             cmd == SIOCGMIIREG ||
2620                             cmd == SIOCSMIIREG ||
2621                             cmd == SIOCBRADDIF ||
2622                             cmd == SIOCBRDELIF ||
2623                             cmd == SIOCWANDEV) {
2624                                 err = -EOPNOTSUPP;
2625                                 if (dev->do_ioctl) {
2626                                         if (netif_device_present(dev))
2627                                                 err = dev->do_ioctl(dev, ifr,
2628                                                                     cmd);
2629                                         else
2630                                                 err = -ENODEV;
2631                                 }
2632                         } else
2633                                 err = -EINVAL;
2634
2635         }
2636         return err;
2637 }
2638
2639 /*
2640  *      This function handles all "interface"-type I/O control requests. The actual
2641  *      'doing' part of this is dev_ifsioc above.
2642  */
2643
2644 /**
2645  *      dev_ioctl       -       network device ioctl
2646  *      @cmd: command to issue
2647  *      @arg: pointer to a struct ifreq in user space
2648  *
2649  *      Issue ioctl functions to devices. This is normally called by the
2650  *      user space syscall interfaces but can sometimes be useful for
2651  *      other purposes. The return value is the return from the syscall if
2652  *      positive or a negative errno code on error.
2653  */
2654
2655 int dev_ioctl(unsigned int cmd, void __user *arg)
2656 {
2657         struct ifreq ifr;
2658         int ret;
2659         char *colon;
2660
2661         /* One special case: SIOCGIFCONF takes ifconf argument
2662            and requires shared lock, because it sleeps writing
2663            to user space.
2664          */
2665
2666         if (cmd == SIOCGIFCONF) {
2667                 rtnl_shlock();
2668                 ret = dev_ifconf((char __user *) arg);
2669                 rtnl_shunlock();
2670                 return ret;
2671         }
2672         if (cmd == SIOCGIFNAME)
2673                 return dev_ifname((struct ifreq __user *)arg);
2674
2675         if (copy_from_user(&ifr, arg, sizeof(struct ifreq)))
2676                 return -EFAULT;
2677
2678         ifr.ifr_name[IFNAMSIZ-1] = 0;
2679
2680         colon = strchr(ifr.ifr_name, ':');
2681         if (colon)
2682                 *colon = 0;
2683
2684         /*
2685          *      See which interface the caller is talking about.
2686          */
2687
2688         switch (cmd) {
2689                 /*
2690                  *      These ioctl calls:
2691                  *      - can be done by all.
2692                  *      - atomic and do not require locking.
2693                  *      - return a value
2694                  */
2695                 case SIOCGIFFLAGS:
2696                 case SIOCGIFMETRIC:
2697                 case SIOCGIFMTU:
2698                 case SIOCGIFHWADDR:
2699                 case SIOCGIFSLAVE:
2700                 case SIOCGIFMAP:
2701                 case SIOCGIFINDEX:
2702                 case SIOCGIFTXQLEN:
2703 #if defined(CONFIG_MIPS_BRCM)
2704                 case SIOCGIFTRANSSTART:
2705 #endif
2706                         dev_load(ifr.ifr_name);
2707                         read_lock(&dev_base_lock);
2708                         ret = dev_ifsioc(&ifr, cmd);
2709                         read_unlock(&dev_base_lock);
2710                         if (!ret) {
2711                                 if (colon)
2712                                         *colon = ':';
2713                                 if (copy_to_user(arg, &ifr,
2714                                                  sizeof(struct ifreq)))
2715                                         ret = -EFAULT;
2716                         }
2717                         return ret;
2718
2719                 case SIOCETHTOOL:
2720                         dev_load(ifr.ifr_name);
2721                         rtnl_lock();
2722                         ret = dev_ethtool(&ifr);
2723                         rtnl_unlock();
2724                         if (!ret) {
2725                                 if (colon)
2726                                         *colon = ':';
2727                                 if (copy_to_user(arg, &ifr,
2728                                                  sizeof(struct ifreq)))
2729                                         ret = -EFAULT;
2730                         }
2731                         return ret;
2732
2733                 /*
2734                  *      These ioctl calls:
2735                  *      - require superuser power.
2736                  *      - require strict serialization.
2737                  *      - return a value
2738                  */
2739                 case SIOCGMIIPHY:
2740                 case SIOCGMIIREG:
2741                 case SIOCSIFNAME:
2742                         if (!capable(CAP_NET_ADMIN))
2743                                 return -EPERM;
2744                         dev_load(ifr.ifr_name);
2745                         rtnl_lock();
2746                         ret = dev_ifsioc(&ifr, cmd);
2747                         rtnl_unlock();
2748                         if (!ret) {
2749                                 if (colon)
2750                                         *colon = ':';
2751                                 if (copy_to_user(arg, &ifr,
2752                                                  sizeof(struct ifreq)))
2753                                         ret = -EFAULT;
2754                         }
2755                         return ret;
2756
2757                 /*
2758                  *      These ioctl calls:
2759                  *      - require superuser power.
2760                  *      - require strict serialization.
2761                  *      - do not return a value
2762                  */
2763                 case SIOCSIFFLAGS:
2764                 case SIOCSIFMETRIC:
2765                 case SIOCSIFMTU:
2766                 case SIOCSIFMAP:
2767                 case SIOCSIFHWADDR:
2768                 case SIOCSIFSLAVE:
2769                 case SIOCADDMULTI:
2770                 case SIOCDELMULTI:
2771                 case SIOCSIFHWBROADCAST:
2772                 case SIOCSIFTXQLEN:
2773                 case SIOCSMIIREG:
2774                 case SIOCBONDENSLAVE:
2775                 case SIOCBONDRELEASE:
2776                 case SIOCBONDSETHWADDR:
2777                 case SIOCBONDSLAVEINFOQUERY:
2778                 case SIOCBONDINFOQUERY:
2779                 case SIOCBONDCHANGEACTIVE:
2780                 case SIOCBRADDIF:
2781                 case SIOCBRDELIF:
2782                         if (!capable(CAP_NET_ADMIN))
2783                                 return -EPERM;
2784                         dev_load(ifr.ifr_name);
2785                         rtnl_lock();
2786                         ret = dev_ifsioc(&ifr, cmd);
2787                         rtnl_unlock();
2788                         return ret;
2789
2790                 case SIOCGIFMEM:
2791                         /* Get the per device memory space. We can add this but
2792                          * currently do not support it */
2793                 case SIOCSIFMEM:
2794                         /* Set the per device memory buffer space.
2795                          * Not applicable in our case */
2796                 case SIOCSIFLINK:
2797                         return -EINVAL;
2798
2799                 /*
2800                  *      Unknown or private ioctl.
2801                  */
2802                 default:
2803                         if (cmd == SIOCWANDEV ||
2804 #if defined(CONFIG_MIPS_BRCM)
2805                cmd == SIOCCIFSTATS ||
2806 #endif                
2807                             (cmd >= SIOCDEVPRIVATE &&
2808                              cmd <= SIOCDEVPRIVATE + 15)) {
2809                                 dev_load(ifr.ifr_name);
2810                                 rtnl_lock();
2811                                 ret = dev_ifsioc(&ifr, cmd);
2812                                 rtnl_unlock();
2813                                 if (!ret && copy_to_user(arg, &ifr,
2814                                                          sizeof(struct ifreq)))
2815                                         ret = -EFAULT;
2816                                 return ret;
2817                         }
2818 #ifdef WIRELESS_EXT
2819                         /* Take care of Wireless Extensions */
2820                         if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) {
2821                                 /* If command is `set a parameter', or
2822                                  * `get the encoding parameters', check if
2823                                  * the user has the right to do it */
2824                                 if (IW_IS_SET(cmd) || cmd == SIOCGIWENCODE) {
2825                                         if (!capable(CAP_NET_ADMIN))
2826                                                 return -EPERM;
2827                                 }
2828                                 dev_load(ifr.ifr_name);
2829                                 rtnl_lock();
2830                                 /* Follow me in net/core/wireless.c */
2831                                 ret = wireless_process_ioctl(&ifr, cmd);
2832                                 rtnl_unlock();
2833                                 if (!ret && IW_IS_GET(cmd) &&
2834                                     copy_to_user(arg, &ifr,
2835                                                  sizeof(struct ifreq)))
2836                                         ret = -EFAULT;
2837                                 return ret;
2838                         }
2839 #endif  /* WIRELESS_EXT */
2840                         return -EINVAL;
2841         }
2842 }
2843
2844
2845 /**
2846  *      dev_new_index   -       allocate an ifindex
2847  *
2848  *      Returns a suitable unique value for a new device interface
2849  *      number.  The caller must hold the rtnl semaphore or the
2850  *      dev_base_lock to be sure it remains unique.
2851  */
2852 int dev_new_index(void)
2853 {
2854         static int ifindex;
2855         for (;;) {
2856                 if (++ifindex <= 0)
2857                         ifindex = 1;
2858                 if (!__dev_get_by_index(ifindex))
2859                         return ifindex;
2860         }
2861 }
2862
2863 static int dev_boot_phase = 1;
2864
2865 /* Delayed registration/unregisteration */
2866 static spinlock_t net_todo_list_lock = SPIN_LOCK_UNLOCKED;
2867 static struct list_head net_todo_list = LIST_HEAD_INIT(net_todo_list);
2868
2869 static inline void net_set_todo(struct net_device *dev)
2870 {
2871         spin_lock(&net_todo_list_lock);
2872         list_add_tail(&dev->todo_list, &net_todo_list);
2873         spin_unlock(&net_todo_list_lock);
2874 }
2875
2876 /**
2877  *      register_netdevice      - register a network device
2878  *      @dev: device to register
2879  *
2880  *      Take a completed network device structure and add it to the kernel
2881  *      interfaces. A %NETDEV_REGISTER message is sent to the netdev notifier
2882  *      chain. 0 is returned on success. A negative errno code is returned
2883  *      on a failure to set up the device, or if the name is a duplicate.
2884  *
2885  *      Callers must hold the rtnl semaphore.  See the comment at the
2886  *      end of Space.c for details about the locking.  You may want
2887  *      register_netdev() instead of this.
2888  *
2889  *      BUGS:
2890  *      The locking appears insufficient to guarantee two parallel registers
2891  *      will not get the same name.
2892  */
2893
2894 int register_netdevice(struct net_device *dev)
2895 {
2896         struct hlist_head *head;
2897         struct hlist_node *p;
2898         int ret;
2899
2900         BUG_ON(dev_boot_phase);
2901         ASSERT_RTNL();
2902
2903         /* When net_device's are persistent, this will be fatal. */
2904         BUG_ON(dev->reg_state != NETREG_UNINITIALIZED);
2905
2906         spin_lock_init(&dev->queue_lock);
2907         spin_lock_init(&dev->xmit_lock);
2908         dev->xmit_lock_owner = -1;
2909 #ifdef CONFIG_NET_CLS_ACT
2910         spin_lock_init(&dev->ingress_lock);
2911 #endif
2912
2913         ret = alloc_divert_blk(dev);
2914         if (ret)
2915                 goto out;
2916
2917         dev->iflink = -1;
2918
2919 #if defined(CONFIG_MIPS_BRCM)
2920         /* Init dev->last_stats in case CONFIG_SYSFS is disabled */
2921         dev->last_stats = dev->get_stats;
2922 #endif
2923
2924         /* Init, if this function is available */
2925         if (dev->init) {
2926                 ret = dev->init(dev);
2927                 if (ret) {
2928                         if (ret > 0)
2929                                 ret = -EIO;
2930                         goto out_err;
2931                 }
2932         }
2933
2934         if (!dev_valid_name(dev->name)) {
2935                 ret = -EINVAL;
2936                 goto out_err;
2937         }
2938
2939         dev->ifindex = dev_new_index();
2940         if (dev->iflink == -1)
2941                 dev->iflink = dev->ifindex;
2942
2943         /* Check for existence of name */
2944         head = dev_name_hash(dev->name);
2945         hlist_for_each(p, head) {
2946                 struct net_device *d
2947                         = hlist_entry(p, struct net_device, name_hlist);
2948                 if (!strncmp(d->name, dev->name, IFNAMSIZ)) {
2949                         ret = -EEXIST;
2950                         goto out_err;
2951                 }
2952         }
2953
2954         /* Fix illegal SG+CSUM combinations. */
2955         if ((dev->features & NETIF_F_SG) &&
2956             !(dev->features & (NETIF_F_IP_CSUM |
2957                                NETIF_F_NO_CSUM |
2958                                NETIF_F_HW_CSUM))) {
2959                 printk("%s: Dropping NETIF_F_SG since no checksum feature.\n",
2960                        dev->name);
2961                 dev->features &= ~NETIF_F_SG;
2962         }
2963
2964         /*
2965          *      nil rebuild_header routine,
2966          *      that should be never called and used as just bug trap.
2967          */
2968
2969         if (!dev->rebuild_header)
2970                 dev->rebuild_header = default_rebuild_header;
2971
2972         /*
2973          *      Default initial state at registry is that the
2974          *      device is present.
2975          */
2976
2977         set_bit(__LINK_STATE_PRESENT, &dev->state);
2978
2979         dev->next = NULL;
2980         dev_init_scheduler(dev);
2981         write_lock_bh(&dev_base_lock);
2982         *dev_tail = dev;
2983         dev_tail = &dev->next;
2984         hlist_add_head(&dev->name_hlist, head);
2985         hlist_add_head(&dev->index_hlist, dev_index_hash(dev->ifindex));
2986         dev_hold(dev);
2987         dev->reg_state = NETREG_REGISTERING;
2988         write_unlock_bh(&dev_base_lock);
2989
2990         /* Notify protocols, that a new device appeared. */
2991         notifier_call_chain(&netdev_chain, NETDEV_REGISTER, dev);
2992
2993         /* Finish registration after unlock */
2994         net_set_todo(dev);
2995         ret = 0;
2996
2997 out:
2998         return ret;
2999 out_err:
3000         free_divert_blk(dev);
3001         goto out;
3002 }
3003
3004 /*
3005  * netdev_wait_allrefs - wait until all references are gone.
3006  *
3007  * This is called when unregistering network devices.
3008  *
3009  * Any protocol or device that holds a reference should register
3010  * for netdevice notification, and cleanup and put back the
3011  * reference if they receive an UNREGISTER event.
3012  * We can get stuck here if buggy protocols don't correctly
3013  * call dev_put. 
3014  */
3015 static void netdev_wait_allrefs(struct net_device *dev)
3016 {
3017         unsigned long rebroadcast_time, warning_time;
3018
3019         rebroadcast_time = warning_time = jiffies;
3020         while (atomic_read(&dev->refcnt) != 0) {
3021                 if (time_after(jiffies, rebroadcast_time + 1 * HZ)) {
3022                         rtnl_shlock();
3023
3024                         /* Rebroadcast unregister notification */
3025                         notifier_call_chain(&netdev_chain,
3026                                             NETDEV_UNREGISTER, dev);
3027
3028                         if (test_bit(__LINK_STATE_LINKWATCH_PENDING,
3029                                      &dev->state)) {
3030                                 /* We must not have linkwatch events
3031                                  * pending on unregister. If this
3032                                  * happens, we simply run the queue
3033                                  * unscheduled, resulting in a noop
3034                                  * for this device.
3035                                  */
3036                                 linkwatch_run_queue();
3037                         }
3038
3039                         rtnl_shunlock();
3040
3041                         rebroadcast_time = jiffies;
3042                 }
3043
3044                 current->state = TASK_INTERRUPTIBLE;
3045                 schedule_timeout(HZ / 4);
3046
3047                 if (time_after(jiffies, warning_time + 10 * HZ)) {
3048                         printk(KERN_EMERG "unregister_netdevice: "
3049                                "waiting for %s to become free. Usage "
3050                                "count = %d\n",
3051                                dev->name, atomic_read(&dev->refcnt));
3052 #if defined(SUPPORT_TC)
3053             /* decrement on ppp net work device reference count (refcnt)
3054              * in sch_generic.c could result -1 and it should be reset to 0 
3055              */
3056                         if (atomic_read(&dev->refcnt) == -1 && strstr(dev->name, "ppp_")) {
3057                                 printk("dev->name = %s, dev->refcnt=%d\n", dev->name, atomic_read(&dev->refcnt));
3058                                 atomic_set(&dev->refcnt, 0);            
3059                                 printk("after reset to 0, dev->refcnt=%d\n", atomic_read(&dev->refcnt));
3060                         }
3061 #endif          
3062
3063 #if defined(CONFIG_MIPS_BRCM)
3064                       /* if eth? device reference counter goes to negative, reset to 0 and get out the while loop */
3065                         if (atomic_read(&dev->refcnt) < 0 && strstr(dev->name, "eth")) {
3066                                 atomic_set(&dev->refcnt, 0);            
3067                                 printk("Reset to 0, dev->refcnt=%d.\n", atomic_read(&dev->refcnt));
3068                         }
3069 #endif
3070
3071                         warning_time = jiffies;
3072                 }
3073         }
3074 }
3075
3076 /* The sequence is:
3077  *
3078  *      rtnl_lock();
3079  *      ...
3080  *      register_netdevice(x1);
3081  *      register_netdevice(x2);
3082  *      ...
3083  *      unregister_netdevice(y1);
3084  *      unregister_netdevice(y2);
3085  *      ...
3086  *      rtnl_unlock();
3087  *      free_netdev(y1);
3088  *      free_netdev(y2);
3089  *
3090  * We are invoked by rtnl_unlock() after it drops the semaphore.
3091  * This allows us to deal with problems:
3092  * 1) We can create/delete sysfs objects which invoke hotplug
3093  *    without deadlocking with linkwatch via keventd.
3094  * 2) Since we run with the RTNL semaphore not held, we can sleep
3095  *    safely in order to wait for the netdev refcnt to drop to zero.
3096  */
3097 static DECLARE_MUTEX(net_todo_run_mutex);
3098 void netdev_run_todo(void)
3099 {
3100         struct list_head list = LIST_HEAD_INIT(list);
3101         int err;
3102
3103
3104         /* Need to guard against multiple cpu's getting out of order. */
3105         down(&net_todo_run_mutex);
3106
3107         /* Not safe to do outside the semaphore.  We must not return
3108          * until all unregister events invoked by the local processor
3109          * have been completed (either by this todo run, or one on
3110          * another cpu).
3111          */
3112         if (list_empty(&net_todo_list))
3113                 goto out;
3114
3115         /* Snapshot list, allow later requests */
3116         spin_lock(&net_todo_list_lock);
3117         list_splice_init(&net_todo_list, &list);
3118         spin_unlock(&net_todo_list_lock);
3119                 
3120         while (!list_empty(&list)) {
3121                 struct net_device *dev
3122                         = list_entry(list.next, struct net_device, todo_list);
3123                 list_del(&dev->todo_list);
3124
3125                 switch(dev->reg_state) {
3126                 case NETREG_REGISTERING:
3127                         err = netdev_register_sysfs(dev);
3128                         if (err)
3129                                 printk(KERN_ERR "%s: failed sysfs registration (%d)\n",
3130                                        dev->name, err);
3131                         dev->reg_state = NETREG_REGISTERED;
3132                         break;
3133
3134                 case NETREG_UNREGISTERING:
3135                         netdev_unregister_sysfs(dev);
3136                         dev->reg_state = NETREG_UNREGISTERED;
3137
3138                         netdev_wait_allrefs(dev);
3139
3140                         /* paranoia */
3141                         BUG_ON(atomic_read(&dev->refcnt));
3142                         BUG_TRAP(!dev->ip_ptr);
3143                         BUG_TRAP(!dev->ip6_ptr);
3144                         BUG_TRAP(!dev->dn_ptr);
3145
3146
3147                         /* It must be the very last action, 
3148                          * after this 'dev' may point to freed up memory.
3149                          */
3150                         if (dev->destructor)
3151                                 dev->destructor(dev);
3152                         break;
3153
3154                 default:
3155                         printk(KERN_ERR "network todo '%s' but state %d\n",
3156                                dev->name, dev->reg_state);
3157                         break;
3158                 }
3159         }
3160
3161 out:
3162         up(&net_todo_run_mutex);
3163 }
3164
3165 /**
3166  *      free_netdev - free network device
3167  *      @dev: device
3168  *
3169  *      This function does the last stage of destroying an allocated device 
3170  *      interface. The reference to the device object is released.  
3171  *      If this is the last reference then it will be freed.
3172  */
3173 void free_netdev(struct net_device *dev)
3174 {
3175 #ifdef CONFIG_SYSFS
3176         /*  Compatiablity with error handling in drivers */
3177         if (dev->reg_state == NETREG_UNINITIALIZED) {
3178                 kfree((char *)dev - dev->padded);
3179                 return;
3180         }
3181
3182         BUG_ON(dev->reg_state != NETREG_UNREGISTERED);
3183         dev->reg_state = NETREG_RELEASED;
3184
3185         /* will free via class release */
3186         class_device_put(&dev->class_dev);
3187 #else
3188         kfree((char *)dev - dev->padded);
3189 #endif
3190 }
3191  
3192 /* Synchronize with packet receive processing. */
3193 void synchronize_net(void) 
3194 {
3195         might_sleep();
3196         synchronize_kernel();
3197 }
3198
3199 /**
3200  *      unregister_netdevice - remove device from the kernel
3201  *      @dev: device
3202  *
3203  *      This function shuts down a device interface and removes it
3204  *      from the kernel tables. On success 0 is returned, on a failure
3205  *      a negative errno code is returned.
3206  *
3207  *      Callers must hold the rtnl semaphore.  See the comment at the
3208  *      end of Space.c for details about the locking.  You may want
3209  *      unregister_netdev() instead of this.
3210  */
3211
3212 int unregister_netdevice(struct net_device *dev)
3213 {
3214         struct net_device *d, **dp;
3215
3216         BUG_ON(dev_boot_phase);
3217         ASSERT_RTNL();
3218
3219         /* Some devices call without registering for initialization unwind. */
3220         if (dev->reg_state == NETREG_UNINITIALIZED) {
3221                 printk(KERN_DEBUG "unregister_netdevice: device %s/%p never "
3222                                   "was registered\n", dev->name, dev);
3223                 return -ENODEV;
3224         }
3225
3226         BUG_ON(dev->reg_state != NETREG_REGISTERED);
3227
3228         /* If device is running, close it first. */
3229         if (dev->flags & IFF_UP)
3230                 dev_close(dev);
3231
3232         /* And unlink it from device chain. */
3233         for (dp = &dev_base; (d = *dp) != NULL; dp = &d->next) {
3234                 if (d == dev) {
3235                         write_lock_bh(&dev_base_lock);
3236                         hlist_del(&dev->name_hlist);
3237                         hlist_del(&dev->index_hlist);
3238                         if (dev_tail == &dev->next)
3239                                 dev_tail = dp;
3240                         *dp = d->next;
3241                         write_unlock_bh(&dev_base_lock);
3242                         break;
3243                 }
3244         }
3245         if (!d) {
3246                 printk(KERN_ERR "unregister net_device: '%s' not found\n",
3247                        dev->name);
3248                 return -ENODEV;
3249         }
3250
3251         dev->reg_state = NETREG_UNREGISTERING;
3252
3253         synchronize_net();
3254
3255         /* Shutdown queueing discipline. */
3256         dev_shutdown(dev);
3257
3258         
3259         /* Notify protocols, that we are about to destroy
3260            this device. They should clean all the things.
3261         */
3262         notifier_call_chain(&netdev_chain, NETDEV_UNREGISTER, dev);
3263         
3264         /*
3265          *      Flush the multicast chain
3266          */
3267         dev_mc_discard(dev);
3268
3269         if (dev->uninit)
3270                 dev->uninit(dev);
3271
3272         /* Notifier chain MUST detach us from master device. */
3273         BUG_TRAP(!dev->master);
3274
3275         free_divert_blk(dev);
3276
3277         /* Finish processing unregister after unlock */
3278         net_set_todo(dev);
3279
3280         synchronize_net();
3281
3282         dev_put(dev);
3283         return 0;
3284 }
3285
3286 #ifdef CONFIG_HOTPLUG_CPU
3287 static int dev_cpu_callback(struct notifier_block *nfb,
3288                             unsigned long action,
3289                             void *ocpu)
3290 {
3291         struct sk_buff **list_skb;
3292         struct net_device **list_net;
3293         struct sk_buff *skb;
3294         unsigned int cpu, oldcpu = (unsigned long)ocpu;
3295         struct softnet_data *sd, *oldsd;
3296
3297         if (action != CPU_DEAD)
3298                 return NOTIFY_OK;
3299
3300         local_irq_disable();
3301         cpu = smp_processor_id();
3302         sd = &per_cpu(softnet_data, cpu);
3303         oldsd = &per_cpu(softnet_data, oldcpu);
3304
3305         /* Find end of our completion_queue. */
3306         list_skb = &sd->completion_queue;
3307         while (*list_skb)
3308                 list_skb = &(*list_skb)->next;
3309         /* Append completion queue from offline CPU. */
3310         *list_skb = oldsd->completion_queue;
3311         oldsd->completion_queue = NULL;
3312
3313         /* Find end of our output_queue. */
3314         list_net = &sd->output_queue;
3315         while (*list_net)
3316                 list_net = &(*list_net)->next_sched;
3317         /* Append output queue from offline CPU. */
3318         *list_net = oldsd->output_queue;
3319         oldsd->output_queue = NULL;
3320
3321         raise_softirq_irqoff(NET_TX_SOFTIRQ);
3322         local_irq_enable();
3323
3324         /* Process offline CPU's input_pkt_queue */
3325         while ((skb = __skb_dequeue(&oldsd->input_pkt_queue)))
3326                 netif_rx(skb);
3327
3328         return NOTIFY_OK;
3329 }
3330 #endif /* CONFIG_HOTPLUG_CPU */
3331
3332
3333 /*
3334  *      Initialize the DEV module. At boot time this walks the device list and
3335  *      unhooks any devices that fail to initialise (normally hardware not
3336  *      present) and leaves us with a valid list of present and active devices.
3337  *
3338  */
3339
3340 /*
3341  *       This is called single threaded during boot, so no need
3342  *       to take the rtnl semaphore.
3343  */
3344 static int __init net_dev_init(void)
3345 {
3346         int i, rc = -ENOMEM;
3347
3348         BUG_ON(!dev_boot_phase);
3349
3350         if (dev_proc_init())
3351                 goto out;
3352
3353         if (netdev_sysfs_init())
3354                 goto out;
3355
3356         INIT_LIST_HEAD(&ptype_all);
3357         for (i = 0; i < 16; i++) 
3358                 INIT_LIST_HEAD(&ptype_base[i]);
3359
3360         for (i = 0; i < ARRAY_SIZE(dev_name_head); i++)
3361                 INIT_HLIST_HEAD(&dev_name_head[i]);
3362
3363         for (i = 0; i < ARRAY_SIZE(dev_index_head); i++)
3364                 INIT_HLIST_HEAD(&dev_index_head[i]);
3365
3366         /*
3367          *      Initialise the packet receive queues.
3368          */
3369
3370         for (i = 0; i < NR_CPUS; i++) {
3371                 struct softnet_data *queue;
3372
3373                 queue = &per_cpu(softnet_data, i);
3374                 skb_queue_head_init(&queue->input_pkt_queue);
3375                 queue->throttle = 0;
3376                 queue->cng_level = 0;
3377                 queue->avg_blog = 10; /* arbitrary non-zero */
3378                 queue->completion_queue = NULL;
3379                 INIT_LIST_HEAD(&queue->poll_list);
3380                 set_bit(__LINK_STATE_START, &queue->backlog_dev.state);
3381                 queue->backlog_dev.weight = weight_p;
3382                 queue->backlog_dev.poll = process_backlog;
3383                 atomic_set(&queue->backlog_dev.refcnt, 1);
3384         }
3385
3386 #ifdef OFFLINE_SAMPLE
3387         samp_timer.expires = jiffies + (10 * HZ);
3388         add_timer(&samp_timer);
3389 #endif
3390
3391         dev_boot_phase = 0;
3392
3393         open_softirq(NET_TX_SOFTIRQ, net_tx_action, NULL);
3394         open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL);
3395
3396         hotcpu_notifier(dev_cpu_callback, 0);
3397         dst_init();
3398         dev_mcast_init();
3399         rc = 0;
3400 out:
3401         return rc;
3402 }
3403
3404 subsys_initcall(net_dev_init);
3405
3406 EXPORT_SYMBOL(__dev_get);
3407 EXPORT_SYMBOL(__dev_get_by_flags);
3408 EXPORT_SYMBOL(__dev_get_by_index);
3409 EXPORT_SYMBOL(__dev_get_by_name);
3410 EXPORT_SYMBOL(__dev_remove_pack);
3411 EXPORT_SYMBOL(__skb_linearize);
3412 EXPORT_SYMBOL(call_netdevice_notifiers);
3413 EXPORT_SYMBOL(dev_add_pack);
3414 EXPORT_SYMBOL(dev_alloc_name);
3415 EXPORT_SYMBOL(dev_close);
3416 EXPORT_SYMBOL(dev_get_by_flags);
3417 EXPORT_SYMBOL(dev_get_by_index);
3418 EXPORT_SYMBOL(dev_get_by_name);
3419 EXPORT_SYMBOL(dev_getbyhwaddr);
3420 EXPORT_SYMBOL(dev_ioctl);
3421 EXPORT_SYMBOL(dev_new_index);
3422 EXPORT_SYMBOL(dev_open);
3423 EXPORT_SYMBOL(dev_queue_xmit);
3424 EXPORT_SYMBOL(dev_queue_xmit_nit);
3425 EXPORT_SYMBOL(dev_remove_pack);
3426 EXPORT_SYMBOL(dev_set_allmulti);
3427 EXPORT_SYMBOL(dev_set_promiscuity);
3428 EXPORT_SYMBOL(dev_change_flags);
3429 EXPORT_SYMBOL(dev_set_mtu);
3430 EXPORT_SYMBOL(free_netdev);
3431 EXPORT_SYMBOL(netdev_boot_setup_check);
3432 EXPORT_SYMBOL(netdev_set_master);
3433 EXPORT_SYMBOL(netdev_state_change);
3434 EXPORT_SYMBOL(netif_receive_skb);
3435 EXPORT_SYMBOL(netif_rx);
3436 EXPORT_SYMBOL(register_gifconf);
3437 EXPORT_SYMBOL(register_netdevice);
3438 EXPORT_SYMBOL(register_netdevice_notifier);
3439 EXPORT_SYMBOL(skb_checksum_help);
3440 EXPORT_SYMBOL(synchronize_net);
3441 EXPORT_SYMBOL(unregister_netdevice);
3442 EXPORT_SYMBOL(unregister_netdevice_notifier);
3443
3444 #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
3445 EXPORT_SYMBOL(br_handle_frame_hook);
3446 #endif
3447
3448 #ifdef CONFIG_KMOD
3449 EXPORT_SYMBOL(dev_load);
3450 #endif
3451 #ifdef CONFIG_NET_HW_FLOWCONTROL
3452 EXPORT_SYMBOL(netdev_dropping);
3453 EXPORT_SYMBOL(netdev_fc_xoff);
3454 EXPORT_SYMBOL(netdev_register_fc);
3455 EXPORT_SYMBOL(netdev_unregister_fc);
3456 #endif
3457
3458 #ifdef CONFIG_NET_CLS_ACT
3459 EXPORT_SYMBOL(ing_filter);
3460 #endif
3461
3462
3463 EXPORT_PER_CPU_SYMBOL(softnet_data);