spantree.hh

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

HH
75
字号
#ifndef CLICK_SPANTREE_HH#define CLICK_SPANTREE_HH#include <click/element.hh>#include "bridgemessage.hh"#include <click/timer.hh>CLICK_DECLSclass Suppressor;class EtherSwitch;class EtherSpanTree : public Element {  public:  EtherSpanTree();  ~EtherSpanTree();    const char *class_name() const		{ return "EtherSpanTree"; }  const char *processing() const		{ return "h/h"; }    void notify_ninputs(int);    int configure(Vector<String> &, ErrorHandler *);  int initialize(ErrorHandler *);  static String read_msgs(Element* f, void *);  void add_handlers();      void periodic();    bool expire();  void find_best();  void find_tree();		// Returns true iff there is a change    void push(int port, Packet* p);  Packet* generate_packet(int output);  private:  Suppressor* _input_sup;  Suppressor* _output_sup;  EtherSwitch* _switch;  Timestamp* _topology_change;	// If set, tc should be sent with messages.  bool _send_tc_msg;		// If true, tcm should be sent to root port.    uint64_t _bridge_id;		// Should be 48 bits    uint16_t _bridge_priority;	// High == unlikely to become the root node  uint16_t _long_cache_timeout; // in seconds    uint8_t _addr[6];    BridgeMessage _best;    // Do not change the order of the PortState enum tags.  (see set_state())  enum PortState {BLOCK, LISTEN, LEARN, FORWARD};  struct PortInfo {    PortState state;    Timestamp since;		// When the port entered the state    bool needs_tca;    BridgeMessage msg;    PortInfo() { state = BLOCK; needs_tca = false; }  };    bool set_state(int i, PortState state); // Only expects BLOCK or FORWARD  Vector<PortInfo> _port;  Timer _hello_timer;  static void hello_hook(Timer *, void *);};CLICK_ENDDECLS#endif

⌨️ 快捷键说明

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