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

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

?? pi.cc

?? COPE the first practical network coding scheme which is developped on click
?? CC
字號:
// -*- mode: c++; c-basic-offset: 4 -*-/* * pi.{cc,hh} -- element implements Random Early Detection dropping policy * Eddie Kohler * * Copyright (c) 1999-2000 Massachusetts Institute of Technology * Copyright (c) 2001 International Computer Science Institute * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, subject to the conditions * listed in the Click LICENSE file. These conditions include: you must * preserve this copyright notice, and you cannot mention the copyright * holders in advertising related to the Software without their permission. * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This * notice is a summary of the Click LICENSE file; the license in that file is * legally binding. */#include <click/config.h>#include "pi.hh"#include <click/standard/storage.hh>#include <click/elemfilter.hh>#include <click/error.hh>#include <click/router.hh>#include <click/confparse.hh>#include <click/straccum.hh>CLICK_DECLS#define PI_DEBUG 0PI::PI()    : Element(1, 1), _timer(this){}PI::~PI(){}voidPI::notify_noutputs(int n){    set_noutputs(n <= 1 ? 1 : 2);}intPI::check_params(double w, double a, double b, unsigned target_q, 					unsigned stability, ErrorHandler *errh) const {    unsigned max_allow_thresh = 0xFFFF;	if (target_q > max_allow_thresh)		return errh->error("`target_q' too large (max %d)", max_allow_thresh);	if (w < 0)		return errh->error("w must be positive");	if (a < 0)		return errh->error("a must be positive");	if (b < 0)		return errh->error("b must be positive");    if (stability > 16 || stability < 1)		return errh->error("STABILITY parameter must be between 1 and 16");	return 0;}intPI::configure(Vector<String> &conf, ErrorHandler *errh){	double a, b, w;	unsigned target_q;    unsigned stability = 4;    String queues_string = String();	if (cp_va_parse(conf, this, errh,	    cpDouble, "sampling frequency", &w,	    cpDouble, "a", &a,	    cpDouble, "b", &b,		cpUnsigned, "target queue length", &target_q,	    cpOptional,	    cpArgument, "relevant queues", &queues_string,	    cpKeywords,	    "W", cpDouble, "sampling frequency", &w,	    "A", cpDouble, "a", &a,	    "B", cpDouble, "b", &b,	    "QREF",  cpUnsigned, "target queue", &target_q,	    "STABILITY", cpUnsigned, "stability shift", &stability,	    "QUEUES", cpArgument, "relevant queues", &queues_string, cpEnd) < 0)		return -1;    if (check_params(w, a, b, target_q, stability, errh) < 0)		return -1;    // check queues_string    if (queues_string) {		Vector<String> eids;		cp_spacevec(queues_string, eids);		_queue_elements.clear();	for (int i = 0; i < eids.size(); i++)	 	if (Element *e = router()->find(eids[i], this, errh))			_queue_elements.push_back(e);		if (eids.size() != _queue_elements.size())	   	return -1;    }    // OK: set variables	_a = a; 	_b = b;	_w = w;	_target_q = target_q;    _size.set_stability_shift(stability);    return 0;}intPI::live_reconfigure(Vector<String> &conf, ErrorHandler *errh){	double a, b, w;	unsigned target_q;    unsigned stability = 4;    String queues_string = String();	if (cp_va_parse(conf, this, errh,	    cpDouble, "sampling frequency", &w,	    cpDouble, "a", &a,	    cpDouble, "b", &b,		cpUnsigned, "target queue length", &target_q,	    cpOptional,	    cpArgument, "relevant queues", &queues_string,	    cpKeywords,	    "W", cpDouble, "sampling frequency", &w,	    "A", cpDouble, "a", &a,	    "B", cpDouble, "b", &b,	    "QREF",  cpUnsigned, "target queue", &target_q,	    "STABILITY", cpUnsigned, "stability shift", &stability,	    "QUEUES", cpArgument, "relevant queues", &queues_string, cpEnd) < 0)		return -1;    if (check_params(w, a, b, target_q, stability, errh) < 0)		return -1;    if (queues_string)		errh->warning("QUEUES argument ignored");    // OK: set variables	_a = a; 	_b = b;	_w = w;	_target_q = target_q;    _size.set_stability_shift(stability);    return 0;}intPI::initialize(ErrorHandler *errh){    // Find the next queues    _queues.clear();    _queue1 = 0;    if (!_queue_elements.size()) {		CastElementFilter filter("Storage");	int ok;	if (output_is_push(0))	    ok = router()->downstream_elements(this, 0, &filter, _queue_elements);	else	    ok = router()->upstream_elements(this, 0, &filter, _queue_elements);	if (ok < 0)	    return errh->error("flow-based router context failure");	filter.filter(_queue_elements);    }    if (_queue_elements.size() == 0)	return errh->error("no Queues downstream");    for (int i = 0; i < _queue_elements.size(); i++)	if (Storage *s = (Storage *)_queue_elements[i]->cast("Storage"))	    _queues.push_back(s);	else	    errh->error("`%s' is not a Storage element", _queue_elements[i]->id().cc());    if (_queues.size() != _queue_elements.size())	return -1;    else if (_queues.size() == 1)	_queue1 = _queues[0];    _size.clear();	_old_q = 0;	_p = 0;    _drops = 0;    _last_jiffies = 0;    _timer.initialize(this);    _timer.schedule_after_ms(_w*1000);    return 0;}void PI::cleanup(CleanupStage){    _timer.cleanup();}voidPI::take_state(Element *e, ErrorHandler *){    PI *r = (PI *)e->cast("PI");    if (!r) return;    _size = r->_size;}voidPI::configuration(Vector<String> &conf) const{    conf.push_back(String(_a));    conf.push_back(String(_b));    conf.push_back(String(_w));    conf.push_back(String(_target_q));    StringAccum sa;    sa << "QUEUES";    for (int i = 0; i < _queue_elements.size(); i++)	sa << ' ' << _queue_elements[i]->id();    conf.push_back(sa.take_string());    conf.push_back("STABILITY " + String(_size.stability_shift()));}intPI::queue_size() const{    if (_queue1)	return _queue1->size();    else {	int s = 0;	for (int i = 0; i < _queues.size(); i++)	    s += _queues[i]->size();	return s;    }}void PI::run_timer(){	_p = _a*(queue_size() - _target_q) - _b*(_old_q - _target_q) + _p;    _timer.reschedule_after_ms(_w*1000);}boolPI::should_drop(){	double _random_value = random();    if (_random_value > _p*MAX_RAND) {		return true;    }    return false;}inline voidPI::handle_drop(Packet *p){    if (noutputs() == 1)	p->kill();    else	output(1).push(p);    _drops++;}voidPI::push(int, Packet *p){    if (should_drop())	handle_drop(p);    else	output(0).push(p);}Packet *PI::pull(int){    while (true) {	Packet *p = input(0).pull();	if (!p)	    return 0;	else if (!should_drop())	    return p;	handle_drop(p);    }}// HANDLERSstatic Stringpi_read_drops(Element *f, void *){    PI *r = (PI *)f;    return String(r->drops()) + "\n";}StringPI::read_parameter(Element *f, void *vparam){    PI *pi = (PI *)f;    switch ((int)vparam) {      case 0:			// w 	return String(pi->_w) + "\n";      case 1:			// a 	return String(pi->_a) + "\n";      case 2:			// b 	return String(pi->_b) + "\n";      case 3:			// _target_q 	return String(pi->_target_q) + "\n";      default:	return "";    }}StringPI::read_stats(Element *f, void *){    PI *r = (PI *)f;    return	String(r->queue_size()) + " current queue\n" +	cp_unparse_real2(r->_size.average(), QUEUE_SCALE) + " avg queue\n" +	String(r->drops()) + " drops\n"#if CLICK_STATS >= 1	+ String(r->output(0).npackets()) + " packets\n"#endif	;}StringPI::read_queues(Element *e, void *){    PI *r = (PI *)e;    String s;    for (int i = 0; i < r->_queue_elements.size(); i++)	s += r->_queue_elements[i]->id() + "\n";    return s;}voidPI::add_handlers(){    add_read_handler("drops", pi_read_drops, 0);    add_read_handler("stats", read_stats, 0);    add_read_handler("queues", read_queues, 0);    add_read_handler("min_thresh", read_parameter, (void *)0);    add_write_handler("min_thresh", reconfigure_positional_handler_2, (void *)0);    add_read_handler("max_thresh", read_parameter, (void *)1);    add_write_handler("max_thresh", reconfigure_positional_handler_2, (void *)1);    add_read_handler("max_p", read_parameter, (void *)2);    add_write_handler("max_p", reconfigure_positional_handler_2, (void *)2);    add_read_handler("avg_queue_size", read_parameter, (void *)3);}CLICK_ENDDECLSELEMENT_REQUIRES(int64 false)EXPORT_ELEMENT(PI)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久一日本道色综合| 国产精品18久久久久久久久| 精品91自产拍在线观看一区| 欧美日韩精品一二三区| 91成人免费网站| 91丨porny丨首页| 成a人片国产精品| 成人午夜激情片| 99精品欧美一区二区蜜桃免费| 国产91丝袜在线播放| 国产馆精品极品| 成人av一区二区三区| av中文字幕亚洲| 色综合婷婷久久| 91蜜桃婷婷狠狠久久综合9色| 色婷婷亚洲综合| 欧美日韩高清一区二区不卡| 欧美精品一卡二卡| 日韩一级片在线播放| 精品国产一区二区三区忘忧草 | 欧美高清一级片在线| 欧美高清一级片在线| 久久久久久影视| 国产精品久久久久影院色老大| 最新高清无码专区| 五月天久久比比资源色| 久久成人精品无人区| 成熟亚洲日本毛茸茸凸凹| 91网站最新地址| 欧美调教femdomvk| 久久这里只有精品视频网| 国产精品国产三级国产普通话三级| 中文字幕亚洲在| 日本不卡不码高清免费观看| 国产精品中文字幕欧美| 91同城在线观看| 日韩欧美高清一区| 国产精品福利一区二区三区| 一个色妞综合视频在线观看| 精品一区二区三区在线视频| 国产夫妻精品视频| 5858s免费视频成人| 国产精品欧美一级免费| 亚洲18色成人| 成人精品亚洲人成在线| 91在线国产观看| 91精品久久久久久久99蜜桃| 欧美国产一区在线| 亚洲特级片在线| 狠狠色丁香婷婷综合久久片| 91丝袜国产在线播放| 2020国产精品| 日日摸夜夜添夜夜添亚洲女人| 高清不卡在线观看av| 欧美一区二区免费视频| 一区二区三区高清不卡| 美女一区二区在线观看| 欧美日韩久久一区二区| 综合久久久久久久| 成人高清av在线| 国产午夜精品一区二区三区嫩草| 日韩专区欧美专区| 欧美亚洲综合在线| 最新热久久免费视频| 日本欧美一区二区三区乱码| 岛国一区二区三区| 国产欧美一区二区在线| 日本成人在线网站| 欧美卡1卡2卡| 午夜日韩在线电影| 不卡电影一区二区三区| 91成人在线免费观看| 一区二区在线观看不卡| 成人激情校园春色| 国产精品国产三级国产| 成人av片在线观看| 亚洲精选视频在线| 在线观看91精品国产入口| 一区二区视频免费在线观看| 99精品久久99久久久久| 最新不卡av在线| 91福利小视频| 日日欢夜夜爽一区| 欧美精品自拍偷拍| 久久99国产精品免费| 26uuu色噜噜精品一区二区| 韩国三级中文字幕hd久久精品| 精品久久久久久亚洲综合网| 日韩高清不卡一区| 精品国产一二三区| 国产成人丝袜美腿| 中文字幕日韩精品一区| 欧美这里有精品| 天堂av在线一区| 欧美久久久久免费| 久久99精品久久久久久国产越南| 精品国产乱子伦一区| 国产成人精品影院| 综合网在线视频| 一本色道久久综合精品竹菊| 亚洲午夜在线电影| 欧美一二三在线| 国产电影一区在线| 中文字幕色av一区二区三区| 欧美日韩在线直播| 国产麻豆精品在线| 亚洲妇女屁股眼交7| 欧美xxxxxxxx| 99视频精品在线| 日韩精品电影在线| 精品国产乱码久久久久久浪潮| 国产自产高清不卡| 亚洲综合久久av| 26uuu亚洲综合色欧美| 色欲综合视频天天天| 婷婷激情综合网| 国产亚洲欧美色| 欧美这里有精品| 国产91精品一区二区麻豆网站| 亚洲综合色自拍一区| 国产欧美日韩另类视频免费观看| 91在线观看污| 日韩国产在线一| 中文字幕亚洲一区二区va在线| 在线成人av网站| 91蜜桃免费观看视频| 久久国产麻豆精品| 亚洲电影激情视频网站| 国产网红主播福利一区二区| 538在线一区二区精品国产| 成人免费视频播放| 久久福利视频一区二区| 亚洲综合在线免费观看| 久久综合九色综合欧美亚洲| 色综合久久久久综合体| 成人午夜视频免费看| 极品少妇xxxx精品少妇| 日韩国产精品久久| 亚洲国产美国国产综合一区二区| 中文字幕一区二区在线播放| 国产色91在线| xf在线a精品一区二区视频网站| 欧美日韩一区二区三区高清| 91美女片黄在线观看| 成人国产精品视频| 国产成人鲁色资源国产91色综| 欧美aaaaaa午夜精品| 亚洲在线视频网站| 亚洲欧洲美洲综合色网| 中文字幕亚洲在| 亚洲视频精选在线| 17c精品麻豆一区二区免费| 久久丝袜美腿综合| 26uuu久久天堂性欧美| 91麻豆精品国产91久久久久久| 欧美性大战久久久| 欧美日韩mp4| 欧美日韩情趣电影| 欧美一区二区三区免费视频| 91老司机福利 在线| 91美女片黄在线观看91美女| 色综合一个色综合亚洲| 91蜜桃免费观看视频| 色视频一区二区| 欧美男同性恋视频网站| 欧美一级一级性生活免费录像| 日韩精品中文字幕一区二区三区| 欧美一级免费观看| www欧美成人18+| 久久精品在线观看| 国产精品久久久久久久久免费丝袜| 国产欧美一区二区精品婷婷| 欧美极品另类videosde| 国产欧美一区二区三区沐欲| 中文字幕一区免费在线观看| 国产精品免费aⅴ片在线观看| 综合精品久久久| 亚洲午夜久久久久| 男女男精品视频| 处破女av一区二区| 欧美性xxxxxx少妇| 精品sm捆绑视频| 夜夜嗨av一区二区三区网页| 亚洲午夜在线电影| 国产一区免费电影| 不卡的av网站| 欧美疯狂做受xxxx富婆| 精品成a人在线观看| 久久久久亚洲综合| 亚洲一区二区成人在线观看| 美女网站色91| 99精品桃花视频在线观看| 欧美日本在线播放| 日本一区二区三区高清不卡| 亚洲伊人色欲综合网| 国产成人在线免费观看| 91麻豆精品91久久久久久清纯| 中文字幕亚洲欧美在线不卡| 奇米一区二区三区| 欧美影院一区二区|