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