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

📄 netdevice.h

📁 一种操作系统源码核
💻 H
字号:
#ifndef NETDEVICE_H#define NETDEVICE_H#define NET_XMIT_SUCCESS	0#define NET_XMIT_DROP		1	/* skb dropped			*/#define NET_XMIT_CONGEST		2	/* congestion notification	*/#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_CONGEST_LOW		2   /* storm alert, just in case */#define NET_RX_CONGEST_MID		3   /* Storm on its way! */#define NET_RX_CONGEST_HIGH		4   /* The storm is here */#define NET_RX_BAD		5  /* packet dropped due to kernel error */#define MAX_ADDR_LEN	6		/* Largest hardware address length */#define MAX_HEADER	48/* *	Network device statistics.  */ 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};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;};/* *	 multicasts  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;};/* 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};/* *	The DEVICE structure.*/struct net_device{		char			name[IFNAMSIZ];	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);	/*	 * 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		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		pad;		/* make dev_addr aligned to 8 bytes */	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 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	1	/* Scatter/gather IO. */	/* 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);	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);	int			(*hard_header_parse)(struct sk_buff *skb,						     unsigned char *haddr);	int			(*neigh_setup)(struct net_device *dev, struct neigh_parms *);	int			(*accept_fastpath)(struct net_device *, struct dst_entry*);	/* open/release and usage marking */	struct module *owner;	/* bridge stuff */	struct net_bridge_port	*br_port;#ifdef CONFIG_NET_FASTROUTE#define NETDEV_FASTROUTE_HMASK 0xF	/* Semi-private data. Keep it at the end of device struct. */	rwlock_t		fastpath_lock;	struct dst_entry	*fastpath[NETDEV_FASTROUTE_HMASK+1];#endif#ifdef CONFIG_NET_DIVERT	/* this will get initialized at each interface type init routine */	struct divert_blk	*divert;#endif /* CONFIG_NET_DIVERT */};struct packet_type {	unsigned short		type;	/* This is really htons(ether_type).	*/	struct net_device		*dev;	/* NULL is wildcarded here		*/	int			(*func) (struct sk_buff *, struct net_device *,					 struct packet_type *);	void			*data;	/* Private to the packet type		*/	struct packet_type	*next;};static inline void netif_start_queue(struct net_device *dev){	clear_bit(__LINK_STATE_XOFF, &dev->state);}static inline void netif_wake_queue(struct net_device *dev){	if (test_and_clear_bit(__LINK_STATE_XOFF, &dev->state))		__netif_schedule(dev);}static inline void netif_stop_queue(struct net_device *dev){	set_bit(__LINK_STATE_XOFF, &dev->state);}static inline int netif_queue_stopped(struct net_device *dev){	return test_bit(__LINK_STATE_XOFF, &dev->state);}static inline int netif_running(struct net_device *dev){	return test_bit(__LINK_STATE_START, &dev->state);}/* Carrier loss detection, dial on demand. The functions netif_carrier_on * and _off may be called from IRQ context, but it is caller * who is responsible for serialization of these calls. */static inline int netif_carrier_ok(struct net_device *dev){	return !test_bit(__LINK_STATE_NOCARRIER, &dev->state);}extern void __netdev_watchdog_up(struct net_device *dev);static inline void netif_carrier_on(struct net_device *dev){	clear_bit(__LINK_STATE_NOCARRIER, &dev->state);	if (netif_running(dev))		__netdev_watchdog_up(dev);}static inline void netif_carrier_off(struct net_device *dev){	set_bit(__LINK_STATE_NOCARRIER, &dev->state);}/* Hot-plugging. */static inline int netif_device_present(struct net_device *dev){	return test_bit(__LINK_STATE_PRESENT, &dev->state);}static inline void netif_device_detach(struct net_device *dev){	if (test_and_clear_bit(__LINK_STATE_PRESENT, &dev->state) &&	    netif_running(dev)) {		netif_stop_queue(dev);	}}static inline void netif_device_attach(struct net_device *dev){	if (!test_and_set_bit(__LINK_STATE_PRESENT, &dev->state) &&	    netif_running(dev)) {		netif_wake_queue(dev); 		__netdev_watchdog_up(dev);	}}#endif	/* _LINUX_DEV_H */

⌨️ 快捷键说明

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