151 #include "ns3/assert.h" 
  153 #include "ns3/object.h" 
  154 #include "ns3/names.h" 
  155 #include "ns3/ipv4.h" 
  156 #include "ns3/ipv6.h" 
  157 #include "ns3/packet-socket-factory.h" 
  158 #include "ns3/config.h" 
  159 #include "ns3/simulator.h" 
  160 #include "ns3/string.h" 
  161 #include "ns3/net-device.h" 
  162 #include "ns3/callback.h" 
  163 #include "ns3/node.h" 
  164 #include "ns3/node-list.h" 
  165 #include "ns3/core-config.h" 
  166 #include "ns3/arp-l3-protocol.h" 
  168 #include "ns3/ipv4-global-routing.h" 
  169 #include "ns3/ipv4-list-routing-helper.h" 
  170 #include "ns3/ipv4-static-routing-helper.h" 
  171 #include "ns3/ipv4-global-routing-helper.h" 
  172 #include "ns3/ipv6-list-routing-helper.h" 
  173 #include "ns3/ipv6-static-routing-helper.h" 
  174 #include "ns3/ipv6-extension.h" 
  175 #include "ns3/ipv6-extension-demux.h" 
  176 #include "ns3/ipv6-extension-header.h" 
  177 #include "ns3/icmpv6-l4-protocol.h" 
  178 #include "ns3/global-router-interface.h" 
  194 #define INTERFACE_CONTEXT 
  236     m_ipv4Enabled (true),
 
  237     m_ipv6Enabled (true),
 
  238     m_ipv4ArpJitterEnabled (true),
 
  239     m_ipv6NsRsJitterEnabled (true)
 
  249   SetTcp (
"ns3::TcpL4Protocol");
 
  255   listRouting.
Add (staticRouting, 0);
 
  256   listRouting.
Add (globalRouting, -10);
 
  257   listRoutingv6.
