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

📄 packetstore.cc

📁 Click is a modular router toolkit. To use it you ll need to know how to compile and install the sof
💻 CC
字号:
#include <click/config.h>#include <click/confparse.hh>#include <click/error.hh>#include <click/glue.hh>#include <click/packet_anno.hh>#include <click/straccum.hh>#include <clicknet/ether.h>#include <clicknet/wifi.h>#include <click/standard/scheduleinfo.hh>#include "packetstore.hh"#include <click/router.hh>CLICK_DECLSPacketStore::PacketStore() : _dirty(0), _task(this){}PacketStore::~PacketStore(){	while (_packets.size()) {		_packets.pop_front();	}}void *PacketStore::cast(const char *n){    if (strcmp(n, "PacketStore") == 0)	    return (PacketStore *)this;    else	return 0;}intPacketStore::configure(Vector<String> &, ErrorHandler *){	return 0;}intPacketStore::initialize(ErrorHandler *errh){	ScheduleInfo::initialize_task(this, &_task, errh);	return 0;}Packet *PacketStore::simple_action(Packet *p_in){	store s;	s.timestamp = p_in->timestamp_anno();	s.len = MIN(p_in->length(), 80);	memcpy(s.data, p_in->data(), s.len);	_packets.push_back(s);	return p_in;}boolPacketStore::run_task(Task *){	return false;}enum {H_RESET, H_LEN, H_POP, H_DIRTY};static Stringread_param(Element *e, void *thunk){	PacketStore *td = (PacketStore *)e;	switch ((uintptr_t) thunk) {	case H_LEN: return String(td->_packets.size());	case H_DIRTY: return String(td->_dirty);	case H_POP: {		if( !td->_packets.size()) {			return String();		}		PacketStore::store s = td->_packets[0];		StringAccum sap(s.len*2 + 20);		sap << s.timestamp << " | ";		char *buf = sap.data() + sap.length();		for (int x = 0; x < s.len; x++) {			sprintf(buf + 2*x, "%02x", s.data[x] & 0xff);		}		sap.adjust_length(s.len *2);		sap << "\n";		td->_packets.pop_front();		return sap.take_string();	}	default:		return String();	}}static intwrite_param(const String &in_s, Element *e, void *vparam,	    ErrorHandler *errh){	PacketStore *td = (PacketStore *)e;	String s = cp_uncomment(in_s);	switch((intptr_t)vparam) {	case H_RESET: {		bool active;		if (!cp_bool(s, &active))			return errh->error("reset parameter must be boolean");		if (active) {			while (td->_packets.size()) {				td->_packets.pop_front();			}		}	}	}	return 0;}voidPacketStore::add_handlers(){	add_read_handler("length", read_param, (void *) H_LEN);	add_read_handler("pop", read_param, (void *) H_POP, Handler::RAW);	add_read_handler("dirty", read_param, (void *) H_DIRTY);	add_write_handler("reset", write_param, (void *) H_RESET);	add_task_handlers(&_task);}CLICK_ENDDECLSEXPORT_ELEMENT(PacketStore)

⌨️ 快捷键说明

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