2017-07-26 55 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協議上實現安全層,這個協議本身很複雜。儘管通過多種功能降低了複雜性。我需要使用定時器,我會做什麼?提前致謝。 –

相關問題