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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tcp-fast.cc

?? 關于ns2的一些源碼和資料
?? CC
?? 第 1 頁 / 共 2 頁
字號:
/************************************************************************\
 * TCP-FAST  NS2 Module                                         	*
 * University of Melbourne April 2005                         		*
 *                                                              	*
 * Coding: Tony Cui and Lachlan Andrew                          	*
 *                                                                      *
 * Revision History                                                     *
 * Version 1.1.2                					*
 *     Make FAST_CC_MIQ tunable						*
 *     (using a mi_threshold_ (tunable TCL variable)  to replace it) 	*
 *     Consider the calculation error when cwnd is an integer. Give	*
 *     user 3 choices the calculate cwnd.(use integer without		*
 *     considering calculation error (mode 0),  using integer 		*
 *     with considering calculatioin error (mode 1) and using double	*
 *     (mode 2).							*
 *     Fix a bug in fast_cc: add acks_per_rtt++ in the function. 	*
 *     Fix a bug in fast_cc: compare t_seqno and tcph->seqno() to       *
 *     prevent t_seqno greater than tcph->seqno().			*
 *     Allow user update cwnd every other rtt (default is every rtt)	*
 * Version 1.1.1                                                        *
 *     Set ECT bit correctly if ECN capable				*
 * Version 1.1                                                          *
 *     Add SACK function into Fast                                      *
 *     Fix bug in output function which didn't consider SYN packets.    *
 *     Fix bug in using INT_VARABLE_INVALID_VALUE instead of            *
 *     DOUBLE_VARABLE_INVALID_VALUE                                     *
 * Version 1.0.1 Released 13 November, 2004                             *
 *     Fix bug in baseRTT_ estimation with pk loss                      *
 * Version 1.0   Released 24 September, 2004                            *
\************************************************************************/

#ifndef lint
static const char rcsid[] =
"@(#) $Header: /nfs/jade/vint/CVSROOT/ns-2/tcp/tcp-fast.cc,v 1.35 2004/12/14 05:05:21 xuanc Exp $ (NCSU/IBM)";
#endif

#define FAST_ALLOW_CC 		0x1
#define FAST_ALLOW_MI		0x2
#define INT_VARABLE_INVALID_VALUE	999999999
#define DOUBLE_VARABLE_INVALID_VALUE 	99999999999.0

#include "ip.h"
#include "tcp.h"
#include "tcp-fast.h"
#include "flags.h"
#include "random.h"

/******************************************************************************/
static class FastTcpClass : public TclClass {
public:
	FastTcpClass() : TclClass("Agent/TCP/Fast") {}
	TclObject* create(int, const char*const*) {
		return (new FastTcpAgent());
	}
} class_fast;


/******************************************************************************/
FastTcpAgent::~FastTcpAgent()
{
#ifdef FASTTCPAGENT_DEBUG
	fclose(fasttcpagent_recordfps[0]);
	fclose(fasttcpagent_recordfps[1]);
#endif

	delete scb_;

	if (sendtime_)
		delete []sendtime_;
	if (transmits_)
		delete []transmits_;
	if (cwnd_array_)
		delete []cwnd_array_;
}

/******************************************************************************/
FastTcpAgent::FastTcpAgent() : TcpAgent(),
	avgRTT_(0), baseRTT_(0), avg_cwnd_last_RTT_(1),
	alpha_(0), beta_(0), fastrecov_(FALSE),
	pipe_(-1), next_pkt_(0), firstpartial_(0),
	last_natural_ack_number_(-1), on_first_rtt_(true)
{
	sendtime_ = NULL;
	transmits_ = NULL;
	cwnd_array_ = NULL;
	bind_bool("partial_ack_", &partial_ack_);
	/* Use the Reassembly Queue based scoreboard as
	 * ScoreBoard is O(cwnd) which is bad for HSTCP
	 * scb_ = new ScoreBoard(new ScoreBoardNode[SBSIZE],SBSIZE);
	 */
	scb_ = new ScoreBoardRQ();

#ifdef TCP_DELAY_BIND_ALL
#else /* ! TCP_DELAY_BIND_ALL */
	/*bind tunable parameters*/
	bind("fast_update_cwnd_interval_", &cwnd_update_period_);
	bind("avg_cwnd_last_RTT_", &avg_cwnd_last_RTT_);
	bind("avgRTT_", &avgRTT_);
	bind("baseRTT_", &baseRTT_);
	bind("alpha_", &alpha_);
	bind("beta_", &beta_);
	bind("high_accuracy_cwnd_", &high_accuracy_cwnd_);
	bind("mi_threshold_", &mi_threshold_);
#endif /* TCP_DELAY_BIND_ALL */

#ifdef FASTTCPAGENT_DEBUG
	static unsigned int s_agent_ID = 0;
	char strTmp[30];
	sprintf(strTmp, "agent%d_%s.txt", s_agent_ID, "record0");
	fasttcpagent_recordfps[0] = fopen(strTmp, "w+");
	sprintf(strTmp, "agent%d_%s.txt", s_agent_ID, "record1");
	fasttcpagent_recordfps[1] = fopen(strTmp, "w+");
	s_agent_ID++;
#endif
}

