VANET простое приложение CBR, нет вывода (пустые файлы pcap)? - PullRequest
0 голосов
/ 05 ноября 2019

У меня проблема ... я хотел смоделировать сеть VANET (только два узла), которая использует OnOffApplication (для имитации трафика потокового видео) Я попробовал следующий код, ошибка не появляется,однако файлы pcap пусты? и не пакеты были отправлены вообще. Любое предложение, пожалуйста?

  int main (int argc, char *argv[])
  {
  std::string phyMode ("OfdmRate6MbpsBW10MHz");


  bool verbose = false;
  NodeContainer c;
  c.Create (2);

  // The below set of helpers will help us to put together the wifi NICs we want
  YansWifiPhyHelper wifiPhy =  YansWifiPhyHelper::Default ();
  YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
  Ptr<YansWifiChannel> channel = wifiChannel.Create ();
  wifiPhy.SetChannel (channel);
  // ns-3 supports generate a pcap trace
  wifiPhy.SetPcapDataLinkType (WifiPhyHelper::DLT_IEEE802_11);
  NqosWaveMacHelper wifi80211pMac = NqosWaveMacHelper::Default ();
  Wifi80211pHelper wifi80211p = Wifi80211pHelper::Default ();
  if (verbose)
    {
      wifi80211p.EnableLogComponents ();      // Turn on all Wifi 802.11p logging
    }

  wifi80211p.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                      "DataMode",StringValue (phyMode),
                                      "ControlMode",StringValue (phyMode));
  NetDeviceContainer devices = wifi80211p.Install (wifiPhy, wifi80211pMac, c);

  // Tracing
  wifiPhy.EnablePcap ("wave-simple-80211p", devices);

  MobilityHelper mobility;
  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
  positionAlloc->Add (Vector (5.0, 0.0, 0.0));
  mobility.SetPositionAllocator (positionAlloc);
  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
  mobility.Install (c);

  InternetStackHelper internet;
  internet.Install (c);


  Address serverAddress;
  Ipv4AddressHelper ipv4;
  NS_LOG_INFO ("Assign IP Addresses.");
  ipv4.SetBase ("192.168.1.0", "255.255.255.0");
  Ipv4InterfaceContainer i = ipv4.Assign (devices);
  serverAddress = Address (i.GetAddress (1));


 // Create router nodes, initialize routing database and set up the routing
  // tables in the nodes.
  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();

  // Create the OnOff application to send UDP datagrams of size
  // 210 bytes at a rate of 448 Kb/s
  NS_LOG_INFO ("Create Applications.");
  uint16_t port = 9;   // Discard port (RFC 863)
  OnOffHelper onoff ("ns3::UdpSocketFactory", 
                     Address (InetSocketAddress (i.GetAddress (0), port)));
  onoff.SetConstantRate (DataRate ("448kb/s"));
  ApplicationContainer apps = onoff.Install (c.Get (0));
  apps.Start (Seconds (1.0));
  apps.Stop (Seconds (10.0));

  // Create a packet sink to receive these packets
  PacketSinkHelper sink ("ns3::UdpSocketFactory",
                         Address (InetSocketAddress (i.GetAddress(1), port)));
  apps = sink.Install (c.Get (1));
  apps.Start (Seconds (1.0));
  apps.Stop (Seconds (10.0));


  AsciiTraceHelper ascii;
  wifiPhy.EnableAsciiAll (ascii.CreateFileStream ("simple-global-routing.tr"));
  wifiPhy.EnablePcapAll ("simple-global-routing");

  // // Flow Monitor
  // FlowMonitorHelper flowmonHelper;
  // if (enableFlowMonitor)
    // {
      // flowmonHelper.InstallAll ();
    // }

  NS_LOG_INFO ("Run Simulation.");
  Simulator::Stop (Seconds (11));
  Simulator::Run ();
  NS_LOG_INFO ("Done.");


NS_LOG_INFO ("Done.");
  Simulator::Destroy ();


  return 0;
}

Что я должен делать именно?

1 Ответ

0 голосов
/ 07 ноября 2019

Проблема только в том, как вы решаете обращаться к различным узлам, используя OnOffHelper , PacketSinkHelper и ApplicationContainer , чтобы содержать два узла в вашем случае.

OnOffHelper onoff ("ns3::UdpSocketFactory", 
                     Address (InetSocketAddress (i.GetAddress (0), port)));
  onoff.SetConstantRate (DataRate ("448kb/s"));
  ApplicationContainer apps = onoff.Install (c.Get (0));
  apps.Start (Seconds (1.0));
  apps.Stop (Seconds (10.0));

  // Create a packet sink to receive these packets
  PacketSinkHelper sink ("ns3::UdpSocketFactory",
                         Address (InetSocketAddress (i.GetAddress(1), port)));
  apps = sink.Install (c.Get (1));

В этом случае станция 1 : 192.16.1.1 является источником, а станция 2 : 192.16.1.2 является приемником. Но вы использовали IP-адрес и порт для себя (Address (InetSocketAddress (i.GetAddress(0), port) и Address (InetSocketAddress (i.GetAddress (1), port)). Вместо этого он должен быть

OnOffHelper onoff ("ns3::UdpSocketFactory", 
                         Address (InetSocketAddress (i.GetAddress (1), port)));
      onoff.SetConstantRate (DataRate ("448kb/s"));
      ApplicationContainer apps = onoff.Install (c.Get (0));
      apps.Start (Seconds (1.0));
      apps.Stop (Seconds (10.0));


      PacketSinkHelper sink ("ns3::UdpSocketFactory",
                             Address (InetSocketAddress (i.GetAddress(0), port)));
      apps = sink.Install (c.Get (1));

или наоборот. Вы можетена самом деле посмотрите, что происходит, активировав flow-monitor и теперь также создаются файлы pcap.

...