我設置了模擬器,其中N
從節點正在使用BulkSendApp
將數據發送到主節點。問題是,我似乎無法找到如何記錄操作的完成時間。我知道與prefix_time
標誌(例如)登錄ns-3模擬器BulkSendApplication完成時間?
export 'NS_LOG=BulkSendApplication=level_all|prefix_func|prefix_time
但這只是記錄的所有數據包。我只想要完成時間。 有沒有辦法在不修改應用程序類本身的情況下獲取它?
我設置了模擬器,其中N
從節點正在使用BulkSendApp
將數據發送到主節點。問題是,我似乎無法找到如何記錄操作的完成時間。我知道與prefix_time
標誌(例如)登錄ns-3模擬器BulkSendApplication完成時間?
export 'NS_LOG=BulkSendApplication=level_all|prefix_func|prefix_time
但這只是記錄的所有數據包。我只想要完成時間。 有沒有辦法在不修改應用程序類本身的情況下獲取它?
我發現了一個簡單而合理可靠的方式來做到這一點(歡迎評論)。
1. 添加PCAP日誌發送節點:
對我來說是:
csma.EnablePcapAll ("tcp-bulk-send", false);
。
csma
是我用於構建交換機拓撲結構的幫手。啓用此功能後,您將在運行模擬時獲得一個.pcap文件。
2. 使用tcpdump -nn -tt -r tcp-bulk-send-N-D.pcap
(N
=節點索引; D
=設備索引)
這將打印中的相關節點的數據包捕獲日誌。現在檢查最後一次收到的時間。您還可以通過確保應用程序使用唯一的套接字端口來檢查成功發送了多少包(檢查另一端接收了多少包)。最後一次到達的時間基本上是所需的完成時間。
沒有跟蹤源,通知您此應用程序內的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