亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tcp_input.c

?? vxwork源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* tcp_input.c - TCP input routines *//* Copyright 1984 - 2002 Wind River Systems, Inc. */#include "copyright_wrs.h"/* * Copyright (c) 1982, 1986, 1988, 1990, 1993, 1994, 1995 *	The Regents of the University of California.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * *	@(#)tcp_input.c	8.12 (Berkeley) 5/24/95 *//*modification history--------------------01i,06mar02,vvv  fixed tcp_input to wake application only when space in send		 buffer exceeds low water mark (SPR #72177)01h,12oct01,rae  merge from truestack ver 01n, base o1f (SPRs 69629, 70328,                 70329, WindView, cleanup)01g,11oct00,gnn  enabled LAND fix by default.01f,09jan98,vin  added LAND attack fix.01e,26sep97,sgv  Removed check for PUSH flag in TCP_REASS macro01d,07jul97,vin  fixed additional bugs. 		 (timestamp echo fix Stevens VolII Sec 26.6 fig 26.20,                 connection timer bug Stevens VolII sec 28.6 fig 28.20,                 simultaneous bug fix Stevens VolII sec 28.8 fig 28.30,                 removed unnecessary code Stevens VolII sec 29.9 fig 29.22)01c,08mar97,vin  added changes to accomodate changes in pcb structure for		 hash look ups.01c,05feb97,rjc  changes for tos routing01b,22nov96,vin  added cluster support replaced m_get(..) with mBufClGet(..).01a,03mar96,vin  created from BSD4.4lite2. integrated some wrs changes from		 02q of tcp_input.c*/#include "vxWorks.h"#include "net/systm.h"#include "net/mbuf.h"#include "net/protosw.h"#include "sys/socket.h"#include "net/socketvar.h"#include "errno.h"#include "net/if.h"#include "net/route.h"#include "netinet/in.h"#include "netinet/in_pcb.h"#include "netinet/in_systm.h"#include "netinet/ip.h"#include "netinet/ip_var.h"#include "netinet/tcp.h"#include "netinet/tcp_fsm.h"#include "netinet/tcp_seq.h"#include "netinet/tcp_timer.h"#include "netinet/tcp_var.h"#include "netinet/tcpip.h"#ifdef BSDDEBUG#include "netinet/tcp_debug.h"#endif	/* BSDDEBUG */#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET#include "wvNetLib.h"#endif#endif#ifdef VIRTUAL_STACK#include "netinet/vsLib.h"#elseextern u_long sb_max;IMPORT int tcp_keepinit;IMPORT int tcp_mssdflt;#endif /* VIRTUAL_STACK */IMPORT unsigned long (*pTcpRandHook)(void);extern void _remque ();extern void _insque ();/* XXX LAND attack safe remove this after thorough investigation */UCHAR _landAttackSafe = 1;/* *  MIB-II support counts the number of TCP packets sent with the Reset Flag *  set. */#ifndef VIRTUAL_STACKlong   tcpOutRsts;tcp_seq	tcp_iss;		/* tcp initial send seq # */unsigned tcp_alpha, tcp_beta;	/* retransmission smoothing constants */struct inpcbhead tcb;           /* head of queue of active tcpcb's */struct inpcbinfo tcbinfo;struct 	tcpstat tcpstat;	/* tcp statistics */int	tcprexmtthresh = 3;     /* overridden during protocol initialization */struct	tcpiphdr tcp_saveti;struct	inpcb *tcp_last_inpcb = NULL;u_long 	tcp_now;			/* for RFC 1323 timestamps */#endif /* VIRTUAL_STACK */#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* Set common fields of event identifiers for this module. */LOCAL UCHAR wvNetModuleId = WV_NET_TCPINPUT_MODULE; /* Value for tcp_input.c */LOCAL UCHAR wvNetLocalFilter = WV_NET_NONE;     /* Available event filter */LOCAL ULONG wvNetEventId;       /* Event identifier: see wvNetLib.h */#endif    /* INCLUDE_WVNET */#endif#define TCP_PAWS_IDLE	(24 * 24 * 60 * 60 * PR_SLOWHZ)/* for modulo comparisons of timestamps */#define TSTMP_LT(a,b)	((int)((a)-(b)) < 0)#define TSTMP_GEQ(a,b)	((int)((a)-(b)) >= 0)/* * Insert segment ti into reassembly queue of tcp with * control block tp.  Return TH_FIN if reassembly now includes * a segment with FIN.  The macro form does the common case inline * (segment is the next to be received on an established connection, * and the queue is empty), avoiding linkage into and removal * from the queue and repetition of various conversions. * Set DELACK for segments received in order, but ack immediately * when segments are out of order (so fast retransmit can work). */#define	TCP_REASS(tp, ti, m, so, flags) { \	if ((ti)->ti_seq == (tp)->rcv_nxt && \	    (tp)->seg_next == (struct tcpiphdr *)(tp) && \	    (tp)->t_state == TCPS_ESTABLISHED) { \		(tp)->t_flags |= TF_DELACK; \		(tp)->rcv_nxt += (ti)->ti_len; \		flags = (ti)->ti_flags & TH_FIN; \		tcpstat.tcps_rcvpack++;\		tcpstat.tcps_rcvbyte += (ti)->ti_len;\		sbappend(&(so)->so_rcv, (m)); \		sorwakeup(so); \	} else { \		(flags) = tcp_reass((tp), (ti), (m)); \		tp->t_flags |= TF_ACKNOW; \	} \}inttcp_reass(tp, ti, m)	register struct tcpcb *tp;	register struct tcpiphdr *ti;	struct mbuf *m;{	register struct tcpiphdr *q;	struct socket *so = tp->t_inpcb->inp_socket;	int flags;	/*	 * Call with ti==0 after become established to	 * force pre-ESTABLISHED data up to user socket.	 */	if (ti == 0)		goto present;	/*	 * Find a segment which begins after this one does.	 */	for (q = tp->seg_next; q != (struct tcpiphdr *)tp;	    q = (struct tcpiphdr *)q->ti_next)		if (SEQ_GT(q->ti_seq, ti->ti_seq))			break;	/*	 * If there is a preceding segment, it may provide some of	 * our data already.  If so, drop the data from the incoming	 * segment.  If it provides all of our data, drop us.	 */	if ((struct tcpiphdr *)q->ti_prev != (struct tcpiphdr *)tp) {		register int i;		q = (struct tcpiphdr *)q->ti_prev;		/* conversion to int (in i) handles seq wraparound */		i = q->ti_seq + q->ti_len - ti->ti_seq;		if (i > 0) {			if (i >= ti->ti_len) {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_INFO event */            WV_NET_PORTIN_EVENT_3 (NET_CORE_EVENT, WV_NET_INFO, 26, 8,                               tp->t_inpcb->inp_fport, tp->t_inpcb->inp_lport,                                   WV_NETEVENT_TCPIN_DUPSEG, WV_NET_RECV,                                   so->so_fd, ti->ti_seq, ti->ti_len)#endif  /* INCLUDE_WVNET */#endif				tcpstat.tcps_rcvduppack++;				tcpstat.tcps_rcvdupbyte += ti->ti_len;				m_freem(m);				return (0);			}			m_adj(m, i);			ti->ti_len -= i;			ti->ti_seq += i;		}		q = (struct tcpiphdr *)(q->ti_next);	}	tcpstat.tcps_rcvoopack++;	tcpstat.tcps_rcvoobyte += ti->ti_len;	REASS_MBUF(ti) = m;		/* XXX */	/*	 * While we overlap succeeding segments trim them or,	 * if they are completely covered, dequeue them.	 */	while (q != (struct tcpiphdr *)tp) {		register int i = (ti->ti_seq + ti->ti_len) - q->ti_seq;		if (i <= 0)			break;		if (i < q->ti_len) {			q->ti_seq += i;			q->ti_len -= i;			m_adj(REASS_MBUF(q), i);			break;		}		q = (struct tcpiphdr *)q->ti_next;		m = REASS_MBUF((struct tcpiphdr *)q->ti_prev);#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_VERBOSE event */        WV_NET_PORTIN_EVENT_4 (NET_CORE_EVENT, WV_NET_VERBOSE, 37, 20,                               tp->t_inpcb->inp_fport, tp->t_inpcb->inp_lport,                               WV_NETEVENT_TCPIN_DUPDATA, WV_NET_RECV,                                so->so_fd, ti->ti_seq,                               ((struct tcpiphdr *)q->ti_prev)->ti_seq,                               ((struct tcpiphdr *)q->ti_prev)->ti_len)#endif  /* INCLUDE_WVNET */#endif		remque(q->ti_prev);		m_freem(m);	}	/*	 * Stick new segment in its place.	 */	insque(ti, q->ti_prev);present:	/*	 * Present data to user, advancing rcv_nxt through	 * completed sequence space.	 */	if (TCPS_HAVERCVDSYN(tp->t_state) == 0)		return (0);	ti = tp->seg_next;	if (ti == (struct tcpiphdr *)tp || ti->ti_seq != tp->rcv_nxt)		return (0);	if (tp->t_state == TCPS_SYN_RECEIVED && ti->ti_len)		return (0);	do {		tp->rcv_nxt += ti->ti_len;		flags = ti->ti_flags & TH_FIN;		remque(ti);		m = REASS_MBUF(ti);		ti = (struct tcpiphdr *)ti->ti_next;		if (so->so_state & SS_CANTRCVMORE)			m_freem(m);		else			sbappend(&so->so_rcv, m);	} while (ti != (struct tcpiphdr *)tp && ti->ti_seq == tp->rcv_nxt);	sorwakeup(so);	return (flags);}/* * TCP input routine, follows pages 65-76 of the * protocol specification dated September, 1981 very closely. */voidtcp_input(m, iphlen)	register struct mbuf *m;	int iphlen;{	register struct tcpiphdr *ti;	register struct inpcb *inp;	u_char *optp = NULL;	int optlen = 0;	int len, tlen, off;	register struct tcpcb *tp = 0;	register int tiflags;	struct socket *so = NULL;	int todrop, acked, ourfinisacked, needoutput = 0;	short ostate = 0;	struct in_addr laddr;	int dropsocket = 0;	int iss = 0;	u_long tiwin, ts_val, ts_ecr;	int ts_present = 0;#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_NOTICE event */        WV_NET_EVENT_0 (NET_CORE_EVENT, WV_NET_NOTICE, 18, 7,                        WV_NETEVENT_TCPIN_START, WV_NET_RECV)#endif  /* INCLUDE_WVNET */#endif	tcpstat.tcps_rcvtotal++;	/*	 * Get IP and TCP header together in first mbuf.	 * Note: IP leaves IP header in first mbuf.	 */	ti = mtod(m, struct tcpiphdr *);	if (iphlen > sizeof (struct ip))		ip_stripoptions(m, (struct mbuf *)0);	if (m->m_len < sizeof (struct tcpiphdr)) {		if ((m = m_pullup(m, sizeof (struct tcpiphdr))) == 0) {			tcpstat.tcps_rcvshort++;#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_VERBOSE event */            WV_NET_EVENT_0 (NET_CORE_EVENT, WV_NET_VERBOSE, 38, 21,                            WV_NETEVENT_TCPIN_SHORTSEG, WV_NET_RECV)#endif  /* INCLUDE_WVNET */#endif			return;		}		ti = mtod(m, struct tcpiphdr *);	}	/*	 * Checksum extended TCP header and data.	 */	tlen = ((struct ip *)ti)->ip_len;	len = sizeof (struct ip) + tlen;	ti->ti_next = ti->ti_prev = 0;	ti->ti_x1 = 0;	ti->ti_len = (u_short)tlen;	HTONS(ti->ti_len);	if ((ti->ti_sum = in_cksum(m, len))) {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_CRITICAL event */            WV_NET_EVENT_0 (NET_CORE_EVENT, WV_NET_CRITICAL, 30, 2,                            WV_NETEVENT_TCPIN_BADSUM, WV_NET_RECV)#endif  /* INCLUDE_WVNET */#endif		tcpstat.tcps_rcvbadsum++;		goto drop;	}	/*	 * Check that TCP offset makes sense,	 * pull out TCP options and adjust length.		XXX	 */	off = ti->ti_off << 2;	if (off < sizeof (struct tcphdr) || off > tlen) {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_CRITICAL event */            WV_NET_PORTIN_EVENT_1 (NET_CORE_EVENT, WV_NET_CRITICAL, 31, 3,                                   ti->ti_sport, ti->ti_dport,                                   WV_NETEVENT_TCPIN_BADSEG, WV_NET_RECV,                                    off)#endif  /* INCLUDE_WVNET */#endif		tcpstat.tcps_rcvbadoff++;		goto drop;	}	tlen -= off;	ti->ti_len = tlen;	if (off > sizeof (struct tcphdr)) {		if (m->m_len < sizeof(struct ip) + off) {			if ((m = m_pullup(m, sizeof (struct ip) + off)) == 0) {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_VERBOSE event */                WV_NET_PORTIN_EVENT_0 (NET_CORE_EVENT, WV_NET_VERBOSE, 38, 21,                                       ti->ti_sport, ti->ti_dport,                                       WV_NETEVENT_TCPIN_SHORTSEG, WV_NET_RECV)#endif  /* INCLUDE_WVNET */#endif				tcpstat.tcps_rcvshort++;				return;			}			ti = mtod(m, struct tcpiphdr *);		}		optlen = off - sizeof (struct tcphdr);		optp = mtod(m, u_char *) + sizeof (struct tcpiphdr);		/* 		 * Do quick retrieval of timestamp options ("options

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91影视在线播放| 日本精品视频一区二区三区| 国产精品毛片高清在线完整版| 欧美在线短视频| 国产成人一区在线| 日韩国产高清影视| 中文字幕一区二区三区在线不卡| 欧美一级高清大全免费观看| 96av麻豆蜜桃一区二区| 国产美女久久久久| 一区二区三区免费| 欧美国产激情二区三区| 日韩一区二区三区电影在线观看 | 亚洲成av人影院| 国产精品久久久久精k8| 精品欧美久久久| 欧美久久一二区| 91玉足脚交白嫩脚丫在线播放| 国产一区二区精品久久| 日韩中文字幕亚洲一区二区va在线| 国产精品国产三级国产aⅴ入口| 国产精品无人区| 欧美大尺度电影在线| 欧美三区在线观看| 91极品视觉盛宴| 91亚洲精华国产精华精华液| 成人不卡免费av| 国产成人免费在线| 国产精品原创巨作av| 久久99这里只有精品| 免费在线观看成人| 日本中文字幕一区二区有限公司| 尤物在线观看一区| 亚洲免费看黄网站| 亚洲色图欧美偷拍| 自拍偷拍亚洲综合| 日韩一区日韩二区| 中文字幕亚洲电影| 国产精品久久精品日日| 一区免费观看视频| 成人欧美一区二区三区黑人麻豆| 国产精品美女久久久久久久久 | 99综合影院在线| 国产成人精品免费一区二区| 国产精品99久久久久久似苏梦涵| 国产乱码精品一区二区三区五月婷| 国产中文字幕精品| 国产乱理伦片在线观看夜一区 | 成人黄色在线看| 不卡一区中文字幕| 色综合久久66| 欧美日韩国产一区二区三区地区| 欧美一区二区视频观看视频| 欧美精品乱码久久久久久| 欧美一区二区三区色| 精品日产卡一卡二卡麻豆| 久久久欧美精品sm网站| 国产精品护士白丝一区av| 亚洲视频每日更新| 日本亚洲视频在线| 国产一区二区精品久久| 91视视频在线直接观看在线看网页在线看 | 亚洲黄色小视频| 日韩福利电影在线观看| 国产一区二区伦理片| 盗摄精品av一区二区三区| 日本二三区不卡| 日韩视频永久免费| 亚洲丰满少妇videoshd| 日本麻豆一区二区三区视频| 国产在线播放一区三区四| 91天堂素人约啪| 91精品国产aⅴ一区二区| 久久久精品蜜桃| 亚洲一区自拍偷拍| 国产一区二区女| 欧美亚日韩国产aⅴ精品中极品| 欧美成人一区二区三区片免费| 国产精品少妇自拍| 爽好久久久欧美精品| 成人a区在线观看| 欧美一区二视频| 国产精品乱码人人做人人爱 | 国产精品女主播av| 亚洲高清一区二区三区| 国产99久久久精品| 欧美剧情片在线观看| 欧美经典一区二区三区| 午夜欧美在线一二页| 国产xxx精品视频大全| 欧美日韩成人在线一区| 国产精品美女久久久久久久| 蜜桃av一区二区在线观看| 99天天综合性| 精品国产麻豆免费人成网站| 亚洲地区一二三色| 91女人视频在线观看| 久久蜜桃一区二区| 午夜亚洲福利老司机| 91在线视频播放| 久久精品日韩一区二区三区| 日韩av电影免费观看高清完整版在线观看 | 日本在线观看不卡视频| 97久久精品人人做人人爽50路| 日韩美一区二区三区| 亚洲综合一区二区三区| 白白色 亚洲乱淫| 欧美一级理论性理论a| 亚洲成人中文在线| 99精品视频在线免费观看| 久久综合久久99| 蜜臀国产一区二区三区在线播放| 欧洲精品视频在线观看| 最近日韩中文字幕| 粉嫩aⅴ一区二区三区四区五区| 日韩三级免费观看| 亚洲成a人在线观看| 色综合久久久久综合体| 国产精品欧美综合在线| 国产成人免费在线观看不卡| 2020国产精品自拍| 极品销魂美女一区二区三区| 91精品国产91热久久久做人人| 五月综合激情婷婷六月色窝| 欧美午夜在线观看| 亚洲另类春色国产| 91啦中文在线观看| 日韩伦理电影网| 日本黄色一区二区| 亚洲精品免费在线| 在线视频一区二区三区| 一区二区三区国产精品| 色噜噜夜夜夜综合网| 亚洲免费毛片网站| 欧美偷拍一区二区| 五月激情综合网| 欧美一区二区三区视频在线观看| 天天影视网天天综合色在线播放 | 精品国产乱子伦一区| 久久精品国产精品亚洲红杏| 日韩精品自拍偷拍| 国产一区二区三区免费观看| 欧美激情在线免费观看| 99久久99精品久久久久久| 椎名由奈av一区二区三区| 色婷婷精品大在线视频| 一区二区在线观看不卡| 欧美日本高清视频在线观看| 午夜a成v人精品| 日韩欧美的一区| 国产精品一级在线| 中文字幕在线不卡一区二区三区| 91免费视频大全| 午夜精品久久久| 久久香蕉国产线看观看99| 国产精品1区二区.| 亚洲色图制服诱惑| 欧美精选午夜久久久乱码6080| 美女国产一区二区| 欧美国产成人在线| 日本精品一区二区三区四区的功能| 五月激情丁香一区二区三区| 精品国产乱码久久久久久久久| 国产ts人妖一区二区| 亚洲综合一区在线| 精品国产乱码91久久久久久网站| 高清不卡一区二区| 亚洲小少妇裸体bbw| 2023国产一二三区日本精品2022| 成人avav在线| 日韩电影在线观看一区| 欧美激情中文字幕| 欧美日韩成人激情| 国产高清无密码一区二区三区| 亚洲另类春色国产| www国产精品av| 91福利小视频| 久久精品国内一区二区三区| 日韩一区欧美小说| 欧美成人vps| 色偷偷成人一区二区三区91| 蜜臀a∨国产成人精品| 国产精品国模大尺度视频| 制服视频三区第一页精品| 国产不卡视频在线观看| 天天操天天色综合| 欧美激情一区二区三区四区| 欧美日韩精品系列| 成人午夜激情影院| 奇米四色…亚洲| 一区二区三区国产精品| 久久久三级国产网站| 欧美丰满一区二区免费视频| 成人免费av网站| 老司机精品视频一区二区三区| 亚洲色图欧美在线| 国产午夜亚洲精品午夜鲁丝片| 欧美日韩午夜在线| 91一区二区三区在线播放| 国产一区二三区|