Add (staticRoutingv6, 0);
 
  343   int64_t currentStream = stream;
 
  353               currentStream += gr->AssignStreams (currentStream);
 
  367           if (arpL3Protocol != 0)
 
  369               currentStream += arpL3Protocol->AssignStreams (currentStream);
 
  376           if (icmpv6L4Protocol != 0)
 
  378               currentStream += icmpv6L4Protocol->AssignStreams (currentStream);
 
  382   return (currentStream - stream);
 
  430                           "an InternetStack to a node with an existing Ipv4 object");
 
  441           arp->SetAttribute (
"RequestJitter", 
StringValue (
"ns3::ConstantRandomVariable[Constant=0.0]"));
 
  446       ipv4->SetRoutingProtocol (ipv4Routing);
 
  455                           "an InternetStack to a node with an existing Ipv6 object");
 
  465           icmpv6l4->SetAttribute (
"SolicitationJitter", 
StringValue (
"ns3::ConstantRandomVariable[Constant=0.0]"));
 
  470       ipv6->SetRoutingProtocol (ipv6Routing);
 
  473       ipv6->RegisterExtensions ();
 
  474       ipv6->RegisterOptions ();
 
  489   Ptr<Node> node = Names::Find<Node> (nodeName);
 
  507       NS_LOG_INFO (
"Ignoring packet to/from interface " << interface);
 
  522       if ((*i).first.first == ipv4)
 
  537       NS_LOG_INFO (
"Call to enable Ipv4 pcap tracing but Ipv4 not enabled");
 
  547   std::string filename;
 
  548   if (explicitFilename)
 
  570       NS_ASSERT_MSG (ipv4L3Protocol, 
"InternetStackHelper::EnablePcapIpv4Internal(): " 
  571                      "m_ipv4Enabled and ipv4L3Protocol inconsistent");
 
  574       NS_ASSERT_MSG (result == 
true, 
"InternetStackHelper::EnablePcapIpv4Internal():  " 
  575                      "Unable to connect ipv4L3Protocol \"Tx\"");
 
  578       NS_ASSERT_MSG (result == 
true, 
"InternetStackHelper::EnablePcapIpv4Internal():  " 
  579                      "Unable to connect ipv4L3Protocol \"Rx\"");
 
  599       NS_LOG_INFO (
"Ignoring packet to/from interface " << interface);
 
  614       if ((*i).first.first == ipv6)
 
  629       NS_LOG_INFO (
"Call to enable Ipv6 pcap tracing but Ipv6 not enabled");
 
  639   std::string filename;
 
  640   if (explicitFilename)
 
  662       NS_ASSERT_MSG (ipv6L3Protocol, 
"InternetStackHelper::EnablePcapIpv6Internal(): " 
  663                      "m_ipv6Enabled and ipv6L3Protocol inconsistent");
 
  666       NS_ASSERT_MSG (result == 
true, 
"InternetStackHelper::EnablePcapIpv6Internal():  " 
  667                      "Unable to connect ipv6L3Protocol \"Tx\"");
 
  670       NS_ASSERT_MSG (result == 
true, 
"InternetStackHelper::EnablePcapIpv6Internal():  " 
  671                      "Unable to connect ipv6L3Protocol \"Rx\"");
 
  695       NS_LOG_INFO (
"Ignoring packet to/from interface " << interface);
 
  714       NS_LOG_INFO (
"Ignoring packet to/from interface " << interface);
 
  731       NS_LOG_INFO (
"Ignoring packet to/from interface " << interface);
 
  757       NS_LOG_INFO (
"Ignoring packet to/from interface " << interface);
 
  763 #ifdef INTERFACE_CONTEXT 
  782       NS_LOG_INFO (
"Ignoring packet to/from interface " << interface);
 
  786 #ifdef INTERFACE_CONTEXT 
  788                         << *packet << std::endl;
 
  805       NS_LOG_INFO (
"Ignoring packet to/from interface " << interface);
 
  809 #ifdef INTERFACE_CONTEXT 
  811                         << *packet << std::endl;
 
  824       if ((*i).first.first == ipv4)
 
  838   bool explicitFilename)
 
  842       NS_LOG_INFO (
"Call to enable Ipv4 ascii tracing but Ipv4 not enabled");
 
  871       std::string filename;
 
  872       if (explicitFilename)
 
  906           NS_ASSERT_MSG (result == 
true, 
"InternetStackHelper::EnableAsciiIpv4Internal():  " 
  907                          "Unable to connect ipv4L3Protocol \"Drop\"");
 
  908           result = ipv4L3Protocol->TraceConnectWithoutContext (
"Tx", 
 
  910           NS_ASSERT_MSG (result == 
true, 
"InternetStackHelper::EnableAsciiIpv4Internal():  " 
  911                          "Unable to connect ipv4L3Protocol \"Tx\"");
 
  912           result = ipv4L3Protocol->TraceConnectWithoutContext (
"Rx", 
 
  914           NS_ASSERT_MSG (result == 
true, 
"InternetStackHelper::EnableAsciiIpv4Internal():  " 
  915                          "Unable to connect ipv4L3Protocol \"Rx\"");
 
  937       std::ostringstream oss;
 
  945       oss << 
"/NodeList/" << node->
GetId () << 
"/$ns3::ArpL3Protocol/Drop";
 
  953       oss << 
"/NodeList/" << node->
GetId () << 
"/$ns3::Ipv4L3Protocol/Drop";
 
  956       oss << 
"/NodeList/" << node->
GetId () << 
"/$ns3::Ipv4L3Protocol/Tx";
 
  959       oss << 
"/NodeList/" << node->
GetId () << 
"/$ns3::Ipv4L3Protocol/Rx";
 
  984       NS_LOG_INFO (
"Ignoring packet to/from interface " << interface);
 
 1003       NS_LOG_INFO (
"Ignoring packet to/from interface " << interface);
 
 1020       NS_LOG_INFO (
"Ignoring packet to/from interface " << interface);
 
 1030   std::string context,
 
 1046       NS_LOG_INFO (
"Ignoring packet to/from interface " << interface);
 
 1052 #ifdef INTERFACE_CONTEXT 
 1063   std::string context,
 
 1071       NS_LOG_INFO (
"Ignoring packet to/from interface " << interface);
 
 1075 #ifdef INTERFACE_CONTEXT 
 1077                         << *packet << std::endl;
 
 1086   std::string context,
 
 1094       NS_LOG_INFO (
"Ignoring packet to/from interface " << interface);
 
 1098 #ifdef INTERFACE_CONTEXT 
 1100                         << *packet << std::endl;
 
 1113       if ((*i).first.first == ipv6)
 
 1127   bool explicitFilename)
 
 1131       NS_LOG_INFO (
"Call to enable Ipv6 ascii tracing but Ipv6 not enabled");
 
 1160       std::string filename;
 
 1161       if (explicitFilename)
 
 1185           bool result = ipv6L3Protocol->TraceConnectWithoutContext (
"Drop",
 
 1187           NS_ASSERT_MSG (result == 
true, 
"InternetStackHelper::EnableAsciiIpv6Internal():  " 
 1188                          "Unable to connect ipv6L3Protocol \"Drop\"");
 
 1189           result = ipv6L3Protocol->TraceConnectWithoutContext (
"Tx", 
 
 1191           NS_ASSERT_MSG (result == 
true, 
"InternetStackHelper::EnableAsciiIpv6Internal():  " 
 1192                          "Unable to connect ipv6L3Protocol \"Tx\"");
 
 1193           result = ipv6L3Protocol->TraceConnectWithoutContext (
"Rx", 
 
 1195           NS_ASSERT_MSG (result == 
true, 
"InternetStackHelper::EnableAsciiIpv6Internal():  " 
 1196                          "Unable to connect ipv6L3Protocol \"Rx\"");
 
 1218       std::ostringstream oss;
 
 1221       oss << 
"/NodeList/" << node->
GetId () << 
"/$ns3::Ipv6L3Protocol/Drop";
 
 1224       oss << 
"/NodeList/" << node->
GetId () << 
"/$ns3::Ipv6L3Protocol/Tx";
 
 1227       oss << 
"/NodeList/" << node->
GetId () << 
"/$ns3::Ipv6L3Protocol/Rx";
 
bool m_ipv4ArpJitterEnabled
IPv4 ARP Jitter state (enabled/disabled) ? 
 
bool m_ipv6NsRsJitterEnabled
IPv6 IPv6 NS and RS Jitter state (enabled/disabled) ? 
 
int64_t AssignStreams(int64_t stream)
 
Manage ASCII trace files for device models. 
 
virtual void EnablePcapIpv6Internal(std::string prefix, Ptr< Ipv6 > ipv6, uint32_t interface, bool explicitFilename)
Enable pcap output the indicated Ipv6 and interface pair. 
 
#define NS_LOG_FUNCTION(parameters)
 
Ptr< PcapFileWrapper > CreateFile(std::string filename, std::ios::openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0)
Create and initialize a pcap file. 
 
static void Ipv4L3ProtocolDropSinkWithoutContext(Ptr< OutputStreamWrapper > stream, Ipv4Header const &header, Ptr< const Packet > packet, Ipv4L3Protocol::DropReason reason, Ptr< Ipv4 > ipv4, uint32_t interface)
 
void HookDefaultDropSinkWithoutContext(Ptr< T > object, std::string traceName, Ptr< OutputStreamWrapper > stream)
Hook a trace source to the default drop operation trace sink that does not accept nor log a trace con...
 
std::vector< Ptr< Node > >::const_iterator Iterator
 
Access to the IPv6 forwarding table, interfaces, and configuration. 
 
hold variables of type string 
 
static const uint8_t EXT_NUMBER
Fragmentation extension number. 
 
Hold a value for an Attribute. 
 
void SetIpv4ArpJitter(bool enable)
Enable/disable IPv4 ARP Jitter. 
 
Manage pcap files for device models. 
 
IPv6 layer implementation. 
 
Demultiplexes IPv6 extensions. 
 
void Write(Time t, Ptr< const Packet > p)
Write the next packet to file. 
 
virtual Ipv4RoutingHelper * Copy(void) const =0
virtual constructor 
 
Callback< R > MakeBoundCallback(R(*fnPtr)(TX), ARG a1)
 
static InterfaceFileMapIpv4 g_interfaceFileMapIpv4
 
ObjectFactory m_tcpFactory
 
virtual Ipv6RoutingHelper * Copy(void) const =0
virtual constructor 
 
#define NS_ASSERT(condition)
 
static void DefaultDropSinkWithContext(Ptr< OutputStreamWrapper > file, std::string context, Ptr< const Packet > p)
 
void SetTypeId(TypeId tid)
 
aggregate IP/TCP/UDP functionality to existing Nodes. 
 
std::map< InterfacePairIpv6, Ptr< PcapFileWrapper > > InterfaceFileMapIpv6
 
static void Ipv4L3ProtocolRxSinkWithoutContext(Ptr< OutputStreamWrapper > stream, Ptr< const Packet > packet, Ptr< Ipv4 > ipv4, uint32_t interface)
 
Iterator End(void) const 
Get an iterator which indicates past-the-last Node in the container. 
 
static void Ipv6L3ProtocolDropSinkWithContext(Ptr< OutputStreamWrapper > stream, std::string context, Ipv6Header const &header, Ptr< const Packet > packet, Ipv6L3Protocol::DropReason reason, Ptr< Ipv6 > ipv6, uint32_t interface)
 
Ptr< OutputStreamWrapper > CreateFileStream(std::string filename, std::ios::openmode filemode=std::ios::out)
Create and initialize an output stream object we'll use to write the traced bits. ...
 
std::map< InterfacePairIpv6, Ptr< OutputStreamWrapper > > InterfaceStreamMapIpv6
 
void Connect(std::string path, const CallbackBase &cb)
 
static InterfaceStreamMapIpv4 g_interfaceStreamMapIpv4
 
std::map< InterfacePairIpv4, Ptr< OutputStreamWrapper > > InterfaceStreamMapIpv4
 
static void Ipv4L3ProtocolTxSinkWithoutContext(Ptr< OutputStreamWrapper > stream, Ptr< const Packet > packet, Ptr< Ipv4 > ipv4, uint32_t interface)
 
#define NS_FATAL_ERROR(msg)
fatal error handling 
 
InternetStackHelper & operator=(const InternetStackHelper &o)
 
static void CreateAndAggregateObjectFromTypeId(Ptr< Node > node, const std::string typeId)
 
DropReason
Reason why a packet has been dropped. 
 
double GetSeconds(void) const 
 
static void Ipv4L3ProtocolTxSinkWithContext(Ptr< OutputStreamWrapper > stream, std::string context, Ptr< const Packet > packet, Ptr< Ipv4 > ipv4, uint32_t interface)
 
virtual void EnablePcapIpv4Internal(std::string prefix, Ptr< Ipv4 > ipv4, uint32_t interface, bool explicitFilename)
Enable pcap output the indicated Ipv4 and interface pair. 
 
void InstallAll(void) const 
 
static void EnablePrinting(void)
 
Ptr< Object > Create(void) const 
 
void SetIpv4StackInstall(bool enable)
Enable/disable IPv4 stack install. 
 
static InterfaceFileMapIpv6 g_interfaceFileMapIpv6
 
std::pair< Ptr< Ipv6 >, uint32_t > InterfacePairIpv6
 
A factory to create ns3::Ipv6RoutingProtocol objects. 
 
An implementation of the ICMPv6 protocol. 
 
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
 
bool PcapHooked(Ptr< Ipv4 > ipv4)
 
std::string GetFilenameFromInterfacePair(std::string prefix, Ptr< Object > object, uint32_t interface, bool useObjectNames=true)
Let the pcap helper figure out a reasonable filename to use for the pcap file associated with a node...
 
void AggregateObject(Ptr< Object > other)
 
bool m_ipv6Enabled
IPv6 install state (enabled/disabled) ? 
 
a factory to create ns3::Ipv4RoutingProtocol objects 
 
static void Ipv6L3ProtocolTxSinkWithoutContext(Ptr< OutputStreamWrapper > stream, Ptr< const Packet > packet, Ptr< Ipv6 > ipv6, uint32_t interface)
 
static void Ipv6L3ProtocolTxSinkWithContext(Ptr< OutputStreamWrapper > stream, std::string context, Ptr< const Packet > packet, Ptr< Ipv6 > ipv6, uint32_t interface)
 
Access to the Ipv4 forwarding table, interfaces, and configuration. 
 
Ptr< Packet > Copy(void) const 
 
virtual Ptr< Ipv6RoutingProtocol > Create(Ptr< Node > node) const =0
 
static void Ipv6L3ProtocolRxSinkWithoutContext(Ptr< OutputStreamWrapper > stream, Ptr< const Packet > packet, Ptr< Ipv6 > ipv6, uint32_t interface)
 
bool TraceConnectWithoutContext(std::string name, const CallbackBase &cb)
 
Implement the Ipv4 layer. 
 
keep track of a set of node pointers. 
 
Helper class that adds ns3::Ipv6StaticRouting objects. 
 
Iterator Begin(void) const 
Get an iterator which refers to the first Node in the container. 
 
NS_LOG_COMPONENT_DEFINE("InternetStackHelper")
 
void SetTcp(std::string tid)
set the Tcp stack which will not need any other parameter. 
 
static void Ipv6L3ProtocolDropSinkWithoutContext(Ptr< OutputStreamWrapper > stream, Ipv6Header const &header, Ptr< const Packet > packet, Ipv6L3Protocol::DropReason reason, Ptr< Ipv6 > ipv6, uint32_t interface)
 
void Install(std::string nodeName) const 
 
void Set(std::string name, const AttributeValue &value)
 
void Add(const Ipv4RoutingHelper &routing, int16_t priority)
 
static void Ipv6L3ProtocolRxSinkWithContext(Ptr< OutputStreamWrapper > stream, std::string context, Ptr< const Packet > packet, Ptr< Ipv6 > ipv6, uint32_t interface)
 
virtual ~InternetStackHelper(void)
 
An interface aggregated to a node to provide global routing info. 
 
#define NS_ASSERT_MSG(condition, message)
 
static NodeContainer GetGlobal(void)
Create a NodeContainer that contains a list of all nodes created through NodeContainer::Create() and ...
 
void Add(const Ipv6RoutingHelper &routing, int16_t priority)
 
std::pair< Ptr< Ipv4 >, uint32_t > InterfacePairIpv4
 
static void Ipv4L3ProtocolDropSinkWithContext(Ptr< OutputStreamWrapper > stream, std::string context, Ipv4Header const &header, Ptr< const Packet > packet, Ipv4L3Protocol::DropReason reason, Ptr< Ipv4 > ipv4, uint32_t interface)
 
instantiate subclasses of ns3::Object. 
 
const Ipv6RoutingHelper * m_routingv6
IPv6 routing helper. 
 
int64_t AssignStreams(NodeContainer c, int64_t stream)
 
uint32_t GetId(void) const 
 
static void Ipv4L3ProtocolRxSinkWithContext(Ptr< OutputStreamWrapper > stream, std::string context, Ptr< const Packet > packet, Ptr< Ipv4 > ipv4, uint32_t interface)
 
Helper class that adds ns3::Ipv4StaticRouting objects. 
 
std::string GetFilenameFromInterfacePair(std::string prefix, Ptr< Object > object, uint32_t interface, bool useObjectNames=true)
Let the ascii trace helper figure out a reasonable filename to use for an ascii trace file associated...
 
virtual Ptr< Ipv4RoutingProtocol > Create(Ptr< Node > node) const =0
 
An implementation of the ARP protocol. 
 
Helper class that adds ns3::Ipv4GlobalRouting objects. 
 
Helper class that adds ns3::Ipv6ListRouting objects. 
 
Helper class that adds ns3::Ipv4ListRouting objects. 
 
bool AsciiHooked(Ptr< Ipv4 > ipv4)
 
virtual void EnableAsciiIpv6Internal(Ptr< OutputStreamWrapper > stream, std::string prefix, Ptr< Ipv6 > ipv6, uint32_t interface, bool explicitFilename)
Enable ascii trace output on the indicated Ipv6 and interface pair. 
 
InternetStackHelper(void)
 
a base class which provides memory management and object aggregation 
 
std::map< InterfacePairIpv4, Ptr< PcapFileWrapper > > InterfaceFileMapIpv4
 
const Ipv4RoutingHelper * m_routing
 
Ptr< T > GetObject(void) const 
 
void SetIpv6NsRsJitter(bool enable)
Enable/disable IPv6 NS and RS Jitter. 
 
static InterfaceStreamMapIpv6 g_interfaceStreamMapIpv6
 
void SetRoutingHelper(const Ipv4RoutingHelper &routing)
 
std::ostream * GetStream(void)
 
void AddHeader(const Header &header)
 
bool m_ipv4Enabled
IPv4 install state (enabled/disabled) ? 
 
static void Ipv6L3ProtocolRxTxSink(Ptr< const Packet > p, Ptr< Ipv6 > ipv6, uint32_t interface)
 
virtual void EnableAsciiIpv4Internal(Ptr< OutputStreamWrapper > stream, std::string prefix, Ptr< Ipv4 > ipv4, uint32_t interface, bool explicitFilename)
Enable ascii trace output on the indicated Ipv4 and interface pair. 
 
void SetIpv6StackInstall(bool enable)
Enable/disable IPv6 stack install. 
 
DropReason
Reason why a packet has been dropped. 
 
static void Ipv4L3ProtocolRxTxSink(Ptr< const Packet > p, Ptr< Ipv4 > ipv4, uint32_t interface)