recvmanager.hh

来自「COPE the first practical network coding 」· HH 代码 · 共 88 行

HH
88
字号
#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 + =
减小字号Ctrl + -
显示快捷键?