#ifndef CLICK_CHECKICMPHEADER_HH
#define CLICK_CHECKICMPHEADER_HH
#include <click/element.hh>
#include <click/atomic.hh>
CLICK_DECLS
/*
=c
CheckICMPHeader([I<KEYWORDS>])
=s icmp
checks ICMP header on ICMP packets
=d
Expects ICMP packets as input. Checks that the packet's length is sensible
and that its checksum field is valid. Pushes invalid packets out on output
1, unless output 1 was unused; if so, drops invalid packets.
Prints a message to the console the first time it encounters an incorrect IP
packet (but see VERBOSE below).
Keyword arguments are:
=over 5
=item VERBOSE
Boolean. If it is true, then a message will be printed for every erroneous
packet, rather than just the first. False by default.
=item DETAILS
Boolean. If it is true, then CheckICMPHeader will maintain detailed counts of
how many packets were dropped for each possible reason, accessible through the
C<drop_details> handler. False by default.
=back
=h drops read-only
Returns the number of incorrect packets CheckICMPHeader has seen.
=h drop_details read-only
Returns a text file showing how many erroneous packets CheckICMPHeader has seen,
subdivided by error. Only available if the DETAILS keyword argument was true.
=a CheckIPHeader, CheckTCPHeader, CheckUDPHeader, MarkIPHeader */
class CheckICMPHeader : public Element { public:
CheckICMPHeader();
~CheckICMPHeader();
const char *class_name() const { return "CheckICMPHeader"; }
const char *port_count() const { return "1/1-2"; }
const char *processing() const { return "a/ah"; }
int configure(Vector<String> &, ErrorHandler *);
void add_handlers();
Packet *simple_action(Packet *);
private:
bool _verbose : 1;
atomic_uint32_t _drops;
atomic_uint32_t *_reason_drops;
enum Reason {
NOT_ICMP,
BAD_LENGTH,
BAD_CHECKSUM,
NREASONS
};
static const char *reason_texts[NREASONS];
Packet *drop(Reason, Packet *);
static String read_handler(Element *, void *);
};
CLICK_ENDDECLS
#endif
syntax highlighted by Code2HTML, v. 0.9.1