⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ackretrysender2.hh

📁 COPE the first practical network coding scheme which is developped on click
💻 HH
字号:
#ifndef CLICK_ACKRETRYSENDER2_HH#define CLICK_ACKRETRYSENDER2_HH#include <click/element.hh>#include <click/etheraddress.hh>#include <click/packet.hh>#include <click/task.hh>#include <click/timer.hh>#include <click/ipaddress.hh>#include <click/dequeue.hh>CLICK_DECLS/* * =c * ACKRetrySender2(I<KEYWORDS>) * * =s Grid * Resend packets until a positive acknowledgement is received. * * =d * * This element (and ACKResponder2) is essentially the same as * ACKRetrySender, except it encapsulates the data packets with a * mini-header so that link-layer broadcast packets can be used to * avoid link-layer retransmissions (as in 802.11). * * Input 0 should be packets with a destination IP address annotation * set.  Input 1 should be acknowledgements from an ACKResponder2. * When a packet is pulled in on input 0, it is encapsulated with a * Retry Header, pushed on output 0, and cached until a positive * acknowledgement (ACK) is received.  If no ACK is received before * the resend timer expires, the packet is resent.  If the packet has * been resent too many times, it is pushed to output 1.  If output 1 * is not connected, it is dropped. * * Output 0 should pass through an EtherEncap which puts encapsulated * the packet with this node's source ether address, the broadcast * ether dest, and the ACKRetry data ethertype (typically 0x7ffb). *  * Keyword arguments are: * * =over 8 * * =item IP * * This node's IP address.  Required argument. * * =item MAX_TRIES * * Unsigned integer, > 0.  Send the packet up to this many times * before giving up.  Default is 16.  This includes the initial * transmission. * * =item TIMEOUT * * Unsigned integer, > 0.  Milliseconds.  Wait this long before * resending the packet.  Default is 10. * * =item HISTORY_SZ * * Unsigned integer.  Number of most recent packets for which to * remember retry data.  Defaults to 500. * * =item VERBOSE * * Boolean.  Be noisy.  True by default. * * =back * * =h summary read-only * Print summary of packet retry statistics * * =h history read-only * Print packet retry history. * * =h clear write-only * Clear out packet retry history. * * =h reset write-only * Reset packet retry statistics. * =a  * ACKResponder2, ACKRetrySender, ACKResponder, EtherEncap *//* packet formats:Data/ACK packet formats:(pushed by later EtherEncap) ether dest [6](pushed by later EtherEncap) ether src  [6](pushed by later EtherEncap) ether type [2] (0x7ffb for data, 0x7ffc for ACK)src IP dst IP <encapsulated data packet> (not for ACK)*/class ACKRetrySender2 : public Element {public:  ACKRetrySender2();  ~ACKRetrySender2();  const char *class_name() const { return "ACKRetrySender2"; }  const char *processing() const { return "la/hh"; }  const char *flow_code()  const { return "xy/xx"; }  int configure(Vector<String> &, ErrorHandler *);  int initialize(ErrorHandler *errh);  void notify_ninputs(int n)  { set_ninputs(n); }  void notify_noutputs(int n) { set_noutputs(n); }  bool run_task();  void run_timer();  void push(int, Packet *);  void add_handlers();private:  unsigned int _timeout; // msecs  unsigned int _max_tries; // max number of times to tx before quitting  unsigned int _num_tries; // number of times current packet has been sent  unsigned int _history_length;  struct tx_result_t {    tx_result_t(const Timestamp &t, unsigned n, bool s)       : pkt_time(t), num_tx(n), success(s) { }    Timestamp pkt_time;    unsigned num_tx;    bool success;  };  typedef DEQueue<tx_result_t> HistQ;  HistQ _history;  IPAddress _ip;  Packet *_waiting_packet;  bool _verbose;  Timer _timer;  Task _task;  unsigned sum_tx;  unsigned num_pkts;  unsigned num_fail;  unsigned max_txc, min_txc;  void check();  void add_stat(const Timestamp &t, unsigned num_tx, bool succ);  static String print_history(Element *e, void *);  static String print_summary(Element *e, void *);  static int clear_history(const String &, Element *, void *, ErrorHandler *);  static int reset_stats(const String &, Element *, void *, ErrorHandler *);};CLICK_ENDDECLS#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -