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