Я новичок с ns3. я хотел смоделировать сеть vanet с двумя узлами, в которой узел периодически (каждые 0,1 секунды) посылает пакет wsmp по каналу CCH. я использовал код: wave-simple-device.cc и сделал некоторые изменения в следующей функции:
'' '
void
WaveNetDeviceExample::SendOneWsmpPacket (uint32_t channel, uint32_t seq)
{
Ptr<WaveNetDevice> sender = DynamicCast<WaveNetDevice> (devices.Get (0));
Ptr<WaveNetDevice> receiver = DynamicCast<WaveNetDevice> (devices.Get (1));
const static uint16_t WSMP_PROT_NUMBER = 0x88DC;
Mac48Address bssWildcard = Mac48Address::GetBroadcast ();
const TxInfo txInfo = TxInfo (channel);
Ptr<Packet> p = Create<Packet> (100);
SeqTsHeader seqTs;
seqTs.SetSeq (seq);
p->AddHeader (seqTs);
sender->SendX (p, bssWildcard, WSMP_PROT_NUMBER, txInfo);
}
void
WaveNetDeviceExample::SendWsmpExample ()
{
CreateWaveNodes ();
Ptr<WaveNetDevice> sender = DynamicCast<WaveNetDevice> (devices.Get (0));
Ptr<WaveNetDevice> receiver = DynamicCast<WaveNetDevice> (devices.Get (1));
// Alternating access without immediate channel switch
const SchInfo schInfo = SchInfo (SCH1, false, EXTENDED_ALTERNATING);
Simulator::Schedule (Seconds (0.0),
&WaveNetDevice::StartSch,sender,schInfo);
// An important point is that the receiver should also be assigned channel
// access for the same channel to receive packets.
Simulator::Schedule (Seconds (0.0), &WaveNetDevice::StartSch, receiver, schInfo);
// send WSMP packets
// the first packet will be queued currently and be transmitted in next SCH interval
Simulator::Schedule (Seconds (1.0), &WaveNetDeviceExample::SendOneWsmpPacket, this, SCH1, 1);
// the second packet will be queued currently and then be transmitted , because of in the CCH interval.
Simulator::Schedule (Seconds (1.0), &WaveNetDeviceExample::SendOneWsmpPacket, this, CCH, 2);
// the third packet will be dropped because of no channel access for SCH2.
Simulator::Schedule (Seconds (1.0), &WaveNetDeviceExample::SendOneWsmpPacket, this, SCH2, 3);
// release SCH access
Simulator::Schedule (Seconds (2.0), &WaveNetDevice::StopSch, sender, SCH1);
Simulator::Schedule (Seconds (2.0), &WaveNetDevice::StopSch, receiver, SCH1);
// the fourth packet will be queued and be transmitted because of default CCH access assigned automatically.
Simulator::Schedule (Seconds (3.0), &WaveNetDeviceExample::SendOneWsmpPacket, this, CCH, 4);
// the fifth packet will be dropped because of no SCH1 access assigned
Simulator::Schedule (Seconds (3.0), &WaveNetDeviceExample::SendOneWsmpPacket, this, SCH1, 5);
Simulator::Stop (Seconds (5.0));
Simulator::Run ();
Simulator::Destroy ();
}
' ''
, чтобыпериодически отправлять пакет wsmp, я попытался использовать цикл здесь:
for(...){
sender->SendX (p, bssWildcard, WSMP_PROT_NUMBER, txInfo);
sleep(0.1s);
}
Однако, появляется много ошибок.
Во-вторых, чтобы отправить этот пакет wsmp по каналу CCH вместоСШ .. Я не нашел четкого учебника? любая помощь, пожалуйста? Заранее спасибо