~csurbhi/ubuntu/maverick/iptables/iptable-fix.600195

« back to all changes in this revision

Viewing changes to linux/include/linux/netdevice.h

  • Committer: Bazaar Package Importer
  • Author(s): Soren Hansen
  • Date: 2008-06-24 15:06:04 UTC
  • mfrom: (5.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20080624150604-5t7r1o1kxq0ycz81
Tags: 1.4.0-4ubuntu1
* Merge from debian unstable, remaining changes:
  - Took references to 2.4 kernel out of doc-base control files (Jordan
    Mantha, Malone #25972) (patches/all/091-fix-2.4-references.patch)
  - Use linux-libc-dev instead of local copy of kernel-headers.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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 <asm/atomic.h>
35
 
#include <asm/cache.h>
36
 
#include <asm/byteorder.h>
37
 
 
38
 
#include <linux/device.h>
39
 
#include <linux/percpu.h>
40
 
#include <linux/dmaengine.h>
41
 
 
42
 
struct vlan_group;
43
 
struct ethtool_ops;
44
 
struct netpoll_info;
45
 
/* 802.11 specific */
46
 
struct wireless_dev;
47
 
                                        /* source back-compat hooks */
48
 
#define SET_ETHTOOL_OPS(netdev,ops) \
49
 
        ( (netdev)->ethtool_ops = (ops) )
50
 
 
51
 
#define HAVE_ALLOC_NETDEV               /* feature macro: alloc_xxxdev
52
 
                                           functions are available. */
53
 
#define HAVE_FREE_NETDEV                /* free_netdev() */
54
 
#define HAVE_NETDEV_PRIV                /* netdev_priv() */
55
 
 
56
 
#define NET_XMIT_SUCCESS        0
57
 
#define NET_XMIT_DROP           1       /* skb dropped                  */
58
 
#define NET_XMIT_CN             2       /* congestion notification      */
59
 
#define NET_XMIT_POLICED        3       /* skb is shot by police        */
60
 
#define NET_XMIT_BYPASS         4       /* packet does not leave via dequeue;
61
 
                                           (TC use only - dev_queue_xmit
62
 
                                           returns this as NET_XMIT_SUCCESS) */
63
 
 
64
 
/* Backlog congestion levels */
65
 
#define NET_RX_SUCCESS          0   /* keep 'em coming, baby */
66
 
#define NET_RX_DROP             1  /* packet dropped */
67
 
#define NET_RX_CN_LOW           2   /* storm alert, just in case */
68
 
#define NET_RX_CN_MOD           3   /* Storm on its way! */
69
 
#define NET_RX_CN_HIGH          4   /* The storm is here */
70
 
#define NET_RX_BAD              5  /* packet dropped due to kernel error */
71
 
 
72
 
/* NET_XMIT_CN is special. It does not guarantee that this packet is lost. It
73
 
 * indicates that the device will soon be dropping packets, or already drops
74
 
 * some packets of the same priority; prompting us to send less aggressively. */
75
 
#define net_xmit_eval(e)        ((e) == NET_XMIT_CN? 0 : (e))
76
 
#define net_xmit_errno(e)       ((e) != NET_XMIT_CN ? -ENOBUFS : 0)
77
 
 
78
 
#endif
79
 
 
80
 
#define MAX_ADDR_LEN    32              /* Largest hardware address length */
81
 
 
82
 
/* Driver transmit return codes */
83
 
#define NETDEV_TX_OK 0          /* driver took care of packet */
84
 
#define NETDEV_TX_BUSY 1        /* driver tx path was busy*/
85
 
#define NETDEV_TX_LOCKED -1     /* driver tx lock was already taken */
86
 
 
87
 
/*
88
 
 *      Compute the worst case header length according to the protocols
89
 
 *      used.
90
 
 */
91
 
 
92
 
#if !defined(CONFIG_AX25) && !defined(CONFIG_AX25_MODULE) && !defined(CONFIG_TR)
93
 
#define LL_MAX_HEADER   32
94
 
#else
95
 
#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
96
 
#define LL_MAX_HEADER   96
97
 
#else
98
 
#define LL_MAX_HEADER   48
99
 
#endif
100
 
#endif
101
 
 
102
 
#if !defined(CONFIG_NET_IPIP) && !defined(CONFIG_NET_IPIP_MODULE) && \
103
 
    !defined(CONFIG_NET_IPGRE) &&  !defined(CONFIG_NET_IPGRE_MODULE) && \
104
 
    !defined(CONFIG_IPV6_SIT) && !defined(CONFIG_IPV6_SIT_MODULE) && \
105
 
    !defined(CONFIG_IPV6_TUNNEL) && !defined(CONFIG_IPV6_TUNNEL_MODULE)
106
 
#define MAX_HEADER LL_MAX_HEADER
107
 
#else
108
 
#define MAX_HEADER (LL_MAX_HEADER + 48)
109
 
#endif
110
 
 
111
 
/*
112
 
 *      Network device statistics. Akin to the 2.0 ether stats but
113
 
 *      with byte counters.
114
 
 */
115
 
 
116
 
struct net_device_stats
117
 
{
118
 
        unsigned long   rx_packets;             /* total packets received       */
119
 
        unsigned long   tx_packets;             /* total packets transmitted    */
120
 
        unsigned long   rx_bytes;               /* total bytes received         */
121
 
        unsigned long   tx_bytes;               /* total bytes transmitted      */
122
 
        unsigned long   rx_errors;              /* bad packets received         */
123
 
        unsigned long   tx_errors;              /* packet transmit problems     */
124
 
        unsigned long   rx_dropped;             /* no space in linux buffers    */
125
 
        unsigned long   tx_dropped;             /* no space available in linux  */
126
 
        unsigned long   multicast;              /* multicast packets received   */
127
 
        unsigned long   collisions;
128
 
 
129
 
        /* detailed rx_errors: */
130
 
        unsigned long   rx_length_errors;
131
 
        unsigned long   rx_over_errors;         /* receiver ring buff overflow  */
132
 
        unsigned long   rx_crc_errors;          /* recved pkt with crc error    */
133
 
        unsigned long   rx_frame_errors;        /* recv'd frame alignment error */
134
 
        unsigned long   rx_fifo_errors;         /* recv'r fifo overrun          */
135
 
        unsigned long   rx_missed_errors;       /* receiver missed packet       */
136
 
 
137
 
        /* detailed tx_errors */
138
 
        unsigned long   tx_aborted_errors;
139
 
        unsigned long   tx_carrier_errors;
140
 
        unsigned long   tx_fifo_errors;
141
 
        unsigned long   tx_heartbeat_errors;
142
 
        unsigned long   tx_window_errors;
143
 
        
144
 
        /* for cslip etc */
145
 
        unsigned long   rx_compressed;
146
 
        unsigned long   tx_compressed;
147
 
};
148
 
 
149
 
 
150
 
/* Media selection options. */
151
 
enum {
152
 
        IF_PORT_UNKNOWN = 0,
153
 
        IF_PORT_10BASE2,
154
 
        IF_PORT_10BASET,
155
 
        IF_PORT_AUI,
156
 
        IF_PORT_100BASET,
157
 
        IF_PORT_100BASETX,
158
 
        IF_PORT_100BASEFX
159
 
};
160
 
 
161
 
#ifdef __KERNEL__
162
 
 
163
 
#include <linux/cache.h>
164
 
#include <linux/skbuff.h>
165
 
 
166
 
struct neighbour;
167
 
struct neigh_parms;
168
 
struct sk_buff;
169
 
 
170
 
struct netif_rx_stats
171
 
{
172
 
        unsigned total;
173
 
        unsigned dropped;
174
 
        unsigned time_squeeze;
175
 
        unsigned cpu_collision;
176
 
};
177
 
 
178
 
DECLARE_PER_CPU(struct netif_rx_stats, netdev_rx_stat);
179
 
 
180
 
 
181
 
/*
182
 
 *      We tag multicasts with these structures.
183
 
 */
184
 
 
185
 
struct dev_mc_list
186
 
{       
187
 
        struct dev_mc_list      *next;
188
 
        __u8                    dmi_addr[MAX_ADDR_LEN];
189
 
        unsigned char           dmi_addrlen;
190
 
        int                     dmi_users;
191
 
        int                     dmi_gusers;
192
 
};
193
 
 
194
 
struct hh_cache
195
 
{
196
 
        struct hh_cache *hh_next;       /* Next entry                        */
197
 
        atomic_t        hh_refcnt;      /* number of users                   */
198
 
/*
199
 
 * We want hh_output, hh_len, hh_lock and hh_data be a in a separate
200
 
 * cache line on SMP.
201
 
 * They are mostly read, but hh_refcnt may be changed quite frequently,
202
 
 * incurring cache line ping pongs.
203
 
 */
204
 
        __be16          hh_type ____cacheline_aligned_in_smp;
205
 
                                        /* protocol identifier, f.e ETH_P_IP
206
 
                                         *  NOTE:  For VLANs, this will be the
207
 
                                         *  encapuslated type. --BLG
208
 
                                         */
209
 
        u16             hh_len;         /* length of header */
210
 
        int             (*hh_output)(struct sk_buff *skb);
211
 
        seqlock_t       hh_lock;
212
 
 
213
 
        /* cached hardware header; allow for machine alignment needs.        */
214
 
#define HH_DATA_MOD     16
215
 
#define HH_DATA_OFF(__len) \
216
 
        (HH_DATA_MOD - (((__len - 1) & (HH_DATA_MOD - 1)) + 1))
217
 
#define HH_DATA_ALIGN(__len) \
218
 
        (((__len)+(HH_DATA_MOD-1))&~(HH_DATA_MOD - 1))
219
 
        unsigned long   hh_data[HH_DATA_ALIGN(LL_MAX_HEADER) / sizeof(long)];
220
 
};
221
 
 
222
 
/* Reserve HH_DATA_MOD byte aligned hard_header_len, but at least that much.
223
 
 * Alternative is:
224
 
 *   dev->hard_header_len ? (dev->hard_header_len +
225
 
 *                           (HH_DATA_MOD - 1)) & ~(HH_DATA_MOD - 1) : 0
226
 
 *
227
 
 * We could use other alignment values, but we must maintain the
228
 
 * relationship HH alignment <= LL alignment.
229
 
 */
230
 
#define LL_RESERVED_SPACE(dev) \
231
 
        (((dev)->hard_header_len&~(HH_DATA_MOD - 1)) + HH_DATA_MOD)
232
 
#define LL_RESERVED_SPACE_EXTRA(dev,extra) \
233
 
        ((((dev)->hard_header_len+extra)&~(HH_DATA_MOD - 1)) + HH_DATA_MOD)
234
 
 
235
 
/* These flag bits are private to the generic network queueing
236
 
 * layer, they may not be explicitly referenced by any other
237
 
 * code.
238
 
 */
239
 
 
240
 
enum netdev_state_t
241
 
{
242
 
        __LINK_STATE_XOFF=0,
243
 
        __LINK_STATE_START,
244
 
        __LINK_STATE_PRESENT,
245
 
        __LINK_STATE_SCHED,
246
 
        __LINK_STATE_NOCARRIER,
247
 
        __LINK_STATE_RX_SCHED,
248
 
        __LINK_STATE_LINKWATCH_PENDING,
249
 
        __LINK_STATE_DORMANT,
250
 
        __LINK_STATE_QDISC_RUNNING,
251
 
};
252
 
 
253
 
 
254
 
/*
255
 
 * This structure holds at boot time configured netdevice settings. They
256
 
 * are then used in the device probing. 
257
 
 */
258
 
struct netdev_boot_setup {
259
 
        char name[IFNAMSIZ];
260
 
        struct ifmap map;
261
 
};
262
 
#define NETDEV_BOOT_SETUP_MAX 8
263
 
 
264
 
extern int __init netdev_boot_setup(char *str);
265
 
 
266
 
/*
267
 
 *      The DEVICE structure.
268
 
 *      Actually, this whole structure is a big mistake.  It mixes I/O
269
 
 *      data with strictly "high-level" data, and it has to know about
270
 
 *      almost every data structure used in the INET module.
271
 
 *
272
 
 *      FIXME: cleanup struct net_device such that network protocol info
273
 
 *      moves out.
274
 
 */
275
 
 
276
 
struct net_device
277
 
{
278
 
 
279
 
        /*
280
 
         * This is the first field of the "visible" part of this structure
281
 
         * (i.e. as seen by users in the "Space.c" file).  It is the name
282
 
         * the interface.
283
 
         */
284
 
        char                    name[IFNAMSIZ];
285
 
        /* device name hash chain */
286
 
        struct hlist_node       name_hlist;
287
 
 
288
 
        /*
289
 
         *      I/O specific fields
290
 
         *      FIXME: Merge these and struct ifmap into one
291
 
         */
292
 
        unsigned long           mem_end;        /* shared mem end       */
293
 
        unsigned long           mem_start;      /* shared mem start     */
294
 
        unsigned long           base_addr;      /* device I/O address   */
295
 
        unsigned int            irq;            /* device IRQ number    */
296
 
 
297
 
        /*
298
 
         *      Some hardware also needs these fields, but they are not
299
 
         *      part of the usual set specified in Space.c.
300
 
         */
301
 
 
302
 
        unsigned char           if_port;        /* Selectable AUI, TP,..*/
303
 
        unsigned char           dma;            /* DMA channel          */
304
 
 
305
 
        unsigned long           state;
306
 
 
307
 
        struct list_head        dev_list;
308
 
        
309
 
        /* The device initialization function. Called only once. */
310
 
        int                     (*init)(struct net_device *dev);
311
 
 
312
 
        /* ------- Fields preinitialized in Space.c finish here ------- */
313
 
 
314
 
        /* Net device features */
315
 
        unsigned long           features;
316
 
#define NETIF_F_SG              1       /* Scatter/gather IO. */
317
 
#define NETIF_F_IP_CSUM         2       /* Can checksum only TCP/UDP over IPv4. */
318
 
#define NETIF_F_NO_CSUM         4       /* Does not require checksum. F.e. loopack. */
319
 
#define NETIF_F_HW_CSUM         8       /* Can checksum all the packets. */
320
 
#define NETIF_F_HIGHDMA         32      /* Can DMA to high memory. */
321
 
#define NETIF_F_FRAGLIST        64      /* Scatter/gather IO. */
322
 
#define NETIF_F_HW_VLAN_TX      128     /* Transmit VLAN hw acceleration */
323
 
#define NETIF_F_HW_VLAN_RX      256     /* Receive VLAN hw acceleration */
324
 
#define NETIF_F_HW_VLAN_FILTER  512     /* Receive filtering on VLAN */
325
 
#define NETIF_F_VLAN_CHALLENGED 1024    /* Device cannot handle VLAN packets */
326
 
#define NETIF_F_GSO             2048    /* Enable software GSO. */
327
 
#define NETIF_F_LLTX            4096    /* LockLess TX */
328
 
 
329
 
        /* Segmentation offload features */
330
 
#define NETIF_F_GSO_SHIFT       16
331
 
#define NETIF_F_GSO_MASK        0xffff0000
332
 
#define NETIF_F_TSO             (SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT)
333
 
#define NETIF_F_UFO             (SKB_GSO_UDP << NETIF_F_GSO_SHIFT)
334
 
#define NETIF_F_GSO_ROBUST      (SKB_GSO_DODGY << NETIF_F_GSO_SHIFT)
335
 
#define NETIF_F_TSO_ECN         (SKB_GSO_TCP_ECN << NETIF_F_GSO_SHIFT)
336
 
#define NETIF_F_TSO6            (SKB_GSO_TCPV6 << NETIF_F_GSO_SHIFT)
337
 
 
338
 
        /* List of features with software fallbacks. */
339
 
#define NETIF_F_GSO_SOFTWARE    (NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6)
340
 
 
341
 
#define NETIF_F_GEN_CSUM        (NETIF_F_NO_CSUM | NETIF_F_HW_CSUM)
342
 
#define NETIF_F_ALL_CSUM        (NETIF_F_IP_CSUM | NETIF_F_GEN_CSUM)
343
 
 
344
 
        struct net_device       *next_sched;
345
 
 
346
 
        /* Interface index. Unique device identifier    */
347
 
        int                     ifindex;
348
 
        int                     iflink;
349
 
 
350
 
 
351
 
        struct net_device_stats* (*get_stats)(struct net_device *dev);
352
 
        struct net_device_stats stats;
353
 
 
354
 
#ifdef CONFIG_WIRELESS_EXT
355
 
        /* List of functions to handle Wireless Extensions (instead of ioctl).
356
 
         * See <net/iw_handler.h> for details. Jean II */
357
 
        const struct iw_handler_def *   wireless_handlers;
358
 
        /* Instance data managed by the core of Wireless Extensions. */
359
 
        struct iw_public_data * wireless_data;
360
 
#endif
361
 
        const struct ethtool_ops *ethtool_ops;
362
 
 
363
 
        /*
364
 
         * This marks the end of the "visible" part of the structure. All
365
 
         * fields hereafter are internal to the system, and may change at
366
 
         * will (read: may be cleaned up at will).
367
 
         */
368
 
 
369
 
 
370
 
        unsigned int            flags;  /* interface flags (a la BSD)   */
371
 
        unsigned short          gflags;
372
 
        unsigned short          priv_flags; /* Like 'flags' but invisible to userspace. */
373
 
        unsigned short          padded; /* How much padding added by alloc_netdev() */
374
 
 
375
 
        unsigned char           operstate; /* RFC2863 operstate */
376
 
        unsigned char           link_mode; /* mapping policy to operstate */
377
 
 
378
 
        unsigned                mtu;    /* interface MTU value          */
379
 
        unsigned short          type;   /* interface hardware type      */
380
 
        unsigned short          hard_header_len;        /* hardware hdr length  */
381
 
 
382
 
        struct net_device       *master; /* Pointer to master device of a group,
383
 
                                          * which this device is member of.
384
 
                                          */
385
 
 
386
 
        /* Interface address info. */
387
 
        unsigned char           perm_addr[MAX_ADDR_LEN]; /* permanent hw address */
388
 
        unsigned char           addr_len;       /* hardware address length      */
389
 
        unsigned short          dev_id;         /* for shared network cards */
390
 
 
391
 
        struct dev_mc_list      *mc_list;       /* Multicast mac addresses      */
392
 
        int                     mc_count;       /* Number of installed mcasts   */
393
 
        int                     promiscuity;
394
 
        int                     allmulti;
395
 
 
396
 
 
397
 
        /* Protocol specific pointers */
398
 
        
399
 
        void                    *atalk_ptr;     /* AppleTalk link       */
400
 
        void                    *ip_ptr;        /* IPv4 specific data   */  
401
 
        void                    *dn_ptr;        /* DECnet specific data */
402
 
        void                    *ip6_ptr;       /* IPv6 specific data */
403
 
        void                    *ec_ptr;        /* Econet specific data */
404
 
        void                    *ax25_ptr;      /* AX.25 specific data */
405
 
        struct wireless_dev     *ieee80211_ptr; /* IEEE 802.11 specific data,
406
 
                                                   assign before registering */
407
 
 
408
 
/*
409
 
 * Cache line mostly used on receive path (including eth_type_trans())
410
 
 */
411
 
        struct list_head        poll_list ____cacheline_aligned_in_smp;
412
 
                                        /* Link to poll list    */
413
 
 
414
 
        int                     (*poll) (struct net_device *dev, int *quota);
415
 
        int                     quota;
416
 
        int                     weight;
417
 
        unsigned long           last_rx;        /* Time of last Rx      */
418
 
        /* Interface address info used in eth_type_trans() */
419
 
        unsigned char           dev_addr[MAX_ADDR_LEN]; /* hw address, (before bcast 
420
 
                                                        because most packets are unicast) */
421
 
 
422
 
        unsigned char           broadcast[MAX_ADDR_LEN];        /* hw bcast add */
423
 
 
424
 
/*
425
 
 * Cache line mostly used on queue transmit path (qdisc)
426
 
 */
427
 
        /* device queue lock */
428
 
        spinlock_t              queue_lock ____cacheline_aligned_in_smp;
429
 
        struct Qdisc            *qdisc;
430
 
        struct Qdisc            *qdisc_sleeping;
431
 
        struct list_head        qdisc_list;
432
 
        unsigned long           tx_queue_len;   /* Max frames per queue allowed */
433
 
 
434
 
        /* Partially transmitted GSO packet. */
435
 
        struct sk_buff          *gso_skb;
436
 
 
437
 
        /* ingress path synchronizer */
438
 
        spinlock_t              ingress_lock;
439
 
        struct Qdisc            *qdisc_ingress;
440
 
 
441
 
/*
442
 
 * One part is mostly used on xmit path (device)
443
 
 */
444
 
        /* hard_start_xmit synchronizer */
445
 
        spinlock_t              _xmit_lock ____cacheline_aligned_in_smp;
446
 
        /* cpu id of processor entered to hard_start_xmit or -1,
447
 
           if nobody entered there.
448
 
         */
449
 
        int                     xmit_lock_owner;
450
 
        void                    *priv;  /* pointer to private data      */
451
 
        int                     (*hard_start_xmit) (struct sk_buff *skb,
452
 
                                                    struct net_device *dev);
453
 
        /* These may be needed for future network-power-down code. */
454
 
        unsigned long           trans_start;    /* Time (in jiffies) of last Tx */
455
 
 
456
 
        int                     watchdog_timeo; /* used by dev_watchdog() */
457
 
        struct timer_list       watchdog_timer;
458
 
 
459
 
/*
460
 
 * refcnt is a very hot point, so align it on SMP
461
 
 */
462
 
        /* Number of references to this device */
463
 
        atomic_t                refcnt ____cacheline_aligned_in_smp;
464
 
 
465
 
        /* delayed register/unregister */
466
 
        struct list_head        todo_list;
467
 
        /* device index hash chain */
468
 
        struct hlist_node       index_hlist;
469
 
 
470
 
        struct net_device       *link_watch_next;
471
 
 
472
 
        /* register/unregister state machine */
473
 
        enum { NETREG_UNINITIALIZED=0,
474
 
               NETREG_REGISTERED,       /* completed register_netdevice */
475
 
               NETREG_UNREGISTERING,    /* called unregister_netdevice */
476
 
               NETREG_UNREGISTERED,     /* completed unregister todo */
477
 
               NETREG_RELEASED,         /* called free_netdev */
478
 
        } reg_state;
479
 
 
480
 
        /* Called after device is detached from network. */
481
 
        void                    (*uninit)(struct net_device *dev);
482
 
        /* Called after last user reference disappears. */
483
 
        void                    (*destructor)(struct net_device *dev);
484
 
 
485
 
        /* Pointers to interface service routines.      */
486
 
        int                     (*open)(struct net_device *dev);
487
 
        int                     (*stop)(struct net_device *dev);
488
 
#define HAVE_NETDEV_POLL
489
 
        int                     (*hard_header) (struct sk_buff *skb,
490
 
                                                struct net_device *dev,
491
 
                                                unsigned short type,
492
 
                                                void *daddr,
493
 
                                                void *saddr,
494
 
                                                unsigned len);
495
 
        int                     (*rebuild_header)(struct sk_buff *skb);
496
 
#define HAVE_MULTICAST                   
497
 
        void                    (*set_multicast_list)(struct net_device *dev);
498
 
#define HAVE_SET_MAC_ADDR                
499
 
        int                     (*set_mac_address)(struct net_device *dev,
500
 
                                                   void *addr);
501
 
#define HAVE_PRIVATE_IOCTL
502
 
        int                     (*do_ioctl)(struct net_device *dev,
503
 
                                            struct ifreq *ifr, int cmd);
504
 
#define HAVE_SET_CONFIG
505
 
        int                     (*set_config)(struct net_device *dev,
506
 
                                              struct ifmap *map);
507
 
#define HAVE_HEADER_CACHE
508
 
        int                     (*hard_header_cache)(struct neighbour *neigh,
509
 
                                                     struct hh_cache *hh);
510
 
        void                    (*header_cache_update)(struct hh_cache *hh,
511
 
                                                       struct net_device *dev,
512
 
                                                       unsigned char *  haddr);
513
 
#define HAVE_CHANGE_MTU
514
 
        int                     (*change_mtu)(struct net_device *dev, int new_mtu);
515
 
 
516
 
#define HAVE_TX_TIMEOUT
517
 
        void                    (*tx_timeout) (struct net_device *dev);
518
 
 
519
 
        void                    (*vlan_rx_register)(struct net_device *dev,
520
 
                                                    struct vlan_group *grp);
521
 
        void                    (*vlan_rx_add_vid)(struct net_device *dev,
522
 
                                                   unsigned short vid);
523
 
        void                    (*vlan_rx_kill_vid)(struct net_device *dev,
524
 
                                                    unsigned short vid);
525
 
 
526
 
        int                     (*hard_header_parse)(struct sk_buff *skb,
527
 
                                                     unsigned char *haddr);
528
 
        int                     (*neigh_setup)(struct net_device *dev, struct neigh_parms *);
529
 
#ifdef CONFIG_NETPOLL
530
 
        struct netpoll_info     *npinfo;
531
 
#endif
532
 
#ifdef CONFIG_NET_POLL_CONTROLLER
533
 
        void                    (*poll_controller)(struct net_device *dev);
534
 
#endif
535
 
 
536
 
        /* bridge stuff */
537
 
        struct net_bridge_port  *br_port;
538
 
 
539
 
        /* class/net/name entry */
540
 
        struct device           dev;
541
 
        /* space for optional statistics and wireless sysfs groups */
542
 
        struct attribute_group  *sysfs_groups[3];
543
 
};
544
 
#define to_net_dev(d) container_of(d, struct net_device, dev)
545
 
 
546
 
#define NETDEV_ALIGN            32
547
 
#define NETDEV_ALIGN_CONST      (NETDEV_ALIGN - 1)
548
 
 
549
 
static inline void *netdev_priv(struct net_device *dev)
550
 
{
551
 
        return (char *)dev + ((sizeof(struct net_device)
552
 
                                        + NETDEV_ALIGN_CONST)
553
 
                                & ~NETDEV_ALIGN_CONST);
554
 
}
555
 
 
556
 
#define SET_MODULE_OWNER(dev) do { } while (0)
557
 
/* Set the sysfs physical device reference for the network logical device
558
 
 * if set prior to registration will cause a symlink during initialization.
559
 
 */
560
 
#define SET_NETDEV_DEV(net, pdev)       ((net)->dev.parent = (pdev))
561
 
 
562
 
struct packet_type {
563
 
        __be16                  type;   /* This is really htons(ether_type). */
564
 
        struct net_device       *dev;   /* NULL is wildcarded here           */
565
 
        int                     (*func) (struct sk_buff *,
566
 
                                         struct net_device *,
567
 
                                         struct packet_type *,
568
 
                                         struct net_device *);
569
 
        struct sk_buff          *(*gso_segment)(struct sk_buff *skb,
570
 
                                                int features);
571
 
        int                     (*gso_send_check)(struct sk_buff *skb);
572
 
        void                    *af_packet_priv;
573
 
        struct list_head        list;
574
 
};
575
 
 
576
 
#include <linux/interrupt.h>
577
 
#include <linux/notifier.h>
578
 
 
579
 
extern struct net_device                loopback_dev;           /* The loopback */
580
 
extern struct list_head                 dev_base_head;          /* All devices */
581
 
extern rwlock_t                         dev_base_lock;          /* Device list lock */
582
 
 
583
 
#define for_each_netdev(d)              \
584
 
                list_for_each_entry(d, &dev_base_head, dev_list)
585
 
#define for_each_netdev_safe(d, n)      \
586
 
                list_for_each_entry_safe(d, n, &dev_base_head, dev_list)
587
 
#define for_each_netdev_continue(d)             \
588
 
                list_for_each_entry_continue(d, &dev_base_head, dev_list)
589
 
#define net_device_entry(lh)    list_entry(lh, struct net_device, dev_list)
590
 
 
591
 
static inline struct net_device *next_net_device(struct net_device *dev)
592
 
{
593
 
        struct list_head *lh;
594
 
 
595
 
        lh = dev->dev_list.next;
596
 
        return lh == &dev_base_head ? NULL : net_device_entry(lh);
597
 
}
598
 
 
599
 
static inline struct net_device *first_net_device(void)
600
 
{
601
 
        return list_empty(&dev_base_head) ? NULL :
602
 
                net_device_entry(dev_base_head.next);
603
 
}
604
 
 
605
 
extern int                      netdev_boot_setup_check(struct net_device *dev);
606
 
extern unsigned long            netdev_boot_base(const char *prefix, int unit);
607
 
extern struct net_device    *dev_getbyhwaddr(unsigned short type, char *hwaddr);
608
 
extern struct net_device *dev_getfirstbyhwtype(unsigned short type);
609
 
extern struct net_device *__dev_getfirstbyhwtype(unsigned short type);
610
 
extern void             dev_add_pack(struct packet_type *pt);
611
 
extern void             dev_remove_pack(struct packet_type *pt);
612
 
extern void             __dev_remove_pack(struct packet_type *pt);
613
 
 
614
 
extern struct net_device        *dev_get_by_flags(unsigned short flags,
615
 
                                                  unsigned short mask);
616
 
extern struct net_device        *dev_get_by_name(const char *name);
617
 
extern struct net_device        *__dev_get_by_name(const char *name);
618
 
extern int              dev_alloc_name(struct net_device *dev, const char *name);
619
 
extern int              dev_open(struct net_device *dev);
620
 
extern int              dev_close(struct net_device *dev);
621
 
extern int              dev_queue_xmit(struct sk_buff *skb);
622
 
extern int              register_netdevice(struct net_device *dev);
623
 
extern void             unregister_netdevice(struct net_device *dev);
624
 
extern void             free_netdev(struct net_device *dev);
625
 
extern void             synchronize_net(void);
626
 
extern int              register_netdevice_notifier(struct notifier_block *nb);
627
 
extern int              unregister_netdevice_notifier(struct notifier_block *nb);
628
 
extern int              call_netdevice_notifiers(unsigned long val, void *v);
629
 
extern struct net_device        *dev_get_by_index(int ifindex);
630
 
extern struct net_device        *__dev_get_by_index(int ifindex);
631
 
extern int              dev_restart(struct net_device *dev);
632
 
#ifdef CONFIG_NETPOLL_TRAP
633
 
extern int              netpoll_trap(void);
634
 
#endif
635
 
 
636
 
typedef int gifconf_func_t(struct net_device * dev, char __user * bufptr, int len);
637
 
extern int              register_gifconf(unsigned int family, gifconf_func_t * gifconf);
638
 
static inline int unregister_gifconf(unsigned int family)
639
 
{
640
 
        return register_gifconf(family, NULL);
641
 
}
642
 
 
643
 
/*
644
 
 * Incoming packets are placed on per-cpu queues so that
645
 
 * no locking is needed.
646
 
 */
647
 
 
648
 
struct softnet_data
649
 
{
650
 
        struct net_device       *output_queue;
651
 
        struct sk_buff_head     input_pkt_queue;
652
 
        struct list_head        poll_list;
653
 
        struct sk_buff          *completion_queue;
654
 
 
655
 
        struct net_device       backlog_dev;    /* Sorry. 8) */
656
 
#ifdef CONFIG_NET_DMA
657
 
        struct dma_chan         *net_dma;
658
 
#endif
659
 
};
660
 
 
661
 
DECLARE_PER_CPU(struct softnet_data,softnet_data);
662
 
 
663
 
#define HAVE_NETIF_QUEUE
664
 
 
665
 
extern void __netif_schedule(struct net_device *dev);
666
 
 
667
 
static inline void netif_schedule(struct net_device *dev)
668
 
{
669
 
        if (!test_bit(__LINK_STATE_XOFF, &dev->state))
670
 
                __netif_schedule(dev);
671
 
}
672
 
 
673
 
static inline void netif_start_queue(struct net_device *dev)
674
 
{
675
 
        clear_bit(__LINK_STATE_XOFF, &dev->state);
676
 
}
677
 
 
678
 
static inline void netif_wake_queue(struct net_device *dev)
679
 
{
680
 
#ifdef CONFIG_NETPOLL_TRAP
681
 
        if (netpoll_trap()) {
682
 
                clear_bit(__LINK_STATE_XOFF, &dev->state);
683
 
                return;
684
 
        }
685
 
#endif
686
 
        if (test_and_clear_bit(__LINK_STATE_XOFF, &dev->state))
687
 
                __netif_schedule(dev);
688
 
}
689
 
 
690
 
static inline void netif_stop_queue(struct net_device *dev)
691
 
{
692
 
        set_bit(__LINK_STATE_XOFF, &dev->state);
693
 
}
694
 
 
695
 
static inline int netif_queue_stopped(const struct net_device *dev)
696
 
{
697
 
        return test_bit(__LINK_STATE_XOFF, &dev->state);
698
 
}
699
 
 
700
 
static inline int netif_running(const struct net_device *dev)
701
 
{
702
 
        return test_bit(__LINK_STATE_START, &dev->state);
703
 
}
704
 
 
705
 
 
706
 
/* Use this variant when it is known for sure that it
707
 
 * is executing from interrupt context.
708
 
 */
709
 
static inline void dev_kfree_skb_irq(struct sk_buff *skb)
710
 
{
711
 
        if (atomic_dec_and_test(&skb->users)) {
712
 
                struct softnet_data *sd;
713
 
                unsigned long flags;
714
 
 
715
 
                local_irq_save(flags);
716
 
                sd = &__get_cpu_var(softnet_data);
717
 
                skb->next = sd->completion_queue;
718
 
                sd->completion_queue = skb;
719
 
                raise_softirq_irqoff(NET_TX_SOFTIRQ);
720
 
                local_irq_restore(flags);
721
 
        }
722
 
}
723
 
 
724
 
/* Use this variant in places where it could be invoked
725
 
 * either from interrupt or non-interrupt context.
726
 
 */
727
 
extern void dev_kfree_skb_any(struct sk_buff *skb);
728
 
 
729
 
#define HAVE_NETIF_RX 1
730
 
extern int              netif_rx(struct sk_buff *skb);
731
 
extern int              netif_rx_ni(struct sk_buff *skb);
732
 
#define HAVE_NETIF_RECEIVE_SKB 1
733
 
extern int              netif_receive_skb(struct sk_buff *skb);
734
 
extern int              dev_valid_name(const char *name);
735
 
extern int              dev_ioctl(unsigned int cmd, void __user *);
736
 
extern int              dev_ethtool(struct ifreq *);
737
 
extern unsigned         dev_get_flags(const struct net_device *);
738
 
extern int              dev_change_flags(struct net_device *, unsigned);
739
 
extern int              dev_change_name(struct net_device *, char *);
740
 
extern int              dev_set_mtu(struct net_device *, int);
741
 
extern int              dev_set_mac_address(struct net_device *,
742
 
                                            struct sockaddr *);
743
 
extern int              dev_hard_start_xmit(struct sk_buff *skb,
744
 
                                            struct net_device *dev);
745
 
 
746
 
extern void             dev_init(void);
747
 
 
748
 
extern int              netdev_budget;
749
 
 
750
 
/* Called by rtnetlink.c:rtnl_unlock() */
751
 
extern void netdev_run_todo(void);
752
 
 
753
 
static inline void dev_put(struct net_device *dev)
754
 
{
755
 
        atomic_dec(&dev->refcnt);
756
 
}
757
 
 
758
 
static inline void dev_hold(struct net_device *dev)
759
 
{
760
 
        atomic_inc(&dev->refcnt);
761
 
}
762
 
 
763
 
/* Carrier loss detection, dial on demand. The functions netif_carrier_on
764
 
 * and _off may be called from IRQ context, but it is caller
765
 
 * who is responsible for serialization of these calls.
766
 
 *
767
 
 * The name carrier is inappropriate, these functions should really be
768
 
 * called netif_lowerlayer_*() because they represent the state of any
769
 
 * kind of lower layer not just hardware media.
770
 
 */
771
 
 
772
 
extern void linkwatch_fire_event(struct net_device *dev);
773
 
 
774
 
static inline int netif_carrier_ok(const struct net_device *dev)
775
 
{
776
 
        return !test_bit(__LINK_STATE_NOCARRIER, &dev->state);
777
 
}
778
 
 
779
 
extern void __netdev_watchdog_up(struct net_device *dev);
780
 
 
781
 
extern void netif_carrier_on(struct net_device *dev);
782
 
 
783
 
extern void netif_carrier_off(struct net_device *dev);
784
 
 
785
 
static inline void netif_dormant_on(struct net_device *dev)
786
 
{
787
 
        if (!test_and_set_bit(__LINK_STATE_DORMANT, &dev->state))
788
 
                linkwatch_fire_event(dev);
789
 
}
790
 
 
791
 
static inline void netif_dormant_off(struct net_device *dev)
792
 
{
793
 
        if (test_and_clear_bit(__LINK_STATE_DORMANT, &dev->state))
794
 
                linkwatch_fire_event(dev);
795
 
}
796
 
 
797
 
static inline int netif_dormant(const struct net_device *dev)
798
 
{
799
 
        return test_bit(__LINK_STATE_DORMANT, &dev->state);
800
 
}
801
 
 
802
 
 
803
 
static inline int netif_oper_up(const struct net_device *dev) {
804
 
        return (dev->operstate == IF_OPER_UP ||
805
 
                dev->operstate == IF_OPER_UNKNOWN /* backward compat */);
806
 
}
807
 
 
808
 
/* Hot-plugging. */
809
 
static inline int netif_device_present(struct net_device *dev)
810
 
{
811
 
        return test_bit(__LINK_STATE_PRESENT, &dev->state);
812
 
}
813
 
 
814
 
extern void netif_device_detach(struct net_device *dev);
815
 
 
816
 
extern void netif_device_attach(struct net_device *dev);
817
 
 
818
 
/*
819
 
 * Network interface message level settings
820
 
 */
821
 
#define HAVE_NETIF_MSG 1
822
 
 
823
 
enum {
824
 
        NETIF_MSG_DRV           = 0x0001,
825
 
        NETIF_MSG_PROBE         = 0x0002,
826
 
        NETIF_MSG_LINK          = 0x0004,
827
 
        NETIF_MSG_TIMER         = 0x0008,
828
 
        NETIF_MSG_IFDOWN        = 0x0010,
829
 
        NETIF_MSG_IFUP          = 0x0020,
830
 
        NETIF_MSG_RX_ERR        = 0x0040,
831
 
        NETIF_MSG_TX_ERR        = 0x0080,
832
 
        NETIF_MSG_TX_QUEUED     = 0x0100,
833
 
        NETIF_MSG_INTR          = 0x0200,
834
 
        NETIF_MSG_TX_DONE       = 0x0400,
835
 
        NETIF_MSG_RX_STATUS     = 0x0800,
836
 
        NETIF_MSG_PKTDATA       = 0x1000,
837
 
        NETIF_MSG_HW            = 0x2000,
838
 
        NETIF_MSG_WOL           = 0x4000,
839
 
};
840
 
 
841
 
#define netif_msg_drv(p)        ((p)->msg_enable & NETIF_MSG_DRV)
842
 
#define netif_msg_probe(p)      ((p)->msg_enable & NETIF_MSG_PROBE)
843
 
#define netif_msg_link(p)       ((p)->msg_enable & NETIF_MSG_LINK)
844
 
#define netif_msg_timer(p)      ((p)->msg_enable & NETIF_MSG_TIMER)
845
 
#define netif_msg_ifdown(p)     ((p)->msg_enable & NETIF_MSG_IFDOWN)
846
 
#define netif_msg_ifup(p)       ((p)->msg_enable & NETIF_MSG_IFUP)
847
 
#define netif_msg_rx_err(p)     ((p)->msg_enable & NETIF_MSG_RX_ERR)
848
 
#define netif_msg_tx_err(p)     ((p)->msg_enable & NETIF_MSG_TX_ERR)
849
 
#define netif_msg_tx_queued(p)  ((p)->msg_enable & NETIF_MSG_TX_QUEUED)
850
 
#define netif_msg_intr(p)       ((p)->msg_enable & NETIF_MSG_INTR)
851
 
#define netif_msg_tx_done(p)    ((p)->msg_enable & NETIF_MSG_TX_DONE)
852
 
#define netif_msg_rx_status(p)  ((p)->msg_enable & NETIF_MSG_RX_STATUS)
853
 
#define netif_msg_pktdata(p)    ((p)->msg_enable & NETIF_MSG_PKTDATA)
854
 
#define netif_msg_hw(p)         ((p)->msg_enable & NETIF_MSG_HW)
855
 
#define netif_msg_wol(p)        ((p)->msg_enable & NETIF_MSG_WOL)
856
 
 
857
 
static inline u32 netif_msg_init(int debug_value, int default_msg_enable_bits)
858
 
{
859
 
        /* use default */
860
 
        if (debug_value < 0 || debug_value >= (sizeof(u32) * 8))
861
 
                return default_msg_enable_bits;
862
 
        if (debug_value == 0)   /* no output */
863
 
                return 0;
864
 
        /* set low N bits */
865
 
        return (1 << debug_value) - 1;
866
 
}
867
 
 
868
 
/* Test if receive needs to be scheduled */
869
 
static inline int __netif_rx_schedule_prep(struct net_device *dev)
870
 
{
871
 
        return !test_and_set_bit(__LINK_STATE_RX_SCHED, &dev->state);
872
 
}
873
 
 
874
 
/* Test if receive needs to be scheduled but only if up */
875
 
static inline int netif_rx_schedule_prep(struct net_device *dev)
876
 
{
877
 
        return netif_running(dev) && __netif_rx_schedule_prep(dev);
878
 
}
879
 
 
880
 
/* Add interface to tail of rx poll list. This assumes that _prep has
881
 
 * already been called and returned 1.
882
 
 */
883
 
 
884
 
extern void __netif_rx_schedule(struct net_device *dev);
885
 
 
886
 
/* Try to reschedule poll. Called by irq handler. */
887
 
 
888
 
static inline void netif_rx_schedule(struct net_device *dev)
889
 
{
890
 
        if (netif_rx_schedule_prep(dev))
891
 
                __netif_rx_schedule(dev);
892
 
}
893
 
 
894
 
/* Try to reschedule poll. Called by dev->poll() after netif_rx_complete().
895
 
 * Do not inline this?
896
 
 */
897
 
static inline int netif_rx_reschedule(struct net_device *dev, int undo)
898
 
{
899
 
        if (netif_rx_schedule_prep(dev)) {
900
 
                unsigned long flags;
901
 
 
902
 
                dev->quota += undo;
903
 
 
904
 
                local_irq_save(flags);
905
 
                list_add_tail(&dev->poll_list, &__get_cpu_var(softnet_data).poll_list);
906
 
                __raise_softirq_irqoff(NET_RX_SOFTIRQ);
907
 
                local_irq_restore(flags);
908
 
                return 1;
909
 
        }
910
 
        return 0;
911
 
}
912
 
 
913
 
/* same as netif_rx_complete, except that local_irq_save(flags)
914
 
 * has already been issued
915
 
 */
916
 
static inline void __netif_rx_complete(struct net_device *dev)
917
 
{
918
 
        BUG_ON(!test_bit(__LINK_STATE_RX_SCHED, &dev->state));
919
 
        list_del(&dev->poll_list);
920
 
        smp_mb__before_clear_bit();
921
 
        clear_bit(__LINK_STATE_RX_SCHED, &dev->state);
922
 
}
923
 
 
924
 
/* Remove interface from poll list: it must be in the poll list
925
 
 * on current cpu. This primitive is called by dev->poll(), when
926
 
 * it completes the work. The device cannot be out of poll list at this
927
 
 * moment, it is BUG().
928
 
 */
929
 
static inline void netif_rx_complete(struct net_device *dev)
930
 
{
931
 
        unsigned long flags;
932
 
 
933
 
        local_irq_save(flags);
934
 
        __netif_rx_complete(dev);
935
 
        local_irq_restore(flags);
936
 
}
937
 
 
938
 
static inline void netif_poll_disable(struct net_device *dev)
939
 
{
940
 
        while (test_and_set_bit(__LINK_STATE_RX_SCHED, &dev->state))
941
 
                /* No hurry. */
942
 
                schedule_timeout_interruptible(1);
943
 
}
944
 
 
945
 
static inline void netif_poll_enable(struct net_device *dev)
946
 
{
947
 
        smp_mb__before_clear_bit();
948
 
        clear_bit(__LINK_STATE_RX_SCHED, &dev->state);
949
 
}
950
 
 
951
 
static inline void netif_tx_lock(struct net_device *dev)
952
 
{
953
 
        spin_lock(&dev->_xmit_lock);
954
 
        dev->xmit_lock_owner = smp_processor_id();
955
 
}
956
 
 
957
 
static inline void netif_tx_lock_bh(struct net_device *dev)
958
 
{
959
 
        spin_lock_bh(&dev->_xmit_lock);
960
 
        dev->xmit_lock_owner = smp_processor_id();
961
 
}
962
 
 
963
 
static inline int netif_tx_trylock(struct net_device *dev)
964
 
{
965
 
        int ok = spin_trylock(&dev->_xmit_lock);
966
 
        if (likely(ok))
967
 
                dev->xmit_lock_owner = smp_processor_id();
968
 
        return ok;
969
 
}
970
 
 
971
 
static inline void netif_tx_unlock(struct net_device *dev)
972
 
{
973
 
        dev->xmit_lock_owner = -1;
974
 
        spin_unlock(&dev->_xmit_lock);
975
 
}
976
 
 
977
 
static inline void netif_tx_unlock_bh(struct net_device *dev)
978
 
{
979
 
        dev->xmit_lock_owner = -1;
980
 
        spin_unlock_bh(&dev->_xmit_lock);
981
 
}
982
 
 
983
 
static inline void netif_tx_disable(struct net_device *dev)
984
 
{
985
 
        netif_tx_lock_bh(dev);
986
 
        netif_stop_queue(dev);
987
 
        netif_tx_unlock_bh(dev);
988
 
}
989
 
 
990
 
/* These functions live elsewhere (drivers/net/net_init.c, but related) */
991
 
 
992
 
extern void             ether_setup(struct net_device *dev);
993
 
 
994
 
/* Support for loadable net-drivers */
995
 
extern struct net_device *alloc_netdev(int sizeof_priv, const char *name,
996
 
                                       void (*setup)(struct net_device *));
997
 
extern int              register_netdev(struct net_device *dev);
998
 
extern void             unregister_netdev(struct net_device *dev);
999
 
/* Functions used for multicast support */
1000
 
extern void             dev_mc_upload(struct net_device *dev);
1001
 
extern int              dev_mc_delete(struct net_device *dev, void *addr, int alen, int all);
1002
 
extern int              dev_mc_add(struct net_device *dev, void *addr, int alen, int newonly);
1003
 
extern void             dev_mc_discard(struct net_device *dev);
1004
 
extern void             dev_set_promiscuity(struct net_device *dev, int inc);
1005
 
extern void             dev_set_allmulti(struct net_device *dev, int inc);
1006
 
extern void             netdev_state_change(struct net_device *dev);
1007
 
extern void             netdev_features_change(struct net_device *dev);
1008
 
/* Load a device via the kmod */
1009
 
extern void             dev_load(const char *name);
1010
 
extern void             dev_mcast_init(void);
1011
 
extern int              netdev_max_backlog;
1012
 
extern int              weight_p;
1013
 
extern int              netdev_set_master(struct net_device *dev, struct net_device *master);
1014
 
extern int skb_checksum_help(struct sk_buff *skb);
1015
 
extern struct sk_buff *skb_gso_segment(struct sk_buff *skb, int features);
1016
 
#ifdef CONFIG_BUG
1017
 
extern void netdev_rx_csum_fault(struct net_device *dev);
1018
 
#else
1019
 
static inline void netdev_rx_csum_fault(struct net_device *dev)
1020
 
{
1021
 
}
1022
 
#endif
1023
 
/* rx skb timestamps */
1024
 
extern void             net_enable_timestamp(void);
1025
 
extern void             net_disable_timestamp(void);
1026
 
 
1027
 
#ifdef CONFIG_PROC_FS
1028
 
extern void *dev_seq_start(struct seq_file *seq, loff_t *pos);
1029
 
extern void *dev_seq_next(struct seq_file *seq, void *v, loff_t *pos);
1030
 
extern void dev_seq_stop(struct seq_file *seq, void *v);
1031
 
#endif
1032
 
 
1033
 
extern void linkwatch_run_queue(void);
1034
 
 
1035
 
static inline int net_gso_ok(int features, int gso_type)
1036
 
{
1037
 
        int feature = gso_type << NETIF_F_GSO_SHIFT;
1038
 
        return (features & feature) == feature;
1039
 
}
1040
 
 
1041
 
static inline int skb_gso_ok(struct sk_buff *skb, int features)
1042
 
{
1043
 
        return net_gso_ok(features, skb_shinfo(skb)->gso_type);
1044
 
}
1045
 
 
1046
 
static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb)
1047
 
{
1048
 
        return skb_is_gso(skb) &&
1049
 
               (!skb_gso_ok(skb, dev->features) ||
1050
 
                unlikely(skb->ip_summed != CHECKSUM_PARTIAL));
1051
 
}
1052
 
 
1053
 
/* On bonding slaves other than the currently active slave, suppress
1054
 
 * duplicates except for 802.3ad ETH_P_SLOW, alb non-mcast/bcast, and
1055
 
 * ARP on active-backup slaves with arp_validate enabled.
1056
 
 */
1057
 
static inline int skb_bond_should_drop(struct sk_buff *skb)
1058
 
{
1059
 
        struct net_device *dev = skb->dev;
1060
 
        struct net_device *master = dev->master;
1061
 
 
1062
 
        if (master &&
1063
 
            (dev->priv_flags & IFF_SLAVE_INACTIVE)) {
1064
 
                if ((dev->priv_flags & IFF_SLAVE_NEEDARP) &&
1065
 
                    skb->protocol == __constant_htons(ETH_P_ARP))
1066
 
                        return 0;
1067
 
 
1068
 
                if (master->priv_flags & IFF_MASTER_ALB) {
1069
 
                        if (skb->pkt_type != PACKET_BROADCAST &&
1070
 
                            skb->pkt_type != PACKET_MULTICAST)
1071
 
                                return 0;
1072
 
                }
1073
 
                if (master->priv_flags & IFF_MASTER_8023AD &&
1074
 
                    skb->protocol == __constant_htons(ETH_P_SLOW))
1075
 
                        return 0;
1076
 
 
1077
 
                return 1;
1078
 
        }
1079
 
        return 0;
1080
 
}
1081
 
 
1082
 
#endif /* __KERNEL__ */
1083
 
 
1084
 
#endif  /* _LINUX_DEV_H */