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