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

📄 sock.h

📁 嵌入式系统设计与实例开发实验教材二源码 多线程应用程序设计 串行端口程序设计 AD接口实验 CAN总线通信实验 GPS通信实验 Linux内核移植与编译实验 IC卡读写实验 SD驱动使
💻 H
📖 第 1 页 / 共 3 页
字号:
/* * 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. *              Steve Whitehouse:       Default routines for sock_ops * *		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/config.h>#include <linux/timer.h>#include <linux/cache.h>#include <linux/in.h>		/* struct sockaddr_in */#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)#include <linux/in6.h>		/* struct sockaddr_in6 */#include <linux/ipv6.h>		/* dest_cache, inet6_options */#include <linux/icmpv6.h>#include <net/if_inet6.h>	/* struct ipv6_mc_socklist */#endif#if defined(CONFIG_INET) || defined (CONFIG_INET_MODULE)#include <linux/icmp.h>#endif#include <linux/tcp.h>		/* struct tcphdr */#include <linux/netdevice.h>#include <linux/skbuff.h>	/* struct sk_buff */#include <net/protocol.h>		/* struct inet_protocol */#if defined(CONFIG_X25) || defined(CONFIG_X25_MODULE)#include <net/x25.h>#endif#if defined(CONFIG_WAN_ROUTER) || defined(CONFIG_WAN_ROUTER_MODULE)#include <linux/if_wanpipe.h>#endif#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_PPPOE) || defined(CONFIG_PPPOE_MODULE)#include <linux/if_pppox.h>#include <linux/ppp_channel.h>   /* struct ppp_channel */#endif#if defined(CONFIG_IPX) || defined(CONFIG_IPX_MODULE)#if defined(CONFIG_SPX) || defined(CONFIG_SPX_MODULE)#include <net/spx.h>#else#include <net/ipx.h>#endif /* CONFIG_SPX */#endif /* CONFIG_IPX */#if defined(CONFIG_ATALK) || defined(CONFIG_ATALK_MODULE)#include <linux/atalk.h>#endif#if defined(CONFIG_DECNET) || defined(CONFIG_DECNET_MODULE)#include <net/dn.h>#endif#if defined(CONFIG_IRDA) || defined(CONFIG_IRDA_MODULE)#include <net/irda/irda.h>#endif#if defined(CONFIG_ATM) || defined(CONFIG_ATM_MODULE)struct atm_vcc;#endif#ifdef CONFIG_FILTER#include <linux/filter.h>#endif#include <asm/atomic.h>#include <net/dst.h>/* The AF_UNIX specific socket options */struct unix_opt {	struct unix_address	*addr;	struct dentry *		dentry;	struct vfsmount *	mnt;	struct semaphore	readsem;	struct sock *		other;	struct sock **		list;	struct sock *		gc_tree;	atomic_t		inflight;	rwlock_t		lock;	wait_queue_head_t	peer_wait;};/* 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 special ncp connection-handling sockets for mars_nwe, * the connection number must be stored in the socket. */	unsigned short		ipx_ncp_conn;};#endif#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)struct ipv6_pinfo {	struct in6_addr 	saddr;	struct in6_addr 	rcv_saddr;	struct in6_addr		daddr;	struct in6_addr		*daddr_cache;	__u32			flow_label;	__u32			frag_size;	int			hop_limit;	int			mcast_hops;	int			mcast_oif;	/* pktoption flags */	union {		struct {			__u8	srcrt:2,			        rxinfo:1,				rxhlim:1,				hopopts:1,				dstopts:1,                                authhdr:1,                                rxflow:1;		} bits;		__u8		all;	} rxopt;	/* sockopt flags */	__u8			mc_loop:1,	                        recverr:1,	                        sndflow:1,	                        pmtudisc:2;	struct ipv6_mc_socklist	*ipv6_mc_list;	struct ipv6_fl_socklist *ipv6_fl_list;	__u32			dst_cookie;	struct ipv6_txoptions	*opt;	struct sk_buff		*pktoptions;};struct raw6_opt {	__u32			checksum;	/* perform checksum */	__u32			offset;		/* checksum offset  */	struct icmp6_filter	filter;};#endif /* IPV6 */#if defined(CONFIG_INET) || defined(CONFIG_INET_MODULE)struct raw_opt {	struct icmp_filter	filter;};#endif#if defined(CONFIG_INET) || defined (CONFIG_INET_MODULE)struct inet_opt{	int			ttl;			/* TTL setting */	int			tos;			/* TOS */	unsigned	   	cmsg_flags;	struct ip_options	*opt;	unsigned char		hdrincl;		/* Include headers ? */	__u8			mc_ttl;			/* Multicasting TTL */	__u8			mc_loop;		/* Loopback */	unsigned		recverr : 1,				freebind : 1;	__u16			id;			/* ID counter for DF pkts */	__u8			pmtudisc;	int			mc_index;		/* Multicast device index */	__u32			mc_addr;	struct ip_mc_socklist	*mc_list;		/* Group array */};#endif#if defined(CONFIG_PPPOE) || defined (CONFIG_PPPOE_MODULE)struct pppoe_opt{	struct net_device      *dev;	  /* device associated with socket*/	struct pppoe_addr	pa;	  /* what this socket is bound to*/	struct sockaddr_pppox	relay;	  /* what socket data will be					     relayed to (PPPoE relaying) */};struct pppox_opt{	struct ppp_channel	chan;	struct sock		*sk;	struct pppox_opt	*next;	  /* for hash table */	union {		struct pppoe_opt pppoe;	} proto;};#define pppoe_dev	proto.pppoe.dev#define pppoe_pa	proto.pppoe.pa#define pppoe_relay	proto.pppoe.relay#endif/* This defines a selective acknowledgement block. */struct tcp_sack_block {	__u32	start_seq;	__u32	end_seq;};struct tcp_opt {	int	tcp_header_len;	/* Bytes of tcp header to send		*//* *	Header prediction flags *	0x5?10 << 16 + snd_wnd in net byte order */	__u32	pred_flags;/* *	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	snd_nxt;	/* Next sequence we send		*/ 	__u32	snd_una;	/* First byte we want an ack for	*/ 	__u32	snd_sml;	/* Last byte of the most recently transmitted small packet */	__u32	rcv_tstamp;	/* timestamp of last received ACK (for keepalives) */	__u32	lsndtime;	/* timestamp of last sent data packet (for restart window) */	/* Delayed ACK control data */	struct {		__u8	pending;	/* ACK is pending */		__u8	quick;		/* Scheduled number of quick acks	*/		__u8	pingpong;	/* The session is interactive		*/		__u8	blocked;	/* Delayed ACK was blocked by socket lock*/		__u32	ato;		/* Predicted tick of soft clock		*/		unsigned long timeout;	/* Currently scheduled timeout		*/		__u32	lrcvtime;	/* timestamp of last received data packet*/		__u16	last_seg_size;	/* Size of last incoming segment	*/		__u16	rcv_mss;	/* MSS used for delayed ACK decisions	*/ 	} ack;	/* Data for direct copy to user */	struct {		struct sk_buff_head	prequeue;		int			memory;		struct task_struct	*task;		struct iovec		*iov;		int			len;	} ucopy;	__u32	snd_wl1;	/* Sequence for window update		*/	__u32	snd_wnd;	/* The window we expect to receive	*/	__u32	max_window;	/* Maximal window ever seen from peer	*/	__u32	pmtu_cookie;	/* Last pmtu seen by socket		*/	__u16	mss_cache;	/* Cached effective mss, not including SACKS */	__u16	mss_clamp;	/* Maximal mss, negotiated at connection setup */	__u16	ext_header_len;	/* Network protocol overhead (IP/IPv6 options) */	__u8	ca_state;	/* State of fast-retransmit machine 	*/	__u8	retransmits;	/* Number of unrecovered RTO timeouts.	*/	__u8	reordering;	/* Packet reordering metric.		*/	__u8	queue_shrunk;	/* Write queue has been shrunk recently.*/	__u8	defer_accept;	/* User waits for some data after accept() *//* RTT measurement */	__u8	backoff;	/* backoff				*/	__u32	srtt;		/* smothed round trip time << 3		*/	__u32	mdev;		/* medium deviation			*/	__u32	mdev_max;	/* maximal mdev for the last rtt period	*/	__u32	rttvar;		/* smoothed mdev_max			*/	__u32	rtt_seq;	/* sequence number to update rttvar	*/	__u32	rto;		/* retransmit timeout			*/	__u32	packets_out;	/* Packets which are "in flight"	*/	__u32	left_out;	/* Packets which leaved network		*/	__u32	retrans_out;	/* Retransmitted packets out		*//* *	Slow start and congestion control (see also Nagle, and Karn & Partridge) */ 	__u32	snd_ssthresh;	/* Slow start size threshold		*/ 	__u32	snd_cwnd;	/* Sending congestion window		*/ 	__u16	snd_cwnd_cnt;	/* Linear increase counter		*/	__u16	snd_cwnd_clamp; /* Do not allow snd_cwnd to grow above this */	__u32	snd_cwnd_used;	__u32	snd_cwnd_stamp;	/* Two commonly used timers in both sender and receiver paths. */	unsigned long		timeout; 	struct timer_list	retransmit_timer;	/* Resend (no ack)	*/ 	struct timer_list	delack_timer;		/* Ack delay 		*/	struct sk_buff_head	out_of_order_queue; /* Out of order segments go here */	struct tcp_func		*af_specific;	/* Operations which are AF_INET{4,6} specific	*/	struct sk_buff		*send_head;	/* Front of stuff to transmit			*/	struct page		*sndmsg_page;	/* Cached page for sendmsg			*/	u32			sndmsg_off;	/* Cached offset for sendmsg			*/ 	__u32	rcv_wnd;	/* Current receiver window		*/	__u32	rcv_wup;	/* rcv_nxt on last window update sent	*/	__u32	write_seq;	/* Tail(+1) of data held in tcp send buffer */	__u32	pushed_seq;	/* Last pushed seq, required to talk to windows */	__u32	copied_seq;	/* Head of yet unread data		*//* *      Options received (usually on last packet, some only on SYN packets). */	char	tstamp_ok,	/* TIMESTAMP seen on SYN packet		*/		wscale_ok,	/* Wscale seen on SYN packet		*/		sack_ok;	/* SACK seen on SYN packet		*/	char	saw_tstamp;	/* Saw TIMESTAMP on last packet		*/        __u8	snd_wscale;	/* Window scaling received from sender	*/        __u8	rcv_wscale;	/* Window scaling to send to receiver	*/	__u8	nonagle;	/* Disable Nagle algorithm?             */	__u8	keepalive_probes; /* num of allowed keep alive probes	*//*	PAWS/RTTM data	*/        __u32	rcv_tsval;	/* Time stamp value             	*/        __u32	rcv_tsecr;	/* Time stamp echo reply        	*/        __u32	ts_recent;	/* Time stamp to echo next		*/        long	ts_recent_stamp;/* Time we stored ts_recent (for aging) *//*	SACKs data	*/	__u16	user_mss;  	/* mss requested by user in ioctl */	__u8	dsack;		/* D-SACK is scheduled			*/	__u8	eff_sacks;	/* Size of SACK array to send with next packet */	struct tcp_sack_block duplicate_sack[1]; /* D-SACK block */	struct tcp_sack_block selective_acks[4]; /* The SACKS themselves*/	__u32	window_clamp;	/* Maximal window to advertise		*/	__u32	rcv_ssthresh;	/* Current window clamp			*/	__u8	probes_out;	/* unanswered 0 window probes		*/	__u8	num_sacks;	/* Number of SACK blocks		*/	__u16	advmss;		/* Advertised MSS			*/	__u8	syn_retries;	/* num of allowed syn retries */	__u8	ecn_flags;	/* ECN status bits.			*/	__u16	prior_ssthresh; /* ssthresh saved at recovery start	*/	__u32	lost_out;	/* Lost packets				*/	__u32	sacked_out;	/* SACK'd packets			*/	__u32	fackets_out;	/* FACK'd packets			*/	__u32	high_seq;	/* snd_nxt at onset of congestion	*/	__u32	retrans_stamp;	/* Timestamp of the last retransmit,				 * also used in SYN-SENT to remember stamp of				 * the first SYN. */	__u32	undo_marker;	/* tracking retrans started here. */	int	undo_retrans;	/* number of undoable retransmissions. */	__u32	urg_seq;	/* Seq of received urgent pointer */	__u16	urg_data;	/* Saved octet of OOB data and control flags */	__u8	pending;	/* Scheduled timer event	*/	__u8	urg_mode;	/* In urgent mode		*/	__u32	snd_up;		/* Urgent pointer		*/	/* The syn_wait_lock is necessary only to avoid tcp_get_info having	 * to grab the main lock sock while browsing the listening hash	 * (otherwise it's deadlock prone).	 * This lock is acquired in read mode only from tcp_get_info() and	 * it's acquired in write mode _only_ from code that is actively	 * changing the syn_wait_queue. All readers that are holding	 * the master sock lock don't need to grab this lock in read mode	 * too as the syn_wait_queue writes are always protected from	 * the main sock lock.	 */	rwlock_t		syn_wait_lock;	struct tcp_listen_opt	*listen_opt;	/* FIFO of established children */	struct open_request	*accept_queue;	struct open_request	*accept_queue_tail;	int			write_pending;	/* A write to socket waits to start. */	unsigned int		keepalive_time;	  /* time before keep alive takes place */	unsigned int		keepalive_intvl;  /* time interval between keep alive probes */	int			linger2;	unsigned long last_synq_overflow; }; 	/* * This structure really needs to be cleaned up. * Most of it is for TCP, and not used by any of * the other protocols. *//* * The idea is to start moving to a newer struct gradualy *  * IMHO the newer struct should have the following format: *  *	struct sock { *		sockmem [mem, proto, callbacks]

⌨️ 快捷键说明

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