我设置了一个模拟器,其中N
从节点使用BulkSendApp
. 问题是我似乎找不到如何记录操作的完成时间。我知道用prefix_time
标志记录(例如)
export 'NS_LOG=BulkSendApplication=level_all|prefix_func|prefix_time
但这只是记录所有数据包。我只想要完成时间。有没有办法在不修改应用程序类本身的情况下获得它?
没有跟踪源可以通知您此应用程序内的 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. 向发送节点添加 pcap 日志:
对我来说是:
csma.EnablePcapAll ("tcp-bulk-send", false);
.
csma
是我用来构建交换机拓扑的助手。启用此功能后,您将在运行模拟时获得一个 .pcap 文件。
2.使用tcpdump -nn -tt -r tcp-bulk-send-N-D.pcap
(N
=节点索引;D
=设备索引)
这将打印相关节点的数据包捕获日志。现在检查最后一次收到确认的时间。您还可以通过确保应用程序使用唯一的套接字端口来检查成功发送了多少数据包(检查另一端接收了多少数据包)。最后一个ack到达的时间基本上就是需要的完成时间。