我设置了一个模拟器,N
个从节点使用BulkSendApp
向主节点发送数据。问题是我似乎无法找到如何记录操作的完成时间。我知道使用prefix_time
标志(例如)
export 'NS_LOG=BulkSendApplication=level_all|prefix_func|prefix_time
但这只是记录所有数据包。我只想要完成时间。 有没有办法在不修改应用程序类本身的情况下获得它?
答案 0 :(得分:1)
没有跟踪来源通知您此应用程序中的tx结束事件。但是,添加一个,作为与m_totBytes变量关联的跟踪源或作为跟踪回调,应该很简单。例如:
static TypeId BukSendApplication::GetTypeId (void)
{
static TypeId tid = // ...
// ...
.AddTraceSource ("TotBytes",
"Total number of bytes sent",
MakeTraceSourceAccessor (&BukSendApplication::m_totBytes))
;
return tid;
}
和
void TotBytes (uint32_t oldval, uint32_t newval) {}
Config::ConnectWithoutContext (
"/NodeList/0/ApplicationList/0/$ns3::BulkSendApplication/TotBytes",
MakeCallback (&TotBytesTracer));
文档中也有大量文档:http://www.nsnam.org/docs/release/3.19/manual/html/tracing.html#overview
答案 1 :(得分:-1)
我找到了一种简单而合理可靠的方法来实现这一点(欢迎评论)。
1。 将pcap日志添加到发送节点:
对我来说是:
csma.EnablePcapAll ("tcp-bulk-send", false);
。
csma
是我用来构建交换机拓扑的助手。启用此功能后,您将在运行模拟时获得.pcap文件。
2。
使用tcpdump -nn -tt -r tcp-bulk-send-N-D.pcap
(N
=节点索引; D
=设备索引)
这将打印相关节点的数据包捕获日志。现在检查收到的最后一个ack是什么时候。您还可以通过确保应用程序使用唯一的套接字端口来检查已成功发送了多少数据包(检查另一方收到了多少数据包)。最后一个ack到达的时间基本上是所需的完成时间。