📄 recvmanager.hh
字号:
#ifndef RECVMANAGER_HH#define RECVMANAGER_HH#include <click/element.hh>#include <click/bighashmap.hh>#include <click/packet.hh>#include <click/timestamp.hh>#include <click/vector.hh>#include <map>#include <ext/slist>#include "aliastable.hh"class RecvManager : public Element {public: RecvManager(); ~RecvManager(); const char *class_name() const { return "RecvManager"; } int configure(Vector<String> &, ErrorHandler *); void *cast(const char *n); void add_handlers(); static int enable_acks(const String &arg, Element *e, void *, ErrorHandler *errh); void set_enable_acks(bool ea) {_enable_acks = ea;} bool register_packet_to_ack(Packet *, int); WritablePacket* get_acks(bool, int); uint32_t get_next_ack_time();private: class AckState { public: uint16_t _seq; bool _acked; uint32_t _timeout; AckState() : _seq(0), _acked(0), _timeout(0) {}; AckState(uint16_t seq, bool acked, uint32_t to) : _seq(seq), _acked(acked), _timeout(to) {} AckState(uint16_t seq, uint32_t now) : _seq(seq), _acked(0), _timeout(now) {} }; class NbrState { public: uint8_t _alias; uint32_t _nacks; NbrState() : _alias(0), _nacks(0) {} NbrState(uint8_t alias, int nacks) : _alias(alias), _nacks(nacks) {} NbrState(uint8_t alias) : _alias(alias), _nacks(1) {} }; class AckUnit { public: uint8_t _alias; uint16_t _seq; uint8_t _bmp; AckUnit(uint8_t alias, uint16_t seq, uint8_t bmp) : _alias(alias), _seq(seq), _bmp(bmp) {} }; typedef Vector<AckUnit> AckVector; typedef __gnu_cxx::slist<AckState *> AckStateList; typedef __gnu_cxx::slist<NbrState *> NbrStateList; typedef HashMap <uint8_t, AckStateList *> PendingAcks; // acks per neighbor typedef std::map<int32_t, NbrStateList *> TimeoutList; // timeout of acks typedef HashMap<uint8_t, uint8_t> NbrList; PendingAcks _pending; TimeoutList _timedout; AliasTable *_aliases; uint32_t _ack_timeout; uint32_t _max_acks; bool _enable_acks; AckVector * get_acks_timeout(uint32_t, NbrList &); WritablePacket *make_packet(AckVector *);};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -