📄 watchdog.cc
字号:
#include "watchdog.h"#include "rtp.h"#include "tclcl.h"#include "packet.h"#include "random.h"#include "ip.h"static class WatchdogClass : public TclClass {public: WatchdogClass() : TclClass("Agent/Watchdog") {} TclObject* create(int, const char*const*) { return (new Watchdog_Agent()); }} class_watchdog;Watchdog_Agent::Watchdog_Agent() : Agent(PT_CBR), running_(0), random_(0), seqno_(-1), cbr_timer_(this){ bind_time("interval_", &interval_); bind("packetSize_", &size_); bind("random_", &random_); bind("maxpkts_", &maxpkts_); bind("off_rtp_", &off_rtp_);}void Watchdog_Agent::start(){ running_ = 1; sendpkt(); cbr_timer_.resched(interval_);}void Watchdog_Agent::initimer(){ running_ = 1; cbr_timer_.resched(interval_);}void Watchdog_Agent::stop(){ cbr_timer_.cancel(); running_ = 0;}void Watchdog_Agent::timeout(int){ if (running_) { sendpkt(); double t = interval_; if (random_) /* add some zero-mean white noise */ //t += interval_ * Random::uniform(-0.5, 0.5); t += interval_ ; cbr_timer_.resched(t); }}void Watchdog_Agent::sendpkt(){ if (++seqno_ < maxpkts_) { Packet* p = allocpkt(); hdr_ip* iph = hdr_ip::access(p); hdr_rtp* rh = (hdr_rtp*)p->access(off_rtp_); rh->seqno() = seqno_; hdr_cmn *ch = hdr_cmn::access(p); target_->recv(p); } else { printf("seqno_<maxpkts_\nSet ru\n"); running_ = 0; }}int Watchdog_Agent::command(int argc, const char*const* argv){ if (argc == 2) { if (strcmp(argv[1], "start") == 0) { start(); //printf("command start\n"); return (TCL_OK); } if (strcmp(argv[1], "initimer") == 0) { initimer(); //printf("command start\n"); return (TCL_OK); } if (strcmp(argv[1], "stop") == 0) { stop(); return (TCL_OK); } } return (Agent::command(argc, argv));}void Watchdog_Timer::expire(Event *e) { a_->timeout(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -