VANET 仿真
ns3示例代码second.cc注释整理,总线网络拓扑仿真,拓扑结构如下:
10.1.1.0
n0 -------------- n1 n2 n3 n4
point-to-point | | | |
================
LAN 10.1.2.0
#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"
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));
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 = echoClient.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; }
|
注:在netanim-module下,修改代码如下,确定节点位置,方便利用.xml文件查看动态效果。
#include "ns3/netanim-module.h"
........ ...... ..
AnimationInterface anim("second.xml"); anim.SetConstantPosition(p2pNodes.Get(0), 10, 10); anim.SetConstantPosition(p2pNodes.Get(1), 50, 50); anim.SetConstantPosition(csmaNodes.Get(1), 40, 0); anim.SetConstantPosition(csmaNodes.Get(2), 30, 10); anim.SetConstantPosition(csmaNodes.Get(3), 20, 20); Simulator::Run (); Simulator::Destroy (); return 0;
|
仿真效果如下
