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

📄 skbuff.h

📁 自己做的交叉编译工具!gcc-3.4.5,glibc-2.3.6在ubuntu8.04上做的面向kernel-2.6.28的交叉编译工具
💻 H
字号:
/* *	Definitions for the 'struct sk_buff' memory handlers. * *	Authors: *		Alan Cox, <gw4pts@gw4pts.ampr.org> *		Florian La Roche, <rzsfl@rz.uni-sb.de> * *	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. */#ifndef _LINUX_SKBUFF_H#define _LINUX_SKBUFF_H#include <linux/kernel.h>#include <sys/time.h>#include <linux/cache.h>#include <asm/types.h>#include <linux/poll.h>#include <linux/net.h>#include <net/checksum.h>#define HAVE_ALLOC_SKB		/* For the drivers to know */#define HAVE_ALIGNABLE_SKB	/* Ditto 8)		   */#define SLAB_SKB 		/* Slabified skbuffs 	   */#define CHECKSUM_NONE 0#define CHECKSUM_HW 1#define CHECKSUM_UNNECESSARY 2#define SKB_DATA_ALIGN(X)	(((X) + (SMP_CACHE_BYTES - 1)) & \				 ~(SMP_CACHE_BYTES - 1))#define SKB_MAX_ORDER(X, ORDER)	(((PAGE_SIZE << (ORDER)) - (X) - \				  sizeof(struct skb_shared_info)) & \				  ~(SMP_CACHE_BYTES - 1))#define SKB_MAX_HEAD(X)		(SKB_MAX_ORDER((X), 0))#define SKB_MAX_ALLOC		(SKB_MAX_ORDER(0, 2))/* A. Checksumming of received packets by device. * *	NONE: device failed to checksum this packet. *		skb->csum is undefined. * *	UNNECESSARY: device parsed packet and wouldbe verified checksum. *		skb->csum is undefined. *	      It is bad option, but, unfortunately, many of vendors do this. *	      Apparently with secret goal to sell you new device, when you *	      will add new protocol to your host. F.e. IPv6. 8) * *	HW: the most generic way. Device supplied checksum of _all_ *	    the packet as seen by netif_rx in skb->csum. *	    NOTE: Even if device supports only some protocols, but *	    is able to produce some skb->csum, it MUST use HW, *	    not UNNECESSARY. * * B. Checksumming on output. * *	NONE: skb is checksummed by protocol or csum is not required. * *	HW: device is required to csum packet as seen by hard_start_xmit *	from skb->h.raw to the end and to record the checksum *	at skb->h.raw+skb->csum. * *	Device must show its capabilities in dev->features, set *	at device setup time. *	NETIF_F_HW_CSUM	- it is clever device, it is able to checksum *			  everything. *	NETIF_F_NO_CSUM - loopback or reliable single hop media. *	NETIF_F_IP_CSUM - device is dumb. It is able to csum only *			  TCP/UDP over IPv4. Sigh. Vendors like this *			  way by an unknown reason. Though, see comment above *			  about CHECKSUM_UNNECESSARY. 8) * *	Any questions? No questions, good. 		--ANK */struct net_device;#ifdef CONFIG_NETFILTERstruct nf_conntrack {	atomic_t use;	void (*destroy)(struct nf_conntrack *);};#ifdef CONFIG_BRIDGE_NETFILTERstruct nf_bridge_info {	atomic_t use;	struct net_device *physindev;	struct net_device *physoutdev;#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)	struct net_device *netoutdev;#endif	unsigned int mask;	unsigned long data[32 / sizeof(unsigned long)];};#endif#endifstruct sk_buff_head {	/* These two members must be first. */	struct sk_buff	*next;	struct sk_buff	*prev;	__u32		qlen;	spinlock_t	lock;};struct sk_buff;/* To allow 64K frame to be packed as single skb without frag_list */#define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2)typedef struct skb_frag_struct skb_frag_t;struct skb_frag_struct {	struct page *page;	__u16 page_offset;	__u16 size;};/* This data is invariant across clones and lives at * the end of the header data, ie. at skb->end. */struct skb_shared_info {	atomic_t	dataref;	unsigned int	nr_frags;	unsigned short	tso_size;	unsigned short	tso_segs;	struct sk_buff	*frag_list;	skb_frag_t	frags[MAX_SKB_FRAGS];};/* We divide dataref into two halves.  The higher 16 bits hold references * to the payload part of skb->data.  The lower 16 bits hold references to * the entire skb->data.  It is up to the users of the skb to agree on * where the payload starts. * * All users must obey the rule that the skb->data reference count must be * greater than or equal to the payload reference count. * * Holding a reference to the payload part means that the user does not * care about modifications to the header part of skb->data. */#define SKB_DATAREF_SHIFT 16#define SKB_DATAREF_MASK ((1 << SKB_DATAREF_SHIFT) - 1)/**  *	struct sk_buff - socket buffer *	@next: Next buffer in list *	@prev: Previous buffer in list *	@list: List we are on *	@sk: Socket we are owned by *	@stamp: Time we arrived *	@dev: Device we arrived on/are leaving by *	@input_dev: Device we arrived on *      @real_dev: The real device we are using *	@h: Transport layer header *	@nh: Network layer header *	@mac: Link layer header *	@dst: destination entry *	@sp: the security path, used for xfrm *	@cb: Control buffer. Free for use by every layer. Put private vars here *	@len: Length of actual data *	@data_len: Data length *	@mac_len: Length of link layer header *	@csum: Checksum *	@local_df: allow local fragmentation *	@cloned: Head may be cloned (check refcnt to be sure) *	@nohdr: Payload reference only, must not modify header *	@pkt_type: Packet class *	@ip_summed: Driver fed us an IP checksum *	@priority: Packet queueing priority *	@users: User count - see {datagram,tcp}.c *	@protocol: Packet protocol from driver *	@security: Security level of packet *	@truesize: Buffer size  *	@head: Head of buffer *	@data: Data head pointer *	@tail: Tail pointer *	@end: End pointer *	@destructor: Destruct function *	@nfmark: Can be used for communication between hooks *	@nfcache: Cache info *	@nfct: Associated connection, if any *	@nfctinfo: Relationship of this skb to the connection *	@nf_debug: Netfilter debugging *	@nf_bridge: Saved data about a bridged frame - see br_netfilter.c *      @private: Data which is private to the HIPPI implementation *	@tc_index: Traffic control index *	@tc_verd: traffic control verdict *	@tc_classid: traffic control classid */struct sk_buff {	/* These two members must be first. */	struct sk_buff		*next;	struct sk_buff		*prev;	struct sk_buff_head	*list;	struct sock		*sk;	struct timeval		stamp;	struct net_device	*dev;	struct net_device	*input_dev;	struct net_device	*real_dev;	union {		struct tcphdr	*th;		struct udphdr	*uh;		struct icmphdr	*icmph;		struct igmphdr	*igmph;		struct iphdr	*ipiph;		struct ipv6hdr	*ipv6h;		unsigned char	*raw;	} h;	union {		struct iphdr	*iph;		struct ipv6hdr	*ipv6h;		struct arphdr	*arph;		unsigned char	*raw;	} nh;	union {	  	unsigned char 	*raw;	} mac;	struct  dst_entry	*dst;	struct	sec_path	*sp;	/*	 * This is the control buffer. It is free to use for every	 * layer. Please put your private variables there. If you	 * want to keep them across layers you have to do a skb_clone()	 * first. This is owned by whoever has the skb queued ATM.	 */	char			cb[40];	unsigned int		len,				data_len,				mac_len,				csum;	unsigned char		local_df,				cloned:1,				nohdr:1,				pkt_type,				ip_summed;	__u32			priority;	unsigned short		protocol,				security;	void			(*destructor)(struct sk_buff *skb);#ifdef CONFIG_NETFILTER        unsigned long		nfmark;	__u32			nfcache;	__u32			nfctinfo;	struct nf_conntrack	*nfct;#ifdef CONFIG_NETFILTER_DEBUG        unsigned int		nf_debug;#endif#ifdef CONFIG_BRIDGE_NETFILTER	struct nf_bridge_info	*nf_bridge;#endif#endif /* CONFIG_NETFILTER */#if defined(CONFIG_HIPPI)	union {		__u32		ifield;	} private;#endif#ifdef CONFIG_NET_SCHED       __u32			tc_index;        /* traffic control index */#ifdef CONFIG_NET_CLS_ACT	__u32           tc_verd;               /* traffic control verdict */	__u32           tc_classid;            /* traffic control classid */#endif#endif	/* These elements must be at the end, see alloc_skb() for details.  */	unsigned int		truesize;	atomic_t		users;	unsigned char		*head,				*data,				*tail,				*end;};#endif	/* _LINUX_SKBUFF_H */

⌨️ 快捷键说明

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