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