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

📄 sock.h

📁 GNU Hurd 源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * 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/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_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)#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#ifdef CONFIG_FILTER#include <linux/filter.h>#endif#include <asm/atomic.h>#define MIN_WRITE_SPACE	2048/* The AF_UNIX specific socket options */struct unix_opt {	int 			family;	char *			name;	int  			locks;	struct unix_address	*addr;	struct dentry *		dentry;	struct semaphore	readsem;	struct sock *		other;	struct sock **		list;	struct sock *		gc_tree;	int			inflight;};#ifdef CONFIG_NETLINKstruct netlink_callback;struct netlink_opt {	pid_t			pid;	unsigned		groups;	pid_t			dst_pid;	unsigned		dst_groups;	int			(*handler)(int unit, struct sk_buff *skb);	atomic_t		locks;	struct netlink_callback	*cb;};#endif/* 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/* 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	rcv_tstamp;	/* timestamp of last received packet	*/	__u32	lrcvtime;	/* timestamp of last received data packet*/	__u32	srtt;		/* smothed round trip time << 3		*/	__u32	ato;		/* delayed ack timeout			*/	__u32	snd_wl1;	/* Sequence for window update		*/	__u32	snd_wl2;	/* Ack sequence for update		*/	__u32	snd_wnd;	/* The window we expect to receive	*/	__u32	max_window;	__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;	/* Dave, do you allow mw to use this hole? 8) --ANK */	__u8	pending;	/* pending events			*/	__u8	retransmits;	__u32	last_ack_sent;	/* last ack we sent			*/	__u32	backoff;	/* backoff				*/	__u32	mdev;		/* medium deviation			*/ 	__u32	snd_cwnd;	/* Sending congestion window		*/	__u32	rto;		/* retransmit timeout			*/	__u32	packets_out;	/* Packets which are "in flight"	*/	__u32	fackets_out;	/* Non-retrans SACK'd packets		*/	__u32	retrans_out;	/* Fast-retransmitted packets out	*/	__u32	high_seq;	/* snd_nxt at onset of congestion	*//* *	Slow start and congestion control (see also Nagle, and Karn & Partridge) */ 	__u32	snd_ssthresh;	/* Slow start size threshold		*/ 	__u16	snd_cwnd_cnt;	/* Linear increase counter		*/	__u8	dup_acks;	/* Consequetive duplicate acks seen from other end */	__u8	delayed_acks;	__u16	user_mss;  	/* mss requested by user in ioctl */	/* Two commonly used timers in both sender and receiver paths. */ 	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 sk_buff		*retrans_head;	/* retrans head can be 						 * different to the head of						 * write queue if we are doing						 * fast retransmit						 */ 	__u32	rcv_wnd;	/* Current receiver window		*/	__u32	rcv_wup;	/* rcv_nxt on last window update sent	*/	__u32	write_seq;	__u32	copied_seq;/* *      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	rexmt_done;	/* Retransmitted up to send head?	*/        __u32	rcv_tsval;	/* Time stamp value             	*/        __u32	rcv_tsecr;	/* Time stamp echo reply        	*/        __u32	ts_recent;	/* Time stamp to echo next		*/        __u32	ts_recent_stamp;/* Time we stored ts_recent (for aging) */	int	num_sacks;	/* Number of SACK blocks		*/	struct tcp_sack_block selective_acks[4]; /* The SACKS themselves*/ 	struct timer_list	probe_timer;		/* Probes	*/	__u32	window_clamp;	/* XXX Document this... -DaveM		*/	__u32	probes_out;	/* unanswered 0 window probes		*/	__u32	syn_seq;	__u32	fin_seq;	__u32	urg_seq;	__u32	urg_data;	__u32	last_seg_size;	/* Size of last incoming segment */	__u32	rcv_mss;	/* MSS used for delayed ACK decisions */ 	__u32 	partial_writers; /* # of clients wanting at the head packet */	struct open_request	*syn_wait_queue;	struct open_request	**syn_wait_last;	int syn_backlog;	/* Backlog of received SYNs */}; 	/* * 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] * *		union or struct { *			ax25; *		} ll_pinfo; *	 *		union { *			ipv4; *			ipv6; *			ipx; *			netrom; *			rose; * 			x25; *		} net_pinfo; * *		union { *			tcp; *			udp; *			spx; *			netrom; *		} tp_pinfo; * *	} *//* Define this to get the sk->debug debugging facility. */#define SOCK_DEBUGGING#ifdef SOCK_DEBUGGING#define SOCK_DEBUG(sk, msg...) do { if((sk) && ((sk)->debug)) printk(KERN_DEBUG msg); } while (0)#else#define SOCK_DEBUG(sk, msg...) do { } while (0)#endifstruct sock {	/* This must be first. */	struct sock		*sklist_next;	struct sock		*sklist_prev;	/* Local port binding hash linkage. */	struct sock		*bind_next;	struct sock		**bind_pprev;	/* Socket demultiplex comparisons on incoming packets. */	__u32			daddr;		/* Foreign IPv4 addr			*/	__u32			rcv_saddr;	/* Bound local IPv4 addr		*/	__u16			dport;		/* Destination port			*/	unsigned short		num;		/* Local port				*/	int			bound_dev_if;	/* Bound device index if != 0		*/	/* Main hash linkage for various protocol lookup tables. */	struct sock		*next;	struct sock		**pprev;	volatile unsigned char	state,		/* Connection state			*/				zapped;		/* In ax25 & ipx means not linked	*/	__u16			sport;		/* Source port				*/	unsigned short		family;		/* Address family			*/	unsigned char		reuse,		/* SO_REUSEADDR setting			*/				nonagle;	/* Disable Nagle algorithm?		*/	atomic_t		sock_readers;	/* User count				*/	int			rcvbuf;		/* Size of receive buffer in bytes	*/	struct wait_queue	**sleep;	/* Sock wait queue			*/	struct dst_entry	*dst_cache;	/* Destination cache			*/	atomic_t		rmem_alloc;	/* Receive queue bytes committed	*/	struct sk_buff_head	receive_queue;	/* Incoming packets			*/	atomic_t		wmem_alloc;	/* Transmit queue bytes committed	*/	struct sk_buff_head	write_queue;	/* Packet sending queue			*/	atomic_t		omem_alloc;	/* "o" is "option" or "other" */	__u32			saddr;		/* Sending source			*/	unsigned int		allocation;	/* Allocation mode			*/	int			sndbuf;		/* Size of send buffer in bytes		*/	struct sock		*prev;	/* Not all are volatile, but some are, so we might as well say they all are.	 * XXX Make this a flag word -DaveM	 */	volatile char		dead,				done,				urginline,				keepopen,				linger,				destroy,				no_check,				broadcast,				bsdism;	unsigned char		debug;	int			proc;	unsigned long	        lingertime;	int			hashent;	struct sock		*pair;	/* Error and backlog packet queues, rarely used. */	struct sk_buff_head	back_log,	                        error_queue;	struct proto		*prot;	unsigned short		shutdown;#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)	union {		struct ipv6_pinfo	af_inet6;	} net_pinfo;#endif	union {		struct tcp_opt		af_tcp;#if defined(CONFIG_INET) || defined (CONFIG_INET_MODULE)		struct raw_opt		tp_raw4;#endif#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)		struct raw6_opt		tp_raw;#endif /* CONFIG_IPV6 */#if defined(CONFIG_SPX) || defined (CONFIG_SPX_MODULE)		struct spx_opt		af_spx;#endif /* CONFIG_SPX */	} tp_pinfo;	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 short		ack_backlog;	unsigned short		max_ack_backlog;	__u32			priority;	unsigned short		type;	unsigned char		localroute;	/* Route locally only */	unsigned char		protocol;	struct ucred		peercred;#ifdef CONFIG_FILTER	/* Socket Filtering Instructions */	struct sk_filter      	*filter;#endif /* CONFIG_FILTER */	/* This is where all the private (optional) areas that don't	 * overlap will eventually live. 	 */	union {		void *destruct_hook;	  	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#if defined (CONFIG_DECNET) || defined(CONFIG_DECNET_MODULE)

⌨️ 快捷键说明

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