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

📄 ipflowid.hh

📁 COPE the first practical network coding scheme which is developped on click
💻 HH
字号:
// -*- c-basic-offset: 2; related-file-name: "../../lib/ipflowid.cc" -*-#ifndef CLICK_IPFLOWID_HH#define CLICK_IPFLOWID_HH#include <click/ipaddress.hh>CLICK_DECLSclass Packet;class IPFlowID { public:  IPFlowID();  IPFlowID(IPAddress, uint16_t, IPAddress, uint16_t);  explicit IPFlowID(const Packet *);	// reads ip_header and udp_header  explicit IPFlowID(const click_ip *);	// also reads adjacent TCP/UDP header  operator bool() const;  IPAddress saddr() const		{ return _saddr; }  IPAddress daddr() const		{ return _daddr; }  uint16_t sport() const		{ return _sport; }  uint16_t dport() const		{ return _dport; }  void set_saddr(IPAddress a)		{ _saddr = a; }  void set_daddr(IPAddress a)		{ _daddr = a; }  void set_sport(uint16_t p)		{ _sport = p; }	// network order  void set_dport(uint16_t p)		{ _dport = p; }	// network order    IPFlowID rev() const;  String unparse() const;  operator String() const		{ return unparse(); }  String s() const			{ return unparse(); } protected:    // note: several functions depend on this field order!  IPAddress _saddr;  IPAddress _daddr;  uint16_t _sport;			// network byte order  uint16_t _dport;			// network byte order};inlineIPFlowID::IPFlowID()  : _saddr(), _daddr(), _sport(0), _dport(0){}inlineIPFlowID::IPFlowID(IPAddress saddr, uint16_t sport,		   IPAddress daddr, uint16_t dport)  : _saddr(saddr), _daddr(daddr), _sport(sport), _dport(dport){}inlineIPFlowID::operator bool() const{  return _saddr || _daddr;}inline IPFlowIDIPFlowID::rev() const{  return IPFlowID(_daddr, _dport, _saddr, _sport);}#define ROT(v, r) ((v)<<(r) | ((unsigned)(v))>>(32-(r)))inline unsignedhashcode(const IPFlowID &f){   // more complicated hashcode, but causes less collision  uint16_t s = ntohs(f.sport());  uint16_t d = ntohs(f.dport());  return (ROT(hashcode(f.saddr()), s%16)          ^ ROT(hashcode(f.daddr()), 31-d%16))	  ^ ((d << 16) | s);}#undef ROTinline booloperator==(const IPFlowID &a, const IPFlowID &b){  return a.dport() == b.dport() && a.sport() == b.sport()    && a.daddr() == b.daddr() && a.saddr() == b.saddr();}inline booloperator!=(const IPFlowID &a, const IPFlowID &b){  return a.dport() != b.dport() || a.sport() != b.sport()    || a.daddr() != b.daddr() || a.saddr() != b.saddr();}StringAccum &operator<<(StringAccum &, const IPFlowID &);CLICK_ENDDECLS#endif

⌨️ 快捷键说明

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