00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _LINUX_NETDEVICE_H
00025 #define _LINUX_NETDEVICE_H
00026
00027 #ifdef __KERNEL__
00028 #include <linux/config.h>
00029 #endif
00030 #include <linux/if.h>
00031 #include <linux/if_ether.h>
00032 #include <linux/if_packet.h>
00033
00034 #include <asm/atomic.h>
00035
00036 #ifdef __KERNEL__
00037 #ifdef CONFIG_NET_PROFILE
00038 #include <net/profile.h>
00039 #endif
00040 #endif
00041
00042 struct divert_blk;
00043
00044
00045
00046
00047
00048 #define MAX_ADDR_LEN 7
00049
00050
00051
00052
00053
00054
00055 #if !defined(CONFIG_AX25) && !defined(CONFIG_AX25_MODULE) && !defined(CONFIG_TR)
00056 #define LL_MAX_HEADER 32
00057 #else
00058 #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
00059 #define LL_MAX_HEADER 96
00060 #else
00061 #define LL_MAX_HEADER 48
00062 #endif
00063 #endif
00064
00065 #if !defined(CONFIG_NET_IPIP) && \
00066 !defined(CONFIG_IPV6) && !defined(CONFIG_IPV6_MODULE)
00067 #define MAX_HEADER LL_MAX_HEADER
00068 #else
00069 #define MAX_HEADER (LL_MAX_HEADER + 48)
00070 #endif
00071
00072
00073
00074
00075
00076
00077 struct net_device_stats
00078 {
00079 unsigned long rx_packets;
00080 unsigned long tx_packets;
00081 unsigned long rx_bytes;
00082 unsigned long tx_bytes;
00083 unsigned long rx_errors;
00084 unsigned long tx_errors;
00085 unsigned long rx_dropped;
00086 unsigned long tx_dropped;
00087 unsigned long multicast;
00088 unsigned long collisions;
00089
00090
00091 unsigned long rx_length_errors;
00092 unsigned long rx_over_errors;
00093 unsigned long rx_crc_errors;
00094 unsigned long rx_frame_errors;
00095 unsigned long rx_fifo_errors;
00096 unsigned long rx_missed_errors;
00097
00098
00099 unsigned long tx_aborted_errors;
00100 unsigned long tx_carrier_errors;
00101 unsigned long tx_fifo_errors;
00102 unsigned long tx_heartbeat_errors;
00103 unsigned long tx_window_errors;
00104
00105
00106 unsigned long rx_compressed;
00107 unsigned long tx_compressed;
00108 };
00109
00110 #ifdef CONFIG_NET_FASTROUTE
00111 struct net_fastroute_stats
00112 {
00113 int hits;
00114 int succeed;
00115 int deferred;
00116 int latency_reduction;
00117 };
00118 #endif
00119
00120
00121 enum {
00122 IF_PORT_UNKNOWN = 0,
00123 IF_PORT_10BASE2,
00124 IF_PORT_10BASET,
00125 IF_PORT_AUI,
00126 IF_PORT_100BASET,
00127 IF_PORT_100BASETX,
00128 IF_PORT_100BASEFX
00129 };
00130
00131 #ifdef __KERNEL__
00132
00133 extern const char *if_port_text[];
00134
00135 #include <linux/skbuff.h>
00136
00137 struct neighbour;
00138 struct neigh_parms;
00139 struct sk_buff;
00140
00141
00142
00143
00144
00145 struct dev_mc_list
00146 {
00147 struct dev_mc_list *next;
00148 __u8 dmi_addr[MAX_ADDR_LEN];
00149 unsigned char dmi_addrlen;
00150 int dmi_users;
00151 int dmi_gusers;
00152 };
00153
00154 struct hh_cache
00155 {
00156 struct hh_cache *hh_next;
00157 atomic_t hh_refcnt;
00158 unsigned short hh_type;
00159 int (*hh_output)(struct sk_buff *skb);
00160 rwlock_t hh_lock;
00161
00162 unsigned long hh_data[16/sizeof(unsigned long)];
00163 };
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176 struct device
00177 {
00178
00179
00180
00181
00182
00183
00184 char *name;
00185
00186
00187
00188
00189
00190 unsigned long rmem_end;
00191 unsigned long rmem_start;
00192 unsigned long mem_end;
00193 unsigned long mem_start;
00194 unsigned long base_addr;
00195 unsigned int irq;
00196
00197
00198 volatile unsigned char start;
00199
00200
00201
00202
00203
00204
00205 unsigned long interrupt;
00206 unsigned long tbusy;
00207
00208 struct device *next;
00209
00210
00211 int (*init)(struct device *dev);
00212 void (*destructor)(struct device *dev);
00213
00214
00215 int ifindex;
00216 int iflink;
00217
00218
00219
00220
00221
00222
00223 unsigned char if_port;
00224 unsigned char dma;
00225
00226 struct net_device_stats* (*get_stats)(struct device *dev);
00227 struct iw_statistics* (*get_wireless_stats)(struct device *dev);
00228
00229
00230
00231
00232
00233
00234
00235
00236 unsigned long trans_start;
00237 unsigned long last_rx;
00238
00239 unsigned short flags;
00240 unsigned short gflags;
00241 unsigned mtu;
00242 unsigned short type;
00243 unsigned short hard_header_len;
00244 void *priv;
00245
00246
00247 unsigned char broadcast[MAX_ADDR_LEN];
00248 unsigned char pad;
00249 unsigned char dev_addr[MAX_ADDR_LEN];
00250 unsigned char addr_len;
00251
00252 struct dev_mc_list *mc_list;
00253 int mc_count;
00254 int promiscuity;
00255 int allmulti;
00256
00257
00258
00259 unsigned long pkt_queue;
00260 struct device *slave;
00261
00262
00263
00264 void *atalk_ptr;
00265 void *ip_ptr;
00266 void *dn_ptr;
00267
00268 struct Qdisc *qdisc;
00269 struct Qdisc *qdisc_sleeping;
00270 struct Qdisc *qdisc_list;
00271 unsigned long tx_queue_len;
00272
00273
00274 int bridge_port_id;
00275
00276
00277 int (*open)(struct device *dev);
00278 int (*stop)(struct device *dev);
00279 int (*hard_start_xmit) (struct sk_buff *skb,
00280 struct device *dev);
00281 int (*hard_header) (struct sk_buff *skb,
00282 struct device *dev,
00283 unsigned short type,
00284 void *daddr,
00285 void *saddr,
00286 unsigned len);
00287 int (*rebuild_header)(struct sk_buff *skb);
00288 #define HAVE_MULTICAST
00289 void (*set_multicast_list)(struct device *dev);
00290 #define HAVE_SET_MAC_ADDR
00291 int (*set_mac_address)(struct device *dev,
00292 void *addr);
00293 #define HAVE_PRIVATE_IOCTL
00294 int (*do_ioctl)(struct device *dev,
00295 struct ifreq *ifr, int cmd);
00296 #define HAVE_SET_CONFIG
00297 int (*set_config)(struct device *dev,
00298 struct ifmap *map);
00299 #define HAVE_HEADER_CACHE
00300 int (*hard_header_cache)(struct neighbour *neigh,
00301 struct hh_cache *hh);
00302 void (*header_cache_update)(struct hh_cache *hh,
00303 struct device *dev,
00304 unsigned char * haddr);
00305 #define HAVE_CHANGE_MTU
00306 int (*change_mtu)(struct device *dev, int new_mtu);
00307
00308 int (*hard_header_parse)(struct sk_buff *skb,
00309 unsigned char *haddr);
00310 int (*neigh_setup)(struct device *dev, struct neigh_parms *);
00311 int (*accept_fastpath)(struct device *, struct dst_entry*);
00312
00313 #ifdef CONFIG_NET_FASTROUTE
00314
00315
00316
00317 int tx_semaphore;
00318 #define NETDEV_FASTROUTE_HMASK 0xF
00319
00320 struct dst_entry *fastpath[NETDEV_FASTROUTE_HMASK+1];
00321 #endif
00322
00323 #ifdef CONFIG_NET_DIVERT
00324
00325 struct divert_blk *divert;
00326 #endif
00327 };
00328
00329
00330 struct packet_type
00331 {
00332 unsigned short type;
00333 struct device *dev;
00334 int (*func) (struct sk_buff *, struct device *,
00335 struct packet_type *);
00336 void *data;
00337 struct packet_type *next;
00338 };
00339
00340
00341 #include <linux/interrupt.h>
00342 #include <linux/notifier.h>
00343
00344 extern struct device loopback_dev;
00345 extern struct device *dev_base;
00346 extern struct packet_type *ptype_base[16];
00347 extern int netdev_dropping;
00348 extern int net_cpu_congestion;
00349
00350 extern struct device *dev_getbyhwaddr(unsigned short type, char *hwaddr);
00351 extern void dev_add_pack(struct packet_type *pt);
00352 extern void dev_remove_pack(struct packet_type *pt);
00353 extern struct device *dev_get(const char *name);
00354 extern struct device *dev_alloc(const char *name, int *err);
00355 extern int dev_alloc_name(struct device *dev, const char *name);
00356 extern int dev_open(struct device *dev);
00357 extern int dev_close(struct device *dev);
00358 extern int dev_queue_xmit(struct sk_buff *skb);
00359 extern void dev_loopback_xmit(struct sk_buff *skb);
00360 extern int register_netdevice(struct device *dev);
00361 extern int unregister_netdevice(struct device *dev);
00362 extern int register_netdevice_notifier(struct notifier_block *nb);
00363 extern int unregister_netdevice_notifier(struct notifier_block *nb);
00364 extern int dev_new_index(void);
00365 extern struct device *dev_get_by_index(int ifindex);
00366 extern int dev_restart(struct device *dev);
00367
00368 typedef int gifconf_func_t(struct device * dev, char * bufptr, int len);
00369 extern int register_gifconf(unsigned int family, gifconf_func_t * gifconf);
00370 extern __inline__ int unregister_gifconf(unsigned int family)
00371 {
00372 return register_gifconf(family, 0);
00373 }
00374
00375 #define HAVE_NETIF_RX 1
00376 extern void netif_rx(struct sk_buff *skb);
00377 extern void net_bh(void);
00378 extern int dev_get_info(char *buffer, char **start, off_t offset, int length, int dummy);
00379 extern int dev_ioctl(unsigned int cmd, void *);
00380 extern int dev_change_flags(struct device *, unsigned);
00381 extern void dev_queue_xmit_nit(struct sk_buff *skb, struct device *dev);
00382
00383 extern void dev_init(void);
00384
00385 extern int netdev_nit;
00386
00387
00388
00389 extern atomic_t dev_lockct;
00390
00391
00392
00393
00394
00395
00396 extern __inline__ void dev_lock_list(void)
00397 {
00398 atomic_inc(&dev_lockct);
00399 }
00400
00401 extern __inline__ void dev_unlock_list(void)
00402 {
00403 atomic_dec(&dev_lockct);
00404 }
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417 extern __inline__ void dev_lock_wait(void)
00418 {
00419 while (atomic_read(&dev_lockct)) {
00420 current->policy |= SCHED_YIELD;
00421 schedule();
00422 }
00423 }
00424
00425 extern __inline__ void dev_init_buffers(struct device *dev)
00426 {
00427
00428 }
00429
00430
00431
00432 extern void ether_setup(struct device *dev);
00433 extern void fddi_setup(struct device *dev);
00434 extern void tr_setup(struct device *dev);
00435 extern void fc_setup(struct device *dev);
00436 extern void tr_freedev(struct device *dev);
00437 extern void fc_freedev(struct device *dev);
00438 extern int ether_config(struct device *dev, struct ifmap *map);
00439
00440 extern int register_netdev(struct device *dev);
00441 extern void unregister_netdev(struct device *dev);
00442 extern int register_trdev(struct device *dev);
00443 extern void unregister_trdev(struct device *dev);
00444 extern int register_fddidev(struct device *dev);
00445 extern void unregister_fddidev(struct device *dev);
00446 extern int register_fcdev(struct device *dev);
00447 extern void unregister_fcdev(struct device *dev);
00448
00449 extern void dev_mc_upload(struct device *dev);
00450 extern int dev_mc_delete(struct device *dev, void *addr, int alen, int all);
00451 extern int dev_mc_add(struct device *dev, void *addr, int alen, int newonly);
00452 extern void dev_mc_discard(struct device *dev);
00453 extern void dev_set_promiscuity(struct device *dev, int inc);
00454 extern void dev_set_allmulti(struct device *dev, int inc);
00455 extern void netdev_state_change(struct device *dev);
00456
00457 extern void dev_load(const char *name);
00458 extern void dev_mcast_init(void);
00459 extern int netdev_register_fc(struct device *dev, void (*stimul)(struct device *dev));
00460 extern void netdev_unregister_fc(int bit);
00461 extern int netdev_dropping;
00462 extern int netdev_max_backlog;
00463 extern atomic_t netdev_rx_dropped;
00464 extern unsigned long netdev_fc_xoff;
00465 #ifdef CONFIG_NET_FASTROUTE
00466 extern int netdev_fastroute;
00467 extern int netdev_fastroute_obstacles;
00468 extern void dev_clear_fastroute(struct device *dev);
00469 extern struct net_fastroute_stats dev_fastroute_stat;
00470 #endif
00471
00472
00473 #endif
00474
00475 #endif