A Discrete-Event Network Simulator
API
ping6.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2008-2009 Strasbourg University
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
19  */
20 
21 // Network topology
22 //
23 // n0 n1
24 // | |
25 // =================
26 // LAN
27 //
28 // - ICMPv6 echo request flows from n0 to n1 and back with ICMPv6 echo reply
29 // - DropTail queues
30 // - Tracing of queues and packet receptions to file "ping6.tr"
31 
32 #include <fstream>
33 #include "ns3/core-module.h"
34 #include "ns3/internet-module.h"
35 #include "ns3/csma-module.h"
36 #include "ns3/internet-apps-module.h"
37 
38 using namespace ns3;
39 
40 NS_LOG_COMPONENT_DEFINE ("Ping6Example");
41 
42 int main (int argc, char **argv)
43 {
44  bool verbose = false;
45 
46  CommandLine cmd (__FILE__);
47  cmd.AddValue ("verbose", "turn on log components", verbose);
48  cmd.Parse (argc, argv);
49 
50  if (verbose)
51  {
52  LogComponentEnable ("Ping6Example", LOG_LEVEL_INFO);
53  LogComponentEnable ("Ipv6EndPointDemux", LOG_LEVEL_ALL);
54  LogComponentEnable ("Ipv6L3Protocol", LOG_LEVEL_ALL);
55  LogComponentEnable ("Ipv6StaticRouting", LOG_LEVEL_ALL);
56  LogComponentEnable ("Ipv6ListRouting", LOG_LEVEL_ALL);
57  LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
58  LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_ALL);
59  LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
60  LogComponentEnable ("NdiscCache", LOG_LEVEL_ALL);
61  }
62 
63  NS_LOG_INFO ("Create nodes.");
65  n.Create (4);
66 
67  /* Install IPv4/IPv6 stack */
68  InternetStackHelper internetv6;
69  internetv6.SetIpv4StackInstall (false);
70  internetv6.Install (n);
71 
72  NS_LOG_INFO ("Create channels.");
74  csma.SetChannelAttribute ("DataRate", DataRateValue (5000000));
75  csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2)));
76  NetDeviceContainer d = csma.Install (n);
77 
78  Ipv6AddressHelper ipv6;
79  NS_LOG_INFO ("Assign IPv6 Addresses.");
80  Ipv6InterfaceContainer i = ipv6.Assign (d);
81 
82  NS_LOG_INFO ("Create Applications.");
83 
84  /* Create a Ping6 application to send ICMPv6 echo request from node zero to
85  * all-nodes (ff02::1).
86  */
87  uint32_t packetSize = 1024;
88  uint32_t maxPacketCount = 5;
89  Time interPacketInterval = Seconds (1.);
90  Ping6Helper ping6;
91 
92  /*
93  ping6.SetLocal (i.GetAddress (0, 1));
94  ping6.SetRemote (i.GetAddress (1, 1));
95  */
96  ping6.SetIfIndex (i.GetInterfaceIndex (0));
98 
99  ping6.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount));
100  ping6.SetAttribute ("Interval", TimeValue (interPacketInterval));
101  ping6.SetAttribute ("PacketSize", UintegerValue (packetSize));
102  ApplicationContainer apps = ping6.Install (n.Get (0));
103  apps.Start (Seconds (2.0));
104  apps.Stop (Seconds (10.0));
105 
106  AsciiTraceHelper ascii;
107  csma.EnableAsciiAll (ascii.CreateFileStream ("ping6.tr"));
108  csma.EnablePcapAll (std::string ("ping6"), true);
109 
110  NS_LOG_INFO ("Run Simulation.");
111  Simulator::Run ();
113  NS_LOG_INFO ("Done.");
114 }
115 
holds a vector of ns3::Application pointers.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
Manage ASCII trace files for device models.
Definition: trace-helper.h:161
Keep track of a set of IPv6 interfaces.
ApplicationContainer Install(NodeContainer c)
Install the application in Nodes.
Definition: ping6-helper.cc:50
static const uint32_t packetSize
static void Run(void)
Run the simulation.
Definition: simulator.cc:172
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:205
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1286
aggregate IP/TCP/UDP functionality to existing Nodes.
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:281
void SetAttribute(std::string name, const AttributeValue &value)
Set some attributes.
Definition: ping6-helper.cc:45
cmd
Definition: second.py:35
Ptr< OutputStreamWrapper > CreateFileStream(std::string filename, std::ios::openmode filemode=std::ios::out)
Create and initialize an output stream object we&#39;ll use to write the traced bits. ...
Ipv6InterfaceContainer Assign(const NetDeviceContainer &c)
Allocate an Ipv6InterfaceContainer with auto-assigned addresses.
void LogComponentEnable(char const *name, enum LogLevel level)
Enable the logging output associated with that log component.
Definition: log.cc:361
AttributeValue implementation for Time.
Definition: nstime.h:1342
Hold an unsigned integer type.
Definition: uinteger.h:44
void SetIpv4StackInstall(bool enable)
Enable/disable IPv4 stack install.
LOG_INFO and above.
Definition: log.h:107
holds a vector of ns3::NetDevice pointers
uint32_t GetInterfaceIndex(uint32_t i) const
Get the interface index for the specified node index.
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter...
csma
Definition: second.py:63
Parse command-line arguments.
Definition: command-line.h:226
static void Destroy(void)
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:136
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
static Ipv6Address GetAllNodesMulticast()
Get the "all nodes multicast" address.
void SetRemote(Ipv6Address ip)
Set the remote IPv6 address.
Definition: ping6-helper.cc:40
build a set of CsmaNetDevice objects
Definition: csma-helper.h:46
Helper class to auto-assign global IPv6 unicast addresses.
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
void SetIfIndex(uint32_t ifIndex)
Set the out interface index.
Definition: ping6-helper.cc:67
void Stop(Time stop)
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter...
AttributeValue implementation for DataRate.
Definition: data-rate.h:229
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1278
Print everything.
Definition: log.h:116
Ping6 application helper.
Definition: ping6-helper.h:38
bool verbose