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