📄 sock.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 AF_INET socket handler. * * Version: @(#)sock.h 1.0.4 05/13/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> * Florian La Roche <flla@stud.uni-sb.de> * * Fixes: * Alan Cox : Volatiles in skbuff pointers. See * skbuff comments. May be overdone, * better to prove they can be removed * than the reverse. * Alan Cox : Added a zapped field for tcp to note * a socket is reset and must stay shut up * Alan Cox : New fields for options * Pauline Middelink : identd support * Alan Cox : Eliminate low level recv/recvfrom * David S. Miller : New socket lookup architecture for ISS. * Elliot Poger : New field for SO_BINDTODEVICE option. * * 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 _SOCK_H#define _SOCK_H#include <linux/timer.h>#include <linux/ip.h> /* struct options */#include <linux/in.h> /* struct sockaddr_in */#include <linux/tcp.h> /* struct tcphdr */#include <linux/config.h>#include <linux/netdevice.h>#include <linux/skbuff.h> /* struct sk_buff */#include <net/protocol.h> /* struct inet_protocol */#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)#include <net/ax25.h>#if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE)#include <net/netrom.h>#endif#if defined(CONFIG_ROSE) || defined(CONFIG_ROSE_MODULE)#include <net/rose.h>#endif#endif#if defined(CONFIG_IPX) || defined(CONFIG_IPX_MODULE)#include <net/ipx.h>#endif#if defined(CONFIG_ATALK) || defined(CONFIG_ATALK_MODULE)#include <linux/atalk.h>#endif#include <linux/igmp.h>#include <asm/atomic.h>/* * The AF_UNIX specific socket options */ struct unix_opt{ int family; char * name; int locks; struct inode * inode; struct semaphore readsem; struct sock * other; int marksweep;#define MARKED 1 int inflight;};/* * IP packet socket options */struct inet_packet_opt{ struct notifier_block notifier; /* Used when bound */ struct device *bound_dev; unsigned long dev_stamp; struct packet_type *prot_hook; char device_name[15];};/* * Once the IPX ncpd patches are in these are going into protinfo */#if defined(CONFIG_IPX) || defined(CONFIG_IPX_MODULE)struct ipx_opt{ ipx_address dest_addr; ipx_interface *intrfc; unsigned short port;#ifdef CONFIG_IPX_INTERN unsigned char node[IPX_NODE_LEN];#endif unsigned short type;/* * To handle asynchronous messages from the NetWare server, we have to * know the connection this socket belongs to. */ struct ncp_server *ncp_server;/* * To handle special ncp connection-handling sockets for mars_nwe, * the connection number must be stored in the socket. */ unsigned short ipx_ncp_conn;};#endif#ifdef CONFIG_NUTCPstruct tcp_opt{/* * RFC793 variables by their proper names. This means you can * read the code and the spec side by side (and laugh ...) * See RFC793 and RFC1122. The RFC writes these in capitals. */ __u32 rcv_nxt; /* What we want to receive next */ __u32 rcv_up; /* The urgent point (may not be valid) */ __u32 rcv_wnd; /* Current receiver window */ __u32 snd_nxt; /* Next sequence we send */ __u32 snd_una; /* First byte we want an ack for */ __u32 snd_up; /* Outgoing urgent pointer */ __u32 snd_wl1; /* Sequence for window update */ __u32 snd_wl2; /* Ack sequence for update *//* * Slow start and congestion control (see also Nagle, and Karn & Partridge) */ __u32 snd_cwnd; /* Sending congestion window */ __u32 snd_ssthresh; /* Slow start size threshold *//* * Timers used by the TCP protocol layer */ struct timer_list delack_timer; /* Ack delay */ struct timer_list idle_timer; /* Idle watch */ struct timer_list completion_timer; /* Up/Down timer */ struct timer_list probe_timer; /* Probes */ struct timer_list retransmit_timer; /* Resend (no ack) */};#endif /* * This structure really needs to be cleaned up. * Most of it is for TCP, and not used by any of * the other protocols. */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, /* In ax25 & ipx means not linked */ broadcast, nonagle, bsdism; struct device * bound_device; 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;/* * currently backoff isn't used, but I'm maintaining it in case * we want to go back to a backoff formula that needs it */ 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 short 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_AX25) || defined(CONFIG_AX25_MODULE) ax25_cb *ax25;#if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE) nr_cb *nr;#endif#if defined(CONFIG_ROSE) || defined(CONFIG_ROSE_MODULE) rose_cb *rose;#endif#endif#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' or will be eventually */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -