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

📄 webgen.hh

📁 COPE the first practical network coding scheme which is developped on click
💻 HH
字号:
#ifndef CLICK_WEBGEN_HH#define CLICK_WEBGEN_HH#include <click/element.hh>#include <click/glue.hh>#include <click/timer.hh>#include <click/ipaddress.hh>CLICK_DECLS/* * =c * WebGen(PREFIX/LEN, DST) * =d * Ask for a random web pages over and over with repeated HTTP * connections. Generate them with random source IP addresses * starting with PREFIX. * =e * kt :: KernelTap(11.11.0.0/16); * kt -> Strip(14) *    -> WebGen(11.11.0.0/16, 10.0.0.1) *    -> EtherEncap(0x0800, 1:1:1:1:1:1, 2:2:2:2:2:2) *    -> kt; */class WebGen : public Element { public:    WebGen();  ~WebGen();    const char *class_name() const		{ return "WebGen"; }  const char *processing() const		{ return PUSH; }  int initialize(ErrorHandler *);  void cleanup(CleanupStage);  int configure(Vector<String> &conf, ErrorHandler *errh);  Packet *simple_action(Packet *);  void run_timer();private:  Timer _timer;  IPAddress _src_prefix;  IPAddress _mask;  IPAddress _dst;  atomic_uint32_t _id;  // TCP Control Block  class CB {  public:    CB();    IPAddress _src;		// Our IP address.    unsigned short _sport;	// network byte order.    unsigned short _dport;    unsigned _iss;    unsigned _snd_una;    unsigned _snd_nxt;    unsigned _irs;    unsigned _rcv_nxt;    unsigned char	_connected:1,		// Got SYN+ACK	_got_fin:1,		// Got FIN	_sent_fin:1,		// Sent FIN	_closed:1,		// Got ACK for our FIN	_do_send:1,	_spare_bits:3;    char _resends;    struct timeval last_send;    char sndbuf[64];    int sndlen;    void reset (IPAddress src);    void remove_from_list ();    void add_to_list (CB **phead);    void rexmit_unlink ();    void rexmit_update (CB *tail);    CB *next;    CB **pprev;    CB *rexmit_next;    CB *rexmit_prev;  };  static const int htbits = 10;  static const int htsize = 1 << htbits;  static const int htmask = htsize - 1;  CB *cbhash[htsize];  CB *cbfree;  CB *rexmit_head, *rexmit_tail;  // Retransmission  static const int resend_dt = 1000000;	// rexmit after 1 sec  static const int resend_max = 5;	// rexmit at most 5 times  // Scheduling new connections  int start_interval;			// ms between connections  struct timeval start_tv;  // Performance measurement  static const int perf_dt = 5000000;  struct timeval perf_tv;  struct {    int initiated;    int completed;    int reset;    int timeout;  } perfcnt;  void do_perf_stats ();  void recycle(CB *);  CB *find_cb(unsigned src, unsigned short sport, unsigned short dport);  IPAddress pick_src();  int connhash(unsigned src, unsigned short sport);  WritablePacket *fixup_packet (Packet *p, int plen);  void tcp_input(Packet *);  void tcp_send(CB *, Packet *);  void tcp_output(WritablePacket *p,	IPAddress src, unsigned short sport,	IPAddress dst, unsigned short dport,	int seq, int ack, char tcpflags,	char *payload, int paylen);};CLICK_ENDDECLS#endif

⌨️ 快捷键说明

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