cleanup
[linux-2.4.21-pre4.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 to 2
24  *                                      if register_netdev gets called before
25  *                                      net_dev_init & also removed a few lines
26  *                                      of code in the process.
27  *              Alan Cox        :       device private ioctl copies fields back.
28  *              Alan Cox        :       Transmit queue code does relevant stunts to
29  *                                      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 drivers
34  *              Tim Kordas      :       SIOCADDMULTI/SIOCDELMULTI
35  *              Alan Cox        :       100 backlog just doesn't cut it when
36  *                                      you start doing multicast video 8)
37  *              Alan Cox        :       Rewrote net_bh and list manager.
38  *              Alan Cox        :       Fix ETH_P_ALL echoback lengths.
39  *              Alan Cox        :       Took out transmit every packet pass
40  *                                      Saved a few bytes in the ioctl handler
41  *              Alan Cox        :       Network driver sets packet type before calling netif_rx. Saves
42  *                                      a function call a packet.
43  *              Alan Cox        :       Hashed net_bh()
44  *              Richard Kooijman:       Timestamp fixes.
45  *              Alan Cox        :       Wrong field in SIOCGIFDSTADDR
46  *              Alan Cox        :       Device lock protection.
47  *              Alan Cox        :       Fixed nasty side effect of device close changes.
48  *              Rudi Cilibrasi  :       Pass the right thing to set_mac_address()
49  *              Dave Miller     :       32bit quantity for the device lock to make it work out
50  *                                      on a Sparc.
51  *              Bjorn Ekwall    :       Added KERNELD hack.
52  *              Alan Cox        :       Cleaned up the backlog initialise.
53  *              Craig Metz      :       SIOCGIFCONF fix if space for under
54  *                                      1 device.
55  *          Thomas Bogendoerfer :       Return ENODEV for dev_open, if there
56  *                                      is no device open function.
57  *              Andi Kleen      :       Fix error reporting for SIOCGIFCONF
58  *          Michael Chastain    :       Fix signed/unsigned for SIOCGIFCONF
59  *              Cyrus Durgin    :       Cleaned for KMOD
60  *              Adam Sulmicki   :       Bug Fix : Network Device Unload
61  *                                      A network device unload needs to purge
62  *                                      the backlog queue.
63  *      Paul Rusty Russell      :       SIOCSIFNAME
64  *              Pekka Riikonen  :       Netdev boot-time settings code
65  *              Andrew Morton   :       Make unregister_netdevice wait indefinitely on dev->refcnt
66  *              J Hadi Salim    :       - Backlog queue sampling
67  *                                      - netif_rx() feedback   
68  */
69
70 #include <asm/uaccess.h>
71 #include <asm/system.h>
72 #include <asm/bitops.h>
73 #include <linux/config.h>
74 #include <linux/types.h>
75 #include <linux/kernel.h>
76 #include <linux/sched.h>
77 #include <linux/string.h>
78 #include <linux/mm.h>
79 #include <linux/socket.h>
80 #include <linux/sockios.h>
81 #include <linux/errno.h>
82 #include <linux/interrupt.h>
83 #include <linux/if_ether.h>
84 #include <linux/netdevice.h>
85 #include <linux/etherdevice.h>
86 #include <linux/notifier.h>
87 #include <linux/skbuff.h>
88 #include <linux/brlock.h>
89 #include <net/sock.h>
90 #include <linux/rtnetlink.h>
91 #include <linux/proc_fs.h>
92 #include <linux/stat.h>
93 #include <linux/if_bridge.h>
94 #include <linux/divert.h>
95 #include <net/dst.h>
96 #include <net/pkt_sched.h>
97 #include <net/profile.h>
98 #include <net/checksum.h>
99 #include <linux/highmem.h>
100 #include <linux/init.h>
101 #include <linux/kmod.h>
102 #include <linux/module.h>
103 #if defined(CONFIG_NET_RADIO) || defined(CONFIG_NET_PCMCIA_RADIO)
104 #include <linux/wireless.h>             /* Note : will define WIRELESS_EXT */
105 #include <net/iw_handler.h>
106 #endif  /* CONFIG_NET_RADIO || CONFIG_NET_PCMCIA_RADIO */
107 #ifdef CONFIG_PLIP
108 extern int plip_init(void);
109 #endif
110
111
112 /* This define, if set, will randomly drop a packet when congestion
113  * is more than moderate.  It helps fairness in the multi-interface
114  * case when one of them is a hog, but it kills performance for the
115  * single interface case so it is off now by default.
116  */
117 #undef RAND_LIE
118
119 /* Setting this will sample the queue lengths and thus congestion
120  * via a timer instead of as each packet is received.
121  */
122 #undef OFFLINE_SAMPLE
123
124 NET_PROFILE_DEFINE(dev_queue_xmit)
125 NET_PROFILE_DEFINE(softnet_process)
126
127 const char *if_port_text[] = {
128   "unknown",
129   "BNC",
130   "10baseT",
131   "AUI",
132   "100baseT",
133   "100baseTX",
134   "100baseFX"
135 };
136
137 /*
138  *      The list of packet types we will receive (as opposed to discard)
139  *      and the routines to invoke.
140  *
141  *      Why 16. Because with 16 the only overlap we get on a hash of the
142  *      low nibble of the protocol value is RARP/SNAP/X.25.
143  *
144  *      NOTE:  That is no longer true with the addition of VLAN tags.  Not
145  *             sure which should go first, but I bet it won't make much
146  *             difference if we are running VLANs.  The good news is that
147  *             this protocol won't be in the list unless compiled in, so
148  *             the average user (w/out VLANs) will not be adversly affected.
149  *             --BLG
150  *
151  *              0800    IP
152  *              8100    802.1Q VLAN
153  *              0001    802.3
154  *              0002    AX.25
155  *              0004    802.2
156  *              8035    RARP
157  *              0005    SNAP
158  *              0805    X.25
159  *              0806    ARP
160  *              8137    IPX
161  *              0009    Localtalk
162  *              86DD    IPv6
163  */
164
165 static struct packet_type *ptype_base[16];              /* 16 way hashed list */
166 static struct packet_type *ptype_all = NULL;            /* Taps */
167
168 #ifdef OFFLINE_SAMPLE
169 static void sample_queue(unsigned long dummy);
170 static struct timer_list samp_timer = { function: sample_queue };
171 #endif
172
173 #ifdef CONFIG_HOTPLUG
174 static int net_run_sbin_hotplug(struct net_device *dev, char *action);
175 #else
176 #define net_run_sbin_hotplug(dev, action) ({ 0; })
177 #endif
178
179 /*
180  *      Our notifier list
181  */
182  
183 static struct notifier_block *netdev_chain=NULL;
184
185 /*
186  *      Device drivers call our routines to queue packets here. We empty the
187  *      queue in the local softnet handler.
188  */
189 struct softnet_data softnet_data[NR_CPUS] __cacheline_aligned;
190
191 #ifdef CONFIG_NET_FASTROUTE
192 int netdev_fastroute;
193 int netdev_fastroute_obstacles;
194 #endif
195
196
197 /******************************************************************************************
198
199                 Protocol management and registration routines
200
201 *******************************************************************************************/
202
203 /*
204  *      For efficiency
205  */
206
207 int netdev_nit=0;
208
209 /*
210  *      Add a protocol ID to the list. Now that the input handler is
211  *      smarter we can dispense with all the messy stuff that used to be
212  *      here.
213  *
214  *      BEWARE!!! Protocol handlers, mangling input packets,
215  *      MUST BE last in hash buckets and checking protocol handlers
216  *      MUST start from promiscous ptype_all chain in net_bh.
217  *      It is true now, do not change it.
218  *      Explantion follows: if protocol handler, mangling packet, will
219  *      be the first on list, it is not able to sense, that packet
220  *      is cloned and should be copied-on-write, so that it will
221  *      change it and subsequent readers will get broken packet.
222  *                                                      --ANK (980803)
223  */
224
225 /**
226  *      dev_add_pack - add packet handler
227  *      @pt: packet type declaration
228  * 
229  *      Add a protocol handler to the networking stack. The passed &packet_type
230  *      is linked into kernel lists and may not be freed until it has been
231  *      removed from the kernel lists.
232  */
233  
234 void dev_add_pack(struct packet_type *pt)
235 {
236         int hash;
237
238         br_write_lock_bh(BR_NETPROTO_LOCK);
239
240 #ifdef CONFIG_NET_FASTROUTE
241         /* Hack to detect packet socket */
242         if ((pt->data) && ((int)(pt->data)!=1)) {
243                 netdev_fastroute_obstacles++;
244                 dev_clear_fastroute(pt->dev);
245         }
246 #endif
247         if (pt->type == htons(ETH_P_ALL)) {
248                 netdev_nit++;
249                 pt->next=ptype_all;
250                 ptype_all=pt;
251         } else {
252                 hash=ntohs(pt->type)&15;
253                 pt->next = ptype_base[hash];
254                 ptype_base[hash] = pt;
255         }
256         br_write_unlock_bh(BR_NETPROTO_LOCK);
257 }
258
259
260 /**
261  *      dev_remove_pack  - remove packet handler
262  *      @pt: packet type declaration
263  * 
264  *      Remove a protocol handler that was previously added to the kernel
265  *      protocol handlers by dev_add_pack(). The passed &packet_type is removed
266  *      from the kernel lists and can be freed or reused once this function
267  *      returns.
268  */
269  
270 void dev_remove_pack(struct packet_type *pt)
271 {
272         struct packet_type **pt1;
273
274         br_write_lock_bh(BR_NETPROTO_LOCK);
275
276         if (pt->type == htons(ETH_P_ALL)) {
277                 netdev_nit--;
278                 pt1=&ptype_all;
279         } else {
280                 pt1=&ptype_base[ntohs(pt->type)&15];
281         }
282
283         for (; (*pt1) != NULL; pt1 = &((*pt1)->next)) {
284                 if (pt == (*pt1)) {
285                         *pt1 = pt->next;
286 #ifdef CONFIG_NET_FASTROUTE
287                         if (pt->data)
288                                 netdev_fastroute_obstacles--;
289 #endif
290                         br_write_unlock_bh(BR_NETPROTO_LOCK);
291                         return;
292                 }
293         }
294         br_write_unlock_bh(BR_NETPROTO_LOCK);
295         printk(KERN_WARNING "dev_remove_pack: %p not found.\n", pt);
296 }
297
298 /******************************************************************************
299
300                       Device Boot-time Settings Routines
301
302 *******************************************************************************/
303
304 /* Boot time configuration table */
305 static struct netdev_boot_setup dev_boot_setup[NETDEV_BOOT_SETUP_MAX];
306
307 /**
308  *      netdev_boot_setup_add   - add new setup entry
309  *      @name: name of the device
310  *      @map: configured settings for the device
311  *
312  *      Adds new setup entry to the dev_boot_setup list.  The function
313  *      returns 0 on error and 1 on success.  This is a generic routine to
314  *      all netdevices.
315  */
316 int netdev_boot_setup_add(char *name, struct ifmap *map)
317 {
318         struct netdev_boot_setup *s;
319         int i;
320
321         s = dev_boot_setup;
322         for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++) {
323                 if (s[i].name[0] == '\0' || s[i].name[0] == ' ') {
324                         memset(s[i].name, 0, sizeof(s[i].name));
325                         strcpy(s[i].name, name);
326                         memcpy(&s[i].map, map, sizeof(s[i].map));
327                         break;
328                 }
329         }
330
331         if (i >= NETDEV_BOOT_SETUP_MAX)
332                 return 0;
333
334         return 1;
335 }
336
337 /**
338  *      netdev_boot_setup_check - check boot time settings
339  *      @dev: the netdevice
340  *
341  *      Check boot time settings for the device.
342  *      The found settings are set for the device to be used
343  *      later in the device probing.
344  *      Returns 0 if no settings found, 1 if they are.
345  */
346 int netdev_boot_setup_check(struct net_device *dev)
347 {
348         struct netdev_boot_setup *s;
349         int i;
350
351         s = dev_boot_setup;
352         for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++) {
353                 if (s[i].name[0] != '\0' && s[i].name[0] != ' ' &&
354                     !strncmp(dev->name, s[i].name, strlen(s[i].name))) {
355                         dev->irq        = s[i].map.irq;
356                         dev->base_addr  = s[i].map.base_addr;
357                         dev->mem_start  = s[i].map.mem_start;
358                         dev->mem_end    = s[i].map.mem_end;
359                         return 1;
360                 }
361         }
362         return 0;
363 }
364
365 /*
366  * Saves at boot time configured settings for any netdevice.
367  */
368 int __init netdev_boot_setup(char *str)
369 {
370         int ints[5];
371         struct ifmap map;
372
373         str = get_options(str, ARRAY_SIZE(ints), ints);
374         if (!str || !*str)
375                 return 0;
376
377         /* Save settings */
378         memset(&map, 0, sizeof(map));
379         if (ints[0] > 0)
380                 map.irq = ints[1];
381         if (ints[0] > 1)
382                 map.base_addr = ints[2];
383         if (ints[0] > 2)
384                 map.mem_start = ints[3];
385         if (ints[0] > 3)
386                 map.mem_end = ints[4];
387
388         /* Add new entry to the list */ 
389         return netdev_boot_setup_add(str, &map);
390 }
391
392 __setup("netdev=", netdev_boot_setup);
393
394 /*****************************************************************************************
395
396                             Device Interface Subroutines
397
398 ******************************************************************************************/
399
400 /**
401  *      __dev_get_by_name       - find a device by its name 
402  *      @name: name to find
403  *
404  *      Find an interface by name. Must be called under RTNL semaphore
405  *      or @dev_base_lock. If the name is found a pointer to the device
406  *      is returned. If the name is not found then %NULL is returned. The
407  *      reference counters are not incremented so the caller must be
408  *      careful with locks.
409  */
410  
411
412 struct net_device *__dev_get_by_name(const char *name)
413 {
414         struct net_device *dev;
415
416         for (dev = dev_base; dev != NULL; dev = dev->next) {
417                 if (strncmp(dev->name, name, IFNAMSIZ) == 0)
418                         return dev;
419         }
420         return NULL;
421 }
422
423 /**
424  *      dev_get_by_name         - find a device by its name
425  *      @name: name to find
426  *
427  *      Find an interface by name. This can be called from any 
428  *      context and does its own locking. The returned handle has
429  *      the usage count incremented and the caller must use dev_put() to
430  *      release it when it is no longer needed. %NULL is returned if no
431  *      matching device is found.
432  */
433
434 struct net_device *dev_get_by_name(const char *name)
435 {
436         struct net_device *dev;
437
438         read_lock(&dev_base_lock);
439         dev = __dev_get_by_name(name);
440         if (dev)
441                 dev_hold(dev);
442         read_unlock(&dev_base_lock);
443         return dev;
444 }
445
446 /* 
447    Return value is changed to int to prevent illegal usage in future.
448    It is still legal to use to check for device existence.
449
450    User should understand, that the result returned by this function
451    is meaningless, if it was not issued under rtnl semaphore.
452  */
453
454 /**
455  *      dev_get -       test if a device exists
456  *      @name:  name to test for
457  *
458  *      Test if a name exists. Returns true if the name is found. In order
459  *      to be sure the name is not allocated or removed during the test the
460  *      caller must hold the rtnl semaphore.
461  *
462  *      This function primarily exists for back compatibility with older
463  *      drivers. 
464  */
465  
466 int dev_get(const char *name)
467 {
468         struct net_device *dev;
469
470         read_lock(&dev_base_lock);
471         dev = __dev_get_by_name(name);
472         read_unlock(&dev_base_lock);
473         return dev != NULL;
474 }
475
476 /**
477  *      __dev_get_by_index - find a device by its ifindex
478  *      @ifindex: index of device
479  *
480  *      Search for an interface by index. Returns %NULL if the device
481  *      is not found or a pointer to the device. The device has not
482  *      had its reference counter increased so the caller must be careful
483  *      about locking. The caller must hold either the RTNL semaphore
484  *      or @dev_base_lock.
485  */
486
487 struct net_device * __dev_get_by_index(int ifindex)
488 {
489         struct net_device *dev;
490
491         for (dev = dev_base; dev != NULL; dev = dev->next) {
492                 if (dev->ifindex == ifindex)
493                         return dev;
494         }
495         return NULL;
496 }
497
498
499 /**
500  *      dev_get_by_index - find a device by its ifindex
501  *      @ifindex: index of device
502  *
503  *      Search for an interface by index. Returns NULL if the device
504  *      is not found or a pointer to the device. The device returned has 
505  *      had a reference added and the pointer is safe until the user calls
506  *      dev_put to indicate they have finished with it.
507  */
508
509 struct net_device * dev_get_by_index(int ifindex)
510 {
511         struct net_device *dev;
512
513         read_lock(&dev_base_lock);
514         dev = __dev_get_by_index(ifindex);
515         if (dev)
516                 dev_hold(dev);
517         read_unlock(&dev_base_lock);
518         return dev;
519 }
520
521 /**
522  *      dev_getbyhwaddr - find a device by its hardware address
523  *      @type: media type of device
524  *      @ha: hardware address
525  *
526  *      Search for an interface by MAC address. Returns NULL if the device
527  *      is not found or a pointer to the device. The caller must hold the
528  *      rtnl semaphore. The returned device has not had its ref count increased
529  *      and the caller must therefore be careful about locking
530  *
531  *      BUGS:
532  *      If the API was consistent this would be __dev_get_by_hwaddr
533  */
534
535 struct net_device *dev_getbyhwaddr(unsigned short type, char *ha)
536 {
537         struct net_device *dev;
538
539         ASSERT_RTNL();
540
541         for (dev = dev_base; dev != NULL; dev = dev->next) {
542                 if (dev->type == type &&
543                     memcmp(dev->dev_addr, ha, dev->addr_len) == 0)
544                         return dev;
545         }
546         return NULL;
547 }
548
549 /**
550  *      dev_alloc_name - allocate a name for a device
551  *      @dev: device 
552  *      @name: name format string
553  *
554  *      Passed a format string - eg "lt%d" it will try and find a suitable
555  *      id. Not efficient for many devices, not called a lot. The caller
556  *      must hold the dev_base or rtnl lock while allocating the name and
557  *      adding the device in order to avoid duplicates. Returns the number
558  *      of the unit assigned or a negative errno code.
559  */
560
561 int dev_alloc_name(struct net_device *dev, const char *name)
562 {
563         int i;
564         char buf[32];
565         char *p;
566
567         /*
568          * Verify the string as this thing may have come from
569          * the user.  There must be either one "%d" and no other "%"
570          * characters, or no "%" characters at all.
571          */
572         p = strchr(name, '%');
573         if (p && (p[1] != 'd' || strchr(p+2, '%')))
574                 return -EINVAL;
575
576         /*
577          * If you need over 100 please also fix the algorithm...
578          */
579         for (i = 0; i < 100; i++) {
580                 snprintf(buf,sizeof(buf),name,i);
581                 if (__dev_get_by_name(buf) == NULL) {
582                         strcpy(dev->name, buf);
583                         return i;
584                 }
585         }
586         return -ENFILE; /* Over 100 of the things .. bail out! */
587 }
588
589 /**
590  *      dev_alloc - allocate a network device and name
591  *      @name: name format string
592  *      @err: error return pointer
593  *
594  *      Passed a format string, eg. "lt%d", it will allocate a network device
595  *      and space for the name. %NULL is returned if no memory is available.
596  *      If the allocation succeeds then the name is assigned and the 
597  *      device pointer returned. %NULL is returned if the name allocation
598  *      failed. The cause of an error is returned as a negative errno code
599  *      in the variable @err points to.
600  *
601  *      The caller must hold the @dev_base or RTNL locks when doing this in
602  *      order to avoid duplicate name allocations.
603  */
604
605 struct net_device *dev_alloc(const char *name, int *err)
606 {
607         struct net_device *dev=kmalloc(sizeof(struct net_device), GFP_KERNEL);
608         if (dev == NULL) {
609                 *err = -ENOBUFS;
610                 return NULL;
611         }
612         memset(dev, 0, sizeof(struct net_device));
613         *err = dev_alloc_name(dev, name);
614         if (*err < 0) {
615                 kfree(dev);
616                 return NULL;
617         }
618         return dev;
619 }
620
621 /**
622  *      netdev_state_change - device changes state
623  *      @dev: device to cause notification
624  *
625  *      Called to indicate a device has changed state. This function calls
626  *      the notifier chains for netdev_chain and sends a NEWLINK message
627  *      to the routing socket.
628  */
629  
630 void netdev_state_change(struct net_device *dev)
631 {
632         if (dev->flags&IFF_UP) {
633                 notifier_call_chain(&netdev_chain, NETDEV_CHANGE, dev);
634                 rtmsg_ifinfo(RTM_NEWLINK, dev, 0);
635         }
636 }
637
638
639 #ifdef CONFIG_KMOD
640
641 /**
642  *      dev_load        - load a network module
643  *      @name: name of interface
644  *
645  *      If a network interface is not present and the process has suitable
646  *      privileges this function loads the module. If module loading is not
647  *      available in this kernel then it becomes a nop.
648  */
649
650 void dev_load(const char *name)
651 {
652         if (!dev_get(name) && capable(CAP_SYS_MODULE))
653                 request_module(name);
654 }
655
656 #else
657
658 extern inline void dev_load(const char *unused){;}
659
660 #endif
661
662 static int default_rebuild_header(struct sk_buff *skb)
663 {
664         printk(KERN_DEBUG "%s: default_rebuild_header called -- BUG!\n", skb->dev ? skb->dev->name : "NULL!!!");
665         kfree_skb(skb);
666         return 1;
667 }
668
669 /**
670  *      dev_open        - prepare an interface for use. 
671  *      @dev:   device to open
672  *
673  *      Takes a device from down to up state. The device's private open
674  *      function is invoked and then the multicast lists are loaded. Finally
675  *      the device is moved into the up state and a %NETDEV_UP message is
676  *      sent to the netdev notifier chain.
677  *
678  *      Calling this function on an active interface is a nop. On a failure
679  *      a negative errno code is returned.
680  */
681  
682 int dev_open(struct net_device *dev)
683 {
684         int ret = 0;
685
686         /*
687          *      Is it already up?
688          */
689
690         if (dev->flags&IFF_UP)
691                 return 0;
692
693         /*
694          *      Is it even present?
695          */
696         if (!netif_device_present(dev))
697                 return -ENODEV;
698
699         /*
700          *      Call device private open method
701          */
702         if (try_inc_mod_count(dev->owner)) {
703                 set_bit(__LINK_STATE_START, &dev->state);
704                 if (dev->open) {
705                         ret = dev->open(dev);
706                         if (ret != 0) {
707                                 clear_bit(__LINK_STATE_START, &dev->state);
708                                 if (dev->owner)
709                                         __MOD_DEC_USE_COUNT(dev->owner);
710                         }
711                 }
712         } else {
713                 ret = -ENODEV;
714         }
715
716         /*
717          *      If it went open OK then:
718          */
719          
720         if (ret == 0) 
721         {
722                 /*
723                  *      Set the flags.
724                  */
725                 dev->flags |= IFF_UP;
726
727                 /*
728                  *      Initialize multicasting status 
729                  */
730                 dev_mc_upload(dev);
731
732                 /*
733                  *      Wakeup transmit queue engine
734                  */
735                 dev_activate(dev);
736
737                 /*
738                  *      ... and announce new interface.
739                  */
740                 notifier_call_chain(&netdev_chain, NETDEV_UP, dev);
741         }
742         return(ret);
743 }
744
745 #ifdef CONFIG_NET_FASTROUTE
746
747 static void dev_do_clear_fastroute(struct net_device *dev)
748 {
749         if (dev->accept_fastpath) {
750                 int i;
751
752                 for (i=0; i<=NETDEV_FASTROUTE_HMASK; i++) {
753                         struct dst_entry *dst;
754
755                         write_lock_irq(&dev->fastpath_lock);
756                         dst = dev->fastpath[i];
757                         dev->fastpath[i] = NULL;
758                         write_unlock_irq(&dev->fastpath_lock);
759
760                         dst_release(dst);
761                 }
762         }
763 }
764
765 void dev_clear_fastroute(struct net_device *dev)
766 {
767         if (dev) {
768                 dev_do_clear_fastroute(dev);
769         } else {
770                 read_lock(&dev_base_lock);
771                 for (dev = dev_base; dev; dev = dev->next)
772                         dev_do_clear_fastroute(dev);
773                 read_unlock(&dev_base_lock);
774         }
775 }
776 #endif
777
778 /**
779  *      dev_close - shutdown an interface.
780  *      @dev: device to shutdown
781  *
782  *      This function moves an active device into down state. A 
783  *      %NETDEV_GOING_DOWN is sent to the netdev notifier chain. The device
784  *      is then deactivated and finally a %NETDEV_DOWN is sent to the notifier
785  *      chain.
786  */
787  
788 int dev_close(struct net_device *dev)
789 {
790         if (!(dev->flags&IFF_UP))
791                 return 0;
792
793         /*
794          *      Tell people we are going down, so that they can
795          *      prepare to death, when device is still operating.
796          */
797         notifier_call_chain(&netdev_chain, NETDEV_GOING_DOWN, dev);
798
799         dev_deactivate(dev);
800
801         clear_bit(__LINK_STATE_START, &dev->state);
802
803         /* Synchronize to scheduled poll. We cannot touch poll list,
804          * it can be even on different cpu. So just clear netif_running(),
805          * and wait when poll really will happen. Actually, the best place
806          * for this is inside dev->stop() after device stopped its irq
807          * engine, but this requires more changes in devices. */
808
809         smp_mb__after_clear_bit(); /* Commit netif_running(). */
810         while (test_bit(__LINK_STATE_RX_SCHED, &dev->state)) {
811                 /* No hurry. */
812                 current->state = TASK_INTERRUPTIBLE;
813                 schedule_timeout(1);
814         }
815
816         /*
817          *      Call the device specific close. This cannot fail.
818          *      Only if device is UP
819          *
820          *      We allow it to be called even after a DETACH hot-plug
821          *      event.
822          */
823          
824         if (dev->stop)
825                 dev->stop(dev);
826
827         /*
828          *      Device is now down.
829          */
830
831         dev->flags &= ~IFF_UP;
832 #ifdef CONFIG_NET_FASTROUTE
833         dev_clear_fastroute(dev);
834 #endif
835
836         /*
837          *      Tell people we are down
838          */
839         notifier_call_chain(&netdev_chain, NETDEV_DOWN, dev);
840
841         /*
842          * Drop the module refcount
843          */
844         if (dev->owner)
845                 __MOD_DEC_USE_COUNT(dev->owner);
846
847         return(0);
848 }
849
850
851 /*
852  *      Device change register/unregister. These are not inline or static
853  *      as we export them to the world.
854  */
855  
856 /**
857  *      register_netdevice_notifier - register a network notifier block
858  *      @nb: notifier
859  *
860  *      Register a notifier to be called when network device events occur.
861  *      The notifier passed is linked into the kernel structures and must
862  *      not be reused until it has been unregistered. A negative errno code
863  *      is returned on a failure.
864  */
865
866 int register_netdevice_notifier(struct notifier_block *nb)
867 {
868         return notifier_chain_register(&netdev_chain, nb);
869 }
870
871 /**
872  *      unregister_netdevice_notifier - unregister a network notifier block
873  *      @nb: notifier
874  *
875  *      Unregister a notifier previously registered by
876  *      register_netdevice_notifier(). The notifier is unlinked into the
877  *      kernel structures and may then be reused. A negative errno code
878  *      is returned on a failure.
879  */
880
881 int unregister_netdevice_notifier(struct notifier_block *nb)
882 {
883         return notifier_chain_unregister(&netdev_chain,nb);
884 }
885
886 /*
887  *      Support routine. Sends outgoing frames to any network
888  *      taps currently in use.
889  */
890
891 void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev)
892 {
893         struct packet_type *ptype;
894         do_gettimeofday(&skb->stamp);
895
896         br_read_lock(BR_NETPROTO_LOCK);
897         for (ptype = ptype_all; ptype!=NULL; ptype = ptype->next) 
898         {
899                 /* Never send packets back to the socket
900                  * they originated from - MvS (miquels@drinkel.ow.org)
901                  */
902                 if ((ptype->dev == dev || !ptype->dev) &&
903                         ((struct sock *)ptype->data != skb->sk))
904                 {
905                         struct sk_buff *skb2;
906                         if ((skb2 = skb_clone(skb, GFP_ATOMIC)) == NULL)
907                                 break;
908
909                         /* skb->nh should be correctly
910                            set by sender, so that the second statement is
911                            just protection against buggy protocols.
912                          */
913                         skb2->mac.raw = skb2->data;
914
915                         if (skb2->nh.raw < skb2->data || skb2->nh.raw > skb2->tail) {
916                                 if (net_ratelimit())
917                                         printk(KERN_CRIT "protocol %04x is buggy, dev %s\n", skb2->protocol, dev->name);
918                                 skb2->nh.raw = skb2->data;
919                         }
920
921                         skb2->h.raw = skb2->nh.raw;
922                         skb2->pkt_type = PACKET_OUTGOING;
923                         ptype->func(skb2, skb->dev, ptype);
924                 }
925         }
926         br_read_unlock(BR_NETPROTO_LOCK);
927 }
928
929 /* Calculate csum in the case, when packet is misrouted.
930  * If it failed by some reason, ignore and send skb with wrong
931  * checksum.
932  */
933 struct sk_buff * skb_checksum_help(struct sk_buff *skb)
934 {
935         int offset;
936         unsigned int csum;
937
938         offset = skb->h.raw - skb->data;
939         if (offset > (int)skb->len)
940                 BUG();
941         csum = skb_checksum(skb, offset, skb->len-offset, 0);
942
943         offset = skb->tail - skb->h.raw;
944         if (offset <= 0)
945                 BUG();
946         if (skb->csum+2 > offset)
947                 BUG();
948
949         *(u16*)(skb->h.raw + skb->csum) = csum_fold(csum);
950         skb->ip_summed = CHECKSUM_NONE;
951         return skb;
952 }
953
954 #ifdef CONFIG_HIGHMEM
955 /* Actually, we should eliminate this check as soon as we know, that:
956  * 1. IOMMU is present and allows to map all the memory.
957  * 2. No high memory really exists on this machine.
958  */
959
960 static inline int
961 illegal_highdma(struct net_device *dev, struct sk_buff *skb)
962 {
963         int i;
964
965         if (dev->features&NETIF_F_HIGHDMA)
966                 return 0;
967
968         for (i=0; i<skb_shinfo(skb)->nr_frags; i++)
969                 if (skb_shinfo(skb)->frags[i].page >= highmem_start_page)
970                         return 1;
971
972         return 0;
973 }
974 #else
975 #define illegal_highdma(dev, skb)       (0)
976 #endif
977
978 /**
979  *      dev_queue_xmit - transmit a buffer
980  *      @skb: buffer to transmit
981  *      
982  *      Queue a buffer for transmission to a network device. The caller must
983  *      have set the device and priority and built the buffer before calling this 
984  *      function. The function can be called from an interrupt.
985  *
986  *      A negative errno code is returned on a failure. A success does not
987  *      guarantee the frame will be transmitted as it may be dropped due
988  *      to congestion or traffic shaping.
989  */
990
991 int dev_queue_xmit(struct sk_buff *skb)
992 {
993         struct net_device *dev = skb->dev;
994         struct Qdisc  *q;
995
996         if (skb_shinfo(skb)->frag_list &&
997             !(dev->features&NETIF_F_FRAGLIST) &&
998             skb_linearize(skb, GFP_ATOMIC) != 0) {
999                 kfree_skb(skb);
1000                 return -ENOMEM;
1001         }
1002
1003         /* Fragmented skb is linearized if device does not support SG,
1004          * or if at least one of fragments is in highmem and device
1005          * does not support DMA from it.
1006          */
1007         if (skb_shinfo(skb)->nr_frags &&
1008             (!(dev->features&NETIF_F_SG) || illegal_highdma(dev, skb)) &&
1009             skb_linearize(skb, GFP_ATOMIC) != 0) {
1010                 kfree_skb(skb);
1011                 return -ENOMEM;
1012         }
1013
1014         /* If packet is not checksummed and device does not support
1015          * checksumming for this protocol, complete checksumming here.
1016          */
1017         if (skb->ip_summed == CHECKSUM_HW &&
1018             (!(dev->features&(NETIF_F_HW_CSUM|NETIF_F_NO_CSUM)) &&
1019              (!(dev->features&NETIF_F_IP_CSUM) ||
1020               skb->protocol != htons(ETH_P_IP)))) {
1021                 if ((skb = skb_checksum_help(skb)) == NULL)
1022                         return -ENOMEM;
1023         }
1024
1025         /* Grab device queue */
1026         spin_lock_bh(&dev->queue_lock);
1027         q = dev->qdisc;
1028         if (q->enqueue) {
1029                 int ret = q->enqueue(skb, q);
1030
1031                 qdisc_run(dev);
1032
1033                 spin_unlock_bh(&dev->queue_lock);
1034                 return ret == NET_XMIT_BYPASS ? NET_XMIT_SUCCESS : ret;
1035         }
1036
1037         /* The device has no queue. Common case for software devices:
1038            loopback, all the sorts of tunnels...
1039
1040            Really, it is unlikely that xmit_lock protection is necessary here.
1041            (f.e. loopback and IP tunnels are clean ignoring statistics counters.)
1042            However, it is possible, that they rely on protection
1043            made by us here.
1044
1045            Check this and shot the lock. It is not prone from deadlocks.
1046            Either shot noqueue qdisc, it is even simpler 8)
1047          */
1048         if (dev->flags&IFF_UP) {
1049                 int cpu = smp_processor_id();
1050
1051                 if (dev->xmit_lock_owner != cpu) {
1052                         spin_unlock(&dev->queue_lock);
1053                         spin_lock(&dev->xmit_lock);
1054                         dev->xmit_lock_owner = cpu;
1055
1056                         if (!netif_queue_stopped(dev)) {
1057                                 if (netdev_nit)
1058                                         dev_queue_xmit_nit(skb,dev);
1059
1060                                 if (dev->hard_start_xmit(skb, dev) == 0) {
1061                                         dev->xmit_lock_owner = -1;
1062                                         spin_unlock_bh(&dev->xmit_lock);
1063                                         return 0;
1064                                 }
1065                         }
1066                         dev->xmit_lock_owner = -1;
1067                         spin_unlock_bh(&dev->xmit_lock);
1068                         if (net_ratelimit())
1069                                 printk(KERN_CRIT "Virtual device %s asks to queue packet!\n", dev->name);
1070                         kfree_skb(skb);
1071                         return -ENETDOWN;
1072                 } else {
1073                         /* Recursion is detected! It is possible, unfortunately */
1074                         if (net_ratelimit())
1075                                 printk(KERN_CRIT "Dead loop on virtual device %s, fix it urgently!\n", dev->name);
1076                 }
1077         }
1078         spin_unlock_bh(&dev->queue_lock);
1079
1080         kfree_skb(skb);
1081         return -ENETDOWN;
1082 }
1083
1084
1085 /*=======================================================================
1086                         Receiver routines
1087   =======================================================================*/
1088
1089 int netdev_max_backlog = 300;
1090 int weight_p = 64;            /* old backlog weight */
1091 /* These numbers are selected based on intuition and some
1092  * experimentatiom, if you have more scientific way of doing this
1093  * please go ahead and fix things.
1094  */
1095 int no_cong_thresh = 10;
1096 int no_cong = 20;
1097 int lo_cong = 100;
1098 int mod_cong = 290;
1099
1100 struct netif_rx_stats netdev_rx_stat[NR_CPUS];
1101
1102
1103 #ifdef CONFIG_NET_HW_FLOWCONTROL
1104 atomic_t netdev_dropping = ATOMIC_INIT(0);
1105 static unsigned long netdev_fc_mask = 1;
1106 unsigned long netdev_fc_xoff = 0;
1107 spinlock_t netdev_fc_lock = SPIN_LOCK_UNLOCKED;
1108
1109 static struct
1110 {
1111         void (*stimul)(struct net_device *);
1112         struct net_device *dev;
1113 } netdev_fc_slots[BITS_PER_LONG];
1114
1115 int netdev_register_fc(struct net_device *dev, void (*stimul)(struct net_device *dev))
1116 {
1117         int bit = 0;
1118         unsigned long flags;
1119
1120         spin_lock_irqsave(&netdev_fc_lock, flags);
1121         if (netdev_fc_mask != ~0UL) {
1122                 bit = ffz(netdev_fc_mask);
1123                 netdev_fc_slots[bit].stimul = stimul;
1124                 netdev_fc_slots[bit].dev = dev;
1125                 set_bit(bit, &netdev_fc_mask);
1126                 clear_bit(bit, &netdev_fc_xoff);
1127         }
1128         spin_unlock_irqrestore(&netdev_fc_lock, flags);
1129         return bit;
1130 }
1131
1132 void netdev_unregister_fc(int bit)
1133 {
1134         unsigned long flags;
1135
1136         spin_lock_irqsave(&netdev_fc_lock, flags);
1137         if (bit > 0) {
1138                 netdev_fc_slots[bit].stimul = NULL;
1139                 netdev_fc_slots[bit].dev = NULL;
1140                 clear_bit(bit, &netdev_fc_mask);
1141                 clear_bit(bit, &netdev_fc_xoff);
1142         }
1143         spin_unlock_irqrestore(&netdev_fc_lock, flags);
1144 }
1145
1146 static void netdev_wakeup(void)
1147 {
1148         unsigned long xoff;
1149
1150         spin_lock(&netdev_fc_lock);
1151         xoff = netdev_fc_xoff;
1152         netdev_fc_xoff = 0;
1153         while (xoff) {
1154                 int i = ffz(~xoff);
1155                 xoff &= ~(1<<i);
1156                 netdev_fc_slots[i].stimul(netdev_fc_slots[i].dev);
1157         }
1158         spin_unlock(&netdev_fc_lock);
1159 }
1160 #endif
1161
1162 static void get_sample_stats(int cpu)
1163 {
1164 #ifdef RAND_LIE
1165         unsigned long rd;
1166         int rq;
1167 #endif
1168         int blog = softnet_data[cpu].input_pkt_queue.qlen;
1169         int avg_blog = softnet_data[cpu].avg_blog;
1170
1171         avg_blog = (avg_blog >> 1)+ (blog >> 1);
1172
1173         if (avg_blog > mod_cong) {
1174                 /* Above moderate congestion levels. */
1175                 softnet_data[cpu].cng_level = NET_RX_CN_HIGH;
1176 #ifdef RAND_LIE
1177                 rd = net_random();
1178                 rq = rd % netdev_max_backlog;
1179                 if (rq < avg_blog) /* unlucky bastard */
1180                         softnet_data[cpu].cng_level = NET_RX_DROP;
1181 #endif
1182         } else if (avg_blog > lo_cong) {
1183                 softnet_data[cpu].cng_level = NET_RX_CN_MOD;
1184 #ifdef RAND_LIE
1185                 rd = net_random();
1186                 rq = rd % netdev_max_backlog;
1187                         if (rq < avg_blog) /* unlucky bastard */
1188                                 softnet_data[cpu].cng_level = NET_RX_CN_HIGH;
1189 #endif
1190         } else if (avg_blog > no_cong) 
1191                 softnet_data[cpu].cng_level = NET_RX_CN_LOW;
1192         else  /* no congestion */
1193                 softnet_data[cpu].cng_level = NET_RX_SUCCESS;
1194
1195         softnet_data[cpu].avg_blog = avg_blog;
1196 }
1197
1198 #ifdef OFFLINE_SAMPLE
1199 static void sample_queue(unsigned long dummy)
1200 {
1201 /* 10 ms 0r 1ms -- i dont care -- JHS */
1202         int next_tick = 1;
1203         int cpu = smp_processor_id();
1204
1205         get_sample_stats(cpu);
1206         next_tick += jiffies;
1207         mod_timer(&samp_timer, next_tick);
1208 }
1209 #endif
1210
1211
1212 /**
1213  *      netif_rx        -       post buffer to the network code
1214  *      @skb: buffer to post
1215  *
1216  *      This function receives a packet from a device driver and queues it for
1217  *      the upper (protocol) levels to process.  It always succeeds. The buffer
1218  *      may be dropped during processing for congestion control or by the 
1219  *      protocol layers.
1220  *      
1221  *      return values:
1222  *      NET_RX_SUCCESS  (no congestion)           
1223  *      NET_RX_CN_LOW     (low congestion) 
1224  *      NET_RX_CN_MOD     (moderate congestion)
1225  *      NET_RX_CN_HIGH    (high congestion) 
1226  *      NET_RX_DROP    (packet was dropped)
1227  *      
1228  *      
1229  */
1230
1231 int netif_rx(struct sk_buff *skb)
1232 {
1233         int this_cpu = smp_processor_id();
1234         struct softnet_data *queue;
1235         unsigned long flags;
1236
1237         if (skb->stamp.tv_sec == 0)
1238                 do_gettimeofday(&skb->stamp);
1239
1240         /* The code is rearranged so that the path is the most
1241            short when CPU is congested, but is still operating.
1242          */
1243         queue = &softnet_data[this_cpu];
1244
1245         local_irq_save(flags);
1246
1247         netdev_rx_stat[this_cpu].total++;
1248         if (queue->input_pkt_queue.qlen <= netdev_max_backlog) {
1249                 if (queue->input_pkt_queue.qlen) {
1250                         if (queue->throttle)
1251                                 goto drop;
1252
1253 enqueue:
1254                         dev_hold(skb->dev);
1255                         __skb_queue_tail(&queue->input_pkt_queue,skb);
1256                         local_irq_restore(flags);
1257 #ifndef OFFLINE_SAMPLE
1258                         get_sample_stats(this_cpu);
1259 #endif
1260                         return queue->cng_level;
1261                 }
1262
1263                 if (queue->throttle) {
1264                         queue->throttle = 0;
1265 #ifdef CONFIG_NET_HW_FLOWCONTROL
1266                         if (atomic_dec_and_test(&netdev_dropping))
1267                                 netdev_wakeup();
1268 #endif
1269                 }
1270
1271                 netif_rx_schedule(&queue->blog_dev);
1272                 goto enqueue;
1273         }
1274
1275         if (queue->throttle == 0) {
1276                 queue->throttle = 1;
1277                 netdev_rx_stat[this_cpu].throttled++;
1278 #ifdef CONFIG_NET_HW_FLOWCONTROL
1279                 atomic_inc(&netdev_dropping);
1280 #endif
1281         }
1282
1283 drop:
1284         netdev_rx_stat[this_cpu].dropped++;
1285         local_irq_restore(flags);
1286
1287         kfree_skb(skb);
1288         return NET_RX_DROP;
1289 }
1290
1291 /* Deliver skb to an old protocol, which is not threaded well
1292    or which do not understand shared skbs.
1293  */
1294 static int deliver_to_old_ones(struct packet_type *pt, struct sk_buff *skb, int last)
1295 {
1296         static spinlock_t net_bh_lock = SPIN_LOCK_UNLOCKED;
1297         int ret = NET_RX_DROP;
1298
1299
1300         if (!last) {
1301                 skb = skb_clone(skb, GFP_ATOMIC);
1302                 if (skb == NULL)
1303                         return ret;
1304         }
1305         if (skb_is_nonlinear(skb) && skb_linearize(skb, GFP_ATOMIC) != 0) {
1306                 kfree_skb(skb);
1307                 return ret;
1308         }
1309
1310         /* The assumption (correct one) is that old protocols
1311            did not depened on BHs different of NET_BH and TIMER_BH.
1312          */
1313
1314         /* Emulate NET_BH with special spinlock */
1315         spin_lock(&net_bh_lock);
1316
1317         /* Disable timers and wait for all timers completion */
1318         tasklet_disable(bh_task_vec+TIMER_BH);
1319
1320         ret = pt->func(skb, skb->dev, pt);
1321
1322         tasklet_hi_enable(bh_task_vec+TIMER_BH);
1323         spin_unlock(&net_bh_lock);
1324         return ret;
1325 }
1326
1327 static __inline__ void skb_bond(struct sk_buff *skb)
1328 {
1329         struct net_device *dev = skb->dev;
1330
1331         if (dev->master)
1332                 skb->dev = dev->master;
1333 }
1334
1335 static void net_tx_action(struct softirq_action *h)
1336 {
1337         int cpu = smp_processor_id();
1338
1339         if (softnet_data[cpu].completion_queue) {
1340                 struct sk_buff *clist;
1341
1342                 local_irq_disable();
1343                 clist = softnet_data[cpu].completion_queue;
1344                 softnet_data[cpu].completion_queue = NULL;
1345                 local_irq_enable();
1346
1347                 while (clist != NULL) {
1348                         struct sk_buff *skb = clist;
1349                         clist = clist->next;
1350
1351                         BUG_TRAP(atomic_read(&skb->users) == 0);
1352                         __kfree_skb(skb);
1353                 }
1354         }
1355
1356         if (softnet_data[cpu].output_queue) {
1357                 struct net_device *head;
1358
1359                 local_irq_disable();
1360                 head = softnet_data[cpu].output_queue;
1361                 softnet_data[cpu].output_queue = NULL;
1362                 local_irq_enable();
1363
1364                 while (head != NULL) {
1365                         struct net_device *dev = head;
1366                         head = head->next_sched;
1367
1368                         smp_mb__before_clear_bit();
1369                         clear_bit(__LINK_STATE_SCHED, &dev->state);
1370
1371                         if (spin_trylock(&dev->queue_lock)) {
1372                                 qdisc_run(dev);
1373                                 spin_unlock(&dev->queue_lock);
1374                         } else {
1375                                 netif_schedule(dev);
1376                         }
1377                 }
1378         }
1379 }
1380
1381
1382 #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
1383 int (*br_handle_frame_hook)(struct sk_buff *skb) = NULL;
1384 #endif
1385
1386 static __inline__ int handle_bridge(struct sk_buff *skb,
1387                                      struct packet_type *pt_prev)
1388 {
1389         int ret = NET_RX_DROP;
1390
1391         if (pt_prev) {
1392                 if (!pt_prev->data)
1393                         ret = deliver_to_old_ones(pt_prev, skb, 0);
1394                 else {
1395                         atomic_inc(&skb->users);
1396                         ret = pt_prev->func(skb, skb->dev, pt_prev);
1397                 }
1398         }
1399
1400         return ret;
1401 }
1402
1403
1404 #ifdef CONFIG_NET_DIVERT
1405 static inline int handle_diverter(struct sk_buff *skb)
1406 {
1407         /* if diversion is supported on device, then divert */
1408         if (skb->dev->divert && skb->dev->divert->divert)
1409                 divert_frame(skb);
1410         return 0;
1411 }
1412 #endif   /* CONFIG_NET_DIVERT */
1413
1414 int netif_receive_skb(struct sk_buff *skb)
1415 {
1416         struct packet_type *ptype, *pt_prev;
1417         int ret = NET_RX_DROP;
1418         unsigned short type = skb->protocol;
1419
1420         if (skb->stamp.tv_sec == 0)
1421                 do_gettimeofday(&skb->stamp);
1422
1423         skb_bond(skb);
1424
1425         netdev_rx_stat[smp_processor_id()].total++;
1426
1427 #ifdef CONFIG_NET_FASTROUTE
1428         if (skb->pkt_type == PACKET_FASTROUTE) {
1429                 netdev_rx_stat[smp_processor_id()].fastroute_deferred_out++;
1430                 return dev_queue_xmit(skb);
1431         }
1432 #endif
1433
1434         skb->h.raw = skb->nh.raw = skb->data;
1435
1436         pt_prev = NULL;
1437         for (ptype = ptype_all; ptype; ptype = ptype->next) {
1438                 if (!ptype->dev || ptype->dev == skb->dev) {
1439                         if (pt_prev) {
1440                                 if (!pt_prev->data) {
1441                                         ret = deliver_to_old_ones(pt_prev, skb, 0);
1442                                 } else {
1443                                         atomic_inc(&skb->users);
1444                                         ret = pt_prev->func(skb, skb->dev, pt_prev);
1445                                 }
1446                         }
1447                         pt_prev = ptype;
1448                 }
1449         }
1450
1451 #ifdef CONFIG_NET_DIVERT
1452         if (skb->dev->divert && skb->dev->divert->divert)
1453                 ret = handle_diverter(skb);
1454 #endif /* CONFIG_NET_DIVERT */
1455                         
1456 #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
1457         if (skb->dev->br_port != NULL &&
1458             br_handle_frame_hook != NULL) {
1459                 int ret;
1460
1461                 ret = handle_bridge(skb, pt_prev);
1462                 if (br_handle_frame_hook(skb) == 0)
1463                         return ret;
1464                 pt_prev = NULL;
1465         }
1466 #endif
1467
1468         for (ptype=ptype_base[ntohs(type)&15];ptype;ptype=ptype->next) {
1469                 if (ptype->type == type &&
1470                     (!ptype->dev || ptype->dev == skb->dev)) {
1471                         if (pt_prev) {
1472                                 if (!pt_prev->data) {
1473                                         ret = deliver_to_old_ones(pt_prev, skb, 0);
1474                                 } else {
1475                                         atomic_inc(&skb->users);
1476                                         ret = pt_prev->func(skb, skb->dev, pt_prev);
1477                                 }
1478                         }
1479                         pt_prev = ptype;
1480                 }
1481         }
1482
1483         if (pt_prev) {
1484                 if (!pt_prev->data) {
1485                         ret = deliver_to_old_ones(pt_prev, skb, 1);
1486                 } else {
1487                         ret = pt_prev->func(skb, skb->dev, pt_prev);
1488                 }
1489         } else {
1490                 kfree_skb(skb);
1491                 /* Jamal, now you will not able to escape explaining
1492                  * me how you were going to use this. :-)
1493                  */
1494                 ret = NET_RX_DROP;
1495         }
1496
1497         return ret;
1498 }
1499
1500 static int process_backlog(struct net_device *blog_dev, int *budget)
1501 {
1502         int work = 0;
1503         int quota = min(blog_dev->quota, *budget);
1504         int this_cpu = smp_processor_id();
1505         struct softnet_data *queue = &softnet_data[this_cpu];
1506         unsigned long start_time = jiffies;
1507
1508         for (;;) {
1509                 struct sk_buff *skb;
1510                 struct net_device *dev;
1511
1512                 local_irq_disable();
1513                 skb = __skb_dequeue(&queue->input_pkt_queue);
1514                 if (skb == NULL)
1515                         goto job_done;
1516                 local_irq_enable();
1517
1518                 dev = skb->dev;
1519
1520                 netif_receive_skb(skb);
1521
1522                 dev_put(dev);
1523
1524                 work++;
1525
1526                 if (work >= quota || jiffies - start_time > 1)
1527                         break;
1528
1529 #ifdef CONFIG_NET_HW_FLOWCONTROL
1530                 if (queue->throttle && queue->input_pkt_queue.qlen < no_cong_thresh ) {
1531                         if (atomic_dec_and_test(&netdev_dropping)) {
1532                                 queue->throttle = 0;
1533                                 netdev_wakeup();
1534                                 break;
1535                         }
1536                 }
1537 #endif
1538         }
1539
1540         blog_dev->quota -= work;
1541         *budget -= work;
1542         return -1;
1543
1544 job_done:
1545         blog_dev->quota -= work;
1546         *budget -= work;
1547
1548         list_del(&blog_dev->poll_list);
1549         clear_bit(__LINK_STATE_RX_SCHED, &blog_dev->state);
1550
1551         if (queue->throttle) {
1552                 queue->throttle = 0;
1553 #ifdef CONFIG_NET_HW_FLOWCONTROL
1554                 if (atomic_dec_and_test(&netdev_dropping))
1555                         netdev_wakeup();
1556 #endif
1557         }
1558         local_irq_enable();
1559         return 0;
1560 }
1561
1562 static void net_rx_action(struct softirq_action *h)
1563 {
1564         int this_cpu = smp_processor_id();
1565         struct softnet_data *queue = &softnet_data[this_cpu];
1566         unsigned long start_time = jiffies;
1567         int budget = netdev_max_backlog;
1568
1569         br_read_lock(BR_NETPROTO_LOCK);
1570         local_irq_disable();
1571
1572         while (!list_empty(&queue->poll_list)) {
1573                 struct net_device *dev;
1574
1575                 if (budget <= 0 || jiffies - start_time > 1)
1576                         goto softnet_break;
1577
1578                 local_irq_enable();
1579
1580                 dev = list_entry(queue->poll_list.next, struct net_device, poll_list);
1581
1582                 if (dev->quota <= 0 || dev->poll(dev, &budget)) {
1583                         local_irq_disable();
1584                         list_del(&dev->poll_list);
1585                         list_add_tail(&dev->poll_list, &queue->poll_list);
1586                         if (dev->quota < 0)
1587                                 dev->quota += dev->weight;
1588                         else
1589                                 dev->quota = dev->weight;
1590                 } else {
1591                         dev_put(dev);
1592                         local_irq_disable();
1593                 }
1594         }
1595
1596         local_irq_enable();
1597         br_read_unlock(BR_NETPROTO_LOCK);
1598         return;
1599
1600 softnet_break:
1601         netdev_rx_stat[this_cpu].time_squeeze++;
1602         __cpu_raise_softirq(this_cpu, NET_RX_SOFTIRQ);
1603
1604         local_irq_enable();
1605         br_read_unlock(BR_NETPROTO_LOCK);
1606 }
1607
1608 static gifconf_func_t * gifconf_list [NPROTO];
1609
1610 /**
1611  *      register_gifconf        -       register a SIOCGIF handler
1612  *      @family: Address family
1613  *      @gifconf: Function handler
1614  *
1615  *      Register protocol dependent address dumping routines. The handler
1616  *      that is passed must not be freed or reused until it has been replaced
1617  *      by another handler.
1618  */
1619  
1620 int register_gifconf(unsigned int family, gifconf_func_t * gifconf)
1621 {
1622         if (family>=NPROTO)
1623                 return -EINVAL;
1624         gifconf_list[family] = gifconf;
1625         return 0;
1626 }
1627
1628
1629 /*
1630  *      Map an interface index to its name (SIOCGIFNAME)
1631  */
1632
1633 /*
1634  *      We need this ioctl for efficient implementation of the
1635  *      if_indextoname() function required by the IPv6 API.  Without
1636  *      it, we would have to search all the interfaces to find a
1637  *      match.  --pb
1638  */
1639
1640 static int dev_ifname(struct ifreq *arg)
1641 {
1642         struct net_device *dev;
1643         struct ifreq ifr;
1644
1645         /*
1646          *      Fetch the caller's info block. 
1647          */
1648         
1649         if (copy_from_user(&ifr, arg, sizeof(struct ifreq)))
1650                 return -EFAULT;
1651
1652         read_lock(&dev_base_lock);
1653         dev = __dev_get_by_index(ifr.ifr_ifindex);
1654         if (!dev) {
1655                 read_unlock(&dev_base_lock);
1656                 return -ENODEV;
1657         }
1658
1659         strcpy(ifr.ifr_name, dev->name);
1660         read_unlock(&dev_base_lock);
1661
1662         if (copy_to_user(arg, &ifr, sizeof(struct ifreq)))
1663                 return -EFAULT;
1664         return 0;
1665 }
1666
1667 /*
1668  *      Perform a SIOCGIFCONF call. This structure will change
1669  *      size eventually, and there is nothing I can do about it.
1670  *      Thus we will need a 'compatibility mode'.
1671  */
1672
1673 static int dev_ifconf(char *arg)
1674 {
1675         struct ifconf ifc;
1676         struct net_device *dev;
1677         char *pos;
1678         int len;
1679         int total;
1680         int i;
1681
1682         /*
1683          *      Fetch the caller's info block. 
1684          */
1685         
1686         if (copy_from_user(&ifc, arg, sizeof(struct ifconf)))
1687                 return -EFAULT;
1688
1689         pos = ifc.ifc_buf;
1690         len = ifc.ifc_len;
1691
1692         /*
1693          *      Loop over the interfaces, and write an info block for each. 
1694          */
1695
1696         total = 0;
1697         for (dev = dev_base; dev != NULL; dev = dev->next) {
1698                 for (i=0; i<NPROTO; i++) {
1699                         if (gifconf_list[i]) {
1700                                 int done;
1701                                 if (pos==NULL) {
1702                                         done = gifconf_list[i](dev, NULL, 0);
1703                                 } else {
1704                                         done = gifconf_list[i](dev, pos+total, len-total);
1705                                 }
1706                                 if (done<0) {
1707                                         return -EFAULT;
1708                                 }
1709                                 total += done;
1710                         }
1711                 }
1712         }
1713
1714         /*
1715          *      All done.  Write the updated control block back to the caller. 
1716          */
1717         ifc.ifc_len = total;
1718
1719         if (copy_to_user(arg, &ifc, sizeof(struct ifconf)))
1720                 return -EFAULT; 
1721
1722         /* 
1723          *      Both BSD and Solaris return 0 here, so we do too.
1724          */
1725         return 0;
1726 }
1727
1728 /*
1729  *      This is invoked by the /proc filesystem handler to display a device
1730  *      in detail.
1731  */
1732
1733 #ifdef CONFIG_PROC_FS
1734
1735 static int sprintf_stats(char *buffer, struct net_device *dev)
1736 {
1737         struct net_device_stats *stats = (dev->get_stats ? dev->get_stats(dev): NULL);
1738         int size;
1739         
1740         if (stats)
1741                 size = sprintf(buffer, "%6s:%8lu %7lu %4lu %4lu %4lu %5lu %10lu %9lu %8lu %7lu %4lu %4lu %4lu %5lu %7lu %10lu\n",
1742                    dev->name,
1743                    stats->rx_bytes,
1744                    stats->rx_packets, stats->rx_errors,
1745                    stats->rx_dropped + stats->rx_missed_errors,
1746                    stats->rx_fifo_errors,
1747                    stats->rx_length_errors + stats->rx_over_errors
1748                    + stats->rx_crc_errors + stats->rx_frame_errors,
1749                    stats->rx_compressed, stats->multicast,
1750                    stats->tx_bytes,
1751                    stats->tx_packets, stats->tx_errors, stats->tx_dropped,
1752                    stats->tx_fifo_errors, stats->collisions,
1753                    stats->tx_carrier_errors + stats->tx_aborted_errors
1754                    + stats->tx_window_errors + stats->tx_heartbeat_errors,
1755                    stats->tx_compressed);
1756         else
1757                 size = sprintf(buffer, "%6s: No statistics available.\n", dev->name);
1758
1759         return size;
1760 }
1761
1762 /*
1763  *      Called from the PROCfs module. This now uses the new arbitrary sized /proc/net interface
1764  *      to create /proc/net/dev
1765  */
1766  
1767 static int dev_get_info(char *buffer, char **start, off_t offset, int length)
1768 {
1769         int len = 0;
1770         off_t begin = 0;
1771         off_t pos = 0;
1772         int size;
1773         struct net_device *dev;
1774
1775
1776         size = sprintf(buffer, 
1777                 "Inter-|   Receive                                                |  Transmit\n"
1778                 " face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed\n");
1779         
1780         pos += size;
1781         len += size;
1782         
1783
1784         read_lock(&dev_base_lock);
1785         for (dev = dev_base; dev != NULL; dev = dev->next) {
1786                 size = sprintf_stats(buffer+len, dev);
1787                 len += size;
1788                 pos = begin + len;
1789                                 
1790                 if (pos < offset) {
1791                         len = 0;
1792                         begin = pos;
1793                 }
1794                 if (pos > offset + length)
1795                         break;
1796         }
1797         read_unlock(&dev_base_lock);
1798
1799         *start = buffer + (offset - begin);     /* Start of wanted data */
1800         len -= (offset - begin);                /* Start slop */
1801         if (len > length)
1802                 len = length;                   /* Ending slop */
1803         if (len < 0)
1804                 len = 0;
1805         return len;
1806 }
1807
1808 static int dev_proc_stats(char *buffer, char **start, off_t offset,
1809                           int length, int *eof, void *data)
1810 {
1811         int i, lcpu;
1812         int len=0;
1813
1814         for (lcpu=0; lcpu<smp_num_cpus; lcpu++) {
1815                 i = cpu_logical_map(lcpu);
1816                 len += sprintf(buffer+len, "%08x %08x %08x %08x %08x %08x %08x %08x %08x\n",
1817                                netdev_rx_stat[i].total,
1818                                netdev_rx_stat[i].dropped,
1819                                netdev_rx_stat[i].time_squeeze,
1820                                netdev_rx_stat[i].throttled,
1821                                netdev_rx_stat[i].fastroute_hit,
1822                                netdev_rx_stat[i].fastroute_success,
1823                                netdev_rx_stat[i].fastroute_defer,
1824                                netdev_rx_stat[i].fastroute_deferred_out,
1825 #if 0
1826                                netdev_rx_stat[i].fastroute_latency_reduction
1827 #else
1828                                netdev_rx_stat[i].cpu_collision
1829 #endif
1830                                );
1831         }
1832
1833         len -= offset;
1834
1835         if (len > length)
1836                 len = length;
1837         if (len < 0)
1838                 len = 0;
1839
1840         *start = buffer + offset;
1841         *eof = 1;
1842
1843         return len;
1844 }
1845
1846 #endif  /* CONFIG_PROC_FS */
1847
1848
1849 /**
1850  *      netdev_set_master       -       set up master/slave pair
1851  *      @slave: slave device
1852  *      @master: new master device
1853  *
1854  *      Changes the master device of the slave. Pass %NULL to break the
1855  *      bonding. The caller must hold the RTNL semaphore. On a failure
1856  *      a negative errno code is returned. On success the reference counts
1857  *      are adjusted, %RTM_NEWLINK is sent to the routing socket and the
1858  *      function returns zero.
1859  */
1860  
1861 int netdev_set_master(struct net_device *slave, struct net_device *master)
1862 {
1863         struct net_device *old = slave->master;
1864
1865         ASSERT_RTNL();
1866
1867         if (master) {
1868                 if (old)
1869                         return -EBUSY;
1870                 dev_hold(master);
1871         }
1872
1873         br_write_lock_bh(BR_NETPROTO_LOCK);
1874         slave->master = master;
1875         br_write_unlock_bh(BR_NETPROTO_LOCK);
1876
1877         if (old)
1878                 dev_put(old);
1879
1880         if (master)
1881                 slave->flags |= IFF_SLAVE;
1882         else
1883                 slave->flags &= ~IFF_SLAVE;
1884
1885         rtmsg_ifinfo(RTM_NEWLINK, slave, IFF_SLAVE);
1886         return 0;
1887 }
1888
1889 /**
1890  *      dev_set_promiscuity     - update promiscuity count on a device
1891  *      @dev: device
1892  *      @inc: modifier
1893  *
1894  *      Add or remove promsicuity from a device. While the count in the device
1895  *      remains above zero the interface remains promiscuous. Once it hits zero
1896  *      the device reverts back to normal filtering operation. A negative inc
1897  *      value is used to drop promiscuity on the device.
1898  */
1899  
1900 void dev_set_promiscuity(struct net_device *dev, int inc)
1901 {
1902         unsigned short old_flags = dev->flags;
1903
1904         dev->flags |= IFF_PROMISC;
1905         if ((dev->promiscuity += inc) == 0)
1906                 dev->flags &= ~IFF_PROMISC;
1907         if (dev->flags^old_flags) {
1908 #ifdef CONFIG_NET_FASTROUTE
1909                 if (dev->flags&IFF_PROMISC) {
1910                         netdev_fastroute_obstacles++;
1911                         dev_clear_fastroute(dev);
1912                 } else
1913                         netdev_fastroute_obstacles--;
1914 #endif
1915                 dev_mc_upload(dev);
1916                 printk(KERN_INFO "device %s %s promiscuous mode\n",
1917                        dev->name, (dev->flags&IFF_PROMISC) ? "entered" : "left");
1918         }
1919 }
1920
1921 /**
1922  *      dev_set_allmulti        - update allmulti count on a device
1923  *      @dev: device
1924  *      @inc: modifier
1925  *
1926  *      Add or remove reception of all multicast frames to a device. While the
1927  *      count in the device remains above zero the interface remains listening
1928  *      to all interfaces. Once it hits zero the device reverts back to normal
1929  *      filtering operation. A negative @inc value is used to drop the counter
1930  *      when releasing a resource needing all multicasts.
1931  */
1932
1933 void dev_set_allmulti(struct net_device *dev, int inc)
1934 {
1935         unsigned short old_flags = dev->flags;
1936
1937         dev->flags |= IFF_ALLMULTI;
1938         if ((dev->allmulti += inc) == 0)
1939                 dev->flags &= ~IFF_ALLMULTI;
1940         if (dev->flags^old_flags)
1941                 dev_mc_upload(dev);
1942 }
1943
1944 int dev_change_flags(struct net_device *dev, unsigned flags)
1945 {
1946         int ret;
1947         int old_flags = dev->flags;
1948
1949         /*
1950          *      Set the flags on our device.
1951          */
1952
1953         dev->flags = (flags & (IFF_DEBUG|IFF_NOTRAILERS|IFF_NOARP|IFF_DYNAMIC|
1954                                IFF_MULTICAST|IFF_PORTSEL|IFF_AUTOMEDIA)) |
1955                                        (dev->flags & (IFF_UP|IFF_VOLATILE|IFF_PROMISC|IFF_ALLMULTI));
1956
1957         /*
1958          *      Load in the correct multicast list now the flags have changed.
1959          */                             
1960
1961         dev_mc_upload(dev);
1962
1963         /*
1964          *      Have we downed the interface. We handle IFF_UP ourselves
1965          *      according to user attempts to set it, rather than blindly
1966          *      setting it.
1967          */
1968
1969         ret = 0;
1970         if ((old_flags^flags)&IFF_UP)   /* Bit is different  ? */
1971         {
1972                 ret = ((old_flags & IFF_UP) ? dev_close : dev_open)(dev);
1973
1974                 if (ret == 0) 
1975                         dev_mc_upload(dev);
1976         }
1977
1978         if (dev->flags&IFF_UP &&
1979             ((old_flags^dev->flags)&~(IFF_UP|IFF_PROMISC|IFF_ALLMULTI|IFF_VOLATILE)))
1980                 notifier_call_chain(&netdev_chain, NETDEV_CHANGE, dev);
1981
1982         if ((flags^dev->gflags)&IFF_PROMISC) {
1983                 int inc = (flags&IFF_PROMISC) ? +1 : -1;
1984                 dev->gflags ^= IFF_PROMISC;
1985                 dev_set_promiscuity(dev, inc);
1986         }
1987
1988         /* NOTE: order of synchronization of IFF_PROMISC and IFF_ALLMULTI
1989            is important. Some (broken) drivers set IFF_PROMISC, when
1990            IFF_ALLMULTI is requested not asking us and not reporting.
1991          */
1992         if ((flags^dev->gflags)&IFF_ALLMULTI) {
1993                 int inc = (flags&IFF_ALLMULTI) ? +1 : -1;
1994                 dev->gflags ^= IFF_ALLMULTI;
1995                 dev_set_allmulti(dev, inc);
1996         }
1997
1998         if (old_flags^dev->flags)
1999                 rtmsg_ifinfo(RTM_NEWLINK, dev, old_flags^dev->flags);
2000
2001         return ret;
2002 }
2003
2004 /*
2005  *      Perform the SIOCxIFxxx calls. 
2006  */
2007  
2008 static int dev_ifsioc(struct ifreq *ifr, unsigned int cmd)
2009 {
2010         struct net_device *dev;
2011         int err;
2012
2013         if ((dev = __dev_get_by_name(ifr->ifr_name)) == NULL)
2014                 return -ENODEV;
2015
2016         switch(cmd) 
2017         {
2018                 case SIOCGIFFLAGS:      /* Get interface flags */
2019                         ifr->ifr_flags = (dev->flags&~(IFF_PROMISC|IFF_ALLMULTI|IFF_RUNNING))
2020                                 |(dev->gflags&(IFF_PROMISC|IFF_ALLMULTI));
2021                         if (netif_running(dev) && netif_carrier_ok(dev))
2022                                 ifr->ifr_flags |= IFF_RUNNING;
2023                         return 0;
2024
2025                 case SIOCSIFFLAGS:      /* Set interface flags */
2026                         return dev_change_flags(dev, ifr->ifr_flags);
2027                 
2028                 case SIOCGIFMETRIC:     /* Get the metric on the interface (currently unused) */
2029                         ifr->ifr_metric = 0;
2030                         return 0;
2031                         
2032                 case SIOCSIFMETRIC:     /* Set the metric on the interface (currently unused) */
2033                         return -EOPNOTSUPP;
2034         
2035                 case SIOCGIFMTU:        /* Get the MTU of a device */
2036                         ifr->ifr_mtu = dev->mtu;
2037                         return 0;
2038         
2039                 case SIOCSIFMTU:        /* Set the MTU of a device */
2040                         if (ifr->ifr_mtu == dev->mtu)
2041                                 return 0;
2042
2043                         /*
2044                          *      MTU must be positive.
2045                          */
2046                          
2047                         if (ifr->ifr_mtu<0)
2048                                 return -EINVAL;
2049
2050                         if (!netif_device_present(dev))
2051                                 return -ENODEV;
2052
2053                         if (dev->change_mtu)
2054                                 err = dev->change_mtu(dev, ifr->ifr_mtu);
2055                         else {
2056                                 dev->mtu = ifr->ifr_mtu;
2057                                 err = 0;
2058                         }
2059                         if (!err && dev->flags&IFF_UP)
2060                                 notifier_call_chain(&netdev_chain, NETDEV_CHANGEMTU, dev);
2061                         return err;
2062
2063                 case SIOCGIFHWADDR:
2064                         memcpy(ifr->ifr_hwaddr.sa_data,dev->dev_addr, MAX_ADDR_LEN);
2065                         ifr->ifr_hwaddr.sa_family=dev->type;
2066                         return 0;
2067                                 
2068                 case SIOCSIFHWADDR:
2069                         if (dev->set_mac_address == NULL)
2070                                 return -EOPNOTSUPP;
2071                         if (ifr->ifr_hwaddr.sa_family!=dev->type)
2072                                 return -EINVAL;
2073                         if (!netif_device_present(dev))
2074                                 return -ENODEV;
2075                         err = dev->set_mac_address(dev, &ifr->ifr_hwaddr);
2076                         if (!err)
2077                                 notifier_call_chain(&netdev_chain, NETDEV_CHANGEADDR, dev);
2078                         return err;
2079                         
2080                 case SIOCSIFHWBROADCAST:
2081                         if (ifr->ifr_hwaddr.sa_family!=dev->type)
2082                                 return -EINVAL;
2083                         memcpy(dev->broadcast, ifr->ifr_hwaddr.sa_data, MAX_ADDR_LEN);
2084                         notifier_call_chain(&netdev_chain, NETDEV_CHANGEADDR, dev);
2085                         return 0;
2086
2087                 case SIOCGIFMAP:
2088                         ifr->ifr_map.mem_start=dev->mem_start;
2089                         ifr->ifr_map.mem_end=dev->mem_end;
2090                         ifr->ifr_map.base_addr=dev->base_addr;
2091                         ifr->ifr_map.irq=dev->irq;
2092                         ifr->ifr_map.dma=dev->dma;
2093                         ifr->ifr_map.port=dev->if_port;
2094                         return 0;
2095                         
2096                 case SIOCSIFMAP:
2097                         if (dev->set_config) {
2098                                 if (!netif_device_present(dev))
2099                                         return -ENODEV;
2100                                 return dev->set_config(dev,&ifr->ifr_map);
2101                         }
2102                         return -EOPNOTSUPP;
2103                         
2104                 case SIOCADDMULTI:
2105                         if (dev->set_multicast_list == NULL ||
2106                             ifr->ifr_hwaddr.sa_family != AF_UNSPEC)
2107                                 return -EINVAL;
2108                         if (!netif_device_present(dev))
2109                                 return -ENODEV;
2110                         dev_mc_add(dev,ifr->ifr_hwaddr.sa_data, dev->addr_len, 1);
2111                         return 0;
2112
2113                 case SIOCDELMULTI:
2114                         if (dev->set_multicast_list == NULL ||
2115                             ifr->ifr_hwaddr.sa_family!=AF_UNSPEC)
2116                                 return -EINVAL;
2117                         if (!netif_device_present(dev))
2118                                 return -ENODEV;
2119                         dev_mc_delete(dev,ifr->ifr_hwaddr.sa_data,dev->addr_len, 1);
2120                         return 0;
2121
2122                 case SIOCGIFINDEX:
2123                         ifr->ifr_ifindex = dev->ifindex;
2124                         return 0;
2125
2126                 case SIOCGIFTXQLEN:
2127                         ifr->ifr_qlen = dev->tx_queue_len;
2128                         return 0;
2129
2130                 case SIOCSIFTXQLEN:
2131                         if (ifr->ifr_qlen<0)
2132                                 return -EINVAL;
2133                         dev->tx_queue_len = ifr->ifr_qlen;
2134                         return 0;
2135
2136                 case SIOCSIFNAME:
2137                         if (dev->flags&IFF_UP)
2138                                 return -EBUSY;
2139                         if (__dev_get_by_name(ifr->ifr_newname))
2140                                 return -EEXIST;
2141                         memcpy(dev->name, ifr->ifr_newname, IFNAMSIZ);
2142                         dev->name[IFNAMSIZ-1] = 0;
2143                         notifier_call_chain(&netdev_chain, NETDEV_CHANGENAME, dev);
2144                         return 0;
2145
2146                 /*
2147                  *      Unknown or private ioctl
2148                  */
2149
2150                 default:
2151                         if ((cmd >= SIOCDEVPRIVATE &&
2152                             cmd <= SIOCDEVPRIVATE + 15) ||
2153                             cmd == SIOCBONDENSLAVE ||
2154                             cmd == SIOCBONDRELEASE ||
2155                             cmd == SIOCBONDSETHWADDR ||
2156                             cmd == SIOCBONDSLAVEINFOQUERY ||
2157                             cmd == SIOCBONDINFOQUERY ||
2158                             cmd == SIOCBONDCHANGEACTIVE ||
2159                             cmd == SIOCETHTOOL ||
2160                             cmd == SIOCGMIIPHY ||
2161                             cmd == SIOCGMIIREG ||
2162                             cmd == SIOCSMIIREG ||
2163                             cmd == SIOCWANDEV) {
2164                                 if (dev->do_ioctl) {
2165                                         if (!netif_device_present(dev))
2166                                                 return -ENODEV;
2167                                         return dev->do_ioctl(dev, ifr, cmd);
2168                                 }
2169                                 return -EOPNOTSUPP;
2170                         }
2171
2172         }
2173         return -EINVAL;
2174 }
2175
2176 /*
2177  *      This function handles all "interface"-type I/O control requests. The actual
2178  *      'doing' part of this is dev_ifsioc above.
2179  */
2180
2181 /**
2182  *      dev_ioctl       -       network device ioctl
2183  *      @cmd: command to issue
2184  *      @arg: pointer to a struct ifreq in user space
2185  *
2186  *      Issue ioctl functions to devices. This is normally called by the
2187  *      user space syscall interfaces but can sometimes be useful for 
2188  *      other purposes. The return value is the return from the syscall if
2189  *      positive or a negative errno code on error.
2190  */
2191
2192 int dev_ioctl(unsigned int cmd, void *arg)
2193 {
2194         struct ifreq ifr;
2195         int ret;
2196         char *colon;
2197
2198         /* One special case: SIOCGIFCONF takes ifconf argument
2199            and requires shared lock, because it sleeps writing
2200            to user space.
2201          */
2202            
2203         if (cmd == SIOCGIFCONF) {
2204                 rtnl_shlock();
2205                 ret = dev_ifconf((char *) arg);
2206                 rtnl_shunlock();
2207                 return ret;
2208         }
2209         if (cmd == SIOCGIFNAME) {
2210                 return dev_ifname((struct ifreq *)arg);
2211         }
2212
2213         if (copy_from_user(&ifr, arg, sizeof(struct ifreq)))
2214                 return -EFAULT;
2215
2216         ifr.ifr_name[IFNAMSIZ-1] = 0;
2217
2218         colon = strchr(ifr.ifr_name, ':');
2219         if (colon)
2220                 *colon = 0;
2221
2222         /*
2223          *      See which interface the caller is talking about. 
2224          */
2225          
2226         switch(cmd) 
2227         {
2228                 /*
2229                  *      These ioctl calls:
2230                  *      - can be done by all.
2231                  *      - atomic and do not require locking.
2232                  *      - return a value
2233                  */
2234                  
2235                 case SIOCGIFFLAGS:
2236                 case SIOCGIFMETRIC:
2237                 case SIOCGIFMTU:
2238                 case SIOCGIFHWADDR:
2239                 case SIOCGIFSLAVE:
2240                 case SIOCGIFMAP:
2241                 case SIOCGIFINDEX:
2242                 case SIOCGIFTXQLEN:
2243                         dev_load(ifr.ifr_name);
2244                         read_lock(&dev_base_lock);
2245                         ret = dev_ifsioc(&ifr, cmd);
2246                         read_unlock(&dev_base_lock);
2247                         if (!ret) {
2248                                 if (colon)
2249                                         *colon = ':';
2250                                 if (copy_to_user(arg, &ifr, sizeof(struct ifreq)))
2251                                         return -EFAULT;
2252                         }
2253                         return ret;
2254
2255                 /*
2256                  *      These ioctl calls:
2257                  *      - require superuser power.
2258                  *      - require strict serialization.
2259                  *      - return a value
2260                  */
2261                  
2262                 case SIOCETHTOOL:
2263                 case SIOCGMIIPHY:
2264                 case SIOCGMIIREG:
2265                         if (!capable(CAP_NET_ADMIN))
2266                                 return -EPERM;
2267                         dev_load(ifr.ifr_name);
2268                         dev_probe_lock();
2269                         rtnl_lock();
2270                         ret = dev_ifsioc(&ifr, cmd);
2271                         rtnl_unlock();
2272                         dev_probe_unlock();
2273                         if (!ret) {
2274                                 if (colon)
2275                                         *colon = ':';
2276                                 if (copy_to_user(arg, &ifr, sizeof(struct ifreq)))
2277                                         return -EFAULT;
2278                         }
2279                         return ret;
2280
2281                 /*
2282                  *      These ioctl calls:
2283                  *      - require superuser power.
2284                  *      - require strict serialization.
2285                  *      - do not return a value
2286                  */
2287                  
2288                 case SIOCSIFFLAGS:
2289                 case SIOCSIFMETRIC:
2290                 case SIOCSIFMTU:
2291                 case SIOCSIFMAP:
2292                 case SIOCSIFHWADDR:
2293                 case SIOCSIFSLAVE:
2294                 case SIOCADDMULTI:
2295                 case SIOCDELMULTI:
2296                 case SIOCSIFHWBROADCAST:
2297                 case SIOCSIFTXQLEN:
2298                 case SIOCSIFNAME:
2299                 case SIOCSMIIREG:
2300                 case SIOCBONDENSLAVE:
2301                 case SIOCBONDRELEASE:
2302                 case SIOCBONDSETHWADDR:
2303                 case SIOCBONDSLAVEINFOQUERY:
2304                 case SIOCBONDINFOQUERY:
2305                 case SIOCBONDCHANGEACTIVE:
2306                         if (!capable(CAP_NET_ADMIN))
2307                                 return -EPERM;
2308                         dev_load(ifr.ifr_name);
2309                         dev_probe_lock();
2310                         rtnl_lock();
2311                         ret = dev_ifsioc(&ifr, cmd);
2312                         rtnl_unlock();
2313                         dev_probe_unlock();
2314                         return ret;
2315         
2316                 case SIOCGIFMEM:
2317                         /* Get the per device memory space. We can add this but currently
2318                            do not support it */
2319                 case SIOCSIFMEM:
2320                         /* Set the per device memory buffer space. Not applicable in our case */
2321                 case SIOCSIFLINK:
2322                         return -EINVAL;
2323
2324                 /*
2325                  *      Unknown or private ioctl.
2326                  */     
2327                  
2328                 default:
2329                         if (cmd == SIOCWANDEV ||
2330                             (cmd >= SIOCDEVPRIVATE &&
2331                              cmd <= SIOCDEVPRIVATE + 15)) {
2332                                 dev_load(ifr.ifr_name);
2333                                 dev_probe_lock();
2334                                 rtnl_lock();
2335                                 ret = dev_ifsioc(&ifr, cmd);
2336                                 rtnl_unlock();
2337                                 dev_probe_unlock();
2338                                 if (!ret && copy_to_user(arg, &ifr, sizeof(struct ifreq)))
2339                                         return -EFAULT;
2340                                 return ret;
2341                         }
2342 #ifdef WIRELESS_EXT
2343                         /* Take care of Wireless Extensions */
2344                         if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) {
2345                                 /* If command is `set a parameter', or
2346                                  * `get the encoding parameters', check if
2347                                  * the user has the right to do it */
2348                                 if (IW_IS_SET(cmd) || (cmd == SIOCGIWENCODE)) {
2349                                         if(!capable(CAP_NET_ADMIN))
2350                                                 return -EPERM;
2351                                 }
2352                                 dev_load(ifr.ifr_name);
2353                                 rtnl_lock();
2354                                 /* Follow me in net/core/wireless.c */
2355                                 ret = wireless_process_ioctl(&ifr, cmd);
2356                                 rtnl_unlock();
2357                                 if (!ret && IW_IS_GET(cmd) &&
2358                                     copy_to_user(arg, &ifr, sizeof(struct ifreq)))
2359                                         return -EFAULT;
2360                                 return ret;
2361                         }
2362 #endif  /* WIRELESS_EXT */
2363                         return -EINVAL;
2364         }
2365 }
2366
2367
2368 /**
2369  *      dev_new_index   -       allocate an ifindex
2370  *
2371  *      Returns a suitable unique value for a new device interface
2372  *      number.  The caller must hold the rtnl semaphore or the
2373  *      dev_base_lock to be sure it remains unique.
2374  */
2375  
2376 int dev_new_index(void)
2377 {
2378         static int ifindex;
2379         for (;;) {
2380                 if (++ifindex <= 0)
2381                         ifindex=1;
2382                 if (__dev_get_by_index(ifindex) == NULL)
2383                         return ifindex;
2384         }
2385 }
2386
2387 static int dev_boot_phase = 1;
2388
2389 /**
2390  *      register_netdevice      - register a network device
2391  *      @dev: device to register
2392  *      
2393  *      Take a completed network device structure and add it to the kernel
2394  *      interfaces. A %NETDEV_REGISTER message is sent to the netdev notifier
2395  *      chain. 0 is returned on success. A negative errno code is returned
2396  *      on a failure to set up the device, or if the name is a duplicate.
2397  *
2398  *      Callers must hold the rtnl semaphore.  See the comment at the
2399  *      end of Space.c for details about the locking.  You may want
2400  *      register_netdev() instead of this.
2401  *
2402  *      BUGS:
2403  *      The locking appears insufficient to guarantee two parallel registers
2404  *      will not get the same name.
2405  */
2406
2407 int net_dev_init(void);
2408
2409 int register_netdevice(struct net_device *dev)
2410 {
2411         struct net_device *d, **dp;
2412 #ifdef CONFIG_NET_DIVERT
2413         int ret;
2414 #endif
2415
2416         spin_lock_init(&dev->queue_lock);
2417         spin_lock_init(&dev->xmit_lock);
2418         dev->xmit_lock_owner = -1;
2419 #ifdef CONFIG_NET_FASTROUTE
2420         dev->fastpath_lock=RW_LOCK_UNLOCKED;
2421 #endif
2422
2423         if (dev_boot_phase)
2424                 net_dev_init();
2425
2426 #ifdef CONFIG_NET_DIVERT
2427         ret = alloc_divert_blk(dev);
2428         if (ret)
2429                 return ret;
2430 #endif /* CONFIG_NET_DIVERT */
2431         
2432         dev->iflink = -1;
2433
2434         /* Init, if this function is available */
2435         if (dev->init && dev->init(dev) != 0) {
2436 #ifdef CONFIG_NET_DIVERT
2437                 free_divert_blk(dev);
2438 #endif
2439                 return -EIO;
2440         }
2441
2442         dev->ifindex = dev_new_index();
2443         if (dev->iflink == -1)
2444                 dev->iflink = dev->ifindex;
2445
2446         /* Check for existence, and append to tail of chain */
2447         for (dp=&dev_base; (d=*dp) != NULL; dp=&d->next) {
2448                 if (d == dev || strcmp(d->name, dev->name) == 0) {
2449 #ifdef CONFIG_NET_DIVERT
2450                         free_divert_blk(dev);
2451 #endif
2452                         return -EEXIST;
2453                 }
2454         }
2455         /*
2456          *      nil rebuild_header routine,
2457          *      that should be never called and used as just bug trap.
2458          */
2459
2460         if (dev->rebuild_header == NULL)
2461                 dev->rebuild_header = default_rebuild_header;
2462
2463         /*
2464          *      Default initial state at registry is that the
2465          *      device is present.
2466          */
2467
2468         set_bit(__LINK_STATE_PRESENT, &dev->state);
2469
2470         dev->next = NULL;
2471         dev_init_scheduler(dev);
2472         write_lock_bh(&dev_base_lock);
2473         *dp = dev;
2474         dev_hold(dev);
2475         dev->deadbeaf = 0;
2476         write_unlock_bh(&dev_base_lock);
2477
2478         /* Notify protocols, that a new device appeared. */
2479         notifier_call_chain(&netdev_chain, NETDEV_REGISTER, dev);
2480
2481         net_run_sbin_hotplug(dev, "register");
2482
2483         return 0;
2484 }
2485
2486 /**
2487  *      netdev_finish_unregister - complete unregistration
2488  *      @dev: device
2489  *
2490  *      Destroy and free a dead device. A value of zero is returned on
2491  *      success.
2492  */
2493  
2494 int netdev_finish_unregister(struct net_device *dev)
2495 {
2496         BUG_TRAP(dev->ip_ptr==NULL);
2497         BUG_TRAP(dev->ip6_ptr==NULL);
2498         BUG_TRAP(dev->dn_ptr==NULL);
2499
2500         if (!dev->deadbeaf) {
2501                 printk(KERN_ERR "Freeing alive device %p, %s\n", dev, dev->name);
2502                 return 0;
2503         }
2504 #ifdef NET_REFCNT_DEBUG
2505         printk(KERN_DEBUG "netdev_finish_unregister: %s%s.\n", dev->name,
2506                (dev->features & NETIF_F_DYNALLOC)?"":", old style");
2507 #endif
2508         if (dev->destructor)
2509                 dev->destructor(dev);
2510         if (dev->features & NETIF_F_DYNALLOC)
2511                 kfree(dev);
2512         return 0;
2513 }
2514
2515 /**
2516  *      unregister_netdevice - remove device from the kernel
2517  *      @dev: device
2518  *
2519  *      This function shuts down a device interface and removes it
2520  *      from the kernel tables. On success 0 is returned, on a failure
2521  *      a negative errno code is returned.
2522  *
2523  *      Callers must hold the rtnl semaphore.  See the comment at the
2524  *      end of Space.c for details about the locking.  You may want
2525  *      unregister_netdev() instead of this.
2526  */
2527
2528 int unregister_netdevice(struct net_device *dev)
2529 {
2530         unsigned long now, warning_time;
2531         struct net_device *d, **dp;
2532
2533         /* If device is running, close it first. */
2534         if (dev->flags & IFF_UP)
2535                 dev_close(dev);
2536
2537         BUG_TRAP(dev->deadbeaf==0);
2538         dev->deadbeaf = 1;
2539
2540         /* And unlink it from device chain. */
2541         for (dp = &dev_base; (d=*dp) != NULL; dp=&d->next) {
2542                 if (d == dev) {
2543                         write_lock_bh(&dev_base_lock);
2544                         *dp = d->next;
2545                         write_unlock_bh(&dev_base_lock);
2546                         break;
2547                 }
2548         }
2549         if (d == NULL) {
2550                 printk(KERN_DEBUG "unregister_netdevice: device %s/%p never was registered\n", dev->name, dev);
2551                 return -ENODEV;
2552         }
2553
2554         /* Synchronize to net_rx_action. */
2555         br_write_lock_bh(BR_NETPROTO_LOCK);
2556         br_write_unlock_bh(BR_NETPROTO_LOCK);
2557
2558         if (dev_boot_phase == 0) {
2559 #ifdef CONFIG_NET_FASTROUTE
2560                 dev_clear_fastroute(dev);
2561 #endif
2562
2563                 /* Shutdown queueing discipline. */
2564                 dev_shutdown(dev);
2565
2566                 net_run_sbin_hotplug(dev, "unregister");
2567
2568                 /* Notify protocols, that we are about to destroy
2569                    this device. They should clean all the things.
2570                  */
2571                 notifier_call_chain(&netdev_chain, NETDEV_UNREGISTER, dev);
2572
2573                 /*
2574                  *      Flush the multicast chain
2575                  */
2576                 dev_mc_discard(dev);
2577         }
2578
2579         if (dev->uninit)
2580                 dev->uninit(dev);
2581
2582         /* Notifier chain MUST detach us from master device. */
2583         BUG_TRAP(dev->master==NULL);
2584
2585 #ifdef CONFIG_NET_DIVERT
2586         free_divert_blk(dev);
2587 #endif
2588
2589         if (dev->features & NETIF_F_DYNALLOC) {
2590 #ifdef NET_REFCNT_DEBUG
2591                 if (atomic_read(&dev->refcnt) != 1)
2592                         printk(KERN_DEBUG "unregister_netdevice: holding %s refcnt=%d\n", dev->name, atomic_read(&dev->refcnt)-1);
2593 #endif
2594                 dev_put(dev);
2595                 return 0;
2596         }
2597
2598         /* Last reference is our one */
2599         if (atomic_read(&dev->refcnt) == 1) {
2600                 dev_put(dev);
2601                 return 0;
2602         }
2603
2604 #ifdef NET_REFCNT_DEBUG
2605         printk("unregister_netdevice: waiting %s refcnt=%d\n", dev->name, atomic_read(&dev->refcnt));
2606 #endif
2607
2608         /* EXPLANATION. If dev->refcnt is not now 1 (our own reference)
2609            it means that someone in the kernel still has a reference
2610            to this device and we cannot release it.
2611
2612            "New style" devices have destructors, hence we can return from this
2613            function and destructor will do all the work later.  As of kernel 2.4.0
2614            there are very few "New Style" devices.
2615
2616            "Old style" devices expect that the device is free of any references
2617            upon exit from this function.
2618            We cannot return from this function until all such references have
2619            fallen away.  This is because the caller of this function will probably
2620            immediately kfree(*dev) and then be unloaded via sys_delete_module.
2621
2622            So, we linger until all references fall away.  The duration of the
2623            linger is basically unbounded! It is driven by, for example, the
2624            current setting of sysctl_ipfrag_time.
2625
2626            After 1 second, we start to rebroadcast unregister notifications
2627            in hope that careless clients will release the device.
2628
2629          */
2630
2631         now = warning_time = jiffies;
2632         while (atomic_read(&dev->refcnt) != 1) {
2633                 if ((jiffies - now) > 1*HZ) {
2634                         /* Rebroadcast unregister notification */
2635                         notifier_call_chain(&netdev_chain, NETDEV_UNREGISTER, dev);
2636                 }
2637                 current->state = TASK_INTERRUPTIBLE;
2638                 schedule_timeout(HZ/4);
2639                 current->state = TASK_RUNNING;
2640                 if ((jiffies - warning_time) > 10*HZ) {
2641                         printk(KERN_EMERG "unregister_netdevice: waiting for %s to "
2642                                         "become free. Usage count = %d\n",
2643                                         dev->name, atomic_read(&dev->refcnt));
2644                         warning_time = jiffies;
2645                 }
2646         }
2647         dev_put(dev);
2648         return 0;
2649 }
2650
2651
2652 /*
2653  *      Initialize the DEV module. At boot time this walks the device list and
2654  *      unhooks any devices that fail to initialise (normally hardware not 
2655  *      present) and leaves us with a valid list of present and active devices.
2656  *
2657  */
2658
2659 extern void net_device_init(void);
2660 extern void ip_auto_config(void);
2661 struct proc_dir_entry *proc_net_drivers;
2662 #ifdef CONFIG_NET_DIVERT
2663 extern void dv_init(void);
2664 #endif /* CONFIG_NET_DIVERT */
2665
2666
2667 /*
2668  *       Callers must hold the rtnl semaphore.  See the comment at the
2669  *       end of Space.c for details about the locking.
2670  */
2671 int __init net_dev_init(void)
2672 {
2673         struct net_device *dev, **dp;
2674         int i;
2675
2676         if (!dev_boot_phase)
2677                 return 0;
2678
2679
2680 #ifdef CONFIG_NET_DIVERT
2681         dv_init();
2682 #endif /* CONFIG_NET_DIVERT */
2683         
2684         /*
2685          *      Initialise the packet receive queues.
2686          */
2687
2688         for (i = 0; i < NR_CPUS; i++) {
2689                 struct softnet_data *queue;
2690
2691                 queue = &softnet_data[i];
2692                 skb_queue_head_init(&queue->input_pkt_queue);
2693                 queue->throttle = 0;
2694                 queue->cng_level = 0;
2695                 queue->avg_blog = 10; /* arbitrary non-zero */
2696                 queue->completion_queue = NULL;
2697                 INIT_LIST_HEAD(&queue->poll_list);
2698                 set_bit(__LINK_STATE_START, &queue->blog_dev.state);
2699                 queue->blog_dev.weight = weight_p;
2700                 queue->blog_dev.poll = process_backlog;
2701                 atomic_set(&queue->blog_dev.refcnt, 1);
2702         }
2703
2704 #ifdef CONFIG_NET_PROFILE
2705         net_profile_init();
2706         NET_PROFILE_REGISTER(dev_queue_xmit);
2707         NET_PROFILE_REGISTER(softnet_process);
2708 #endif
2709
2710 #ifdef OFFLINE_SAMPLE
2711         samp_timer.expires = jiffies + (10 * HZ);
2712         add_timer(&samp_timer);
2713 #endif
2714
2715         /*
2716          *      Add the devices.
2717          *      If the call to dev->init fails, the dev is removed
2718          *      from the chain disconnecting the device until the
2719          *      next reboot.
2720          *
2721          *      NB At boot phase networking is dead. No locking is required.
2722          *      But we still preserve dev_base_lock for sanity.
2723          */
2724
2725         dp = &dev_base;
2726         while ((dev = *dp) != NULL) {
2727                 spin_lock_init(&dev->queue_lock);
2728                 spin_lock_init(&dev->xmit_lock);
2729 #ifdef CONFIG_NET_FASTROUTE
2730                 dev->fastpath_lock = RW_LOCK_UNLOCKED;
2731 #endif
2732                 dev->xmit_lock_owner = -1;
2733                 dev->iflink = -1;
2734                 dev_hold(dev);
2735
2736                 /*
2737                  * Allocate name. If the init() fails
2738                  * the name will be reissued correctly.
2739                  */
2740                 if (strchr(dev->name, '%'))
2741                         dev_alloc_name(dev, dev->name);
2742
2743                 /* 
2744                  * Check boot time settings for the device.
2745                  */
2746                 netdev_boot_setup_check(dev);
2747
2748                 if (dev->init && dev->init(dev)) {
2749                         /*
2750                          * It failed to come up. It will be unhooked later.
2751                          * dev_alloc_name can now advance to next suitable
2752                          * name that is checked next.
2753                          */
2754                         dev->deadbeaf = 1;
2755                         dp = &dev->next;
2756                 } else {
2757                         dp = &dev->next;
2758                         dev->ifindex = dev_new_index();
2759                         if (dev->iflink == -1)
2760                                 dev->iflink = dev->ifindex;
2761                         if (dev->rebuild_header == NULL)
2762                                 dev->rebuild_header = default_rebuild_header;
2763                         dev_init_scheduler(dev);
2764                         set_bit(__LINK_STATE_PRESENT, &dev->state);
2765                 }
2766         }
2767
2768         /*
2769          * Unhook devices that failed to come up
2770          */
2771         dp = &dev_base;
2772         while ((dev = *dp) != NULL) {
2773                 if (dev->deadbeaf) {
2774                         write_lock_bh(&dev_base_lock);
2775                         *dp = dev->next;
2776                         write_unlock_bh(&dev_base_lock);
2777                         dev_put(dev);
2778                 } else {
2779                         dp = &dev->next;
2780                 }
2781         }
2782
2783 #ifdef CONFIG_PROC_FS
2784         proc_net_create("dev", 0, dev_get_info);
2785         create_proc_read_entry("net/softnet_stat", 0, 0, dev_proc_stats, NULL);
2786         proc_net_drivers = proc_mkdir("net/drivers", 0);
2787 #ifdef WIRELESS_EXT
2788         /* Available in net/core/wireless.c */
2789         proc_net_create("wireless", 0, dev_get_wireless_info);
2790 #endif  /* WIRELESS_EXT */
2791 #endif  /* CONFIG_PROC_FS */
2792
2793         dev_boot_phase = 0;
2794
2795         open_softirq(NET_TX_SOFTIRQ, net_tx_action, NULL);
2796         open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL);
2797
2798         dst_init();
2799         dev_mcast_init();
2800
2801 #ifdef CONFIG_NET_SCHED
2802         pktsched_init();
2803 #endif
2804         /*
2805          *      Initialise network devices
2806          */
2807          
2808         net_device_init();
2809
2810         return 0;
2811 }
2812
2813 #ifdef CONFIG_HOTPLUG
2814
2815 /* Notify userspace when a netdevice event occurs,
2816  * by running '/sbin/hotplug net' with certain
2817  * environment variables set.
2818  */
2819
2820 static int net_run_sbin_hotplug(struct net_device *dev, char *action)
2821 {
2822         char *argv[3], *envp[5], ifname[12 + IFNAMSIZ], action_str[32];
2823         int i;
2824
2825         sprintf(ifname, "INTERFACE=%s", dev->name);
2826         sprintf(action_str, "ACTION=%s", action);
2827
2828         i = 0;
2829         argv[i++] = hotplug_path;
2830         argv[i++] = "net";
2831         argv[i] = 0;
2832
2833         i = 0;
2834         /* minimal command environment */
2835         envp [i++] = "HOME=/";
2836         envp [i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
2837         envp [i++] = ifname;
2838         envp [i++] = action_str;
2839         envp [i] = 0;
2840         
2841         return call_usermodehelper(argv [0], argv, envp);
2842 }
2843 #endif