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

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

?? pi.cc

?? Click is a modular router toolkit. To use it you ll need to know how to compile and install the sof
?? 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()    : _timer(this){}PI::~PI(){}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_kparse(conf, this, errh,			 "W", cpkP+cpkM, cpDouble, &w,			 "A", cpkP+cpkM, cpDouble, &a,			 "B", cpkP+cpkM, cpDouble, &b,			 "TARGET", cpkP+cpkM, cpUnsigned, &target_q,			 "QUEUES", cpkP, cpArgument, &queues_string,			 "QREF", 0, cpUnsigned, &target_q,			 "STABILITY", 0, cpUnsigned, &stability,			 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_kparse(conf, this, errh,			 "W", cpkP+cpkM, cpDouble, &w,			 "A", cpkP+cpkM, cpDouble, &a,			 "B", cpkP+cpkM, cpDouble, &b,			 "TARGET", cpkP+cpkM, cpUnsigned, &target_q,			 "QUEUES", cpkP, cpArgument, &queues_string,			 "QREF", 0, cpUnsigned, &target_q,			 "STABILITY", 0, cpUnsigned, &stability,			 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]->name().c_str());    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_msec(_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;}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;    }}voidPI::run_timer(Timer *){	_p = _a*(queue_size() - _target_q) - _b*(_old_q - _target_q) + _p;    _timer.reschedule_after_msec(_w*1000);}boolPI::should_drop(){	double _random_value = click_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());}StringPI::read_parameter(Element *f, void *vparam){    PI *pi = (PI *)f;    StringAccum sa;    switch ((int)vparam) {      case 3:			// _target_q	return String(pi->_target_q);      case 4:			// stats	sa << red->queue_size() << " current queue\n"	   << red->_size.unparse() << " avg queue\n"	   << red->drops() << " drops\n"#if CLICK_STATS >= 1	   << red->output(0).npackets() << " packets\n"#endif	    ;	return sa.take_string();      case 5:			// queues	for (int i = 0; i < red->_queue_elements.size(); i++)	    sa << red->_queue_elements[i]->name() + "\n";	return sa.take_string();      default:	sa << _a << ", " << _b << ", " << _w << ", " << _target_q	   << ", QUEUES";	for (int i = 0; i < _queue_elements.size(); i++)	    sa << ' ' << _queue_elements[i]->name();	sa << ", STABILITY " << _size.stability_shift();	return sa.take_string();    }}voidPI::add_handlers(){    add_read_handler("drops", pi_read_drops, 0);    set_handler("w", Handler::OP_READ | Handler::OP_WRITE, configuration_keyword_handler, "W", (void *) (uintptr_t) 1);    set_handler("a", Handler::OP_READ | Handler::OP_WRITE, configuration_keyword_handler, "A", (void *) (uintptr_t) 2);    set_handler("b", Handler::OP_READ | Handler::OP_WRITE, configuration_keyword_handler, "B", (void *) (uintptr_t) 3);    add_read_handler("avg_queue_size", read_parameter, 3);    add_read_handler("stats", read_parameter, 4);    add_read_handler("queues", read_parameter, 5);    add_read_handler("config", read_parameter, 6);    set_handler_flags("config", 0, Handler::CALM);}CLICK_ENDDECLSELEMENT_REQUIRES(int64 false)EXPORT_ELEMENT(PI)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合九色综合97婷婷| 欧美激情中文字幕| 国产成a人亚洲精| 亚洲一区二区欧美日韩| 日韩欧美成人一区| 91免费版pro下载短视频| 日韩电影在线免费观看| 国产精品美女一区二区在线观看| 88在线观看91蜜桃国自产| 国产·精品毛片| 日韩av在线免费观看不卡| 国产精品美女久久久久高潮| 日韩欧美国产一区二区三区| 色综合色综合色综合色综合色综合| 美日韩黄色大片| 一区二区三区四区不卡视频| 久久久综合九色合综国产精品| 欧美猛男男办公室激情| 不卡av在线免费观看| 激情综合五月天| 日韩激情视频网站| 亚洲码国产岛国毛片在线| 久久久久久电影| 欧美mv日韩mv国产| 色欧美88888久久久久久影院| 国产成人在线影院| 精品一区二区三区在线播放| 天堂在线一区二区| 一区二区三区免费网站| 中文成人av在线| 欧美经典一区二区| xnxx国产精品| 久久综合网色—综合色88| 欧美一区二区三区视频免费播放| 欧美在线观看18| 色偷偷成人一区二区三区91 | 久久久www免费人成精品| 欧美精品vⅰdeose4hd| 欧美日韩一区二区欧美激情| 日本乱码高清不卡字幕| 91国偷自产一区二区使用方法| 99re热视频精品| 91丨porny丨国产入口| 99视频精品免费视频| 国产**成人网毛片九色 | 欧美色图免费看| 在线视频一区二区三| 91色porny| 在线观看欧美精品| 欧美怡红院视频| 91精彩视频在线观看| 91搞黄在线观看| 欧美浪妇xxxx高跟鞋交| 91精品国产欧美一区二区18| 日韩一区二区三区电影在线观看 | 国产精品久久久爽爽爽麻豆色哟哟| 久久久精品tv| 亚洲丝袜另类动漫二区| 一区二区三区小说| 五月婷婷欧美视频| 麻豆一区二区三| 国产成人福利片| a亚洲天堂av| 欧美日韩精品一区二区在线播放| 欧美一级精品大片| 久久久久久亚洲综合| 中文字幕一区二区三区色视频| 亚洲欧美另类久久久精品2019| 亚洲国产va精品久久久不卡综合| 日本特黄久久久高潮| 国产河南妇女毛片精品久久久| jlzzjlzz欧美大全| 欧美日韩国产欧美日美国产精品| 日韩精品一区二区在线观看| 中文字幕欧美三区| 亚洲免费在线电影| 免费在线成人网| 懂色av中文一区二区三区| 在线一区二区三区四区五区 | 中文字幕在线视频一区| 亚洲综合一二三区| 久久成人免费网| 成人晚上爱看视频| 欧美日韩成人在线| 久久视频一区二区| 一区二区在线电影| 久久精品国产成人一区二区三区 | 久久在线观看免费| 亚洲免费资源在线播放| 美国十次综合导航| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 精品国产在天天线2019| 国产精品久久99| 日韩和的一区二区| 不卡区在线中文字幕| 7777精品伊人久久久大香线蕉| 国产视频亚洲色图| 亚洲国产成人精品视频| 国产成a人亚洲| 欧美一级黄色片| 一区二区三区四区不卡在线| 久草中文综合在线| 欧美天天综合网| 亚洲国产精品高清| 久久福利资源站| 欧美精品在线观看播放| 国产欧美一区二区精品仙草咪 | 国产成人av一区二区| 欧美日韩aaaaaa| 亚洲日本丝袜连裤袜办公室| 国产真实乱对白精彩久久| 色呦呦国产精品| 国产精品污网站| 美女国产一区二区| 欧美精品丝袜久久久中文字幕| 1000部国产精品成人观看| 国产乱子轮精品视频| 91精品欧美综合在线观看最新 | 亚洲婷婷国产精品电影人久久| 久久国产日韩欧美精品| 精品视频免费在线| 亚洲美女电影在线| 不卡电影一区二区三区| 国产目拍亚洲精品99久久精品| 蜜桃av一区二区| 日韩一级在线观看| 日韩国产成人精品| 欧美乱妇20p| 午夜激情一区二区| 欧美三级电影在线看| 一区二区三区中文在线观看| 91丨porny丨户外露出| 亚洲视频精选在线| 91免费观看在线| 亚洲色图视频网| 色偷偷久久人人79超碰人人澡| 亚洲欧美成人一区二区三区| eeuss鲁片一区二区三区| 国产精品电影一区二区三区| jizzjizzjizz欧美| 国产精品国产三级国产aⅴ入口| 岛国精品在线播放| 国产精品嫩草影院av蜜臀| 成人黄色电影在线| 日本一区二区三区四区| 国产成人一级电影| 国产欧美日韩精品一区| 国产**成人网毛片九色| 国产精品久久免费看| 91欧美一区二区| 亚洲最新在线观看| 欧美区一区二区三区| 蜜桃一区二区三区在线| 精品久久人人做人人爰| 国产sm精品调教视频网站| 国产精品网站一区| 99久久国产综合精品麻豆| 亚洲欧美日韩人成在线播放| 欧美伊人久久久久久久久影院| 日韩精品视频网| 久久久一区二区| 99久久精品国产观看| 亚洲国产欧美日韩另类综合| 7777精品伊人久久久大香线蕉最新版 | 欧美日韩一本到| 免费久久99精品国产| 国产日韩欧美一区二区三区乱码 | 国产综合久久久久影院| 国产日韩亚洲欧美综合| 91在线精品一区二区三区| 亚洲成人免费av| 久久亚洲综合色一区二区三区 | 欧美日韩国产在线观看| 麻豆精品一区二区| 日本一区二区三区免费乱视频| 色噜噜夜夜夜综合网| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品欧美一级免费| 欧美色倩网站大全免费| 激情欧美一区二区三区在线观看| 国产精品网站导航| 欧美日韩中文字幕一区二区| 精品一区二区三区在线播放视频 | 国产酒店精品激情| 亚洲精品欧美激情| 日韩欧美一级片| av一区二区三区四区| 国产伦精品一区二区三区免费迷| 日韩一区中文字幕| 日韩欧美亚洲国产另类| 91在线观看污| 国产在线一区观看| 亚洲国产综合视频在线观看| 久久久99久久| 在线综合视频播放| 91视频在线观看免费| 久久国产福利国产秒拍| 亚洲一二三四区| 国产精品久久一卡二卡| 日韩一区二区三区四区|