Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <cassert>
- #include "ns3/core-module.h"
- #include "ns3/network-module.h"
- #include "ns3/internet-module.h"
- #include "ns3/point-to-point-module.h"
- #include "ns3/applications-module.h"
- #include "ns3/flow-monitor-module.h"
- #include "ns3/ipv4-static-routing-helper.h"
- #include "ns3/gnuplot.h"
- #include "ns3/stats-module.h"
- #include "ns3/netanim-module.h"
- using namespace ns3;
- NS_LOG_COMPONENT_DEFINE ("Uloha1LOG");
- int main (int argc, char *argv[]) // Deklarace funkce main
- {
- bool verbose = true;
- std::string animFile = "uloha1.xml"; // Název souboru pro animaci
- if (verbose)
- {
- LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
- LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
- }
- NodeContainer n; // Vytvoření kontejneru uzlů
- n.Create (5);
- Ptr<Node> Node0 = n.Get (0); // Vytvoření ukazatele na uzel
- Ptr<Node> Node1 = n.Get (1);
- Ptr<Node> Node2 = n.Get (2);
- Ptr<Node> Node3 = n.Get (3);
- Ptr<Node> Node4 = n.Get (4);
- PointToPointHelper pointToPoint1; // Vytvoření point-to-point linek
- pointToPoint1.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
- pointToPoint1.SetChannelAttribute ("Delay", StringValue ("3ms"));
- NetDeviceContainer devices1;
- NetDeviceContainer devices2;
- NetDeviceContainer devices3;
- NetDeviceContainer devices4;
- NetDeviceContainer devices5;
- devices1 = pointToPoint1.Install (Node0, Node1); // Nainstalování zařízení do uzlů
- devices2 = pointToPoint1.Install (Node1, Node2);
- devices3 = pointToPoint1.Install (Node1, Node3);
- devices4 = pointToPoint1.Install (Node2, Node4);
- devices5 = pointToPoint1.Install (Node3, Node4);
- InternetStackHelper stack;
- stack.Install (n); // Nainstalování protokolové sady na uzly z kontejneru
- Ipv4AddressHelper address1;
- address1.SetBase ("192.168.1.0", "255.255.255.0");
- Ipv4AddressHelper address2;
- address2.SetBase ("192.168.2.0", "255.255.255.0");
- Ipv4AddressHelper address3;
- address3.SetBase ("192.168.3.0", "255.255.255.0");
- Ipv4AddressHelper address4;
- address4.SetBase ("192.168.4.0", "255.255.255.0");
- Ipv4AddressHelper address5;
- address5.SetBase ("192.168.5.0", "255.255.255.0");
- Ipv4InterfaceContainer interface1 = address1.Assign (devices1); // Propojení IP adresy a rozhraní zařízení
- Ipv4InterfaceContainer interface2 = address2.Assign (devices2);
- Ipv4InterfaceContainer interface3 = address3.Assign (devices3);
- Ipv4InterfaceContainer interface4 = address4.Assign (devices4);
- Ipv4InterfaceContainer interface5 = address5.Assign (devices5);
- //-------------------------------------Smerovani-------------------------------------------------------------------------
- Ptr<Ipv4> ipv4N0 = Node0->GetObject<Ipv4> ();
- Ptr<Ipv4> ipv4N1 = Node1->GetObject<Ipv4> ();
- Ptr<Ipv4> ipv4N2 = Node2->GetObject<Ipv4> ();
- Ptr<Ipv4> ipv4N3 = Node3->GetObject<Ipv4> ();
- Ptr<Ipv4> ipv4N4 = Node4->GetObject<Ipv4> ();
- Ipv4StaticRoutingHelper ipv4RoutingHelper;// Povolení statického směrování
- Ptr<Ipv4StaticRouting> staticRoutingN0 =
- ipv4RoutingHelper.GetStaticRouting (ipv4N0);
- Ptr<Ipv4StaticRouting> staticRoutingN1 =
- ipv4RoutingHelper.GetStaticRouting (ipv4N1);
- Ptr<Ipv4StaticRouting> staticRoutingN2 =
- ipv4RoutingHelper.GetStaticRouting (ipv4N2);
- Ptr<Ipv4StaticRouting> staticRoutingN3 =
- ipv4RoutingHelper.GetStaticRouting (ipv4N3);
- Ptr<Ipv4StaticRouting> staticRoutingN4 =
- ipv4RoutingHelper.GetStaticRouting (ipv4N4);
- staticRoutingN0->AddHostRouteTo (Ipv4Address ("192.168.4.2"),
- Ipv4Address ("192.168.1.2"), 1);// cesta z n0 do n4 přes n1
- staticRoutingN0->AddHostRouteTo (Ipv4Address ("192.168.5.2"),
- Ipv4Address ("192.168.1.2"), 1);// cesta z n0 do n4 přes n1
- staticRoutingN1->AddHostRouteTo (Ipv4Address ("192.168.4.2"),
- Ipv4Address ("192.168.2.2"), 2, 5);// cesta z n1 do n4 přes n2
- staticRoutingN1->AddHostRouteTo (Ipv4Address ("192.168.5.2"),
- Ipv4Address ("192.168.2.2"), 2, 5);// cesta z n1 do n4 přes n2
- staticRoutingN2->AddHostRouteTo (Ipv4Address ("192.168.5.2"),
- Ipv4Address ("192.168.4.2"), 2);// cesta z n2 do n4 přes n4
- staticRoutingN4->AddHostRouteTo (Ipv4Address ("192.168.1.1"),
- Ipv4Address ("192.168.4.1"), 1, 5);// cesta z n4 do n0 přes n2
- staticRoutingN2->AddHostRouteTo (Ipv4Address ("192.168.1.1"),
- Ipv4Address ("192.168.2.1"), 1);// cesta z n2 do n0 přes n1
- staticRoutingN1->AddHostRouteTo (Ipv4Address ("192.168.4.2"),
- Ipv4Address ("192.168.3.2"), 3, 5);// cesta z n1 do n4 přes n3
- staticRoutingN1->AddHostRouteTo (Ipv4Address ("192.168.5.2"),
- Ipv4Address ("192.168.3.2"), 3, 5);// cesta z n1 do n4 přes n3
- staticRoutingN3->AddHostRouteTo (Ipv4Address ("192.168.4.2"),
- Ipv4Address ("192.168.5.2"), 2);// cesta z n3 do n4 přes n4
- staticRoutingN4->AddHostRouteTo (Ipv4Address ("192.168.1.1"),
- Ipv4Address ("192.168.3.1"), 1, 3);// cesta z n4 do n0 přes n2
- //-----------------------------------End Sm�rov�n�-----------------------------------------------------------------------
- //-----------------------------------On/Off TCP------------------------------------------------------------------------
- // Vytvoření On/Off aplikace využívající TCP protokol
- OnOffHelper onoffTCP ("ns3::TcpSocketFactory", Address
- (InetSocketAddress (interface4.GetAddress (1), 80)));
- onoffTCP.SetAttribute ("DataRate", StringValue ("0.3Mbps"));
- onoffTCP.SetAttribute ("PacketSize", UintegerValue (512));
- onoffTCP.SetAttribute ("OnTime", StringValue
- ("ns3::ConstantRandomVariable[Constant=1]"));
- onoffTCP.SetAttribute ("OffTime", StringValue
- ("ns3::ConstantRandomVariable[Constant=0]"));
- ApplicationContainer appTCP = onoffTCP.Install (Node0);
- appTCP.Start (Seconds (1.0));
- appTCP.Stop (Seconds (10.0));
- // Vytvoření příjemce paketů
- PacketSinkHelper sinkTCP ("ns3::TcpSocketFactory", Address
- (InetSocketAddress (Ipv4Address::GetAny (), 80)));
- appTCP = sinkTCP.Install (Node4);
- appTCP.Start (Seconds (1.0));
- appTCP.Stop (Seconds (10.0));
- //---------------------------------End On/Off TCP----------------------------------------------------------------------
- //-----------------------------------On/Off UDP------------------------------------------------------------------------
- //---------------------------------End On/Off UDP----------------------------------------------------------------------
- //-------------------------------------Echo UDP------------------------------------------------------------------------
- //-----------------------------------End Echo UDP----------------------------------------------------------------------
- //------------------------------------Gnuplot--------------------------------------------------------------------------
- GnuplotHelper plotHelper;
- plotHelper.ConfigurePlot ("gnuplotPackets","Velikost paketů na uzlu Node0 za"
- "čas aplikace On/Off protokolu TCP","Čas [s]","Velikost paketu [B]","png");
- plotHelper.PlotProbe ("ns3::Ipv4PacketProbe","/NodeList/0/$ns3::Ipv4L3Protocol/Tx",
- "OutputBytes","Pakety odeslané z uzlu Node0",GnuplotAggregator::KEY_BELOW);
- plotHelper.PlotProbe ("ns3::Ipv4PacketProbe","/NodeList/0/$ns3::Ipv4L3Protocol/Rx",
- "OutputBytes","Pakety přijaté na uzel Node0",GnuplotAggregator::KEY_BELOW);
- //----------------------------------End Gnuplot------------------------------------------------------------------------
- //-------------------------------------Trasovac� soubory---------------------------------------------------------------------------
- // Vytvoření trasovacích souborů
- AsciiTraceHelper ascii;
- pointToPoint1.EnableAsciiAll (ascii.CreateFileStream ("uloha1.tr"));
- pointToPoint1.EnablePcapAll ("uloha1");
- // Výpis směrovací tabulky
- // Výpis směrovací tabulky do souboru
- Ipv4GlobalRoutingHelper table;
- Ptr<OutputStreamWrapper> routingStream = Create<OutputStreamWrapper>
- ("static-routing", std::ios::out);
- table.PrintRoutingTableAllAt (Seconds (10), routingStream);
- //-----------------------------------End Trace-------------------------------------------------------------------------
- //---------------------------------Flow monitor------------------------------------------------------------------------
- FlowMonitorHelper flowHelper;
- Ptr<FlowMonitor> flowMonitor;
- flowMonitor = flowHelper.InstallAll();
- Simulator::Stop (Seconds (11));
- // Zastavení simulace
- AnimationInterface anim (animFile);
- anim.SetConstantPosition (Node0, 0, 10);
- // Nastavení pozice uzlu
- anim.SetConstantPosition (Node1, 5, 10);
- anim.SetConstantPosition (Node2, 10, 5);
- anim.SetConstantPosition (Node3, 10, 15);
- anim.SetConstantPosition (Node4, 15, 10);
- anim.EnablePacketMetadata (true);
- Simulator::Run ();
- flowMonitor->CheckForLostPackets ();
- Ptr<Ipv4FlowClassifier> classifier = DynamicCast<Ipv4FlowClassifier>
- (flowHelper.GetClassifier ());
- std::map<FlowId, FlowMonitor::FlowStats> stats = flowMonitor->GetFlowStats ();
- for(std::map<FlowId, FlowMonitor::FlowStats>::const_iterator i = stats.begin ();
- i != stats.end (); ++i){Ipv4FlowClassifier::FiveTuple t = classifier->FindFlow (i->first);
- NS_LOG_UNCOND("\n Flow ID: "<< i->first <<" Src Addr: "<<t.sourceAddress <<" Dst Addr: "<< t.destinationAddress);
- NS_LOG_UNCOND(" Tx Bytes: "<< i->second.txBytes);
- NS_LOG_UNCOND(" Rx Bytes: "<< i->second.rxBytes);
- NS_LOG_UNCOND(" Tx Packets: "<< i->second.txPackets);
- NS_LOG_UNCOND(" Rx Packets: "<< i->second.rxPackets);
- NS_LOG_UNCOND(" Mean Delay: "<< i->second.delaySum.GetSeconds() / (i->second.rxPackets) * 1000 <<" ms");
- NS_LOG_UNCOND(" Mean Jitter: "<< i->second.jitterSum.GetSeconds () / (i->second.rxPackets - 1) * 1000<<" ms");
- NS_LOG_UNCOND(" Throughput: "<< i->second.rxBytes * 8.0 / (i->second.timeLastRxPacket.GetSeconds () - i->second.timeFirstTxPacket.GetSeconds ()) / 1024 <<" Kbps");
- }
- flowMonitor->SerializeToXmlFile("uloha1Flowmon",true,true);
- //-------------------------------End Flow monitor----------------------------------------------------------------------
- std::cout << "\n Animation Trace file created: " << animFile.c_str ()<< std::endl; // Výpis o vytvoření souboru do terminálu
- Simulator::Destroy ();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement