2017-07-26 25 views
1

当等待定时器过期时,我需要重新广播数据包,我遵循在How to add timer in aodv using ns2定义的步骤,我定义了代理和定时器类;交叉引用;代理构造函数中定时器对象的初始化;并最终到期(事件*)类B_suppression。当执行到达 agent->rebroadcast((Packet*)p, 0);它将终止并显示以下消息'无效的SDVCAST数据包类型'。从事件到包造成问题?当定时器到期时ns2重播数据包

class SDVCAST; 

class B_suppression_Timer : public TimerHandler { 
    friend class SDVCAST; 
public: 
    B_suppression_Timer (SDVCAST *s){agent = s;}; 
    virtual void expire (Event *p); 
private: 
    SDVCAST *agent; 
}; 

class SDVCAST: public Agent 
{ //define object from timer 
    B_suppression_Timer bstimer; 
} 
//initialized timer in Constructor of the SDVCAST 
SDVCAST::SDVCAST(nsaddr_t id) : Agent(PT_SDVCAST), 
       bstimer(this){ 
} 

// start timer 
void 
SDVCAST::weightepersistence(Packet *p, double delay){ 
    bstimer.resched(delay); 
} 


// define expire of bstimer 
void 
B_suppression_Timer::expire(Event *p){ 
    agent->rebroadcast((Packet*)p, 0); 
} 

回答

0

添加新的数据包类型PT_SDVCASTcommon/packet.h

static const packet_t PT_ SDVCAST = 73; 

     // insert new packet types here 
static packet_t  PT_NTYPE = 74; // This MUST be the LAST one 
. 
. 

       type == PT_SDVCAST) 

. 
.   
       name_[PT_SDVCAST]= "SDVCAST" 

也许添加SDVCASTtcl/lib/ns-packet.tclns-default.tclns-agent.tcl


编辑:答案为 “段错误”

“NS2的分组数据结构的实现不会计算出 的实际情况。 ns2模拟中的数据包保留了NS2中实现的任何协议的所有数据包标头 。例如,DSR路由 数据包可能会保留DSDV,AODV或甚至PING应用程序标头。对于 这个原因,直到今天,在ns2模拟中使用的数据包将具有大约40〜64KB的 报头大小。并且NO数据包将被删除以释放它保存的内存直到模拟结束。因此,对于一个典型的 模拟,在ns2中有100个节点在交换1M数据包( 当然,您可以通过 Packet :: free(Packet *)重新使用已释放的数据包,请检查 文件common/packet {.h,.cc}),你可以保存10%,100K数据包, ,你可以使用至少100K * 64KB - > 6.4GB的内存,这肯定会使你的电脑崩溃是一个超级服务器)。”

等等,等等见http://www.linuxquestions.org/questions/linux-networking-3/ns2-and-aqua-sim-4175507630/#3

http://www.linuxquestions.org/questions/tags/segmentation%20fault%20ns2/

+0

感谢您的回复,已完成此步骤。我测试协议,所以发送和接收Hello消息工作正常。通过使用Eclipse调试ns2我发现从事件到包的投射是不正确的,不知道为什么!所以我必须转换到Handler类,并使用句柄函数而不是TimerHandler及其“过期”。错误消息'无效SDVCAST数据包类型'消失,但不幸的是执行停止并收到分段错误消息。 –

+0

当模拟过于复杂时,可能会出现'Segmentation fault',或者只是无法使用ns2进行处理。有时一个操作系统的变化可以帮助。 –

+0

我已经在Ubuntu 12.04上安装ns 2.35。是的,我正试图在DV-Cast协议上实现安全层,这个协议本身很复杂。尽管通过多种功能降低了复杂性。我需要使用定时器,我会做什么?提前致谢。 –

相关问题