Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.15 KB | None | 0 0
  1. #include "ns3/core-module.h"
  2. #include "ns3/network-module.h"
  3. #include "ns3/point-to-point-module.h"
  4. #include "ns3/applications-module.h"
  5. #include "ns3/internet-module.h"
  6. #include "ns3/mobility-module.h"
  7. #include "ns3/netanim-module.h"
  8. #include "ns3/gnuplot.h"
  9.  
  10. using namespace ns3;
  11. using namespace std;
  12.  
  13. AnimationInterface * anim = 0;
  14.  
  15. Gnuplot2dDataset txAllDataset;
  16. Gnuplot2dDataset txTransferredDataset;
  17. Gnuplot2dDataset txDroppedDataset;
  18.  
  19. int txAllDataSize = 0;
  20. int txDroppedDataSize = 0;
  21. int txTransferedDataSize = 0;
  22.  
  23. double startTime = 2.0;
  24. double endTime = 10.0;
  25. double section = 0.5;
  26.  
  27. NS_LOG_COMPONENT_DEFINE("Unicast");
  28.  
  29. /*
  30. * Funkce pro mereni prenosove rychlosti
  31. */
  32.  
  33. void ipv4_node0_tx(string path, Ptr<Packet const> packet, Ptr<Ipv4> ipv4,
  34. unsigned int parameter) {
  35. if (packet->GetSize() >= 100) {
  36. txAllDataSize = txAllDataSize + packet->GetSize();
  37. }}
  38.  
  39. void ipv4_node0_phyTx (string path, Ptr<Packet const> packet) {
  40. if (packet->GetSize() >= 100) {
  41. txTransferedDataSize = txTransferedDataSize + packet->GetSize();
  42. }}
  43.  
  44. void ipv4_node0_macTxDrop (string path, Ptr<Packet const> packet) {
  45. if (packet->GetSize() >= 100) {
  46. txDroppedDataSize = txDroppedDataSize + packet->GetSize();
  47. }}
  48.  
  49. void saveData(double time) {
  50. txAllDataset.Add(time, (double)txAllDataSize/section*8/(1024*1024));
  51. txTransferredDataset.Add(time,(double)txTransferedDataSize/section*8/(1024*1024));
  52. txDroppedDataset.Add(time,(double)txDroppedDataSize/section*8/(1024*1024));
  53. txAllDataSize = 0;
  54. txTransferedDataSize = 0;
  55. txDroppedDataSize = 0;
  56. }
  57.  
  58. int main(int argc, char *argv[]) {
  59.  
  60. LogComponentEnable("OnOffApplication", LOG_LEVEL_INFO);
  61. LogComponentEnable("PacketSink", LOG_LEVEL_INFO);
  62.  
  63. string appBitRate = "1Mbps";
  64. string queueLength = "750";
  65. string linkBitRate = "1Mbps";
  66.  
  67. int nodeCount = 14;
  68. NodeContainer nodes;
  69. nodes.Create(nodeCount);
  70.  
  71. /*
  72. * Definice pohybového modelu
  73. */
  74.  
  75. MobilityHelper mobility;
  76. mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
  77. mobility.InstallAll();
  78.  
  79.  
  80. InternetStackHelper internetStack;
  81. internetStack.Install(nodes);
  82.  
  83. PointToPointHelper pointToPoint;
  84. pointToPoint.SetDeviceAttribute("DataRate", StringValue(linkBitRate));
  85. pointToPoint.SetChannelAttribute("Delay", StringValue("2ms"));
  86. pointToPoint.SetDeviceAttribute("Mtu", UintegerValue(1500));
  87. pointToPoint.SetQueue ("ns3::DropTailQueue", "MaxPackets", StringValue (queueLength));
  88.  
  89. NetDeviceContainer netDevices0_5 = pointToPoint.Install(nodes.Get(0), nodes.Get(5));
  90. NetDeviceContainer netDevices5_8 = pointToPoint.Install(nodes.Get(5), nodes.Get(8));
  91. NetDeviceContainer netDevices5_7 = pointToPoint.Install(nodes.Get(5), nodes.Get(7));
  92. NetDeviceContainer netDevices8_11 = pointToPoint.Install(nodes.Get(8), nodes.Get(11));
  93. NetDeviceContainer netDevices11_13 = pointToPoint.Install(nodes.Get(11), nodes.Get(13));
  94. NetDeviceContainer netDevices13_4 = pointToPoint.Install(nodes.Get(13), nodes.Get(4));
  95. NetDeviceContainer netDevices13_12 = pointToPoint.Install(nodes.Get(13), nodes.Get(12));
  96. NetDeviceContainer netDevices12_3 = pointToPoint.Install(nodes.Get(12), nodes.Get(3));
  97. NetDeviceContainer netDevices12_10 = pointToPoint.Install(nodes.Get(12), nodes.Get(10));
  98. NetDeviceContainer netDevices11_10 = pointToPoint.Install(nodes.Get(11), nodes.Get(10));
  99. NetDeviceContainer netDevices10_7 = pointToPoint.Install(nodes.Get(10), nodes.Get(7));
  100. NetDeviceContainer netDevices7_6 = pointToPoint.Install(nodes.Get(7), nodes.Get(6));
  101. NetDeviceContainer netDevices6_1 = pointToPoint.Install(nodes.Get(6), nodes.Get(1));
  102. NetDeviceContainer netDevices6_9 = pointToPoint.Install(nodes.Get(6), nodes.Get(9));
  103. NetDeviceContainer netDevices10_9 = pointToPoint.Install(nodes.Get(9), nodes.Get(10));
  104. NetDeviceContainer netDevices9_2 = pointToPoint.Install(nodes.Get(9), nodes.Get(2));
  105.  
  106. Ipv4AddressHelper ipv4;
  107.  
  108. ipv4.SetBase("10.1.1.0", "255.255.255.0");
  109. Ipv4InterfaceContainer interfaces0_5 = ipv4.Assign(netDevices0_5);
  110. ipv4.SetBase("10.1.2.0", "255.255.255.0");
  111. Ipv4InterfaceContainer interfaces5_8 = ipv4.Assign(netDevices5_8);
  112. ipv4.SetBase("10.1.3.0", "255.255.255.0");
  113. Ipv4InterfaceContainer interfaces8_11 = ipv4.Assign(netDevices8_11);
  114. ipv4.SetBase("10.1.4.0", "255.255.255.0");
  115. Ipv4InterfaceContainer interfaces11_13 = ipv4.Assign(netDevices11_13);
  116. ipv4.SetBase("10.1.5.0", "255.255.255.0");
  117. Ipv4InterfaceContainer interfaces13_4 = ipv4.Assign(netDevices13_4);
  118. ipv4.SetBase("10.1.6.0", "255.255.255.0");
  119. Ipv4InterfaceContainer interfaces13_12 = ipv4.Assign(netDevices13_12);
  120. ipv4.SetBase("10.1.7.0", "255.255.255.0");
  121. Ipv4InterfaceContainer interfaces12_3 = ipv4.Assign(netDevices12_3);
  122. ipv4.SetBase("10.1.8.0", "255.255.255.0");
  123. Ipv4InterfaceContainer interfaces12_10 = ipv4.Assign(netDevices12_10);
  124. ipv4.SetBase("10.1.9.0", "255.255.255.0");
  125. Ipv4InterfaceContainer interfaces10_7 = ipv4.Assign(netDevices10_7);
  126. ipv4.SetBase("10.1.10.0", "255.255.255.0");
  127. Ipv4InterfaceContainer interfaces7_6 = ipv4.Assign(netDevices7_6);
  128. ipv4.SetBase("10.1.11.0", "255.255.255.0");
  129. Ipv4InterfaceContainer interfaces6_1 = ipv4.Assign(netDevices6_1);
  130. ipv4.SetBase("10.1.12.0", "255.255.255.0");
  131. Ipv4InterfaceContainer interfaces6_9 = ipv4.Assign(netDevices6_9);
  132. ipv4.SetBase("10.1.13.0", "255.255.255.0");
  133. Ipv4InterfaceContainer interfaces10_9 = ipv4.Assign(netDevices10_9);
  134. ipv4.SetBase("10.1.14.0", "255.255.255.0");
  135. Ipv4InterfaceContainer interfaces9_2 = ipv4.Assign(netDevices9_2);
  136. ipv4.SetBase("10.1.15.0", "255.255.255.0");
  137. Ipv4InterfaceContainer interfaces5_7 = ipv4.Assign(netDevices5_7);
  138.  
  139. /*
  140. * Definice unicastoveho globalniho smerovani
  141. */
  142.  
  143. Ipv4GlobalRoutingHelper::PopulateRoutingTables();
  144.  
  145. /*
  146. * Definice multicastoveho statickeho smerovani
  147. */
  148.  
  149. Ipv4Address multicastSource("10.1.1.1");
  150. Ipv4Address multicastGroup("225.1.2.4");
  151. Ipv4StaticRoutingHelper multicastRouting;
  152. multicastRouting.SetDefaultMulticastRoute(nodes.Get(0),netDevices0_5.Get(0));
  153.  
  154. NetDeviceContainer outputDevices_n5;
  155. outputDevices_n5.Add(netDevices5_7.Get(0));
  156. outputDevices_n5.Add(netDevices5_8.Get(0));
  157. NetDeviceContainer outputDevices_n7;
  158. outputDevices_n7.Add(netDevices7_6.Get(0));
  159. outputDevices_n7.Add(netDevices10_7.Get(1));
  160. NetDeviceContainer outputDevices_n6;
  161. outputDevices_n6.Add(netDevices6_1.Get(0));
  162. outputDevices_n6.Add(netDevices6_9.Get(0));
  163. NetDeviceContainer outputDevices_n12;
  164. outputDevices_n12.Add(netDevices12_3.Get(0));
  165. outputDevices_n12.Add(netDevices13_12.Get(1));
  166.  
  167. //n5
  168. multicastRouting.AddMulticastRoute(nodes.Get(5),
  169. multicastSource, multicastGroup, netDevices0_5.Get(1), outputDevices_n5);
  170. //n6
  171. multicastRouting.AddMulticastRoute(nodes.Get(6),
  172. multicastSource,multicastGroup, netDevices7_6.Get(1), outputDevices_n6);
  173. //n7
  174. multicastRouting.AddMulticastRoute(nodes.Get(7),
  175. multicastSource,multicastGroup, netDevices5_7.Get(1), outputDevices_n7);
  176. //n8
  177. multicastRouting.AddMulticastRoute(nodes.Get(8),
  178. multicastSource,multicastGroup, netDevices5_8.Get(1), netDevices8_11.Get(0));
  179. //n9
  180. multicastRouting.AddMulticastRoute(nodes.Get(9),
  181. multicastSource,multicastGroup, netDevices6_9.Get(1), netDevices9_2.Get(0));
  182. //n10
  183. multicastRouting.AddMulticastRoute(nodes.Get(10),
  184. multicastSource,multicastGroup, netDevices10_7.Get(0), netDevices12_10.Get(1));
  185. //n11
  186. multicastRouting.AddMulticastRoute(nodes.Get(11),
  187. multicastSource,multicastGroup, netDevices8_11.Get(1), netDevices11_13.Get(0));
  188. //n12
  189. multicastRouting.AddMulticastRoute(nodes.Get(12),
  190. multicastSource,multicastGroup, netDevices12_10.Get(0), netDevices12_3.Get(0));
  191. //n13
  192. multicastRouting.AddMulticastRoute(nodes.Get(13),
  193. multicastSource,multicastGroup, netDevices11_13.Get(1), netDevices13_4.Get(0));
  194.  
  195. /*
  196. *
  197. * Definice OnOff unicastove a multicastove aplikace
  198. */
  199.  
  200. PacketSinkHelper sink("ns3::UdpSocketFactory",
  201. InetSocketAddress(Ipv4Address::GetAny (), 9));
  202.  
  203. OnOffHelper onOffUnicast1("ns3::UdpSocketFactory",
  204. InetSocketAddress(interfaces6_1.GetAddress(1), 9));
  205. onOffUnicast1.SetAttribute("PacketSize", UintegerValue(1024));
  206. onOffUnicast1.SetAttribute("DataRate", StringValue (appBitRate));
  207. onOffUnicast1.SetAttribute("OffTime", StringValue
  208. ("ns3::ConstantRandomVariable[Constant=0]"));
  209. ApplicationContainer unicastAppCont1 = onOffUnicast1.Install(nodes.Get(0));
  210. unicastAppCont1.Start(Seconds(startTime));
  211. unicastAppCont1.Stop(Seconds(endTime));
  212. unicastAppCont1 = sink.Install(nodes.Get(1));
  213.  
  214. OnOffHelper onOffUnicast2("ns3::UdpSocketFactory",
  215. InetSocketAddress(interfaces9_2.GetAddress(1), 9));
  216. onOffUnicast2.SetAttribute("PacketSize", UintegerValue(1024));
  217. onOffUnicast2.SetAttribute("DataRate", StringValue(appBitRate));
  218. onOffUnicast2.SetAttribute("OffTime", StringValue
  219. ("ns3::ConstantRandomVariable[Constant=0]"));
  220. ApplicationContainer unicastAppCont2 = onOffUnicast2.Install(nodes.Get(0));
  221. unicastAppCont2.Start(Seconds(startTime));
  222. unicastAppCont2.Stop(Seconds(endTime));
  223. unicastAppCont2 = sink.Install(nodes.Get(2));
  224.  
  225. OnOffHelper onOffUnicast3("ns3::UdpSocketFactory",
  226. InetSocketAddress(interfaces12_3.GetAddress(1), 9));
  227. onOffUnicast3.SetAttribute("PacketSize", UintegerValue(1024));
  228. onOffUnicast3.SetAttribute("DataRate", StringValue(appBitRate));
  229. onOffUnicast3.SetAttribute("OffTime", StringValue
  230. ("ns3::ConstantRandomVariable[Constant=0]"));
  231. ApplicationContainer unicastAppCont3 = onOffUnicast3.Install(nodes.Get(0));
  232. unicastAppCont3.Start(Seconds(startTime));
  233. unicastAppCont3.Stop(Seconds(endTime));
  234. unicastAppCont3 = sink.Install(nodes.Get(3));
  235.  
  236. OnOffHelper onOffUnicast4("ns3::UdpSocketFactory",
  237. InetSocketAddress(interfaces13_4.GetAddress(1), 9));
  238. onOffUnicast4.SetAttribute("PacketSize", UintegerValue(1024));
  239. onOffUnicast4.SetAttribute("DataRate", StringValue(appBitRate));
  240. onOffUnicast4.SetAttribute("OffTime", StringValue
  241. ("ns3::ConstantRandomVariable[Constant=0]"));
  242. ApplicationContainer unicastAppCont4 = onOffUnicast4.Install(nodes.Get(0));
  243. unicastAppCont4.Start(Seconds(startTime));
  244. unicastAppCont4.Stop(Seconds(endTime));
  245. unicastAppCont4 = sink.Install(nodes.Get(4));
  246. /*
  247.  
  248. OnOffHelper onOffMulticast("ns3::UdpSocketFactory",
  249. Address(InetSocketAddress(multicastGroup, 9)));
  250. onOffMulticast.SetAttribute("PacketSize", UintegerValue(1024));
  251. onOffMulticast.SetAttribute("DataRate", StringValue (appBitRate));
  252. onOffMulticast.SetAttribute("OffTime", StringValue
  253. ("ns3::ConstantRandomVariable[Constant=0]"));
  254. ApplicationContainer multicastAppCont = onOffMulticast.Install(nodes.Get(0));
  255. multicastAppCont.Start(Seconds(startTime));
  256. multicastAppCont.Stop(Seconds(endTime));
  257. multicastAppCont = sink.Install(nodes.Get(1));
  258. multicastAppCont = sink.Install(nodes.Get(2));
  259. multicastAppCont = sink.Install(nodes.Get(3));
  260. multicastAppCont = sink.Install(nodes.Get(4));
  261. */
  262. anim = new AnimationInterface("unicast");
  263. //anim = new AnimationInterface("multicast");
  264.  
  265. /*
  266. * Definice vystupu pro program NetAnim
  267. */
  268.  
  269. anim->SetConstantPosition (nodes.Get(0), 30, 0);
  270. anim->SetConstantPosition (nodes.Get(1), 0, 20);
  271. anim->SetConstantPosition (nodes.Get(2), 10, 40);
  272. anim->SetConstantPosition (nodes.Get(3), 20, 40);
  273. anim->SetConstantPosition (nodes.Get(4), 50, 40);
  274. anim->SetConstantPosition (nodes.Get(5), 30, 10);
  275. anim->SetConstantPosition (nodes.Get(6), 10, 20);
  276. anim->SetConstantPosition (nodes.Get(7), 20, 20);
  277. anim->SetConstantPosition (nodes.Get(8), 40, 20);
  278. anim->SetConstantPosition (nodes.Get(9), 10, 30);
  279. anim->SetConstantPosition (nodes.Get(10), 30, 30);
  280. anim->SetConstantPosition (nodes.Get(11), 40, 30);
  281. anim->SetConstantPosition (nodes.Get(12), 30, 40);
  282. anim->SetConstantPosition (nodes.Get(13), 40, 40);
  283.  
  284. anim->EnablePacketMetadata (true);
  285. anim->UpdateNodeColor(nodes.Get(0), 0, 255, 0);
  286. anim->UpdateNodeDescription(nodes.Get(0), "Server");
  287. anim->UpdateNodeSize(0, 2, 2);
  288.  
  289. anim->UpdateNodeColor(nodes.Get(1), 255, 0, 0);
  290. anim->UpdateNodeDescription(nodes.Get(1), "Klient 1");
  291. anim->UpdateNodeSize(0, 2, 2);
  292.  
  293. anim->UpdateNodeColor(nodes.Get(2), 255, 0, 0);
  294. anim->UpdateNodeDescription(nodes.Get(2), "Klient 2");
  295. anim->UpdateNodeSize(0, 2, 2);
  296.  
  297. anim->UpdateNodeColor(nodes.Get(3), 255, 0, 0);
  298. anim->UpdateNodeDescription(nodes.Get(3), "Klient 3");
  299. anim->UpdateNodeSize(0, 2, 2);
  300.  
  301. anim->UpdateNodeColor(nodes.Get(4), 255, 0, 0);
  302. anim->UpdateNodeDescription(nodes.Get(4), "Klient 4");
  303. anim->UpdateNodeSize(0, 2, 2);
  304.  
  305. anim->UpdateNodeColor(nodes.Get(5), 0, 0, 0);
  306. anim->UpdateNodeDescription(nodes.Get(5), "");
  307. anim->UpdateNodeSize(0, 2, 2);
  308.  
  309. anim->UpdateNodeColor(nodes.Get(6), 0, 0, 0);
  310. anim->UpdateNodeDescription(nodes.Get(6), "");
  311. anim->UpdateNodeSize(0, 2, 2);
  312.  
  313. anim->UpdateNodeColor(nodes.Get(7), 0, 0, 0);
  314. anim->UpdateNodeDescription(nodes.Get(7), "");
  315. anim->UpdateNodeSize(0, 2, 2);
  316.  
  317. anim->UpdateNodeColor(nodes.Get(8), 0, 0, 0);
  318. anim->UpdateNodeDescription(nodes.Get(8), "");
  319. anim->UpdateNodeSize(0, 2, 2);
  320.  
  321. anim->UpdateNodeColor(nodes.Get(9), 0, 0, 0);
  322. anim->UpdateNodeDescription(nodes.Get(9), "");
  323. anim->UpdateNodeSize(0, 2, 2);
  324.  
  325. anim->UpdateNodeColor(nodes.Get(10), 0, 0, 0);
  326. anim->UpdateNodeDescription(nodes.Get(10), "");
  327. anim->UpdateNodeSize(0, 2, 2);
  328.  
  329. anim->UpdateNodeColor(nodes.Get(11), 0, 0, 0);
  330. anim->UpdateNodeDescription(nodes.Get(11), "");
  331. anim->UpdateNodeSize(0, 2, 2);
  332.  
  333. anim->UpdateNodeColor(nodes.Get(12), 0, 0, 0);
  334. anim->UpdateNodeDescription(nodes.Get(12), "");
  335. anim->UpdateNodeSize(0, 2, 2);
  336.  
  337. anim->UpdateNodeColor(nodes.Get(13), 0, 0, 0);
  338. anim->UpdateNodeDescription(nodes.Get(13), "");
  339. anim->UpdateNodeSize(0, 2, 2);
  340.  
  341.  
  342. /*
  343. * Pripojeni na trasovaci system
  344. */
  345.  
  346. Config::Connect("/NodeList/0/$ns3::Ipv4L3Protocol/Tx",MakeCallback(&ipv4_node0_tx));
  347. Config::Connect("/NodeList/0/DeviceList/*/$ns3::PointToPointNetDevice/PhyTxEnd",MakeCallback(&ipv4_node0_phyTx));
  348. Config::Connect("/NodeList/0/DeviceList/*/$ns3::PointToPointNetDevice/MacTxDrop", MakeCallback(&ipv4_node0_macTxDrop));
  349.  
  350. for(double time=0; time<endTime; time=time+section)
  351. Simulator::Schedule (Seconds(time), &saveData, time);
  352.  
  353. /*
  354. * Volani funkce saveData v pravidelnych intervalech
  355. */
  356.  
  357. NS_LOG_INFO("Run Simulation.");
  358. Simulator::Run();
  359. Simulator::Destroy();
  360. NS_LOG_INFO("Done.");
  361.  
  362. /*
  363. * Definice vystupu pro program Gnuplot
  364. */
  365.  
  366. string fileNameWithNoExtension = "unicast";
  367. //string fileNameWithNoExtension = "multicast";
  368. string graphicsFileName = fileNameWithNoExtension + ".png";
  369. string plotFileName = fileNameWithNoExtension + ".plt";
  370. string plotTitle = "Bitrate-unicast";
  371. //string plotTitle = "Bitrate-multicast";
  372. txAllDataset.SetTitle("Sent");
  373. txAllDataset.SetStyle(Gnuplot2dDataset::LINES_POINTS);
  374. txTransferredDataset.SetTitle("Transferred");
  375. txTransferredDataset.SetStyle(Gnuplot2dDataset::LINES_POINTS);
  376. txDroppedDataset.SetTitle("Dropped");
  377. txDroppedDataset.SetStyle(Gnuplot2dDataset::LINES_POINTS);
  378. Gnuplot plot(graphicsFileName);
  379. plot.SetTitle(plotTitle);
  380. plot.SetTerminal("png");
  381. plot.SetLegend("Time [s]", "Bitrate [Mb/s]");
  382. //plot.AppendExtra ("set yrange [0:+1]");
  383. plot.AddDataset(txAllDataset);
  384. plot.AddDataset(txTransferredDataset);
  385. plot.AddDataset(txDroppedDataset);
  386. ofstream plotFile(plotFileName.c_str());
  387. plot.GenerateOutput(plotFile);
  388. plotFile.close();
  389.  
  390. return 0;
  391. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement