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

📄 ip6flowid.hh

📁 Click is a modular router toolkit. To use it you ll need to know how to compile and install the sof
💻 HH
字号:
// -*- c-basic-offset: 2; related-file-name: "../../lib/ip6flowid.cc" -*-#ifndef CLICK_IP6FLOWID_HH#define CLICK_IP6FLOWID_HH#include <click/ip6address.hh>#include <click/hashcode.hh>CLICK_DECLSclass Packet;class IP6FlowID { public:  inline IP6FlowID();  inline IP6FlowID(const IP6Address &, uint16_t, const IP6Address &, uint16_t);  explicit IP6FlowID(Packet *);  typedef const IP6Address &(IP6FlowID::*unspecified_bool_type)() const;  inline operator unspecified_bool_type() const;  const IP6Address &saddr() const	{ return _saddr; }  const IP6Address &daddr() const	{ return _daddr; }  uint16_t sport() const		{ return _sport; }  uint16_t dport() const		{ return _dport; }  void set_saddr(const IP6Address &a)	{ _saddr = a; }  void set_daddr(const IP6Address &a)	{ _daddr = a; }  void set_sport(uint16_t p)		{ _sport = p; }  void set_dport(uint16_t p)		{ _dport = p; }  inline IP6FlowID reverse() const;  inline IP6FlowID rev() const CLICK_DEPRECATED;  inline hashcode_t hashcode() const;  String unparse() const;  operator String() const		{ return unparse(); }  String s() const			{ return unparse(); } protected:  // note: several functions depend on this field order!  IP6Address _saddr;  IP6Address _daddr;  uint16_t _sport;			// network byte order  uint16_t _dport;			// network byte order};inlineIP6FlowID::IP6FlowID()  : _saddr(), _daddr(), _sport(0), _dport(0){}inlineIP6FlowID::IP6FlowID(const IP6Address &saddr, uint16_t sport,		     const IP6Address &daddr, uint16_t dport)  : _saddr(saddr), _daddr(daddr), _sport(sport), _dport(dport){}inlineIP6FlowID::operator unspecified_bool_type() const{  return _saddr || _daddr ? &IP6FlowID::saddr : 0;}inline IP6FlowIDIP6FlowID::reverse() const{  return IP6FlowID(_daddr, _dport, _saddr, _sport);}inline IP6FlowIDIP6FlowID::rev() const{  return reverse();}#define ROT(v, r) ((v)<<(r) | ((unsigned)(v))>>(32-(r)))#if 0inline hashcode_tIP6FlowID::hashcode() const{  return (ROT(_saddr.hashcode(), 13)	  ^ ROT(_daddr.hashcode(), 23) ^ (_sport | (_dport<<16)));}#endifinline hashcode_t IP6FlowID::hashcode() const{  // more complicated hashcode, but causes less collision  uint16_t s = ntohs(sport());  uint16_t d = ntohs(dport());  hashcode_t sx = CLICK_NAME(hashcode)(saddr());  hashcode_t dx = CLICK_NAME(hashcode)(daddr());  return (ROT(sx, s%16)          ^ ROT(dx, 31-d%16))	  ^ ((d << 16) | s);}#undef ROTinline booloperator==(const IP6FlowID &a, const IP6FlowID &b){  return a.dport() == b.dport() && a.sport() == b.sport()    && a.daddr() == b.daddr() && a.saddr() == b.saddr();}CLICK_ENDDECLS#endif

⌨️ 快捷键说明

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