linux/include/linux/netdevice.h
<<
>>
Prefs
   1/*
   2 * INET         An implementation of the TCP/IP protocol suite for the LINUX
   3 *              operating system.  INET is implemented using the  BSD Socket
   4 *              interface as the means of communication with the user level.
   5 *
   6 *              Definitions for the Interfaces handler.
   7 *
   8 * Version:     @(#)dev.h       1.0.10  08/12/93
   9 *
  10 * Authors:     Ross Biro
  11 *              Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  12 *              Corey Minyard <wf-rch!minyard@relay.EU.net>
  13 *              Donald J. Becker, <becker@cesdis.gsfc.nasa.gov>
  14 *              Alan Cox, <Alan.Cox@linux.org>
  15 *              Bjorn Ekwall. <bj0rn@blox.se>
  16 *              Pekka Riikonen <priikone@poseidon.pspt.fi>
  17 *
  18 *              This program is free software; you can redistribute it and/or
  19 *              modify it under the terms of the GNU General Public License
  20 *              as published by the Free Software Foundation; either version
  21 *              2 of the License, or (at your option) any later version.
  22 *
  23 *              Moved to /usr/include/linux for NET3
  24 */
  25#ifndef _LINUX_NETDEVICE_H
  26#define _LINUX_NETDEVICE_H
  27
  28#include <linux/if.h>
  29#include <linux/if_ether.h>
  30#include <linux/if_packet.h>
  31
  32#ifdef __KERNEL__
  33#include <linux/timer.h>
  34#include <linux/delay.h>
  35#include <asm/atomic.h>
  36#include <asm/cache.h>
  37#include <asm/byteorder.h>
  38
  39#include <linux/device.h>
  40#include <linux/percpu.h>
  41#include <linux/dmaengine.h>
  42#include <linux/workqueue.h>
  43
  44#include <net/net_namespace.h>
  45
  46struct vlan_group;
  47struct ethtool_ops;
  48struct netpoll_info;
  49/* 802.11 specific */
  50struct wireless_dev;
  51                                        /* source back-compat hooks */
  52#define SET_ETHTOOL_OPS(netdev,ops) \
  53        ( (netdev)->ethtool_ops = (ops) )
  54
  55#define HAVE_ALLOC_NETDEV               /* feature macro: alloc_xxxdev
  56                                           functions are available. */
  57#define HAVE_FREE_NETDEV                /* free_netdev() */
  58#define HAVE_NETDEV_PRIV                /* netdev_priv() */
  59
  60#define NET_XMIT_SUCCESS        0
  61#define NET_XMIT_DROP           1       /* skb dropped                  */
  62#define NET_XMIT_CN             2       /* congestion notification      */
  63#define NET_XMIT_POLICED        3       /* skb is shot by police        */
  64#define NET_XMIT_BYPASS         4       /* packet does not leave via dequeue;
  65                                           (TC use only - dev_queue_xmit
  66                                           returns this as NET_XMIT_SUCCESS) */
  67
  68/* Backlog congestion levels */
  69#define NET_RX_SUCCESS          0   /* keep 'em coming, baby */
  70#define NET_RX_DROP             1  /* packet dropped */
  71#define NET_RX_CN_LOW           2   /* storm alert, just in case */
  72#define NET_RX_CN_MOD           3   /* Storm on its way! */
  73#define NET_RX_CN_HIGH          4   /* The storm is here */
  74#define NET_RX_BAD              5  /* packet dropped due to kernel error */
  75
  76/* NET_XMIT_CN is special. It does not guarantee that this packet is lost. It
  77 * indicates that the device will soon be dropping packets, or already drops
  78 * some packets of the same priority; prompting us to send less aggressively. */
  79#define net_xmit_eval(e)        ((e) == NET_XMIT_CN? 0 : (e))
  80#define net_xmit_errno(e)       ((e) != NET_XMIT_CN ? -ENOBUFS : 0)
  81
  82#endif
  83
  84#define MAX_ADDR_LEN    32              /* Largest hardware address length */
  85
  86/* Driver transmit return codes */
  87#define NETDEV_TX_OK 0          /* driver took care of packet */
  88#define NETDEV_TX_BUSY 1        /* driver tx path was busy*/
  89#define NETDEV_TX_LOCKED -1     /* driver tx lock was already taken */
  90
  91#ifdef  __KERNEL__
  92
  93/*
  94 *      Compute the worst case header length according to the protocols
  95 *      used.
  96 */
  97 
  98#if defined(CONFIG_WLAN_80211) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
  99# if defined(CONFIG_MAC80211_MESH)
 100#  define LL_MAX_HEADER 128
 101# else
 102#  define LL_MAX_HEADER 96
 103# endif
 104#elif defined(CONFIG_TR)
 105# define LL_MAX_HEADER 48
 106#else
 107# define LL_MAX_HEADER 32
 108#endif
 109
 110#if !defined(CONFIG_NET_IPIP) && !defined(CONFIG_NET_IPIP_MODULE) && \
 111    !defined(CONFIG_NET_IPGRE) &&  !defined(CONFIG_NET_IPGRE_MODULE) && \
 112    !defined(CONFIG_IPV6_SIT) && !defined(CONFIG_IPV6_SIT_MODULE) && \
 113    !defined(CONFIG_IPV6_TUNNEL) && !defined(CONFIG_IPV6_TUNNEL_MODULE)
 114#define MAX_HEADER LL_MAX_HEADER
 115#else
 116#define MAX_HEADER (LL_MAX_HEADER + 48)
 117#endif
 118
 119#endif  /*  __KERNEL__  */
 120
 121struct net_device_subqueue
 122{
 123        /* Give a control state for each queue.  This struct may contain
 124         * per-queue locks in the future.
 125         */
 126        unsigned long   state;
 127};
 128
 129/*
 130 *      Network device statistics. Akin to the 2.0 ether stats but
 131 *      with byte counters.
 132 */
 133 
 134struct net_device_stats
 135{
 136        unsigned long   rx_packets;             /* total packets received       */
 137        unsigned long   tx_packets;             /* total packets transmitted    */
 138        unsigned long   rx_bytes;               /* total bytes received         */
 139        unsigned long   tx_bytes;               /* total bytes transmitted      */
 140        unsigned long   rx_errors;              /* bad packets received         */
 141        unsigned long   tx_errors;              /* packet transmit problems     */
 142        unsigned long   rx_dropped;             /* no space in linux buffers    */
 143        unsigned long   tx_dropped;             /* no space available in linux  */
 144        unsigned long   multicast;              /* multicast packets received   */
 145        unsigned long   collisions;
 146
 147        /* detailed rx_errors: */
 148        unsigned long   rx_length_errors;
 149        unsigned long   rx_over_errors;         /* receiver ring buff overflow  */
 150        unsigned long   rx_crc_errors;          /* recved pkt with crc error    */
 151        unsigned long   rx_frame_errors;        /* recv'd frame alignment error */
 152        unsigned long   rx_fifo_errors;         /* recv'r fifo overrun          */
 153        unsigned long   rx_missed_errors;       /* receiver missed packet       */
 154
 155        /* detailed tx_errors */
 156        unsigned long   tx_aborted_errors;
 157        unsigned long   tx_carrier_errors;
 158        unsigned long   tx_fifo_errors;
 159        unsigned long   tx_heartbeat_errors;
 160        unsigned long   tx_window_errors;
 161        
 162        /* for cslip etc */
 163        unsigned long   rx_compressed;
 164        unsigned long   tx_compressed;
 165};
 166
 167
 168/* Media selection options. */
 169enum {
 170        IF_PORT_UNKNOWN = 0,
 171        IF_PORT_10BASE2,
 172        IF_PORT_10BASET,
 173        IF_PORT_AUI,
 174        IF_PORT_100BASET,
 175        IF_PORT_100BASETX,
 176        IF_PORT_100BASEFX
 177};
 178
 179#ifdef __KERNEL__
 180
 181#include <linux/cache.h>
 182#include <linux/skbuff.h>
 183
 184struct neighbour;
 185struct neigh_parms;
 186struct sk_buff;
 187
 188struct netif_rx_stats
 189{
 190        unsigned total;
 191        unsigned dropped;
 192        unsigned time_squeeze;
 193        unsigned cpu_collision;
 194};
 195
 196DECLARE_PER_CPU(struct netif_rx_stats, netdev_rx_stat);
 197
 198struct dev_addr_list
 199{
 200        struct dev_addr_list    *next;
 201        u8                      da_addr[MAX_ADDR_LEN];
 202        u8                      da_addrlen;
 203        u8                      da_synced;
 204        int                     da_users;
 205        int                     da_gusers;
 206};
 207
 208/*
 209 *      We tag multicasts with these structures.
 210 */
 211
 212#define dev_mc_list     dev_addr_list
 213#define dmi_addr        da_addr
 214#define dmi_addrlen     da_addrlen
 215#define dmi_users       da_users
 216#define dmi_gusers      da_gusers
 217
 218struct hh_cache
 219{
 220        struct hh_cache *hh_next;       /* Next entry                        */
 221        atomic_t        hh_refcnt;      /* number of users                   */
 222/*
 223 * We want hh_output, hh_len, hh_lock and hh_data be a in a separate
 224 * cache line on SMP.
 225 * They are mostly read, but hh_refcnt may be changed quite frequently,
 226 * incurring cache line ping pongs.
 227 */
 228        __be16          hh_type ____cacheline_aligned_in_smp;
 229                                        /* protocol identifier, f.e ETH_P_IP
 230                                         *  NOTE:  For VLANs, this will be the
 231                                         *  encapuslated type. --BLG
 232                                         */
 233        u16             hh_len;         /* length of header */
 234        int             (*hh_output)(struct sk_buff *skb);
 235        seqlock_t       hh_lock;
 236
 237        /* cached hardware header; allow for machine alignment needs.        */
 238#define HH_DATA_MOD     16
 239#define HH_DATA_OFF(__len) \
 240        (HH_DATA_MOD - (((__len - 1) & (HH_DATA_MOD - 1)) + 1))
 241#define HH_DATA_ALIGN(__len) \
 242        (((__len)+(HH_DATA_MOD-1))&~(HH_DATA_MOD - 1))
 243        unsigned long   hh_data[HH_DATA_ALIGN(LL_MAX_HEADER) / sizeof(long)];
 244};
 245
 246/* Reserve HH_DATA_MOD byte aligned hard_header_len, but at least that much.
 247 * Alternative is:
 248 *   dev->hard_header_len ? (dev->hard_header_len +
 249 *                           (HH_DATA_MOD - 1)) & ~(HH_DATA_MOD - 1) : 0
 250 *
 251 * We could use other alignment values, but we must maintain the
 252 * relationship HH alignment <= LL alignment.
 253 *
 254 * LL_ALLOCATED_SPACE also takes into account the tailroom the device
 255 * may need.
 256 */
 257#define LL_RESERVED_SPACE(dev) \
 258        ((((dev)->hard_header_len+(dev)->needed_headroom)&~(HH_DATA_MOD - 1)) + HH_DATA_MOD)
 259#define LL_RESERVED_SPACE_EXTRA(dev,extra) \
 260        ((((dev)->hard_header_len+(dev)->needed_headroom+(extra))&~(HH_DATA_MOD - 1)) + HH_DATA_MOD)
 261#define LL_ALLOCATED_SPACE(dev) \
 262        ((((dev)->hard_header_len+(dev)->needed_headroom+(dev)->needed_tailroom)&~(HH_DATA_MOD - 1)) + HH_DATA_MOD)
 263
 264struct header_ops {
 265        int     (*create) (struct sk_buff *skb, struct net_device *dev,
 266                           unsigned short type, const void *daddr,
 267                           const void *saddr, unsigned len);
 268        int     (*parse)(const struct sk_buff *skb, unsigned char *haddr);
 269        int     (*rebuild)(struct sk_buff *skb);
 270#define HAVE_HEADER_CACHE
 271        int     (*cache)(const struct neighbour *neigh, struct hh_cache *hh);
 272        void    (*cache_update)(struct hh_cache *hh,
 273                                const struct net_device *dev,
 274                                const unsigned char *haddr);
 275};
 276
 277/* These flag bits are private to the generic network queueing
 278 * layer, they may not be explicitly referenced by any other
 279 * code.
 280 */
 281
 282enum netdev_state_t
 283{
 284        __LINK_STATE_XOFF=0,
 285        __LINK_STATE_START,
 286        __LINK_STATE_PRESENT,
 287        __LINK_STATE_SCHED,
 288        __LINK_STATE_NOCARRIER,
 289        __LINK_STATE_LINKWATCH_PENDING,
 290        __LINK_STATE_DORMANT,
 291        __LINK_STATE_QDISC_RUNNING,
 292};
 293
 294
 295/*
 296 * This structure holds at boot time configured netdevice settings. They
 297 * are then used in the device probing. 
 298 */
 299struct netdev_boot_setup {
 300        char name[IFNAMSIZ];
 301        struct ifmap map;
 302};
 303#define NETDEV_BOOT_SETUP_MAX 8
 304
 305extern int __init netdev_boot_setup(char *str);
 306
 307/*
 308 * Structure for NAPI scheduling similar to tasklet but with weighting
 309 */
 310struct napi_struct {
 311        /* The poll_list must only be managed by the entity which
 312         * changes the state of the NAPI_STATE_SCHED bit.  This means
 313         * whoever atomically sets that bit can add this napi_struct
 314         * to the per-cpu poll_list, and whoever clears that bit
 315         * can remove from the list right before clearing the bit.
 316         */
 317        struct list_head        poll_list;
 318
 319        unsigned long           state;
 320        int                     weight;
 321        int                     (*poll)(struct napi_struct *, int);
 322#ifdef CONFIG_NETPOLL
 323        spinlock_t              poll_lock;
 324        int                     poll_owner;
 325        struct net_device       *dev;
 326        struct list_head        dev_list;
 327#endif
 328};
 329
 330enum
 331{
 332        NAPI_STATE_SCHED,       /* Poll is scheduled */
 333        NAPI_STATE_DISABLE,     /* Disable pending */
 334};
 335
 336extern void __napi_schedule(struct napi_struct *n);
 337
 338static inline int napi_disable_pending(struct napi_struct *n)
 339{
 340        return test_bit(NAPI_STATE_DISABLE, &n->state);
 341}
 342
 343/**
 344 *      napi_schedule_prep - check if napi can be scheduled
 345 *      @n: napi context
 346 *
 347 * Test if NAPI routine is already running, and if not mark
 348 * it as running.  This is used as a condition variable
 349 * insure only one NAPI poll instance runs.  We also make
 350 * sure there is no pending NAPI disable.
 351 */
 352static inline int napi_schedule_prep(struct napi_struct *n)
 353{
 354        return !napi_disable_pending(n) &&
 355                !test_and_set_bit(NAPI_STATE_SCHED, &n->state);
 356}
 357
 358/**
 359 *      napi_schedule - schedule NAPI poll
 360 *      @n: napi context
 361 *
 362 * Schedule NAPI poll routine to be called if it is not already
 363 * running.
 364 */
 365static inline void napi_schedule(struct napi_struct *n)
 366{
 367        if (napi_schedule_prep(n))
 368                __napi_schedule(n);
 369}
 370
 371/* Try to reschedule poll. Called by dev->poll() after napi_complete().  */
 372static inline int napi_reschedule(struct napi_struct *napi)
 373{
 374        if (napi_schedule_prep(napi)) {
 375                __napi_schedule(napi);
 376                return 1;
 377        }
 378        return 0;
 379}
 380
 381/**
 382 *      napi_complete - NAPI processing complete
 383 *      @n: napi context
 384 *
 385 * Mark NAPI processing as complete.
 386 */
 387static inline void __napi_complete(struct napi_struct *n)
 388{
 389        BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state));
 390        list_del(&n->poll_list);
 391        smp_mb__before_clear_bit();
 392        clear_bit(NAPI_STATE_SCHED, &n->state);
 393}
 394
 395static inline void napi_complete(struct napi_struct *n)
 396{
 397        unsigned long flags;
 398
 399        local_irq_save(flags);
 400        __napi_complete(n);
 401        local_irq_restore(flags);
 402}
 403
 404/**
 405 *      napi_disable - prevent NAPI from scheduling
 406 *      @n: napi context
 407 *
 408 * Stop NAPI from being scheduled on this context.
 409 * Waits till any outstanding processing completes.
 410 */
 411static inline void napi_disable(struct napi_struct *n)
 412{
 413        set_bit(NAPI_STATE_DISABLE, &n->state);
 414        while (test_and_set_bit(NAPI_STATE_SCHED, &n->state))
 415                msleep(1);
 416        clear_bit(NAPI_STATE_DISABLE, &n->state);
 417}
 418
 419/**
 420 *      napi_enable - enable NAPI scheduling
 421 *      @n: napi context
 422 *
 423 * Resume NAPI from being scheduled on this context.
 424 * Must be paired with napi_disable.
 425 */
 426static inline void napi_enable(struct napi_struct *n)
 427{
 428        BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state));
 429        smp_mb__before_clear_bit();
 430        clear_bit(NAPI_STATE_SCHED, &n->state);
 431}
 432
 433#ifdef CONFIG_SMP
 434/**
 435 *      napi_synchronize - wait until NAPI is not running
 436 *      @n: napi context
 437 *
 438 * Wait until NAPI is done being scheduled on this context.
 439 * Waits till any outstanding processing completes but
 440 * does not disable future activations.
 441 */
 442static inline void napi_synchronize(const struct napi_struct *n)
 443{
 444        while (test_bit(NAPI_STATE_SCHED, &n->state))
 445                msleep(1);
 446}
 447#else
 448# define napi_synchronize(n)    barrier()
 449#endif
 450
 451/*
 452 *      The DEVICE structure.
 453 *      Actually, this whole structure is a big mistake.  It mixes I/O
 454 *      data with strictly "high-level" data, and it has to know about
 455 *      almost every data structure used in the INET module.
 456 *
 457 *      FIXME: cleanup struct net_device such that network protocol info
 458 *      moves out.
 459 */
 460
 461struct net_device
 462{
 463
 464        /*
 465         * This is the first field of the "visible" part of this structure
 466         * (i.e. as seen by users in the "Space.c" file).  It is the name
 467         * the interface.
 468         */
 469        char                    name[IFNAMSIZ];
 470        /* device name hash chain */
 471        struct hlist_node       name_hlist;
 472
 473        /*
 474         *      I/O specific fields
 475         *      FIXME: Merge these and struct ifmap into one
 476         */
 477        unsigned long           mem_end;        /* shared mem end       */
 478        unsigned long           mem_start;      /* shared mem start     */
 479        unsigned long           base_addr;      /* device I/O address   */
 480        unsigned int            irq;            /* device IRQ number    */
 481
 482        /*
 483         *      Some hardware also needs these fields, but they are not
 484         *      part of the usual set specified in Space.c.
 485         */
 486
 487        unsigned char           if_port;        /* Selectable AUI, TP,..*/
 488        unsigned char           dma;            /* DMA channel          */
 489
 490        unsigned long           state;
 491
 492        struct list_head        dev_list;
 493#ifdef CONFIG_NETPOLL
 494        struct list_head        napi_list;
 495#endif
 496        
 497        /* The device initialization function. Called only once. */
 498        int                     (*init)(struct net_device *dev);
 499
 500        /* ------- Fields preinitialized in Space.c finish here ------- */
 501
 502        /* Net device features */
 503        unsigned long           features;
 504#define NETIF_F_SG              1       /* Scatter/gather IO. */
 505#define NETIF_F_IP_CSUM         2       /* Can checksum TCP/UDP over IPv4. */
 506#define NETIF_F_NO_CSUM         4       /* Does not require checksum. F.e. loopack. */
 507#define NETIF_F_HW_CSUM         8       /* Can checksum all the packets. */
 508#define NETIF_F_IPV6_CSUM       16      /* Can checksum TCP/UDP over IPV6 */
 509#define NETIF_F_HIGHDMA         32      /* Can DMA to high memory. */
 510#define NETIF_F_FRAGLIST        64      /* Scatter/gather IO. */
 511#define NETIF_F_HW_VLAN_TX      128     /* Transmit VLAN hw acceleration */
 512#define NETIF_F_HW_VLAN_RX      256     /* Receive VLAN hw acceleration */
 513#define NETIF_F_HW_VLAN_FILTER  512     /* Receive filtering on VLAN */
 514#define NETIF_F_VLAN_CHALLENGED 1024    /* Device cannot handle VLAN packets */
 515#define NETIF_F_GSO             2048    /* Enable software GSO. */
 516#define NETIF_F_LLTX            4096    /* LockLess TX - deprecated. Please */
 517                                        /* do not use LLTX in new drivers */
 518#define NETIF_F_NETNS_LOCAL     8192    /* Does not change network namespaces */
 519#define NETIF_F_MULTI_QUEUE     16384   /* Has multiple TX/RX queues */
 520#define NETIF_F_LRO             32768   /* large receive offload */
 521
 522        /* Segmentation offload features */
 523#define NETIF_F_GSO_SHIFT       16
 524#define NETIF_F_GSO_MASK        0xffff0000
 525#define NETIF_F_TSO             (SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT)
 526#define NETIF_F_UFO             (SKB_GSO_UDP << NETIF_F_GSO_SHIFT)
 527#define NETIF_F_GSO_ROBUST      (SKB_GSO_DODGY << NETIF_F_GSO_SHIFT)
 528#define NETIF_F_TSO_ECN         (SKB_GSO_TCP_ECN << NETIF_F_GSO_SHIFT)
 529#define NETIF_F_TSO6            (SKB_GSO_TCPV6 << NETIF_F_GSO_SHIFT)
 530
 531        /* List of features with software fallbacks. */
 532#define NETIF_F_GSO_SOFTWARE    (NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6)
 533
 534
 535#define NETIF_F_GEN_CSUM        (NETIF_F_NO_CSUM | NETIF_F_HW_CSUM)
 536#define NETIF_F_V4_CSUM         (NETIF_F_GEN_CSUM | NETIF_F_IP_CSUM)
 537#define NETIF_F_V6_CSUM         (NETIF_F_GEN_CSUM | NETIF_F_IPV6_CSUM)
 538#define NETIF_F_ALL_CSUM        (NETIF_F_V4_CSUM | NETIF_F_V6_CSUM)
 539
 540        struct net_device       *next_sched;
 541
 542        /* Interface index. Unique device identifier    */
 543        int                     ifindex;
 544        int                     iflink;
 545
 546
 547        struct net_device_stats* (*get_stats)(struct net_device *dev);
 548        struct net_device_stats stats;
 549
 550#ifdef CONFIG_WIRELESS_EXT
 551        /* List of functions to handle Wireless Extensions (instead of ioctl).
 552         * See <net/iw_handler.h> for details. Jean II */
 553        const struct iw_handler_def *   wireless_handlers;
 554        /* Instance data managed by the core of Wireless Extensions. */
 555        struct iw_public_data * wireless_data;
 556#endif
 557        const struct ethtool_ops *ethtool_ops;
 558
 559        /* Hardware header description */
 560        const struct header_ops *header_ops;
 561
 562        /*
 563         * This marks the end of the "visible" part of the structure. All
 564         * fields hereafter are internal to the system, and may change at
 565         * will (read: may be cleaned up at will).
 566         */
 567
 568
 569        unsigned int            flags;  /* interface flags (a la BSD)   */
 570        unsigned short          gflags;
 571        unsigned short          priv_flags; /* Like 'flags' but invisible to userspace. */
 572        unsigned short          padded; /* How much padding added by alloc_netdev() */
 573
 574        unsigned char           operstate; /* RFC2863 operstate */
 575        unsigned char           link_mode; /* mapping policy to operstate */
 576
 577        unsigned                mtu;    /* interface MTU value          */
 578        unsigned short          type;   /* interface hardware type      */
 579        unsigned short          hard_header_len;        /* hardware hdr length  */
 580
 581        /* extra head- and tailroom the hardware may need, but not in all cases
 582         * can this be guaranteed, especially tailroom. Some cases also use
 583         * LL_MAX_HEADER instead to allocate the skb.
 584         */
 585        unsigned short          needed_headroom;
 586        unsigned short          needed_tailroom;
 587
 588        struct net_device       *master; /* Pointer to master device of a group,
 589                                          * which this device is member of.
 590                                          */
 591
 592        /* Interface address info. */
 593        unsigned char           perm_addr[MAX_ADDR_LEN]; /* permanent hw address */
 594        unsigned char           addr_len;       /* hardware address length      */
 595        unsigned short          dev_id;         /* for shared network cards */
 596
 597        struct dev_addr_list    *uc_list;       /* Secondary unicast mac addresses */
 598        int                     uc_count;       /* Number of installed ucasts   */
 599        int                     uc_promisc;
 600        struct dev_addr_list    *mc_list;       /* Multicast mac addresses      */
 601        int                     mc_count;       /* Number of installed mcasts   */
 602        int                     promiscuity;
 603        int                     allmulti;
 604
 605
 606        /* Protocol specific pointers */
 607        
 608        void                    *atalk_ptr;     /* AppleTalk link       */
 609        void                    *ip_ptr;        /* IPv4 specific data   */  
 610        void                    *dn_ptr;        /* DECnet specific data */
 611        void                    *ip6_ptr;       /* IPv6 specific data */
 612        void                    *ec_ptr;        /* Econet specific data */
 613        void                    *ax25_ptr;      /* AX.25 specific data */
 614        struct wireless_dev     *ieee80211_ptr; /* IEEE 802.11 specific data,
 615                                                   assign before registering */
 616
 617/*
 618 * Cache line mostly used on receive path (including eth_type_trans())
 619 */
 620        unsigned long           last_rx;        /* Time of last Rx      */
 621        /* Interface address info used in eth_type_trans() */
 622        unsigned char           dev_addr[MAX_ADDR_LEN]; /* hw address, (before bcast 
 623                                                        because most packets are unicast) */
 624
 625        unsigned char           broadcast[MAX_ADDR_LEN];        /* hw bcast add */
 626
 627        /* ingress path synchronizer */
 628        spinlock_t              ingress_lock;
 629        struct Qdisc            *qdisc_ingress;
 630
 631/*
 632 * Cache line mostly used on queue transmit path (qdisc)
 633 */
 634        /* device queue lock */
 635        spinlock_t              queue_lock ____cacheline_aligned_in_smp;
 636        struct Qdisc            *qdisc;
 637        struct Qdisc            *qdisc_sleeping;
 638        struct list_head        qdisc_list;
 639        unsigned long           tx_queue_len;   /* Max frames per queue allowed */
 640
 641        /* Partially transmitted GSO packet. */
 642        struct sk_buff          *gso_skb;
 643
 644/*
 645 * One part is mostly used on xmit path (device)
 646 */
 647        /* hard_start_xmit synchronizer */
 648        spinlock_t              _xmit_lock ____cacheline_aligned_in_smp;
 649        /* cpu id of processor entered to hard_start_xmit or -1,
 650           if nobody entered there.
 651         */
 652        int                     xmit_lock_owner;
 653        void                    *priv;  /* pointer to private data      */
 654        int                     (*hard_start_xmit) (struct sk_buff *skb,
 655                                                    struct net_device *dev);
 656        /* These may be needed for future network-power-down code. */
 657        unsigned long           trans_start;    /* Time (in jiffies) of last Tx */
 658
 659        int                     watchdog_timeo; /* used by dev_watchdog() */
 660        struct timer_list       watchdog_timer;
 661
 662/*
 663 * refcnt is a very hot point, so align it on SMP
 664 */
 665        /* Number of references to this device */
 666        atomic_t                refcnt ____cacheline_aligned_in_smp;
 667
 668        /* delayed register/unregister */
 669        struct list_head        todo_list;
 670        /* device index hash chain */
 671        struct hlist_node       index_hlist;
 672
 673        struct net_device       *link_watch_next;
 674
 675        /* register/unregister state machine */
 676        enum { NETREG_UNINITIALIZED=0,
 677               NETREG_REGISTERED,       /* completed register_netdevice */
 678               NETREG_UNREGISTERING,    /* called unregister_netdevice */
 679               NETREG_UNREGISTERED,     /* completed unregister todo */
 680               NETREG_RELEASED,         /* called free_netdev */
 681        } reg_state;
 682
 683        /* Called after device is detached from network. */
 684        void                    (*uninit)(struct net_device *dev);
 685        /* Called after last user reference disappears. */
 686        void                    (*destructor)(struct net_device *dev);
 687
 688        /* Pointers to interface service routines.      */
 689        int                     (*open)(struct net_device *dev);
 690        int                     (*stop)(struct net_device *dev);
 691#define HAVE_NETDEV_POLL
 692#define HAVE_CHANGE_RX_FLAGS
 693        void                    (*change_rx_flags)(struct net_device *dev,
 694                                                   int flags);
 695#define HAVE_SET_RX_MODE
 696        void                    (*set_rx_mode)(struct net_device *dev);
 697#define HAVE_MULTICAST                   
 698        void                    (*set_multicast_list)(struct net_device *dev);
 699#define HAVE_SET_MAC_ADDR                
 700        int                     (*set_mac_address)(struct net_device *dev,
 701                                                   void *addr);
 702#define HAVE_VALIDATE_ADDR
 703        int                     (*validate_addr)(struct net_device *dev);
 704#define HAVE_PRIVATE_IOCTL
 705        int                     (*do_ioctl)(struct net_device *dev,
 706                                            struct ifreq *ifr, int cmd);
 707#define HAVE_SET_CONFIG
 708        int                     (*set_config)(struct net_device *dev,
 709                                              struct ifmap *map);
 710#define HAVE_CHANGE_MTU
 711        int                     (*change_mtu)(struct net_device *dev, int new_mtu);
 712
 713#define HAVE_TX_TIMEOUT
 714        void                    (*tx_timeout) (struct net_device *dev);
 715
 716        void                    (*vlan_rx_register)(struct net_device *dev,
 717                                                    struct vlan_group *grp);
 718        void                    (*vlan_rx_add_vid)(struct net_device *dev,
 719                                                   unsigned short vid);
 720        void                    (*vlan_rx_kill_vid)(struct net_device *dev,
 721                                                    unsigned short vid);
 722
 723        int                     (*neigh_setup)(struct net_device *dev, struct neigh_parms *);
 724#ifdef CONFIG_NETPOLL
 725        struct netpoll_info     *npinfo;
 726#endif
 727#ifdef CONFIG_NET_POLL_CONTROLLER
 728        void                    (*poll_controller)(struct net_device *dev);
 729#endif
 730
 731#ifdef CONFIG_NET_NS
 732        /* Network namespace this network device is inside */
 733        struct net              *nd_net;
 734#endif
 735
 736        /* mid-layer private */
 737        void                    *ml_priv;
 738
 739        /* bridge stuff */
 740        struct net_bridge_port  *br_port;
 741        /* macvlan */
 742        struct macvlan_port     *macvlan_port;
 743
 744        /* class/net/name entry */
 745        struct device           dev;
 746        /* space for optional statistics and wireless sysfs groups */
 747        struct attribute_group  *sysfs_groups[3];
 748
 749        /* rtnetlink link ops */
 750        const struct rtnl_link_ops *rtnl_link_ops;
 751
 752        /* VLAN feature mask */
 753        unsigned long vlan_features;
 754
 755        /* for setting kernel sock attribute on TCP connection setup */
 756#define GSO_MAX_SIZE            65536
 757        unsigned int            gso_max_size;
 758
 759        /* The TX queue control structures */
 760        unsigned int                    egress_subqueue_count;
 761        struct net_device_subqueue      egress_subqueue[1];
 762};
 763#define to_net_dev(d) container_of(d, struct net_device, dev)
 764
 765#define NETDEV_ALIGN            32
 766#define NETDEV_ALIGN_CONST      (NETDEV_ALIGN - 1)
 767
 768/*
 769 * Net namespace inlines
 770 */
 771static inline
 772struct net *dev_net(const struct net_device *dev)
 773{
 774#ifdef CONFIG_NET_NS
 775        return dev->nd_net;
 776#else
 777        return &init_net;
 778#endif
 779}
 780
 781static inline
 782void dev_net_set(struct net_device *dev, struct net *net)
 783{
 784#ifdef CONFIG_NET_NS
 785        release_net(dev->nd_net);
 786        dev->nd_net = hold_net(net);
 787#endif
 788}
 789
 790/**
 791 *      netdev_priv - access network device private data
 792 *      @dev: network device
 793 *
 794 * Get network device private data
 795 */
 796static inline void *netdev_priv(const struct net_device *dev)
 797{
 798        return dev->priv;
 799}
 800
 801/* Set the sysfs physical device reference for the network logical device
 802 * if set prior to registration will cause a symlink during initialization.
 803 */
 804#define SET_NETDEV_DEV(net, pdev)       ((net)->dev.parent = (pdev))
 805
 806/**
 807 *      netif_napi_add - initialize a napi context
 808 *      @dev:  network device
 809 *      @napi: napi context
 810 *      @poll: polling function
 811 *      @weight: default weight
 812 *
 813 * netif_napi_add() must be used to initialize a napi context prior to calling
 814 * *any* of the other napi related functions.
 815 */
 816static inline void netif_napi_add(struct net_device *dev,
 817                                  struct napi_struct *napi,
 818                                  int (*poll)(struct napi_struct *, int),
 819                                  int weight)
 820{
 821        INIT_LIST_HEAD(&napi->poll_list);
 822        napi->poll = poll;
 823        napi->weight = weight;
 824#ifdef CONFIG_NETPOLL
 825        napi->dev = dev;
 826        list_add(&napi->dev_list, &dev->napi_list);
 827        spin_lock_init(&napi->poll_lock);
 828        napi->poll_owner = -1;
 829#endif
 830        set_bit(NAPI_STATE_SCHED, &napi->state);
 831}
 832
 833struct packet_type {
 834        __be16                  type;   /* This is really htons(ether_type). */
 835        struct net_device       *dev;   /* NULL is wildcarded here           */
 836        int                     (*func) (struct sk_buff *,
 837                                         struct net_device *,
 838                                         struct packet_type *,
 839                                         struct net_device *);
 840        struct sk_buff          *(*gso_segment)(struct sk_buff *skb,
 841                                                int features);
 842        int                     (*gso_send_check)(struct sk_buff *skb);
 843        void                    *af_packet_priv;
 844        struct list_head        list;
 845};
 846
 847#include <linux/interrupt.h>
 848#include <linux/notifier.h>
 849
 850extern rwlock_t                         dev_base_lock;          /* Device list lock */
 851
 852
 853#define for_each_netdev(net, d)         \
 854                list_for_each_entry(d, &(net)->dev_base_head, dev_list)
 855#define for_each_netdev_safe(net, d, n) \
 856                list_for_each_entry_safe(d, n, &(net)->dev_base_head, dev_list)
 857#define for_each_netdev_continue(net, d)                \
 858                list_for_each_entry_continue(d, &(net)->dev_base_head, dev_list)
 859#define net_device_entry(lh)    list_entry(lh, struct net_device, dev_list)
 860
 861static inline struct net_device *next_net_device(struct net_device *dev)
 862{
 863        struct list_head *lh;
 864        struct net *net;
 865
 866        net = dev_net(dev);
 867        lh = dev->dev_list.next;
 868        return lh == &net->dev_base_head ? NULL : net_device_entry(lh);
 869}
 870
 871static inline struct net_device *first_net_device(struct net *net)
 872{
 873        return list_empty(&net->dev_base_head) ? NULL :
 874                net_device_entry(net->dev_base_head.next);
 875}
 876
 877extern int                      netdev_boot_setup_check(struct net_device *dev);
 878extern unsigned long            netdev_boot_base(const char *prefix, int unit);
 879extern struct net_device    *dev_getbyhwaddr(struct net *net, unsigned short type, char *hwaddr);
 880extern struct net_device *dev_getfirstbyhwtype(struct net *net, unsigned short type);
 881extern struct net_device *__dev_getfirstbyhwtype(struct net *net, unsigned short type);
 882extern void             dev_add_pack(struct packet_type *pt);
 883extern void             dev_remove_pack(struct packet_type *pt);
 884extern void             __dev_remove_pack(struct packet_type *pt);
 885
 886extern struct net_device        *dev_get_by_flags(struct net *net, unsigned short flags,
 887                                                  unsigned short mask);
 888extern struct net_device        *dev_get_by_name(struct net *net, const char *name);
 889extern struct net_device        *__dev_get_by_name(struct net *net, const char *name);
 890extern int              dev_alloc_name(struct net_device *dev, const char *name);
 891extern int              dev_open(struct net_device *dev);
 892extern int              dev_close(struct net_device *dev);
 893extern int              dev_queue_xmit(struct sk_buff *skb);
 894extern int              register_netdevice(struct net_device *dev);
 895extern void             unregister_netdevice(struct net_device *dev);
 896extern void             free_netdev(struct net_device *dev);
 897extern void             synchronize_net(void);
 898extern int              register_netdevice_notifier(struct notifier_block *nb);
 899extern int              unregister_netdevice_notifier(struct notifier_block *nb);
 900extern int call_netdevice_notifiers(unsigned long val, struct net_device *dev);
 901extern struct net_device        *dev_get_by_index(struct net *net, int ifindex);
 902extern struct net_device        *__dev_get_by_index(struct net *net, int ifindex);
 903extern int              dev_restart(struct net_device *dev);
 904#ifdef CONFIG_NETPOLL_TRAP
 905extern int              netpoll_trap(void);
 906#endif
 907
 908static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev,
 909                                  unsigned short type,
 910                                  const void *daddr, const void *saddr,
 911                                  unsigned len)
 912{
 913        if (!dev->header_ops || !dev->header_ops->create)
 914                return 0;
 915
 916        return dev->header_ops->create(skb, dev, type, daddr, saddr, len);
 917}
 918
 919static inline int dev_parse_header(const struct sk_buff *skb,
 920                                   unsigned char *haddr)
 921{
 922        const struct net_device *dev = skb->dev;
 923
 924        if (!dev->header_ops || !dev->header_ops->parse)
 925                return 0;
 926        return dev->header_ops->parse(skb, haddr);
 927}
 928
 929typedef int gifconf_func_t(struct net_device * dev, char __user * bufptr, int len);
 930extern int              register_gifconf(unsigned int family, gifconf_func_t * gifconf);
 931static inline int unregister_gifconf(unsigned int family)
 932{
 933        return register_gifconf(family, NULL);
 934}
 935
 936/*
 937 * Incoming packets are placed on per-cpu queues so that
 938 * no locking is needed.
 939 */
 940struct softnet_data
 941{
 942        struct net_device       *output_queue;
 943        struct sk_buff_head     input_pkt_queue;
 944        struct list_head        poll_list;
 945        struct sk_buff          *completion_queue;
 946
 947        struct napi_struct      backlog;
 948#ifdef CONFIG_NET_DMA
 949        struct dma_chan         *net_dma;
 950#endif
 951};
 952
 953DECLARE_PER_CPU(struct softnet_data,softnet_data);
 954
 955#define HAVE_NETIF_QUEUE
 956
 957extern void __netif_schedule(struct net_device *dev);
 958
 959static inline void netif_schedule(struct net_device *dev)
 960{
 961        if (!test_bit(__LINK_STATE_XOFF, &dev->state))
 962                __netif_schedule(dev);
 963}
 964
 965/**
 966 *      netif_start_queue - allow transmit
 967 *      @dev: network device
 968 *
 969 *      Allow upper layers to call the device hard_start_xmit routine.
 970 */
 971static inline void netif_start_queue(struct net_device *dev)
 972{
 973        clear_bit(__LINK_STATE_XOFF, &dev->state);
 974}
 975
 976/**
 977 *      netif_wake_queue - restart transmit
 978 *      @dev: network device
 979 *
 980 *      Allow upper layers to call the device hard_start_xmit routine.
 981 *      Used for flow control when transmit resources are available.
 982 */
 983static inline void netif_wake_queue(struct net_device *dev)
 984{
 985#ifdef CONFIG_NETPOLL_TRAP
 986        if (netpoll_trap()) {
 987                clear_bit(__LINK_STATE_XOFF, &dev->state);
 988                return;
 989        }
 990#endif
 991        if (test_and_clear_bit(__LINK_STATE_XOFF, &dev->state))
 992                __netif_schedule(dev);
 993}
 994
 995/**
 996 *      netif_stop_queue - stop transmitted packets
 997 *      @dev: network device
 998 *
 999 *      Stop upper layers calling the device hard_start_xmit routine.
1000 *      Used for flow control when transmit resources are unavailable.
1001 */
1002static inline void netif_stop_queue(struct net_device *dev)
1003{
1004        set_bit(__LINK_STATE_XOFF, &dev->state);
1005}
1006
1007/**
1008 *      netif_queue_stopped - test if transmit queue is flowblocked
1009 *      @dev: network device
1010 *
1011 *      Test if transmit queue on device is currently unable to send.
1012 */
1013static inline int netif_queue_stopped(const struct net_device *dev)
1014{
1015        return test_bit(__LINK_STATE_XOFF, &dev->state);
1016}
1017
1018/**
1019 *      netif_running - test if up
1020 *      @dev: network device
1021 *
1022 *      Test if the device has been brought up.
1023 */
1024static inline int netif_running(const struct net_device *dev)
1025{
1026        return test_bit(__LINK_STATE_START, &dev->state);
1027}
1028
1029/*
1030 * Routines to manage the subqueues on a device.  We only need start
1031 * stop, and a check if it's stopped.  All other device management is
1032 * done at the overall netdevice level.
1033 * Also test the device if we're multiqueue.
1034 */
1035
1036/**
1037 *      netif_start_subqueue - allow sending packets on subqueue
1038 *      @dev: network device
1039 *      @queue_index: sub queue index
1040 *
1041 * Start individual transmit queue of a device with multiple transmit queues.
1042 */
1043static inline void netif_start_subqueue(struct net_device *dev, u16 queue_index)
1044{
1045#ifdef CONFIG_NETDEVICES_MULTIQUEUE
1046        clear_bit(__LINK_STATE_XOFF, &dev->egress_subqueue[queue_index].state);
1047#endif
1048}
1049
1050/**
1051 *      netif_stop_subqueue - stop sending packets on subqueue
1052 *      @dev: network device
1053 *      @queue_index: sub queue index
1054 *
1055 * Stop individual transmit queue of a device with multiple transmit queues.
1056 */
1057static inline void netif_stop_subqueue(struct net_device *dev, u16 queue_index)
1058{
1059#ifdef CONFIG_NETDEVICES_MULTIQUEUE
1060#ifdef CONFIG_NETPOLL_TRAP
1061        if (netpoll_trap())
1062                return;
1063#endif
1064        set_bit(__LINK_STATE_XOFF, &dev->egress_subqueue[queue_index].state);
1065#endif
1066}
1067
1068/**
1069 *      netif_subqueue_stopped - test status of subqueue
1070 *      @dev: network device
1071 *      @queue_index: sub queue index
1072 *
1073 * Check individual transmit queue of a device with multiple transmit queues.
1074 */
1075static inline int __netif_subqueue_stopped(const struct net_device *dev,
1076                                         u16 queue_index)
1077{
1078#ifdef CONFIG_NETDEVICES_MULTIQUEUE
1079        return test_bit(__LINK_STATE_XOFF,
1080                        &dev->egress_subqueue[queue_index].state);
1081#else
1082        return 0;
1083#endif
1084}
1085
1086static inline int netif_subqueue_stopped(const struct net_device *dev,
1087                                         struct sk_buff *skb)
1088{
1089        return __netif_subqueue_stopped(dev, skb_get_queue_mapping(skb));
1090}
1091
1092/**
1093 *      netif_wake_subqueue - allow sending packets on subqueue
1094 *      @dev: network device
1095 *      @queue_index: sub queue index
1096 *
1097 * Resume individual transmit queue of a device with multiple transmit queues.
1098 */
1099static inline void netif_wake_subqueue(struct net_device *dev, u16 queue_index)
1100{
1101#ifdef CONFIG_NETDEVICES_MULTIQUEUE
1102#ifdef CONFIG_NETPOLL_TRAP
1103        if (netpoll_trap())
1104                return;
1105#endif
1106        if (test_and_clear_bit(__LINK_STATE_XOFF,
1107                               &dev->egress_subqueue[queue_index].state))
1108                __netif_schedule(dev);
1109#endif
1110}
1111
1112/**
1113 *      netif_is_multiqueue - test if device has multiple transmit queues
1114 *      @dev: network device
1115 *
1116 * Check if device has multiple transmit queues
1117 * Always falls if NETDEVICE_MULTIQUEUE is not configured
1118 */
1119static inline int netif_is_multiqueue(const struct net_device *dev)
1120{
1121#ifdef CONFIG_NETDEVICES_MULTIQUEUE
1122        return (!!(NETIF_F_MULTI_QUEUE & dev->features));
1123#else
1124        return 0;
1125#endif
1126}
1127
1128/* Use this variant when it is known for sure that it
1129 * is executing from hardware interrupt context or with hardware interrupts
1130 * disabled.
1131 */
1132extern void dev_kfree_skb_irq(struct sk_buff *skb);
1133
1134/* Use this variant in places where it could be invoked
1135 * from either hardware interrupt or other context, with hardware interrupts
1136 * either disabled or enabled.
1137 */
1138extern void dev_kfree_skb_any(struct sk_buff *skb);
1139
1140#define HAVE_NETIF_RX 1
1141extern int              netif_rx(struct sk_buff *skb);
1142extern int              netif_rx_ni(struct sk_buff *skb);
1143#define HAVE_NETIF_RECEIVE_SKB 1
1144extern int              netif_receive_skb(struct sk_buff *skb);
1145extern int              dev_valid_name(const char *name);
1146extern int              dev_ioctl(struct net *net, unsigned int cmd, void __user *);
1147extern int              dev_ethtool(struct net *net, struct ifreq *);
1148extern unsigned         dev_get_flags(const struct net_device *);
1149extern int              dev_change_flags(struct net_device *, unsigned);
1150extern int              dev_change_name(struct net_device *, char *);
1151extern int              dev_change_net_namespace(struct net_device *,
1152                                                 struct net *, const char *);
1153extern int              dev_set_mtu(struct net_device *, int);
1154extern int              dev_set_mac_address(struct net_device *,
1155                                            struct sockaddr *);
1156extern int              dev_hard_start_xmit(struct sk_buff *skb,
1157                                            struct net_device *dev);
1158
1159extern int              netdev_budget;
1160
1161/* Called by rtnetlink.c:rtnl_unlock() */
1162extern void netdev_run_todo(void);
1163
1164/**
1165 *      dev_put - release reference to device
1166 *      @dev: network device
1167 *
1168 * Release reference to device to allow it to be freed.
1169 */
1170static inline void dev_put(struct net_device *dev)
1171{
1172        atomic_dec(&dev->refcnt);
1173}
1174
1175/**
1176 *      dev_hold - get reference to device
1177 *      @dev: network device
1178 *
1179 * Hold reference to device to keep it from being freed.
1180 */
1181static inline void dev_hold(struct net_device *dev)
1182{
1183        atomic_inc(&dev->refcnt);
1184}
1185
1186/* Carrier loss detection, dial on demand. The functions netif_carrier_on
1187 * and _off may be called from IRQ context, but it is caller
1188 * who is responsible for serialization of these calls.
1189 *
1190 * The name carrier is inappropriate, these functions should really be
1191 * called netif_lowerlayer_*() because they represent the state of any
1192 * kind of lower layer not just hardware media.
1193 */
1194
1195extern void linkwatch_fire_event(struct net_device *dev);
1196
1197/**
1198 *      netif_carrier_ok - test if carrier present
1199 *      @dev: network device
1200 *
1201 * Check if carrier is present on device
1202 */
1203static inline int netif_carrier_ok(const struct net_device *dev)
1204{
1205        return !test_bit(__LINK_STATE_NOCARRIER, &dev->state);
1206}
1207
1208extern void __netdev_watchdog_up(struct net_device *dev);
1209
1210extern void netif_carrier_on(struct net_device *dev);
1211
1212extern void netif_carrier_off(struct net_device *dev);
1213
1214/**
1215 *      netif_dormant_on - mark device as dormant.
1216 *      @dev: network device
1217 *
1218 * Mark device as dormant (as per RFC2863).
1219 *
1220 * The dormant state indicates that the relevant interface is not
1221 * actually in a condition to pass packets (i.e., it is not 'up') but is
1222 * in a "pending" state, waiting for some external event.  For "on-
1223 * demand" interfaces, this new state identifies the situation where the
1224 * interface is waiting for events to place it in the up state.
1225 *
1226 */
1227static inline void netif_dormant_on(struct net_device *dev)
1228{
1229        if (!test_and_set_bit(__LINK_STATE_DORMANT, &dev->state))
1230                linkwatch_fire_event(dev);
1231}
1232
1233/**
1234 *      netif_dormant_off - set device as not dormant.
1235 *      @dev: network device
1236 *
1237 * Device is not in dormant state.
1238 */
1239static inline void netif_dormant_off(struct net_device *dev)
1240{
1241        if (test_and_clear_bit(__LINK_STATE_DORMANT, &dev->state))
1242                linkwatch_fire_event(dev);
1243}
1244
1245/**
1246 *      netif_dormant - test if carrier present
1247 *      @dev: network device
1248 *
1249 * Check if carrier is present on device
1250 */
1251static inline int netif_dormant(const struct net_device *dev)
1252{
1253        return test_bit(__LINK_STATE_DORMANT, &dev->state);
1254}
1255
1256
1257/**
1258 *      netif_oper_up - test if device is operational
1259 *      @dev: network device
1260 *
1261 * Check if carrier is operational
1262 */
1263static inline int netif_oper_up(const struct net_device *dev) {
1264        return (dev->operstate == IF_OPER_UP ||
1265                dev->operstate == IF_OPER_UNKNOWN /* backward compat */);
1266}
1267
1268/**
1269 *      netif_device_present - is device available or removed
1270 *      @dev: network device
1271 *
1272 * Check if device has not been removed from system.
1273 */
1274static inline int netif_device_present(struct net_device *dev)
1275{
1276        return test_bit(__LINK_STATE_PRESENT, &dev->state);
1277}
1278
1279extern void netif_device_detach(struct net_device *dev);
1280
1281extern void netif_device_attach(struct net_device *dev);
1282
1283/*
1284 * Network interface message level settings
1285 */
1286#define HAVE_NETIF_MSG 1
1287
1288enum {
1289        NETIF_MSG_DRV           = 0x0001,
1290        NETIF_MSG_PROBE         = 0x0002,
1291        NETIF_MSG_LINK          = 0x0004,
1292        NETIF_MSG_TIMER         = 0x0008,
1293        NETIF_MSG_IFDOWN        = 0x0010,
1294        NETIF_MSG_IFUP          = 0x0020,
1295        NETIF_MSG_RX_ERR        = 0x0040,
1296        NETIF_MSG_TX_ERR        = 0x0080,
1297        NETIF_MSG_TX_QUEUED     = 0x0100,
1298        NETIF_MSG_INTR          = 0x0200,
1299        NETIF_MSG_TX_DONE       = 0x0400,
1300        NETIF_MSG_RX_STATUS     = 0x0800,
1301        NETIF_MSG_PKTDATA       = 0x1000,
1302        NETIF_MSG_HW            = 0x2000,
1303        NETIF_MSG_WOL           = 0x4000,
1304};
1305
1306#define netif_msg_drv(p)        ((p)->msg_enable & NETIF_MSG_DRV)
1307#define netif_msg_probe(p)      ((p)->msg_enable & NETIF_MSG_PROBE)
1308#define netif_msg_link(p)       ((p)->msg_enable & NETIF_MSG_LINK)
1309#define netif_msg_timer(p)      ((p)->msg_enable & NETIF_MSG_TIMER)
1310#define netif_msg_ifdown(p)     ((p)->msg_enable & NETIF_MSG_IFDOWN)
1311#define netif_msg_ifup(p)       ((p)->msg_enable & NETIF_MSG_IFUP)
1312#define netif_msg_rx_err(p)     ((p)->msg_enable & NETIF_MSG_RX_ERR)
1313#define netif_msg_tx_err(p)     ((p)->msg_enable & NETIF_MSG_TX_ERR)
1314#define netif_msg_tx_queued(p)  ((p)->msg_enable & NETIF_MSG_TX_QUEUED)
1315#define netif_msg_intr(p)       ((p)->msg_enable & NETIF_MSG_INTR)
1316#define netif_msg_tx_done(p)    ((p)->msg_enable & NETIF_MSG_TX_DONE)
1317#define netif_msg_rx_status(p)  ((p)->msg_enable & NETIF_MSG_RX_STATUS)
1318#define netif_msg_pktdata(p)    ((p)->msg_enable & NETIF_MSG_PKTDATA)
1319#define netif_msg_hw(p)         ((p)->msg_enable & NETIF_MSG_HW)
1320#define netif_msg_wol(p)        ((p)->msg_enable & NETIF_MSG_WOL)
1321
1322static inline u32 netif_msg_init(int debug_value, int default_msg_enable_bits)
1323{
1324        /* use default */
1325        if (debug_value < 0 || debug_value >= (sizeof(u32) * 8))
1326                return default_msg_enable_bits;
1327        if (debug_value == 0)   /* no output */
1328                return 0;
1329        /* set low N bits */
1330        return (1 << debug_value) - 1;
1331}
1332
1333/* Test if receive needs to be scheduled but only if up */
1334static inline int netif_rx_schedule_prep(struct net_device *dev,
1335                                         struct napi_struct *napi)
1336{
1337        return napi_schedule_prep(napi);
1338}
1339
1340/* Add interface to tail of rx poll list. This assumes that _prep has
1341 * already been called and returned 1.
1342 */
1343static inline void __netif_rx_schedule(struct net_device *dev,
1344                                       struct napi_struct *napi)
1345{
1346        __napi_schedule(napi);
1347}
1348
1349/* Try to reschedule poll. Called by irq handler. */
1350
1351static inline void netif_rx_schedule(struct net_device *dev,
1352                                     struct napi_struct *napi)
1353{
1354        if (netif_rx_schedule_prep(dev, napi))
1355                __netif_rx_schedule(dev, napi);
1356}
1357
1358/* Try to reschedule poll. Called by dev->poll() after netif_rx_complete().  */
1359static inline int netif_rx_reschedule(struct net_device *dev,
1360                                      struct napi_struct *napi)
1361{
1362        if (napi_schedule_prep(napi)) {
1363                __netif_rx_schedule(dev, napi);
1364                return 1;
1365        }
1366        return 0;
1367}
1368
1369/* same as netif_rx_complete, except that local_irq_save(flags)
1370 * has already been issued
1371 */
1372static inline void __netif_rx_complete(struct net_device *dev,
1373                                       struct napi_struct *napi)
1374{
1375        __napi_complete(napi);
1376}
1377
1378/* Remove interface from poll list: it must be in the poll list
1379 * on current cpu. This primitive is called by dev->poll(), when
1380 * it completes the work. The device cannot be out of poll list at this
1381 * moment, it is BUG().
1382 */
1383static inline void netif_rx_complete(struct net_device *dev,
1384                                     struct napi_struct *napi)
1385{
1386        unsigned long flags;
1387
1388        local_irq_save(flags);
1389        __netif_rx_complete(dev, napi);
1390        local_irq_restore(flags);
1391}
1392
1393/**
1394 *      netif_tx_lock - grab network device transmit lock
1395 *      @dev: network device
1396 *      @cpu: cpu number of lock owner
1397 *
1398 * Get network device transmit lock
1399 */
1400static inline void __netif_tx_lock(struct net_device *dev, int cpu)
1401{
1402        spin_lock(&dev->_xmit_lock);
1403        dev->xmit_lock_owner = cpu;
1404}
1405
1406static inline void netif_tx_lock(struct net_device *dev)
1407{
1408        __netif_tx_lock(dev, smp_processor_id());
1409}
1410
1411static inline void netif_tx_lock_bh(struct net_device *dev)
1412{
1413        spin_lock_bh(&dev->_xmit_lock);
1414        dev->xmit_lock_owner = smp_processor_id();
1415}
1416
1417static inline int netif_tx_trylock(struct net_device *dev)
1418{
1419        int ok = spin_trylock(&dev->_xmit_lock);
1420        if (likely(ok))
1421                dev->xmit_lock_owner = smp_processor_id();
1422        return ok;
1423}
1424
1425static inline void netif_tx_unlock(struct net_device *dev)
1426{
1427        dev->xmit_lock_owner = -1;
1428        spin_unlock(&dev->_xmit_lock);
1429}
1430
1431static inline void netif_tx_unlock_bh(struct net_device *dev)
1432{
1433        dev->xmit_lock_owner = -1;
1434        spin_unlock_bh(&dev->_xmit_lock);
1435}
1436
1437#define HARD_TX_LOCK(dev, cpu) {                        \
1438        if ((dev->features & NETIF_F_LLTX) == 0) {      \
1439                __netif_tx_lock(dev, cpu);                      \
1440        }                                               \
1441}
1442
1443#define HARD_TX_UNLOCK(dev) {                           \
1444        if ((dev->features & NETIF_F_LLTX) == 0) {      \
1445                netif_tx_unlock(dev);                   \
1446        }                                               \
1447}
1448
1449static inline void netif_tx_disable(struct net_device *dev)
1450{
1451        netif_tx_lock_bh(dev);
1452        netif_stop_queue(dev);
1453        netif_tx_unlock_bh(dev);
1454}
1455
1456/* These functions live elsewhere (drivers/net/net_init.c, but related) */
1457
1458extern void             ether_setup(struct net_device *dev);
1459
1460/* Support for loadable net-drivers */
1461extern struct net_device *alloc_netdev_mq(int sizeof_priv, const char *name,
1462                                       void (*setup)(struct net_device *),
1463                                       unsigned int queue_count);
1464#define alloc_netdev(sizeof_priv, name, setup) \
1465        alloc_netdev_mq(sizeof_priv, name, setup, 1)
1466extern int              register_netdev(struct net_device *dev);
1467extern void             unregister_netdev(struct net_device *dev);
1468/* Functions used for secondary unicast and multicast support */
1469extern void             dev_set_rx_mode(struct net_device *dev);
1470extern void             __dev_set_rx_mode(struct net_device *dev);
1471extern int              dev_unicast_delete(struct net_device *dev, void *addr, int alen);
1472extern int              dev_unicast_add(struct net_device *dev, void *addr, int alen);
1473extern int              dev_unicast_sync(struct net_device *to, struct net_device *from);
1474extern void             dev_unicast_unsync(struct net_device *to, struct net_device *from);
1475extern int              dev_mc_delete(struct net_device *dev, void *addr, int alen, int all);
1476extern int              dev_mc_add(struct net_device *dev, void *addr, int alen, int newonly);
1477extern int              dev_mc_sync(struct net_device *to, struct net_device *from);
1478extern void             dev_mc_unsync(struct net_device *to, struct net_device *from);
1479extern int              __dev_addr_delete(struct dev_addr_list **list, int *count, void *addr, int alen, int all);
1480extern int              __dev_addr_add(struct dev_addr_list **list, int *count, void *addr, int alen, int newonly);
1481extern int              __dev_addr_sync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count);
1482extern void             __dev_addr_unsync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count);
1483extern void             dev_set_promiscuity(struct net_device *dev, int inc);
1484extern void             dev_set_allmulti(struct net_device *dev, int inc);
1485extern void             netdev_state_change(struct net_device *dev);
1486extern void             netdev_features_change(struct net_device *dev);
1487/* Load a device via the kmod */
1488extern void             dev_load(struct net *net, const char *name);
1489extern void             dev_mcast_init(void);
1490extern int              netdev_max_backlog;
1491extern int              weight_p;
1492extern int              netdev_set_master(struct net_device *dev, struct net_device *master);
1493extern int skb_checksum_help(struct sk_buff *skb);
1494extern struct sk_buff *skb_gso_segment(struct sk_buff *skb, int features);
1495#ifdef CONFIG_BUG
1496extern void netdev_rx_csum_fault(struct net_device *dev);
1497#else
1498static inline void netdev_rx_csum_fault(struct net_device *dev)
1499{
1500}
1501#endif
1502/* rx skb timestamps */
1503extern void             net_enable_timestamp(void);
1504extern void             net_disable_timestamp(void);
1505
1506#ifdef CONFIG_PROC_FS
1507extern void *dev_seq_start(struct seq_file *seq, loff_t *pos);
1508extern void *dev_seq_next(struct seq_file *seq, void *v, loff_t *pos);
1509extern void dev_seq_stop(struct seq_file *seq, void *v);
1510#endif
1511
1512extern void linkwatch_run_queue(void);
1513
1514extern int netdev_compute_features(unsigned long all, unsigned long one);
1515
1516static inline int net_gso_ok(int features, int gso_type)
1517{
1518        int feature = gso_type << NETIF_F_GSO_SHIFT;
1519        return (features & feature) == feature;
1520}
1521
1522static inline int skb_gso_ok(struct sk_buff *skb, int features)
1523{
1524        return net_gso_ok(features, skb_shinfo(skb)->gso_type);
1525}
1526
1527static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb)
1528{
1529        return skb_is_gso(skb) &&
1530               (!skb_gso_ok(skb, dev->features) ||
1531                unlikely(skb->ip_summed != CHECKSUM_PARTIAL));
1532}
1533
1534static inline void netif_set_gso_max_size(struct net_device *dev,
1535                                          unsigned int size)
1536{
1537        dev->gso_max_size = size;
1538}
1539
1540/* On bonding slaves other than the currently active slave, suppress
1541 * duplicates except for 802.3ad ETH_P_SLOW, alb non-mcast/bcast, and
1542 * ARP on active-backup slaves with arp_validate enabled.
1543 */
1544static inline int skb_bond_should_drop(struct sk_buff *skb)
1545{
1546        struct net_device *dev = skb->dev;
1547        struct net_device *master = dev->master;
1548
1549        if (master &&
1550            (dev->priv_flags & IFF_SLAVE_INACTIVE)) {
1551                if ((dev->priv_flags & IFF_SLAVE_NEEDARP) &&
1552                    skb->protocol == __constant_htons(ETH_P_ARP))
1553                        return 0;
1554
1555                if (master->priv_flags & IFF_MASTER_ALB) {
1556                        if (skb->pkt_type != PACKET_BROADCAST &&
1557                            skb->pkt_type != PACKET_MULTICAST)
1558                                return 0;
1559                }
1560                if (master->priv_flags & IFF_MASTER_8023AD &&
1561                    skb->protocol == __constant_htons(ETH_P_SLOW))
1562                        return 0;
1563
1564                return 1;
1565        }
1566        return 0;
1567}
1568
1569#endif /* __KERNEL__ */
1570
1571#endif  /* _LINUX_DEV_H */
1572
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.