/******************************************************************************/
void
FastTcpAgent::delay_bind_init_all()
{
#ifdef TCP_DELAY_BIND_ALL
        // Defaults for bound variables should be set in ns-default.tcl.
	delay_bind_init_one("cwnd_update_period_");
	delay_bind_init_one("avg_cwnd_last_RTT_");
	delay_bind_init_one("avgRTT_");
	delay_bind_init_one("baseRTT_");
	delay_bind_init_one("alpha_");
	delay_bind_init_one("beta_");
	delay_bind_init_one("high_accuracy_cwnd_");
	delay_bind_init_one("mi_threshold_");
#endif /* TCP_DELAY_BIND_ALL */
	TcpAgent::delay_bind_init_all();

	reset();
}

/******************************************************************************/
int
FastTcpAgent::delay_bind_dispatch(const char *varName, const char *localName, TclObject *tracer)
{
#ifdef TCP_DELAY_BIND_ALL
	if (delay_bind(varName, localName, "cwnd_update_period_", &fast_update_cwnd_interval_, tracer))
		return TCL_OK;
	if (delay_bind(varName, localName, "avg_cwnd_last_RTT_", &avg_cwnd_last_RTT_, tracer))
		return TCL_OK;
	if (delay_bind(varName, localName, "avgRTT_", &avgRTT_, tracer))
		return TCL_OK;
	if (delay_bind(varName, localName, "baseRTT_", &baseRTT_, tracer))
		return TCL_OK;
	if (delay_bind(varName, localName, "alpha_", &alpha_, tracer))
		return TCL_OK;
	if (delay_bind(varName, localName, "beta_", &beta_, tracer))
		return TCL_OK;
	if (delay_bind(varName, localName, "high_accuracy_cwnd_", &high_accuracy_cwnd_, tracer))
		return TCL_OK;
	if (delay_bind(varName, localName, "mi_threshold_", &mi_threshold_, tracer))
		return TCL_OK;
#endif /* TCP_DELAY_BIND_ALL */

	return TcpAgent::delay_bind_dispatch(varName, localName, tracer);
}

/******************************************************************************/
/* Print out just the variable that is modified */
void
FastTcpAgent::traceVar(TracedVar* v) 
{
	double curtime;
	Scheduler& s = Scheduler::instance();
	char wrk[500];
	int n;

	curtime = &s ? s.clock() : 0;
	if (!strcmp(v->name(), "avgRTT_") || !strcmp(v->name(), "baseRTT_") || !strcmp(v->name(), "mi_threshold_"))
		sprintf(wrk,"%-8.5f %-2d %-2d %-2d %-2d %s %-6.3f",
			curtime, addr(), port(), daddr(), dport(),
			v->name(), double(*((TracedDouble*) v))); 
	else if (!strcmp(v->name(), "avg_cwnd_last_RTT_") || !strcmp(v->name(), "alpha_") || !strcmp(v->name(), "high_accuracy_cwnd_" ) || !strcmp(v->name(), "beta_"))
		sprintf(wrk,"%-8.5f %-2d %-2d %-2d %-2d %s %d",
			curtime, addr(), port(), daddr(), dport(),
			v->name(), int(*((TracedInt*) v))); 
	else
	{
		TcpAgent::traceVar(v);
		return;
	}

	n = strlen(wrk);
	wrk[n] = '\n';
	wrk[n+1] = 0;
	if (channel_)
		(void)Tcl_Write(channel_, wrk, n+1);
	wrk[n] = 0;

	return;
}

