Ns3 - Как периодически отправлять WSMP-пакеты в VANET через канал CCH (редактирование wave-simple-device.cc)? - PullRequest
0 голосов
/ 10 ноября 2019

Я новичок с 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 вместоСШ .. Я не нашел четкого учебника? любая помощь, пожалуйста? Заранее спасибо

...