Linux 核心--16.Linux数据结构( 五 )



struct request {
volatile int rq_status;
#define RQ_INACTIVE(-1)
#define RQ_ACTIVE1
#define RQ_SCSI_BUSY 0xffff
#define RQ_SCSI_DONE 0xfffe
#define RQ_SCSI_DISCONNECTING0xffe0

kdev_t rq_dev;
int cmd;/* READ or WRITE */
int errors;
unsigned long sector;
unsigned long nr_sectors;
unsigned long current_nr_sectors;
char * buffer;
struct semaphore * sem;
struct buffer_head * bh;
struct buffer_head * bhtail;
struct request * next;
};

rtable
用来描叙向某个IP主机发送包的路由信息 。此结构在IP路由cache内部实用 。

struct rtable
{
struct rtable *rt_next;
__u32 rt_dst;
__u32 rt_src;
__u32 rt_gateway;
atomic_trt_refcnt;
atomic_trt_use;
unsigned long rt_window;
atomic_trt_lastuse;
struct hh_cache *rt_hh;
struct device *rt_dev;
unsigned shortrt_flags;
unsigned shortrt_mtu;
unsigned shortrt_irtt;
unsigned char rt_tos;
};

semaphore
保护临界区数据结构和代码信号灯 。

struct semaphore {
int count;
int waking;
int lock ;/* to make waking testing atomic */
struct wait_queue *wait;
};

sk_buff
用来描叙在协议层之间交换的网络数据 。

struct sk_buff
{
struct sk_buff*next; /* Next buffer in list */
struct sk_buff*prev; /* Previous buffer in list */
struct sk_buff_head *list; /* List we are on*/
int magic_debug_cookie;
struct sk_buff*link3;/* Link for IP protocol level buffer chains */
struct sock *sk; /* Socket we are owned by*/
unsigned long when;/* used to compute rtt"s */
struct timevalstamp; /* Time we arrived */
struct device *dev;/* Device we arrived on/are leaving by */
union
{
struct tcphdr *th;
struct ethhdr *eth;
struct iphdr*iph;
struct udphdr *uh;
unsigned char *raw;
/* for passing file handles in a unix domain socket */
void*filp;
} h;

union
{
/* As yet incomplete physical layer views */
unsigned char *raw;
struct ethhdr *ethernet;
} mac;

struct iphdr*ip_hdr; /* For IPPROTO_RAW */
unsigned long len; /* Length of actual data */
unsigned long csum;/* Checksum*/
__u32 saddr; /* IP source address */
__u32 daddr; /* IP target address */
__u32 raddr; /* IP next hop address */
__u32 seq; /* TCP sequence number */
__u32 end_seq; /* seq [fin] [syn]datalen */
__u32 ack_seq; /* TCP ack sequence number */
unsigned char proto_priv[16];
volatile char acked, /* Are we acked ?*/
used,/* Are we in use ? */
free,/* How to free this buffer */
arp; /* Has IP/ARP resolution finished*/
unsigned char tries, /* Times tried */
lock,/* Are we locked ? */
localroute,/* Local routing asserted for this frame */
pkt_type,/* Packet class*/
pkt_bridged, /* Tracker for bridging*/
ip_summed; /* Driver fed us an IP checksum*/
#define PACKET_HOST 0/* To us */
#define PACKET_BROADCAST1/* To all*/
#define PACKET_MULTICAST2/* To group*/
#define PACKET_OTHERHOST3/* To someone else */
unsigned shortusers; /* User count - see datagram.c,tcp.c */
unsigned shortprotocol;/* Packet protocol from driver.*/
unsigned inttruesize;/* Buffer size */
atomic_tcount; /* reference count */
struct sk_buff*data_skb; /* Link to the actual data skb */
unsigned char *head; /* Head of buffer*/

推荐阅读