问题描述
// Default Network Topology
//
// 10.1.1.0
// n0 -------------- n1
// point-to-point
//
using namespace ns3;
NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");
int
main (int argc,char *argv[])
{
CommandLine cmd (__FILE__);
cmd.Parse (argc,argv);
Time::SetResolution (Time::NS);
LogComponentEnable ("UdpEchoClientApplication",LOG_LEVEL_INFO);
LogComponentEnable ("UdpEchoServerApplication",LOG_LEVEL_INFO);
NodeContainer nodes;
nodes.Create (2);
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("Datarate",StringValue ("5Mbps"));
pointToPoint.SetChannelAttribute ("Delay",StringValue ("2ms"));
NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);
InternetStackHelper stack;
stack.Install (nodes);
Ipv4AddressHelper address;
address.SetBase ("10.1.1.0","255.255.255.0");
Ipv4InterfaceContainer interfaces = address.Assign (devices);
UdpEchoServerHelper echoServer (9);
ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));
UdpEchoClientHelper echoClient (interfaces.GetAddress (1),9);
echoClient.SetAttribute ("MaxPackets",UintegerValue (1));
echoClient.SetAttribute ("Interval",TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize",UintegerValue (1024));
ApplicationContainer clientApps = echoClient.Install (nodes.Get (0));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));
Simulator::Run ();
Simulator::Destroy ();
return 0;
}
这段代码只是创建了两个点对点节点。 但是我们如何创建一个点对点拓扑,具有超过 2 个节点,如下图所示:
解决方法
有 several layout helpers for PointToPointNetDevices,但没有一个完全适合您的目的。
实现所需拓扑的最直接方法是创建节点,然后手动安装 PointToPointNetDevices。类似的东西
NodeContainer nodes(7);
PointToPointHelper pointToPoint;
NetDeviceContainer devices;
devices.Add(pointToPoint.Install(nodes.Get(0),nodes.Get(1)));
devices.Add(pointToPoint.Install(nodes.Get(0),nodes.Get(2)));
devices.Add(pointToPoint.Install(nodes.Get(1),nodes.Get(3)));
devices.Add(pointToPoint.Install(nodes.Get(2),nodes.Get(4)));
devices.Add(pointToPoint.Install(nodes.Get(2),nodes.Get(6)));
devices.Add(pointToPoint.Install(nodes.Get(4),nodes.Get(6)));
devices.Add(pointToPoint.Install(nodes.Get(5),nodes.Get(5)));
// the rest of your script