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

📄 skbuff.h

📁 LINUX1.0内核源代码,学习LINUX编程的一定要看。
💻 H
字号:
/* * 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 'struct sk_buff' memory handlers. * * Version:	@(#)skbuff.h	1.0.4	05/20/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> * * Fixes: *		Alan Cox		: 	Volatiles (this makes me unhappy - we want proper asm linked list stuff) *		Alan Cox		:	Declaration for new primitives *		Alan Cox		:	Fraglist support (idea by Donald Becker) *		Alan Cox		:	'users' counter. Combines with datagram changes to avoid skb_peek_copy *						being used. * *		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 _SKBUFF_H#define _SKBUFF_H#include <linux/malloc.h>#ifdef CONFIG_IPX#include "ipx.h"#endif#define HAVE_ALLOC_SKB		/* For the drivers to know */#define FREE_READ	1#define FREE_WRITE	0struct sk_buff {  unsigned long			magic_debug_cookie;  struct sk_buff		*volatile next;  struct sk_buff		*volatile prev;  struct sk_buff		*volatile link3;  struct sk_buff		*volatile* list;  struct sock			*sk;  volatile unsigned long	when;	/* used to compute rtt's	*/  struct device			*dev;  void				*mem_addr;  union {	struct tcphdr	*th;	struct ethhdr	*eth;	struct iphdr	*iph;	struct udphdr	*uh;	struct arphdr	*arp;	unsigned char	*raw;	unsigned long	seq;#ifdef CONFIG_IPX		ipx_packet	*ipx;#endif	  } h;  struct iphdr		*ip_hdr;		/* For IPPROTO_RAW */  unsigned long			mem_len;  unsigned long 		len;  unsigned long			fraglen;  struct sk_buff		*fraglist;	/* Fragment list */  unsigned long			truesize;  unsigned long 		saddr;  unsigned long 		daddr;  int				magic;  volatile char 		acked,				used,				free,				arp;  unsigned char			tries,lock;	/* Lock is now unused */  unsigned short		users;		/* User count - see datagram.c (and soon seqpacket.c/stream.c) */  unsigned long			padding[0];  unsigned char			data[0];};#define SK_WMEM_MAX	8192#define SK_RMEM_MAX	32767#define SK_FREED_SKB	0x0DE2C0DE#define SK_GOOD_SKB	0xDEC0DED1extern void			print_skb(struct sk_buff *);extern void			kfree_skb(struct sk_buff *skb, int rw);extern void			skb_queue_head(struct sk_buff * volatile *list,struct sk_buff *buf);extern void			skb_queue_tail(struct sk_buff * volatile *list,struct sk_buff *buf);extern struct sk_buff *		skb_dequeue(struct sk_buff * volatile *list);extern void 			skb_insert(struct sk_buff *old,struct sk_buff *newsk);extern void			skb_append(struct sk_buff *old,struct sk_buff *newsk);extern void			skb_unlink(struct sk_buff *buf);extern void 			skb_new_list_head(struct sk_buff *volatile* list);extern struct sk_buff *		skb_peek(struct sk_buff * volatile *list);extern struct sk_buff *		skb_peek_copy(struct sk_buff * volatile *list);extern struct sk_buff *		alloc_skb(unsigned int size, int priority);extern void			kfree_skbmem(void *mem, unsigned size);extern void			skb_kept_by_device(struct sk_buff *skb);extern void			skb_device_release(struct sk_buff *skb, int mode);extern int			skb_device_locked(struct sk_buff *skb);extern void 			skb_check(struct sk_buff *skb,int, char *);#define IS_SKB(skb)	skb_check((skb),__LINE__,__FILE__)extern struct sk_buff *		skb_recv_datagram(struct sock *sk,unsigned flags,int noblock, int *err);extern int			datagram_select(struct sock *sk, int sel_type, select_table *wait);extern void			skb_copy_datagram(struct sk_buff *from, int offset, char *to,int size);extern void			skb_free_datagram(struct sk_buff *skb);#endif	/* _SKBUFF_H */

⌨️ 快捷键说明

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