// -*- c-basic-offset: 4 -*- #ifndef CLICK_COMPAREPACKETS_HH #define CLICK_COMPAREPACKETS_HH #include #include CLICK_DECLS /* =c ComparePackets([I TIMESTAMP]) =s test compare packets in pairs =d ComparePackets compares packets pulled from the first input with packets pulled from the second input. Packets are considered different if they have different length, data, header offsets, or timestamp annotations. Keyword arguments are: =over 8 =item TIMESTAMP Boolean. If true, then ComparePackets will check packet timestamp annotations. Default is true. =back =h diffs read-only Returns the number of different packet pairs seen. =h diff_details read-only Returns a text file showing how many different packet pairs ComparePackets has seen, subdivided by type of difference. =h all_same read-only Returns "true" iff all packet pairs seen so far have been identical. =a PacketTest */ class ComparePackets : public Element { public: ComparePackets(); ~ComparePackets(); const char *class_name() const { return "ComparePackets"; } const char *port_count() const { return "2/2"; } const char *processing() const { return PULL; } int configure(Vector &, ErrorHandler *); int initialize(ErrorHandler *); void cleanup(CleanupStage); void add_handlers(); Packet *pull(int); private: Packet *_p[2]; bool _available[2]; NotifierSignal _signal[2]; bool _timestamp : 1; uint32_t _ndiff; enum { D_LEN, D_DATA, D_TIMESTAMP, D_NETOFF, D_NETLEN, D_NETHDR, D_MORE_PACKETS_0, D_MORE_PACKETS_1, D_LAST }; uint32_t _diff_details[D_LAST]; void check(Packet *, Packet *); static String read_handler(Element *, void *); }; CLICK_ENDDECLS #endif