包含BSD套接口的协议相关信息。例如对于一个INET(Internet Address Domain)套接口此数据结构 包含TCP/IP和UDP/IP信息。
[b]struct sock
{[/b]
/* This must be first. */
[b]struct sock *sklist_next;
struct sock *sklist_prev;
struct options *opt;
atomic_t wmem_alloc;
atomic_t rmem_alloc;
unsigned long allocation;[/b] /* Allocation mode */
[b]__u32 write_seq;
__u32 sent_seq;
__u32 acked_seq;
__u32 copied_seq;
__u32 rcv_ack_seq;
unsigned short rcv_ack_cnt;[/b] /* count of same ack */
[b] __u32 window_seq;
__u32 fin_seq;
__u32 urg_seq;
__u32 urg_data;
__u32 syn_seq;
int users;[/b] /* user count */
/*
* Not all are volatile, but some are, so we
* might as well say they all are.
*/
[b]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;[/b] __u32 saddr; /* Sending source */
[b] __u32 rcv_saddr;[/b] /* Bound address */
[b]unsigned short max_unacked;
unsigned short window;
__u32 lastwin_seq; [/b] [i]/* sequence number when we last
updated the window we offer */[/i]
[b] __u32 high_seq; [/b] /* sequence number when we did
current fast retransmit */
[b]volatile unsigned long ato; [/b] /* ack timeout */
[b]volatile unsigned long lrcvtime; [/b] /* jiffies at last data rcv */
[b]volatile unsigned long idletime; [/b] /* jiffies at last rcv */
[b]unsigned int bytes_rcv;[/b]
/*
* mss is min(mtu, max_window)
*/
[b]unsigned short mtu;[/b] /* mss negotiated in the syn's */
[b]volatile unsigned short mss;[/b] /* current eff. mss - can change */
[b]volatile unsigned short user_mss; [/b] /* mss requested by user in ioctl */
[b]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; [/b] /* Soft holds errors that don't
cause failure but are the cause
of a persistent failure not
just 'timed out' */
[b]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;[/b] /* Route locally only */
/*
* This is where all the private (optional) areas that don't
* overlap will eventually live.
*/
[b]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; [/b]/*
* IP 'private area'
*/
[b]int ip_ttl; [/b] /* TTL setting */
[b] int ip_tos; [/b] /* TOS */
[b]struct tcphdr dummy_th;[/b]
[b]struct timer_list keepalive_timer;[/b] /* TCP keepalive hack */
[b]struct timer_list retransmit_timer;[/b] /* TCP retransmit timer */
[b]struct timer_list delack_timer;[/b] /* TCP delayed ack timer */
[b]int ip_xmit_timeout;[/b] /* Why the timeout is running */
[b]struct rtable *ip_route_cache;[/b] /* Cached output route */
[b]unsigned char ip_hdrincl;[/b] /* Include headers ? */
[b]#ifdef CONFIG_IP_MULTICAST
int ip_mc_ttl; [/b] /* Multicasting TTL */
[b]int ip_mc_loop;[/b] /* Loopback */
[b]char ip_mc_name[MAX_ADDR_LEN]; [/b]/* Multicast device name */
[b]struct ip_mc_socklist *ip_mc_list;[/b] /* Group array */
[b]#endif [/b]
/*
* This part is used for the timeout functions (timer.c).
*/
[b]int timeout; [/b] /* What are we waiting for? */
[b]struct timer_list timer; [/b] /* This is the TIME_WAIT/receive
* timer when we are doing IP
*/
[b]struct timeval stamp;[/b]
/*
* Identd
*/
[b]struct socket *socket;[/b]
/*
* Callbacks
*/
[b]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);
};
[/b]
[b]struct sock
{[/b]
/* This must be first. */
[b]struct sock *sklist_next;
struct sock *sklist_prev;
struct options *opt;
atomic_t wmem_alloc;
atomic_t rmem_alloc;
unsigned long allocation;[/b] /* Allocation mode */
[b]__u32 write_seq;
__u32 sent_seq;
__u32 acked_seq;
__u32 copied_seq;
__u32 rcv_ack_seq;
unsigned short rcv_ack_cnt;[/b] /* count of same ack */
[b] __u32 window_seq;
__u32 fin_seq;
__u32 urg_seq;
__u32 urg_data;
__u32 syn_seq;
int users;[/b] /* user count */
/*
* Not all are volatile, but some are, so we
* might as well say they all are.
*/
[b]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;[/b] __u32 saddr; /* Sending source */
[b] __u32 rcv_saddr;[/b] /* Bound address */
[b]unsigned short max_unacked;
unsigned short window;
__u32 lastwin_seq; [/b] [i]/* sequence number when we last
updated the window we offer */[/i]
[b] __u32 high_seq; [/b] /* sequence number when we did
current fast retransmit */
[b]volatile unsigned long ato; [/b] /* ack timeout */
[b]volatile unsigned long lrcvtime; [/b] /* jiffies at last data rcv */
[b]volatile unsigned long idletime; [/b] /* jiffies at last rcv */
[b]unsigned int bytes_rcv;[/b]
/*
* mss is min(mtu, max_window)
*/
[b]unsigned short mtu;[/b] /* mss negotiated in the syn's */
[b]volatile unsigned short mss;[/b] /* current eff. mss - can change */
[b]volatile unsigned short user_mss; [/b] /* mss requested by user in ioctl */
[b]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; [/b] /* Soft holds errors that don't
cause failure but are the cause
of a persistent failure not
just 'timed out' */
[b]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;[/b] /* Route locally only */
/*
* This is where all the private (optional) areas that don't
* overlap will eventually live.
*/
[b]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; [/b]/*
* IP 'private area'
*/
[b]int ip_ttl; [/b] /* TTL setting */
[b] int ip_tos; [/b] /* TOS */
[b]struct tcphdr dummy_th;[/b]
[b]struct timer_list keepalive_timer;[/b] /* TCP keepalive hack */
[b]struct timer_list retransmit_timer;[/b] /* TCP retransmit timer */
[b]struct timer_list delack_timer;[/b] /* TCP delayed ack timer */
[b]int ip_xmit_timeout;[/b] /* Why the timeout is running */
[b]struct rtable *ip_route_cache;[/b] /* Cached output route */
[b]unsigned char ip_hdrincl;[/b] /* Include headers ? */
[b]#ifdef CONFIG_IP_MULTICAST
int ip_mc_ttl; [/b] /* Multicasting TTL */
[b]int ip_mc_loop;[/b] /* Loopback */
[b]char ip_mc_name[MAX_ADDR_LEN]; [/b]/* Multicast device name */
[b]struct ip_mc_socklist *ip_mc_list;[/b] /* Group array */
[b]#endif [/b]
/*
* This part is used for the timeout functions (timer.c).
*/
[b]int timeout; [/b] /* What are we waiting for? */
[b]struct timer_list timer; [/b] /* This is the TIME_WAIT/receive
* timer when we are doing IP
*/
[b]struct timeval stamp;[/b]
/*
* Identd
*/
[b]struct socket *socket;[/b]
/*
* Callbacks
*/
[b]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);
};
[/b]