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