/******************************************************************************/
void
FastTcpAgent::reset ()
{
	fast_opts = 0;
	fast_opts |= FAST_ALLOW_CC;
	fast_opts |= FAST_ALLOW_MI;
	cwnd_update_time = fasttime();
	cwnd_increments = 0;
	firstrecv_ = -1.0;
	slowstart_ = 2;
	acks_per_rtt = 0;
	acks_last_rtt = 0;
	bc_ack = 0;
	bc_spacing = 0;
	t_backoff_=1;
	baseRTT_ = DOUBLE_VARABLE_INVALID_VALUE;
	newcwnd_ = DOUBLE_VARABLE_INVALID_VALUE;
	currentTime = 0;
	fast_calc_cwnd_end = 0;
	scb_->ClearScoreBoard();
	cwnd_remainder = 0;

	TcpAgent::reset ();
}

#define CWND_USE_INT	0
#define CWND_USE_INT_CONSIDER_ERROR	1
#define CWND_USE_DOUBLE	2
/******************************************************************************/
/*this function should be used to calculate the new cwnd_ size in every update*/
double
FastTcpAgent::fast_calc_cwnd(double cwnd,double old_cwnd)
{
        double q = avgRTT_ - baseRTT_;
        double cwnd_array_q = old_cwnd * q;
        double target_cwnd = cwnd;

        if ( avgRTT_ == 0 || baseRTT_ == DOUBLE_VARABLE_INVALID_VALUE )
        {
                return cwnd;
        }

        if ( fast_opts & FAST_ALLOW_CC )
        {
                if ( cwnd_array_q < alpha_ * avgRTT_ ||
		     cwnd_array_q >= beta_ * avgRTT_ )
                {
                        target_cwnd = (cwnd + old_cwnd * (baseRTT_/avgRTT_) + alpha_) / 2;
			if ( high_accuracy_cwnd_ == CWND_USE_INT_CONSIDER_ERROR ||
			     high_accuracy_cwnd_ == CWND_USE_INT )	//we use intergal to store cwnd.
			{
				if (high_accuracy_cwnd_ == CWND_USE_INT_CONSIDER_ERROR)	//we consider the calculation error.
				{
					cwnd_remainder += (target_cwnd - (int)target_cwnd);
					if (cwnd_remainder > 1)
					{
						target_cwnd++;
						cwnd_remainder--;
					}
				}
				target_cwnd = (int)target_cwnd;
			}
                }
        }

        return target_cwnd;
}

/******************************************************************************/
/* in this functioin, we can get the new average rtt which */
/* will be used to get the new cwnd_ size */
double
FastTcpAgent::fast_est_update_avgrtt(double rtt)
{
	double scale = avg_cwnd_last_RTT_/3;
	double avgRTT=avgRTT_;
	if ( !avgRTT)
		avgRTT = rtt;
	else if ( scale > 256 )
	{
		avgRTT = ((scale-1) * avgRTT + rtt)/scale;
	}
	else
	{
		avgRTT = (avgRTT*255 + rtt)/256;
	}
	return (double)avgRTT;
}

/******************************************************************************/
/* We get average cwnd size which will be used as a history record. */
double
FastTcpAgent::fast_est_update_avg_cwnd(int inst_cwnd)
{
#if 0
	unsigned int scale = avg_cwnd_last_RTT_/3;
	double avg_cwnd=avg_cwnd_last_RTT_;

	if ( !avg_cwnd)
		avg_cwnd = inst_cwnd;
	else if ( scale > 256 )
	{
		avg_cwnd = ((scale-1) * avg_cwnd + inst_cwnd)/scale;
	}
	else
	{
		avg_cwnd = (avg_cwnd*255 + inst_cwnd)/256;
	}
	return avg_cwnd;
#endif
	return (double)inst_cwnd;
}

/******************************************************************************/
/* parameter estimation */
void
FastTcpAgent::fast_est(Packet *pkt,double rtt)
{			
	hdr_tcp *tcph = hdr_tcp::access(pkt);

	if(rtt < baseRTT_)
		baseRTT_ = rtt;
	avg_cwnd_last_RTT_ = (fast_est_update_avg_cwnd(t_seqno_ - tcph->seqno() - dupacks_));
	avgRTT_ = fast_est_update_avgrtt(rtt);
}

