| 网站首页 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛 |
 
 
 
您现在的位置: 编程中国 >> 技术教程 >> 操作系统 >> Linux >> 正文
  ►  Linux Data Structures(Linux数据结构)
Linux Data Structures(Linux数据结构)
作者:佚名    阅读人次:……    文章来源:未知    发布时间:2005-11-3    网友评论()条
 


rtable

每一个rtable数据结构都存放向一个IP主机发送报文的路由的信息。Rtable数据结构在IP route缓存中使用。

参见include/net/route.h

 

struct rtable

{

struct rtable *rt_next;

__u32 rt_dst;

__u32 rt_src;

__u32 rt_gateway;

atomic_t rt_refcnt;

atomic_t rt_use;

unsigned long rt_window;

atomic_t rt_lastuse;

struct hh_cache *rt_hh;

struct device *rt_dev;

unsigned short rt_flags;

unsigned short rt_mtu;

unsigned short rt_irtt;

unsigned char rt_tos;

};

 

semaphore

信号灯用于保护重要数据结构和代码区域。

参见include/asm/semaphore.h

 

struct semaphore {

int count;

int waking;

int lock ; /* to make waking testing atomic */

struct wait_queue *wait;

};

 

sk_buff

sk_buff数据结构当网络数据在协议层之间移动的过程中描述网络数据。

参见include/linux/sk_buff.h

 

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 timeval stamp; /* 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_BROADCAST 1 /* To all */

#define PACKET_MULTICAST 2 /* To group */

#define PACKET_OTHERHOST 3 /* To someone else */

unsigned short users; /* User count - see datagram.c,tcp.c */

unsigned short protocol; /* Packet protocol from driver. */

unsigned int truesize; /* Buffer size */

atomic_t count; /* reference count */

struct sk_buff *data_skb; /* Link to the actual data skb */

unsigned char *head; /* Head of buffer */

unsigned char *data; /* Data head pointer */

unsigned char *tail; /* Tail pointer */

unsigned char *end; /* End pointer */

void (*destructor)(struct sk_buff *); /* Destruct function */

__u16 redirport; /* Redirect port */

};

 

sock

每一个sock数据结构都存放一个BSD socket中和协议相关的信息。例如,对于一个INET socket,这个数据结构会存放所有的TCP/IP和UDP/IP相关的信息

参见include/linux/net.h

 

struct sock

{

/* This must be first. */

struct sock *sklist_next;

struct sock *sklist_prev;

struct options *opt;

atomic_t wmem_alloc;

atomic_t rmem_alloc;

unsigned long allocation; /* Allocation mode */

__u32 write_seq;

__u32 sent_seq;

__u32 acked_seq;

__u32 copied_seq;

__u32 rcv_ack_seq;

unsigned short rcv_ack_cnt; /* count of same ack */

__u32 window_seq;

__u32 fin_seq;

__u32 urg_seq;

__u32 urg_data;

__u32 syn_seq;

int users; /* user count */

/*

* Not all are volatile, but some are, so we

* might as well say they all are.

*/

volatile char dead,

urginline,

intr,

blog,

done,

reuse,

keepopen,

linger,

delay_acks,

destroy,

ack_timed,

no_check,

zapped,

broadcast,

nonagle,

bsdism;

unsigned long lingertime;

int proc;

struct sock *next;

struct sock **pprev;

struct sock *bind_next;

struct sock **bind_pprev;

struct sock *pair;

int hashent;

struct sock *prev;

struct sk_buff *volatile send_head;

struct sk_buff *volatile send_next;

struct sk_buff *volatile send_tail;

struct sk_buff_head back_log;

struct sk_buff *partial;

struct timer_list partial_timer;

long retransmits;

struct sk_buff_head write_queue,

receive_queue;

struct proto *prot;

struct wait_queue **sleep;

__u32 daddr;

__u32 saddr; /* Sending source */

__u32 rcv_saddr; /* Bound address */

unsigned short max_unacked;

unsigned short window;

__u32 lastwin_seq; /* sequence number when we last

updated the window we offer */

__u32 high_seq; /* sequence number when we did

current fast retransmit */

volatile unsigned long ato; /* ack timeout */

volatile unsigned long lrcvtime; /* jiffies at last data rcv */

volatile unsigned long idletime; /* jiffies at last rcv */

unsigned int bytes_rcv;

/*

* mss is min(mtu, max_window)

*/

unsigned short mtu; /* mss negotiated in the syn's */

volatile unsigned short mss; /* current eff. mss - can change */

volatile unsigned short user_mss; /* mss requested by user in ioctl */

volatile unsigned short max_window;

unsigned long window_clamp;

unsigned int ssthresh;

unsigned short num;

volatile unsigned short cong_window;

volatile unsigned short cong_count;

volatile unsigned short packets_out;

volatile unsigned short shutdown;

volatile unsigned long rtt;

volatile unsigned long mdev;

volatile unsigned long rto;

volatile unsigned short backoff;

int err, err_soft; /* Soft holds errors that don't

cause failure but are the cause

of a persistent failure not

just 'timed out' */

unsigned char protocol;

volatile unsigned char state;

unsigned char ack_backlog;

unsigned char max_ack_backlog;

unsigned char priority;

unsigned char debug;

int rcvbuf;

int sndbuf;

unsigned short type;

unsigned char localroute; /* Route locally only */

/*

* This is where all the private (optional) areas that don't

* overlap will eventually live.

*/

union

{

struct unix_opt af_unix;

#if defined(CONFIG_ATALK) || defined(CONFIG_ATALK_MODULE)

struct atalk_sock af_at;

#endif

#if defined(CONFIG_IPX) || defined(CONFIG_IPX_MODULE)

struct ipx_opt af_ipx;

#endif

#ifdef CONFIG_INET

struct inet_packet_opt af_packet;

#ifdef CONFIG_NUTCP

struct tcp_opt af_tcp;

#endif

#endif

} protinfo;

/*

* IP 'private area'

*/

int ip_ttl; /* TTL setting */

int ip_tos; /* TOS */

struct tcphdr dummy_th;

struct timer_list keepalive_timer; /* TCP keepalive hack */

struct timer_list retransmit_timer; /* TCP retransmit timer */

struct timer_list delack_timer; /* TCP delayed ack timer */

int ip_xmit_timeout; /* Why the timeout is running */

struct rtable *ip_route_cache; /* Cached output route */

unsigned char ip_hdrincl; /* Include headers ? */

#ifdef CONFIG_IP_MULTICAST

int ip_mc_ttl; /* Multicasting TTL */

int ip_mc_loop; /* Loopback */

char ip_mc_name[MAX_ADDR_LEN]; /* Multicast device name */

struct ip_mc_socklist *ip_mc_list; /* Group array */

#endif

/*

* This part is used for the timeout functions (timer.c).

*/

int timeout; /* What are we waiting for? */

struct timer_list timer; /* This is the TIME_WAIT/receive

* timer when we are doing IP

*/

struct timeval stamp;

/*

* Identd

*/

struct socket *socket;

/*

* Callbacks

*/

void (*state_change)(struct sock *sk);

void (*data_ready)(struct sock *sk,int bytes);

void (*write_space)(struct sock *sk);

void (*error_report)(struct sock *sk);

};

 

上一页  [1] [2] [3] [4] [5] 下一页

 

 
文章录入:静夜思    责任编辑:静夜思 
  • 上一篇文章:

  • 下一篇文章:

  •  
    相关文章
    原创地带
    24小时热门帖子