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