在NS3協議設計中,數據包的發送和創建是基礎, 熟悉了包的相關操作,進行後續協議就會簡單很多。拿 wifi-example-apps應用設計代碼中包創建爲例。
- 調用packet類創建一個給定大小的包:
- 打上時間戳,接收機可用時間戳用來進行相關計算(時延,生存時間)
- 調用Socket套接字,裏面有SendTo函數用來數據包發送。
- 如果發送的數據包沒有到達設定數目,產生隨機中斷觸發事件發送數據包。
void Sender::SendPacket (){ Ptr<Packet> packet = Create<Packet>(m_pktSize);//創建數據包
TimestampTag timestamp; //時間戳
timestamp.SetTimestamp (Simulator::Now ());
packet->AddByteTag (timestamp);//給數據包打上時間戳
m_socket->SendTo (packet, 0, InetSocketAddress (m_destAddr, m_destPort));//發送數據包,地址和端口
m_txTrace (packet); //記錄trace
if (++m_count < m_numPkts) {
m_sendEvent = Simulator::Schedule (Seconds (m_interval->GetValue ()),
&Sender::SendPacket, this);//設計中斷髮送數據包
}
}