//#define UPDATE_CWND_EVERY_OTHER_RTT
/******************************************************************************/
/* congestion control */
void
FastTcpAgent::fast_cc(double rtt, double old_cwnd)
{
	// We update acks_last_rtt every RTT.
	if ( fast_calc_cwnd_end + rtt < currentTime ) {
		fast_calc_cwnd_end = currentTime;
		acks_last_rtt = acks_per_rtt;
		acks_per_rtt = 0;
		if ( on_first_rtt_ == true )	on_first_rtt_ = false;
		else	on_first_rtt_ = true;
	}
	acks_per_rtt++;

	// We use MI to increase cwnd_ when there is little queueing delay 
	if ( avgRTT_ - baseRTT_ < mi_threshold_ && (fast_opts & FAST_ALLOW_MI) ) {
		cwnd_++;
		cwnd_update_time = currentTime;
		return;
	}

	// If queueing delay is large, we use fast algorithm
	if ( currentTime >= cwnd_update_time + fast_update_cwnd_interval_ 
#ifdef	UPDATE_CWND_EVERY_OTHER_RTT
	&& on_first_rtt_ == true
#endif
	) {
		double updated_cwnd;
		cwnd_increments = 0;
		updated_cwnd = fast_calc_cwnd(cwnd_,old_cwnd);
		if ( updated_cwnd >= cwnd_ && baseRTT_ >= 0.004 && baseRTT_ != DOUBLE_VARABLE_INVALID_VALUE ) {
			fast_pace(&cwnd_, (int)(updated_cwnd-cwnd_));
		}
		else
			cwnd_ = updated_cwnd;
		cwnd_update_time = currentTime;
	}
	else if ( baseRTT_ >= 0.004 && baseRTT_ != DOUBLE_VARABLE_INVALID_VALUE )
		fast_pace(&cwnd_, 0);
}

