⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 netdevice.h

📁 linux得一些常用命令,以及linux环境下的c编程
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * INET		An implementation of the TCP/IP protocol suite for the LINUX *		operating system.  INET is implemented using the  BSD Socket *		interface as the means of communication with the user level. * *		Definitions for the Interfaces handler. * * Version:	@(#)dev.h	1.0.10	08/12/93 * * Authors:	Ross Biro, <bir7@leland.Stanford.Edu> *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> *		Corey Minyard <wf-rch!minyard@relay.EU.net> *		Donald J. Becker, <becker@cesdis.gsfc.nasa.gov> *		Alan Cox, <Alan.Cox@linux.org> *		Bjorn Ekwall. <bj0rn@blox.se> *              Pekka Riikonen <priikone@poseidon.pspt.fi> * *		This program is free software; you can redistribute it and/or *		modify it under the terms of the GNU General Public License *		as published by the Free Software Foundation; either version *		2 of the License, or (at your option) any later version. * *		Moved to /usr/include/linux for NET3 */#ifndef _LINUX_NETDEVICE_H#define _LINUX_NETDEVICE_H#include <linux/if.h>#include <linux/if_ether.h>#include <linux/if_packet.h>#include <asm/atomic.h>#include <asm/cache.h>#include <asm/byteorder.h>#ifdef __KERNEL__#include <linux/config.h>#ifdef CONFIG_NET_PROFILE#include <net/profile.h>#endifstruct divert_blk;struct vlan_group;#define HAVE_ALLOC_NETDEV		/* feature macro: alloc_xxxdev					   functions are available. */#define NET_XMIT_SUCCESS	0#define NET_XMIT_DROP		1	/* skb dropped			*/#define NET_XMIT_CN		2	/* congestion notification	*/#define NET_XMIT_POLICED	3	/* skb is shot by police	*/#define NET_XMIT_BYPASS		4	/* packet does not leave via dequeue;					   (TC use only - dev_queue_xmit					   returns this as NET_XMIT_SUCCESS) *//* Backlog congestion levels */#define NET_RX_SUCCESS		0   /* keep 'em coming, baby */#define NET_RX_DROP		1  /* packet dropped */#define NET_RX_CN_LOW		2   /* storm alert, just in case */#define NET_RX_CN_MOD		3   /* Storm on its way! */#define NET_RX_CN_HIGH		4   /* The storm is here */#define NET_RX_BAD		5  /* packet dropped due to kernel error */#define net_xmit_errno(e)	((e) != NET_XMIT_CN ? -ENOBUFS : 0)#endif#define MAX_ADDR_LEN	8		/* Largest hardware address length *//* *	Compute the worst case header length according to the protocols *	used. */ #if !defined(CONFIG_AX25) && !defined(CONFIG_AX25_MODULE) && !defined(CONFIG_TR)#define LL_MAX_HEADER	32#else#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)#define LL_MAX_HEADER	96#else#define LL_MAX_HEADER	48#endif#endif#if !defined(CONFIG_NET_IPIP) && \    !defined(CONFIG_IPV6) && !defined(CONFIG_IPV6_MODULE)#define MAX_HEADER LL_MAX_HEADER#else#define MAX_HEADER (LL_MAX_HEADER + 48)#endif/* *	Network device statistics. Akin to the 2.0 ether stats but *	with byte counters. */ struct net_device_stats{	unsigned long	rx_packets;		/* total packets received	*/	unsigned long	tx_packets;		/* total packets transmitted	*/	unsigned long	rx_bytes;		/* total bytes received 	*/	unsigned long	tx_bytes;		/* total bytes transmitted	*/	unsigned long	rx_errors;		/* bad packets received		*/	unsigned long	tx_errors;		/* packet transmit problems	*/	unsigned long	rx_dropped;		/* no space in linux buffers	*/	unsigned long	tx_dropped;		/* no space available in linux	*/	unsigned long	multicast;		/* multicast packets received	*/	unsigned long	collisions;	/* detailed rx_errors: */	unsigned long	rx_length_errors;	unsigned long	rx_over_errors;		/* receiver ring buff overflow	*/	unsigned long	rx_crc_errors;		/* recved pkt with crc error	*/	unsigned long	rx_frame_errors;	/* recv'd frame alignment error */	unsigned long	rx_fifo_errors;		/* recv'r fifo overrun		*/	unsigned long	rx_missed_errors;	/* receiver missed packet	*/	/* detailed tx_errors */	unsigned long	tx_aborted_errors;	unsigned long	tx_carrier_errors;	unsigned long	tx_fifo_errors;	unsigned long	tx_heartbeat_errors;	unsigned long	tx_window_errors;		/* for cslip etc */	unsigned long	rx_compressed;	unsigned long	tx_compressed;};/* Media selection options. */enum {        IF_PORT_UNKNOWN = 0,        IF_PORT_10BASE2,        IF_PORT_10BASET,        IF_PORT_AUI,        IF_PORT_100BASET,        IF_PORT_100BASETX,        IF_PORT_100BASEFX};#ifdef __KERNEL__extern const char *if_port_text[];#include <linux/cache.h>#include <linux/skbuff.h>struct neighbour;struct neigh_parms;struct sk_buff;struct netif_rx_stats{	unsigned total;	unsigned dropped;	unsigned time_squeeze;	unsigned throttled;	unsigned fastroute_hit;	unsigned fastroute_success;	unsigned fastroute_defer;	unsigned fastroute_deferred_out;	unsigned fastroute_latency_reduction;	unsigned cpu_collision;} ____cacheline_aligned;extern struct netif_rx_stats netdev_rx_stat[];/* *	We tag multicasts with these structures. */ struct dev_mc_list{		struct dev_mc_list	*next;	__u8			dmi_addr[MAX_ADDR_LEN];	unsigned char		dmi_addrlen;	int			dmi_users;	int			dmi_gusers;};struct hh_cache{	struct hh_cache *hh_next;	/* Next entry			     */	atomic_t	hh_refcnt;	/* number of users                   */	unsigned short  hh_type;	/* protocol identifier, f.e ETH_P_IP                                         *  NOTE:  For VLANs, this will be the                                         *  encapuslated type. --BLG                                         */	int		hh_len;		/* length of header */	int		(*hh_output)(struct sk_buff *skb);	rwlock_t	hh_lock;	/* cached hardware header; allow for machine alignment needs.        */	unsigned long	hh_data[16/sizeof(unsigned long)];};/* These flag bits are private to the generic network queueing * layer, they may not be explicitly referenced by any other * code. */enum netdev_state_t{	__LINK_STATE_XOFF=0,	__LINK_STATE_START,	__LINK_STATE_PRESENT,	__LINK_STATE_SCHED,	__LINK_STATE_NOCARRIER,	__LINK_STATE_RX_SCHED};/* * This structure holds at boot time configured netdevice settings. They * are then used in the device probing.  */struct netdev_boot_setup {	char name[IFNAMSIZ];	struct ifmap map;};#define NETDEV_BOOT_SETUP_MAX 8/* *	The DEVICE structure. *	Actually, this whole structure is a big mistake.  It mixes I/O *	data with strictly "high-level" data, and it has to know about *	almost every data structure used in the INET module. * *	FIXME: cleanup struct net_device such that network protocol info *	moves out. */struct net_device{	/*	 * This is the first field of the "visible" part of this structure	 * (i.e. as seen by users in the "Space.c" file).  It is the name	 * the interface.	 */	char			name[IFNAMSIZ];	/*	 *	I/O specific fields	 *	FIXME: Merge these and struct ifmap into one	 */	unsigned long		rmem_end;	/* shmem "recv" end	*/	unsigned long		rmem_start;	/* shmem "recv" start	*/	unsigned long		mem_end;	/* shared mem end	*/	unsigned long		mem_start;	/* shared mem start	*/	unsigned long		base_addr;	/* device I/O address	*/	unsigned int		irq;		/* device IRQ number	*/	/*	 *	Some hardware also needs these fields, but they are not	 *	part of the usual set specified in Space.c.	 */	unsigned char		if_port;	/* Selectable AUI, TP,..*/	unsigned char		dma;		/* DMA channel		*/	unsigned long		state;	struct net_device	*next;		/* The device initialization function. Called only once. */	int			(*init)(struct net_device *dev);	/* ------- Fields preinitialized in Space.c finish here ------- */	struct net_device	*next_sched;	/* Interface index. Unique device identifier	*/	int			ifindex;	int			iflink;	struct net_device_stats* (*get_stats)(struct net_device *dev);	struct iw_statistics*	(*get_wireless_stats)(struct net_device *dev);	/* List of functions to handle Wireless Extensions (instead of ioctl).	 * See <net/iw_handler.h> for details. Jean II */	struct iw_handler_def *	wireless_handlers;	/*	 * This marks the end of the "visible" part of the structure. All	 * fields hereafter are internal to the system, and may change at	 * will (read: may be cleaned up at will).	 */	/* These may be needed for future network-power-down code. */	unsigned long		trans_start;	/* Time (in jiffies) of last Tx	*/	unsigned long		last_rx;	/* Time of last Rx	*/	unsigned short		flags;	/* interface flags (a la BSD)	*/	unsigned short		gflags;        unsigned short          priv_flags; /* Like 'flags' but invisible to userspace. */        unsigned short          unused_alignment_fixer; /* Because we need priv_flags,                                                         * and we want to be 32-bit aligned.                                                         */	unsigned		mtu;	/* interface MTU value		*/	unsigned short		type;	/* interface hardware type	*/	unsigned short		hard_header_len;	/* hardware hdr length	*/	void			*priv;	/* pointer to private data	*/	struct net_device	*master; /* Pointer to master device of a group,					  * which this device is member of.					  */	/* Interface address info. */	unsigned char		broadcast[MAX_ADDR_LEN];	/* hw bcast add	*/	unsigned char		dev_addr[MAX_ADDR_LEN];	/* hw address	*/	unsigned char		addr_len;	/* hardware address length	*/	struct dev_mc_list	*mc_list;	/* Multicast mac addresses	*/	int			mc_count;	/* Number of installed mcasts	*/	int			promiscuity;	int			allmulti;	int			watchdog_timeo;	struct timer_list	watchdog_timer;	/* Protocol specific pointers */		void 			*atalk_ptr;	/* AppleTalk link 	*/	void			*ip_ptr;	/* IPv4 specific data	*/  	void                    *dn_ptr;        /* DECnet specific data */	void                    *ip6_ptr;       /* IPv6 specific data */	void			*ec_ptr;	/* Econet specific data	*/	struct list_head	poll_list;	/* Link to poll list	*/	int			quota;	int			weight;	struct Qdisc		*qdisc;	struct Qdisc		*qdisc_sleeping;	struct Qdisc		*qdisc_list;	struct Qdisc		*qdisc_ingress;	unsigned long		tx_queue_len;	/* Max frames per queue allowed */	/* hard_start_xmit synchronizer */	spinlock_t		xmit_lock;	/* cpu id of processor entered to hard_start_xmit or -1,	   if nobody entered there.	 */	int			xmit_lock_owner;	/* device queue lock */	spinlock_t		queue_lock;	/* Number of references to this device */	atomic_t		refcnt;	/* The flag marking that device is unregistered, but held by an user */	int			deadbeaf;	/* Net device features */	int			features;#define NETIF_F_SG		1	/* Scatter/gather IO. */#define NETIF_F_IP_CSUM		2	/* Can checksum only TCP/UDP over IPv4. */#define NETIF_F_NO_CSUM		4	/* Does not require checksum. F.e. loopack. */#define NETIF_F_HW_CSUM		8	/* Can checksum all the packets. */#define NETIF_F_DYNALLOC	16	/* Self-dectructable device. */#define NETIF_F_HIGHDMA		32	/* Can DMA to high memory. */#define NETIF_F_FRAGLIST	64	/* Scatter/gather IO. */#define NETIF_F_HW_VLAN_TX	128	/* Transmit VLAN hw acceleration */#define NETIF_F_HW_VLAN_RX	256	/* Receive VLAN hw acceleration */#define NETIF_F_HW_VLAN_FILTER	512	/* Receive filtering on VLAN */#define NETIF_F_VLAN_CHALLENGED	1024	/* Device cannot handle VLAN packets */	/* Called after device is detached from network. */	void			(*uninit)(struct net_device *dev);	/* Called after last user reference disappears. */	void			(*destructor)(struct net_device *dev);	/* Pointers to interface service routines.	*/	int			(*open)(struct net_device *dev);	int			(*stop)(struct net_device *dev);	int			(*hard_start_xmit) (struct sk_buff *skb,						    struct net_device *dev);#define HAVE_NETDEV_POLL	int			(*poll) (struct net_device *dev, int *quota);	int			(*hard_header) (struct sk_buff *skb,						struct net_device *dev,						unsigned short type,						void *daddr,						void *saddr,						unsigned len);	int			(*rebuild_header)(struct sk_buff *skb);#define HAVE_MULTICAST			 	void			(*set_multicast_list)(struct net_device *dev);#define HAVE_SET_MAC_ADDR  		 	int			(*set_mac_address)(struct net_device *dev,						   void *addr);#define HAVE_PRIVATE_IOCTL	int			(*do_ioctl)(struct net_device *dev,					    struct ifreq *ifr, int cmd);#define HAVE_SET_CONFIG	int			(*set_config)(struct net_device *dev,					      struct ifmap *map);#define HAVE_HEADER_CACHE	int			(*hard_header_cache)(struct neighbour *neigh,						     struct hh_cache *hh);	void			(*header_cache_update)(struct hh_cache *hh,						       struct net_device *dev,						       unsigned char *  haddr);#define HAVE_CHANGE_MTU	int			(*change_mtu)(struct net_device *dev, int new_mtu);#define HAVE_TX_TIMEOUT	void			(*tx_timeout) (struct net_device *dev);	void			(*vlan_rx_register)(struct net_device *dev,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -