博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sk_buff_head
阅读量:4153 次
发布时间:2019-05-25

本文共 6617 字,大约阅读时间需要 22 分钟。

 
struct 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 - socket buffer *	@next: Next buffer in list *	@prev: Previous buffer in list *	@tstamp: Time we arrived/left *	@rbnode: RB tree node, alternative to next/prev for netem/tcp *	@sk: Socket we are owned by *	@dev: Device we arrived on/are leaving by *	@cb: Control buffer. Free for use by every layer. Put private vars here *	@_skb_refdst: destination entry (with norefcount bit) *	@sp: the security path, used for xfrm *	@len: Length of actual data *	@data_len: Data length *	@mac_len: Length of link layer header *	@hdr_len: writable header length of cloned skb *	@csum: Checksum (must include start/offset pair) *	@csum_start: Offset from skb->head where checksumming should start *	@csum_offset: Offset from csum_start where checksum should be stored *	@priority: Packet queueing priority *	@ignore_df: allow local fragmentation *	@cloned: Head may be cloned (check refcnt to be sure) *	@ip_summed: Driver fed us an IP checksum *	@nohdr: Payload reference only, must not modify header *	@nfctinfo: Relationship of this skb to the connection *	@pkt_type: Packet class *	@fclone: skbuff clone status *	@ipvs_property: skbuff is owned by ipvs *	@peeked: this packet has been seen already, so stats have been *		done for it, don't do them again *	@nf_trace: netfilter packet trace flag *	@protocol: Packet protocol from driver *	@destructor: Destruct function *	@nfct: Associated connection, if any *	@nf_bridge: Saved data about a bridged frame - see br_netfilter.c *	@skb_iif: ifindex of device we arrived on *	@tc_index: Traffic control index *	@tc_verd: traffic control verdict *	@hash: the packet hash *	@queue_mapping: Queue mapping for multiqueue devices *	@xmit_more: More SKBs are pending for this queue *	@ndisc_nodetype: router type (from link layer) *	@ooo_okay: allow the mapping of a socket to a queue to be changed *	@l4_hash: indicate hash is a canonical 4-tuple hash over transport *		ports. *	@sw_hash: indicates hash was computed in software stack *	@wifi_acked_valid: wifi_acked was set *	@wifi_acked: whether frame was acked on wifi or not *	@no_fcs:  Request NIC to treat last 4 bytes as Ethernet FCS  *	@napi_id: id of the NAPI struct this skb came from *	@secmark: security marking *	@mark: Generic packet mark *	@vlan_proto: vlan encapsulation protocol *	@vlan_tci: vlan tag control information *	@inner_protocol: Protocol (encapsulation) *	@inner_transport_header: Inner transport layer header (encapsulation) *	@inner_network_header: Network layer header (encapsulation) *	@inner_mac_header: Link layer header (encapsulation) *	@transport_header: Transport layer header *	@network_header: Network layer header *	@mac_header: Link layer header *	@tail: Tail pointer *	@end: End pointer *	@head: Head of buffer *	@data: Data head pointer *	@truesize: Buffer size *	@users: User count - see {datagram,tcp}.c */struct sk_buff {	union {		struct {			/* These two members must be first. */			struct sk_buff		*next;			struct sk_buff		*prev;			union {				ktime_t		tstamp;				struct skb_mstamp skb_mstamp;			};		};		struct rb_node	rbnode; /* used in netem & tcp stack */	};	struct sock		*sk;	struct net_device	*dev;	/*	 * 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[48] __aligned(8);	unsigned long		_skb_refdst;	void			(*destructor)(struct sk_buff *skb);#ifdef CONFIG_XFRM	struct	sec_path	*sp;#endif#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)	struct nf_conntrack	*nfct;#endif#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)	struct nf_bridge_info	*nf_bridge;#endif	unsigned int		len,				data_len;	__u16			mac_len,				hdr_len;	/* Following fields are _not_ copied in __copy_skb_header()	 * Note that queue_mapping is here mostly to fill a hole.	 */	kmemcheck_bitfield_begin(flags1);	__u16			queue_mapping;/* if you move cloned around you also must adapt those constants */#ifdef __BIG_ENDIAN_BITFIELD#define CLONED_MASK	(1 << 7)#else#define CLONED_MASK	1#endif#define CLONED_OFFSET()		offsetof(struct sk_buff, __cloned_offset)	__u8			__cloned_offset[0];	__u8			cloned:1,				nohdr:1,				fclone:2,				peeked:1,				head_frag:1,				xmit_more:1,				__unused:1; /* one bit hole */	kmemcheck_bitfield_end(flags1);	/* fields enclosed in headers_start/headers_end are copied	 * using a single memcpy() in __copy_skb_header()	 */	/* private: */	__u32			headers_start[0];	/* public: *//* if you move pkt_type around you also must adapt those constants */#ifdef __BIG_ENDIAN_BITFIELD#define PKT_TYPE_MAX	(7 << 5)#else#define PKT_TYPE_MAX	7#endif#define PKT_TYPE_OFFSET()	offsetof(struct sk_buff, __pkt_type_offset)	__u8			__pkt_type_offset[0];	__u8			pkt_type:3;	__u8			pfmemalloc:1;	__u8			ignore_df:1;	__u8			nfctinfo:3;	__u8			nf_trace:1;	__u8			ip_summed:2;	__u8			ooo_okay:1;	__u8			l4_hash:1;	__u8			sw_hash:1;	__u8			wifi_acked_valid:1;	__u8			wifi_acked:1;	__u8			no_fcs:1;	/* Indicates the inner headers are valid in the skbuff. */	__u8			encapsulation:1;	__u8			encap_hdr_csum:1;	__u8			csum_valid:1;	__u8			csum_complete_sw:1;	__u8			csum_level:2;	__u8			csum_bad:1;#ifdef CONFIG_IPV6_NDISC_NODETYPE	__u8			ndisc_nodetype:2;#endif	__u8			ipvs_property:1;	__u8			inner_protocol_type:1;	__u8			remcsum_offload:1;#ifdef CONFIG_NET_SWITCHDEV	__u8			offload_fwd_mark:1;#endif	/* 2, 4 or 5 bit hole */#ifdef CONFIG_NET_SCHED	__u16			tc_index;	/* traffic control index */#ifdef CONFIG_NET_CLS_ACT	__u16			tc_verd;	/* traffic control verdict */#endif#endif	union {		__wsum		csum;		struct {			__u16	csum_start;			__u16	csum_offset;		};	};	__u32			priority;	int			skb_iif;	__u32			hash;	__be16			vlan_proto;	__u16			vlan_tci;#if defined(CONFIG_NET_RX_BUSY_POLL) || defined(CONFIG_XPS)	union {		unsigned int	napi_id;		unsigned int	sender_cpu;	};#endif#ifdef CONFIG_NETWORK_SECMARK	__u32		secmark;#endif	union {		__u32		mark;		__u32		reserved_tailroom;	};	union {		__be16		inner_protocol;		__u8		inner_ipproto;	};	__u16			inner_transport_header;	__u16			inner_network_header;	__u16			inner_mac_header;	__be16			protocol;	__u16			transport_header;	__u16			network_header;	__u16			mac_header;	/* private: */	__u32			headers_end[0];	/* public: */	/* These elements must be at the end, see alloc_skb() for details.  */	sk_buff_data_t		tail;	sk_buff_data_t		end;	unsigned char		*head,				*data;	unsigned int		truesize;	atomic_t		users;};

转载地址:http://zzhti.baihongyu.com/

你可能感兴趣的文章
Linux内核调试方法总结
查看>>
YouCompleteMe的安装和使用
查看>>
内核分析之编译内核
查看>>
qemu的安装与内核的调试初步
查看>>
没有正确安装gnome电源管理的默认配置
查看>>
用source navigator静态查看内核源码
查看>>
双重指针——以0.12内核static inline void _sleep_on(struct task_struct **p, int state)为例
查看>>
VMWare虚拟机linux访问windows主机硬盘文件方法
查看>>
代码一致性
查看>>
有关操作系统保护模式中的 shl eax 4 这条语句的意思
查看>>
Ubuntu支持中文
查看>>
gitk安装
查看>>
GRUB引导linux3.0内核
查看>>
堆栈中的ss,bp,sp
查看>>
如何在linux终端下查询C函数
查看>>
如何连接远程 Ubuntu 桌面?
查看>>
win7远程控制ubuntu桌面
查看>>
控制寄存器(CR0,CR1,CR2,CR3)
查看>>
Linux内核如何计算链表的位置
查看>>
Linux中断执行过程
查看>>