Implement of Traceroute in ns-3.
在 ns-3 中实现 Traceroute 应用, 采用 Ipv4RawSocket(原始套接字) 和 ICMP 实现.
由于没有学习 waf 编译软件, 所以没有制作为 ns-3 的模块.
将头文件放入 scratch 文件中, 在自己的仿真源文件中引入头文件. 使用方法和 ns-3 内置的应用基本类似, 具体如下:
Ptr<Traceroute> tr = CreateObject<Traceroute>(); // 创建应用
tr->Setup(dst_nodeid, dst_address); // 设置目的节点和地址
src_node->AddApplication(tr); // 向源节点中添加应用
tr->SetStartTime(Seconds(starttime)); // 设置应用开始时间
其中:
dst_nodeid
的类型为uint32_t
dst_address
的类型为Ipv4Address
src_node
的类型为Node
starttime
的类型为double
*.*.*.*
Traceroute-srcid-dstid.txt
Receive()
中,
if (IsManualIpTtl() && GetIpTtl() != 0 && !dst.IsMulticast() && !dst.IsBroadcast())
{
SocketIpTtlTag tag;
tag.SetTtl(GetIpTtl());
p->AddPacketTag(tag);
}
ipHeader.GetProtocol () != Icmpv4L4Protocol::PROT_NUMBER &&
(m_dst == Ipv4Address::GetAny () || ipHeader.GetSource () == m_dst) &&