Pregunta

I'm trying to learn ns3, and I'm trying to modify one of the examples by using the onofApplication to generate Vbr instead of Cbr, but the code is not working and I don't know why, can you help me please?

#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/csma-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"
#include "ns3/ipv4-global-routing-helper.h"
#include "ns3/random-variable.h"
#include "ns3/socket-factory.h"
#include "ns3/udp-socket-factory.h"
#include "ns3/on-off-helper.h"
#include "ns3/nstime.h"


using namespace ns3;

NS_LOG_COMPONENT_DEFINE ("SecondScriptExample");

int 
main (int argc, char *argv[])
{
  bool verbose = true;
  uint32_t nCsma = 3;

  CommandLine cmd;
  cmd.AddValue ("nCsma", "Number of \"extra\" CSMA nodes/devices", nCsma);
  cmd.AddValue ("verbose", "Tell echo applications to log if true", verbose);

  cmd.Parse (argc,argv);

  if (verbose)
    {
      LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
      LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
    }

  nCsma = nCsma == 0 ? 1 : nCsma;

  NodeContainer p2pNodes;
  p2pNodes.Create (2);

  NodeContainer csmaNodes;
  csmaNodes.Add (p2pNodes.Get (1));
  csmaNodes.Create (nCsma);

  PointToPointHelper pointToPoint;
  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
  pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

  NetDeviceContainer p2pDevices;
  p2pDevices = pointToPoint.Install (p2pNodes);

  CsmaHelper csma;
  csma.SetChannelAttribute ("DataRate", StringValue ("100Mbps"));
  csma.SetChannelAttribute ("Delay", TimeValue (NanoSeconds (6560)));

  NetDeviceContainer csmaDevices;
  csmaDevices = csma.Install (csmaNodes);

  InternetStackHelper stack;
  stack.Install (p2pNodes.Get (0));
  stack.Install (csmaNodes);

  Ipv4AddressHelper address;
  address.SetBase ("10.1.1.0", "255.255.255.0");
  Ipv4InterfaceContainer p2pInterfaces;
  p2pInterfaces = address.Assign (p2pDevices);

  address.SetBase ("10.1.2.0", "255.255.255.0");
  Ipv4InterfaceContainer csmaInterfaces;
  csmaInterfaces = address.Assign (csmaDevices);

  UdpEchoServerHelper echoServer (9);

  ApplicationContainer serverApps = echoServer.Install (csmaNodes.Get (nCsma));
  serverApps.Start (Seconds (1.0));
  serverApps.Stop (Seconds (10.0));

    OnOffHelper onOffAP ("ns3::UdpSocketFactory", csmaInterfaces.GetAddress(nCsma));
    onOffAP.SetAttribute("PacketSize", UintegerValue(1024));
    onOffAP.SetAttribute("OffTime",RandomVariableValue(ExponentialVariable(0.01)));
    // the packet arrivalrate on AP side is 100 pkt/sec, so we set mean value as 1/100
    onOffAP.SetAttribute("OnTime",RandomVariableValue(ConstantVariable(0.0001583)));
    // the constanttime for sending one packet
    onOffAP.SetAttribute("DataRate", StringValue ("54Mbps"));

 // UdpEchoClientHelper echoClient (csmaInterfaces.GetAddress (nCsma), 9);
  //echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
  //echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
  //echoClient.SetAttribute ("PacketSize", UintegerValue (1024));

  ApplicationContainer clientApps = onOffAP.Install (p2pNodes.Get (0));
  clientApps.Start (Seconds (2.0));
  clientApps.Stop (Seconds (10.0));

  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();

  pointToPoint.EnablePcapAll ("second");
  csma.EnablePcap ("second", csmaDevices.Get (1), true);

  Simulator::Run ();
  Simulator::Destroy ();
  return 0;
}

and I'm getting this error

msg="Invalid value for attribute set (OffTime) on ns3::OnOffApplication", file=../src/core/model/object-factory.cc, line=75
libc++abi.dylib: terminate called without an active exception
¿Fue útil?

Solución

onOffAP.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=4]")); onOffAP.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));

They have made some changes from API 3.15 onwards. Have a look at https://groups.google.com/group/ns-3-users/tree/browse_frm/month/2012-11/be3cd40a0dc9c3a1?rnum=461&start=250&_done=/group/ns-3-users/browse_frm/month/2012-11?start%3D250%26sa%3DN%26&pli=1

Or have a look at the example code for setting OffTime at http://code.nsnam.org/ns-3-dev/file/eb7335c2423c/examples/wireless/wifi-hidden-terminal.cc

Hope that helps you.. :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top