0
我想修改ns2模擬器中某個節點的行爲。特別是,我必須在dsr協議的模擬中修改節點的路由。 我知道dsragent.cc是管理此協議路由的類。但是如果我有一個帶有10個節點的tcl腳本,名爲$ node1,$ node2 ... node $ 10,如何修改dsr協議中$ node5的行爲?如何找到該節點的單一行爲?如何修改ns2模擬器中某個節點的行爲?
我想修改ns2模擬器中某個節點的行爲。特別是,我必須在dsr協議的模擬中修改節點的路由。 我知道dsragent.cc是管理此協議路由的類。但是如果我有一個帶有10個節點的tcl腳本,名爲$ node1,$ node2 ... node $ 10,如何修改dsr協議中$ node5的行爲?如何找到該節點的單一行爲?如何修改ns2模擬器中某個節點的行爲?
我曾與其他路由協議,但我會提到一些點..可能是有用的。
爲了訪問C++中的特定節點對象,你需要知道它在tcl中的地址。則可能需要進行修改正向或recv函數.. 可以提取需要形成共同,IP的所有信息,DSR頭
DSRAgent::recv(Packet* packet, Handler*)
/* handle packets with a MAC destination address of this host, or
the MAC broadcast addr */
{
hdr_sr *srh = hdr_sr::access(packet);
hdr_ip *iph = hdr_ip::access(packet);
hdr_cmn *cmh = hdr_cmn::access(packet);
p.dest = ID((Address::instance().get_nodeaddr(iph->daddr())),::IP);
p.src = ID((Address::instance().get_nodeaddr(iph->saddr())),::IP);
以下手段..如果當前節點是該分組的發生器
if (p.src == net_id) {code}
選擇特定的節點對象
if (net_id==ID("put the node address here", ::IP)) \\ notice net_id is a struct
{
your code here
}
你可以從TCL 而這個地址分配節點地址將命令的功能傳遞到C++
DSRAgent::command(int argc, const char*const* argv)
.
.
if (strcasecmp(argv[1], "addr") == 0)
{
int temp;
temp = Address::instance().str2addr(argv[2]);
net_id = ID(temp, ::IP);
flow_table.setNetAddr(net_id.addr);
.
}
問候
謝謝你的答覆。你能幫我解決嗎? https://stackoverflow.com/questions/47359275/arrange-nodes-in-ns2在此先感謝。 – legolas07
當然..我會看到它。 –