📄 aggregatelen.cc
字号:
// -*- mode: c++; c-basic-offset: 4 -*-#include <click/config.h>#include "aggregatelen.hh"#include <click/error.hh>#include <click/confparse.hh>#include <clicknet/ip.h>#include <click/packet_anno.hh>AggregateLength::AggregateLength() : Element(1, 1){}AggregateLength::~AggregateLength(){}intAggregateLength::configure(Vector<String> &conf, ErrorHandler *errh){ _ip = false; if (cp_va_parse(conf, this, errh, cpKeywords, "IP", cpBool, "IP length?", &_ip, cpEnd) < 0) return -1; return 0;}Packet *AggregateLength::bad_packet(Packet *p){ if (noutputs() == 2) output(1).push(p); else p->kill(); return 0;}Packet *AggregateLength::handle_packet(Packet *p){ int offset; if (_ip && !p->ip_header()) return bad_packet(p); else if (_ip) offset = p->network_header_offset(); else offset = 0; uint32_t len = p->length() - offset + EXTRA_LENGTH_ANNO(p); SET_AGGREGATE_ANNO(p, len); return p;}voidAggregateLength::push(int, Packet *p){ if (Packet *q = handle_packet(p)) output(0).push(q);}Packet *AggregateLength::pull(int){ Packet *p = input(0).pull(); if (p) p = handle_packet(p); return p;}ELEMENT_REQUIRES(userlevel)EXPORT_ELEMENT(AggregateLength)#include <click/vector.cc>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -