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

📄 simctl.h

📁 BCAST Implementation for NS2
💻 H
字号:
/* The global class implementing * the simulation controller. */class SimCtl {    Tcl_Interp *interp;    AVLtree simnodes;    class SimNode *nodes[NOFILE];    int maxfd;    int server_fd;    int n_ticks;    bool running;    bool frozen;    // Port assignments    int assigned_port;    AVLtree ifmaps;    // Database statistics    PatTree stats;  public:    inline SimCtl(Tcl_Interp *ti);    inline int elapsed_seconds();    inline int elapsed_milliseconds();    void delete_router(class SimNode *node);    bool process_replies();    bool send_data();    void incoming_call();    void simnode_handler_read(int fd);    void store_mapping(uns32 net_or_addr, uns32 rtr);    void send_addrmap(class SimNode *);    void send_addrmap_increment(class IfMap *, class SimNode *);    void restart_node(SimNode *, InAddr, int, uns16);    friend class SimNode;    friend int main(int argc, char *argv[]);    friend int Tcl_AppInit(Tcl_Interp *);    friend void tick(ClientData);    friend int StartRouter(ClientData, Tcl_Interp *, int, char *argv[]);    friend int ToggleRouter(ClientData, Tcl_Interp *interp, int, char *argv[]);    friend int RestartRouter(ClientData,Tcl_Interp *interp, int, char *argv[]);    friend int HitlessRestart(ClientData,Tcl_Interp *interp,int, char *argv[]);    friend int AddMapping(ClientData, Tcl_Interp *interp, int, char *argv[]);    friend int AddNetMember(ClientData, Tcl_Interp *interp, int, char *argv[]);    friend int TimeStop(ClientData, Tcl_Interp *, int, char *argv[]);    friend int TimeResume(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendGeneral(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendArea(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendInterface(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendVL(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendNeighbor(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendAggregate(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendHost(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendExtRt(ClientData, Tcl_Interp *, int, char *argv[]);    friend int StartPing(ClientData, Tcl_Interp *interp, int, char *argv[]);    friend int StopPing(ClientData, Tcl_Interp *interp, int, char *argv[]);    friend int StartTraceroute(ClientData, Tcl_Interp *, int, char *argv[]);    friend int StartMtrace(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendGroup(ClientData, Tcl_Interp *, int, char *argv[]);    friend int LeaveGroup(ClientData, Tcl_Interp *, int, char *argv[]);};inline SimCtl::SimCtl(Tcl_Interp *ti) {    interp = ti;    n_ticks = 0;    running = false;    frozen = false;    memset(nodes, 0, sizeof(nodes));    maxfd = 0;}inline int SimCtl::elapsed_seconds() {    return(n_ticks/TICKS_PER_SECOND);}inline int SimCtl::elapsed_milliseconds() {    return((n_ticks%TICKS_PER_SECOND)*(1000/TICKS_PER_SECOND));}/* Class storing database statistics. */class NodeStats : public PatEntry {    DBStats dbstats;	// Latest database statistics    int refct;  public:    NodeStats(DBStats *);    friend class SimCtl;    friend void tick(ClientData);};/* Class representing each simulated node. */class SimNode : public AVLitem {    int fd;		// Control connection to node    TcpPkt pktdata;	// Pending packetized data    bool got_tick;	// Received tick response (init to true!)    NodeStats *dbstats; // Stored database statistics    uns16 home_port;	// Unicast listening port    bool awaiting_htl_restart;    int color;		// Current node color    enum {		// Available colors        WHITE,		// not synched	GREEN,		// in synch        ORANGE,		// partial synch        RED,		// defunct    };  public:    SimNode(uns32 id, int file);    inline InAddr id();    friend class SimCtl;    friend int main(int argc, char *argv[]);    friend void tick(ClientData);    friend int ToggleRouter(ClientData, Tcl_Interp *interp, int, char *argv[]);    friend int RestartRouter(ClientData,Tcl_Interp *interp, int, char *argv[]);    friend int HitlessRestart(ClientData,Tcl_Interp *interp,int, char *argv[]);    friend int SendGeneral(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendArea(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendInterface(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendVL(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendNeighbor(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendAggregate(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendHost(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendExtRt(ClientData, Tcl_Interp *, int, char *argv[]);    friend int StartPing(ClientData, Tcl_Interp *interp, int, char *argv[]);    friend int StopPing(ClientData, Tcl_Interp *interp, int, char *argv[]);    friend int StartTraceroute(ClientData, Tcl_Interp *, int, char *argv[]);    friend int StartMtrace(ClientData, Tcl_Interp *, int, char *argv[]);    friend int SendGroup(ClientData, Tcl_Interp *, int, char *argv[]);    friend int LeaveGroup(ClientData, Tcl_Interp *, int, char *argv[]);};inline InAddr SimNode::id() {    return(index1());}/* Data structure mapping interface address to * node, from which we can then get the port * to send down to the simulated routers. */class IfMap : public AVLitem {    rtid_t owner;  public:    inline IfMap(InAddr addr, rtid_t id);    friend class SimCtl;};inline IfMap::IfMap(InAddr addr, rtid_t id) : AVLitem(addr, id){    owner = id;}

⌨️ 快捷键说明

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