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