Page MenuHomec4science

acnedesaggregate.cc
No OneTemporary

File Metadata

Created
Sat, Jul 5, 19:11

acnedesaggregate.cc

#include <click/config.h>
#include "acnedesaggregate.hh"
#define DEBUG_CHATTER(arg, ...) do { if (_debug) { click_chatter(arg, ## __VA_ARGS__);} } while (0)
#define VERB_DEBUG_CHATTER(arg, ...) do { if (_verb_debug) { click_chatter(arg, ## __VA_ARGS__);} } while (0)
CLICK_DECLS
AcneDesaggregate::AcneDesaggregate()
{
}
AcneDesaggregate::~AcneDesaggregate()
{
}
int
AcneDesaggregate::configure(Vector<String> &conf, ErrorHandler *errh) {
_debug = false;
if(Args(this, errh).bind(conf)
.read("DEBUG", _debug)
.read("ACTIVE", _active)
.complete() < 0)
return -1;
return 0;
}
void
AcneDesaggregate::push(int, Packet *p) {
output(0).push(p);
return;
/*
acne_header *acne_hdr = (acne_header *) (p->data());
if (!_active || p->length()<=sizeof(acne_header) || acne_hdr->_type == REGULAR_TRAFFIC || acne_hdr->_type == ACK_RTE_PRICES || acne_hdr->_seq_aggreg == 0) {
output(0).push(p);
return;
}
// only control is aggregated
Timestamp now;
if(_debug) {
now.assign_now();
DEBUG_CHATTER("[AcneDesaggregate %s] Received new packet (with %d components, length %d) to desaggregate.",
now.unparse().c_str(), acne_hdr->_seq_aggreg, p->length());
}
if(int_divide(p->length(),14) < acne_hdr->_seq_aggreg) {
now.assign_now();
click_chatter("[AcneDesaggregate %s] Ill-formed packet of type %d (length %d, seq %d).", now.unparse().c_str(),
acne_hdr->_type, p->length(), acne_hdr->_seq_aggreg);
output(0).push(p);
return;
}
uint32_t shift = 0;
for (int i=acne_hdr->_seq_aggreg;i>=0;i--) {
acne_hdr = (acne_header *) (p->data() + shift + 14);
if(acne_hdr->_length <= 14) {
now.assign_now();
click_chatter("[AcneDesaggregate %s] Error: packet is too short (length %d)", now.unparse().c_str(), acne_hdr->_length);
}
else {
WritablePacket *new_packet = Packet::make(p->data() + shift, acne_hdr->_length);
shift += acne_hdr->_length;
output(0).push(new_packet);
}
}
p->kill();
*/
}
int
AcneDesaggregate::active_handler(const String &s, Element *e, void *, ErrorHandler *errh) {
AcneDesaggregate *elmt = (AcneDesaggregate *)e;
int arg;
if(!cp_integer(s, &arg))
return errh->error("Active must be 0 or 1");
if (!(arg == 0 || arg == 1))
return errh->error("Active must be 0 or 1");
elmt->set_active(arg==1);
return 0;
}
void AcneDesaggregate::add_handlers() {
add_write_handler("active", active_handler, 0);
}
EXPORT_ELEMENT(AcneDesaggregate)
CLICK_ENDDECLS

Event Timeline