#define MIN(x, y) ((x)<(y) ? (x) : (y))
/******************************************************************************/
void
FastTcpAgent::recv(Packet *pkt, Handler *)
{
	currentTime = fasttime();
	hdr_tcp *tcph = hdr_tcp::access(pkt);
	hdr_flags *flagh = hdr_flags::access(pkt);
	int valid_ack = 0;

	if (qs_approved_ == 1 && tcph->seqno() > last_ack_)
		endQuickStart();
	if (qs_requested_ == 1)
		processQuickStart(pkt);

	/* W.N.: check if this is from a previous incarnation */
	if (tcph->ts() < lastreset_) {
		// Remove packet and do nothing
 		Packet::free(pkt);
		return;
	}
	++nackpack_;
	if(firstrecv_<0) { // init fast rtt vars
		firstrecv_ = currentTime;
		baseRTT_ = avgRTT_ = rtt_ = firstrecv_;
	}

	if (flagh->ecnecho())
		ecn(tcph->seqno());

	int ecnecho = hdr_flags::access(pkt)->ecnecho();
	if (ecnecho && ecn_)
		ecn(tcph->seqno());
	// Check if ACK is valid.  Suggestion by Mark Allman.
        if (tcph->seqno() >= last_ack_)
		valid_ack = 1;

#ifdef FASTTCPAGENT_DEBUG
	if (cwnd_ <= 0)
		printf("%8.3f : cwnd is not positive! cwnd is %f .\n", (double)currentTime, (double)cwnd_);
#endif	
	/*
	 * If DSACK is being used, check for DSACK blocks here.
	 * Possibilities:  Check for unnecessary Fast Retransmits.
	 */
	if (!fastrecov_) {
		/* normal... not fast recovery */
		if ((int)tcph->seqno() > last_ack_) {
			if (last_ack_ == 0 ) {
				cwnd_ = initial_window();
			}

			/* check if cwnd has been inflated */
			if(dupacks_ > numdupacks_ &&  cwnd_ > newcwnd_) {
				//check t_seqno_ before changing cwnd.
        			if (t_seqno_ < tcph->seqno())
				        t_seqno_ = tcph->seqno();
				//cwnd becomes a negative number in some case.
				
				cwnd_ = t_seqno_ - tcph->seqno() + 1;
				dupacks_ = 0;
				for (int i=0;i<maxwnd_;i++)
					cwnd_array_[i]=cwnd_;
			}

			firstpartial_ = 0;

			// reset sendtime for acked pkts and incr transmits_
			double sendTime = sendtime_[tcph->seqno()%maxwnd_];
			double old_pif=cwnd_array_[tcph->seqno()%maxwnd_];
			int transmits = transmits_[tcph->seqno()% maxwnd_];
			for(int k= (last_natural_ack_number_+1); k<=tcph->seqno(); ++k) {
				sendtime_[k%maxwnd_] = -1.0;
				transmits_[k%maxwnd_] = 0;
				cwnd_array_[k%maxwnd_]=-1;
			}
			if (t_seqno_ > tcph->seqno()){
				if ((transmits == 1) && (currentTime - sendTime > 0))
					rtt_ = currentTime - sendTime;
				else
					rtt_ = avgRTT_;
			}else rtt_ = avgRTT_;

			fast_recv_newack_helper(pkt);
			timeout_ = FALSE;
			scb_->ClearScoreBoard();
			fast_est(pkt, rtt_);
			fast_cc(rtt_, old_pif);
			last_natural_ack_number_ = tcph->seqno();
		} else if ((int)tcph->seqno() < last_ack_) {
			/*NOTHING*/
		//the follows are if (int)tcph->seqno() == last_ack_
		} else if (timeout_ == FALSE) {
			if (tcph->seqno() != last_ack_) {
				fprintf(stderr, "pkt seq %d should be %d\n", tcph->seqno(), last_ack_);
				abort();
			}
			scb_->UpdateScoreBoard (highest_ack_, tcph);
			/*
		 	 * Check for a duplicate ACK.
			 * Check that the SACK block actually
			 *  acknowledges new data.
 			 */
			if(scb_->CheckUpdate()) {
				if (++dupacks_ == numdupacks(cwnd_)) {
 				/*
 				 * Assume we dropped just one packet.
 				 * Retransmit last ack + 1

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品 日韩| 亚洲成人av一区二区三区| 精品少妇一区二区三区日产乱码| 欧美巨大另类极品videosbest| 欧美视频在线观看一区| 91黄色免费看| 欧美写真视频网站| 欧美日韩aaaaa| 欧美精品自拍偷拍| 91精品国产色综合久久久蜜香臀| 欧美精品国产精品| 日韩精品中文字幕在线一区| 精品少妇一区二区三区免费观看| 久久久久久久综合色一本| 国产日韩欧美一区二区三区综合 | 欧美极品美女视频| 国产亚洲视频系列| 中文成人av在线| 一级做a爱片久久| 视频一区二区国产| 九九**精品视频免费播放| 精品一区二区三区在线播放| 国产69精品久久777的优势| 99在线精品观看| 欧美中文一区二区三区| 日韩一卡二卡三卡四卡| 久久亚洲综合色一区二区三区| 欧美国产日韩在线观看| 亚洲三级在线免费观看| 香蕉成人伊视频在线观看| 麻豆精品视频在线观看| 国产成人av在线影院| 在线亚洲一区二区| 欧美一级二级三级蜜桃| 久久精品一区二区| 一区二区高清免费观看影视大全 | 成人精品视频一区二区三区 | 免费成人你懂的| 激情成人午夜视频| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 | 成人黄色免费短视频| 91视视频在线观看入口直接观看www | 中文字幕av免费专区久久| 日韩一区欧美小说| 日韩影视精彩在线| 不卡的av电影| 日韩一区二区在线看| 亚洲国产精品高清| 香蕉成人啪国产精品视频综合网| 美女一区二区久久| 91色porny| 久久午夜国产精品| 亚洲一区自拍偷拍| 国产在线精品一区二区不卡了 | 在线亚洲免费视频| 久久久欧美精品sm网站| 亚洲影视资源网| 国产乱子伦视频一区二区三区| 欧美亚洲国产一区在线观看网站 | 麻豆精品在线看| 91丨九色丨尤物| 久久亚洲综合色| 亚洲成av人片在线观看| 成人精品鲁一区一区二区| 在线不卡一区二区| 亚洲欧美日韩在线播放| 国产毛片精品一区| 欧美一区二区在线免费播放| 亚洲欧美另类图片小说| 国产不卡高清在线观看视频| 日韩一区二区三区在线观看| 亚洲欧美激情视频在线观看一区二区三区| 久久99久久99小草精品免视看| 久久综合一区二区| 香蕉久久夜色精品国产使用方法 | 国产激情视频一区二区三区欧美 | 色综合久久88色综合天天6| 久久久综合激的五月天| 午夜成人在线视频| 91小视频在线| 国产精品视频麻豆| 国产一区二区三区精品欧美日韩一区二区三区| 欧美性三三影院| 亚洲精品国产无套在线观| 国产成人免费视频| 久久精品亚洲精品国产欧美kt∨| 蜜臀va亚洲va欧美va天堂| 欧美三级日韩三级| 一区二区日韩av| 91蜜桃传媒精品久久久一区二区| 欧美激情资源网| 国产精品一卡二卡在线观看| 精品久久久久一区二区国产| 奇米精品一区二区三区在线观看| 欧美乱妇20p| 午夜精品视频在线观看| 欧美吻胸吃奶大尺度电影 | 国产精品综合二区| 欧美mv和日韩mv国产网站| 麻豆freexxxx性91精品| 欧美一级黄色录像| 青青草原综合久久大伊人精品| 欧美三级中文字幕在线观看| 亚洲福利一区二区三区| 欧美日韩性生活| 日日摸夜夜添夜夜添精品视频| 欧美区在线观看| 日韩高清中文字幕一区| 日韩欧美一级精品久久| 久久超碰97中文字幕| 亚洲精品在线观看视频| 国产美女在线精品| 欧美极品美女视频| 91亚洲男人天堂| 亚洲午夜久久久久久久久久久 | 国产精品久久福利| www.综合网.com| 一区二区三区在线视频免费观看| 久久久www免费人成精品| 国产一区二区免费在线| 国产欧美日韩视频在线观看| av福利精品导航| 亚洲综合精品自拍| 欧美一区二区三区精品| 久草在线在线精品观看| 亚洲国产成人一区二区三区| jlzzjlzz国产精品久久| 一区二区三区自拍| 日韩视频在线永久播放| 国产一区二区不卡| 综合久久综合久久| 欧美日韩国产高清一区二区| 国产真实乱子伦精品视频| 国产精品欧美久久久久一区二区| 91福利社在线观看| 奇米888四色在线精品| 久久久国产一区二区三区四区小说| 91婷婷韩国欧美一区二区| 午夜精品久久久久久久久久| 精品日韩成人av| 99国产精品国产精品久久| 亚洲成人精品在线观看| 久久综合资源网| 欧美艳星brazzers| 国产一区二区伦理片| 日韩一区有码在线| 日韩网站在线看片你懂的| youjizz国产精品| 男女性色大片免费观看一区二区| 国产蜜臀av在线一区二区三区| 91久久一区二区| 韩国女主播一区二区三区| 亚洲美腿欧美偷拍| www久久精品| 欧美日韩一区精品| 国产盗摄视频一区二区三区| 亚洲一级不卡视频| 国产日产欧美一区二区三区| 欧美日本一道本| 不卡大黄网站免费看| 免费高清成人在线| 亚洲最快最全在线视频| 国产亚洲欧美在线| 欧美一区二区三区男人的天堂| 91麻豆.com| 国产成人小视频| 捆绑调教美女网站视频一区| 亚洲精品写真福利| 国产女人18水真多18精品一级做 | 欧美激情一区二区三区不卡| 在线成人免费视频| 色欧美88888久久久久久影院| 国产一区二区三区精品欧美日韩一区二区三区 | 337p亚洲精品色噜噜噜| 成人av免费在线观看| 蜜桃传媒麻豆第一区在线观看| 欧美国产亚洲另类动漫| 欧美www视频| 91精品福利在线一区二区三区 | 中文字幕一区二区三区蜜月| 精品国产免费一区二区三区香蕉| 欧美综合亚洲图片综合区| www.日韩精品| 欧美一级搡bbbb搡bbbb| 色素色在线综合| 成人黄色网址在线观看| 国产乱人伦精品一区二区在线观看| 日本欧美在线观看| 无码av免费一区二区三区试看 | 专区另类欧美日韩| 国产日韩成人精品| 久久久久久亚洲综合| 精品国产免费人成在线观看| 制服丝袜日韩国产| 欧美日韩成人在线一区| 欧美亚洲综合久久| 欧美亚一区二区| 色综合激情久久| 日本道精品一区二区三区| 色婷婷久久综合|