/usr/include/ns3/internet-stack-helper.h is in libns3-dev 3.13+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 | /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2008 INRIA
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
*/
#ifndef INTERNET_STACK_HELPER_H
#define INTERNET_STACK_HELPER_H
#include "ns3/node-container.h"
#include "ns3/net-device-container.h"
#include "ns3/packet.h"
#include "ns3/ptr.h"
#include "ns3/object-factory.h"
#include "ns3/ipv4-l3-protocol.h"
#include "ns3/ipv6-l3-protocol.h"
#include "internet-trace-helper.h"
namespace ns3 {
class Node;
class Ipv4RoutingHelper;
class Ipv6RoutingHelper;
/**
* \brief aggregate IP/TCP/UDP functionality to existing Nodes.
*
* This helper enables pcap and ascii tracing of events in the internet stack
* associated with a node. This is substantially similar to the tracing
* that happens in device helpers, but the important difference is that, well,
* there is no device. This means that the creation of output file names will
* change, and also the user-visible methods will not reference devices and
* therefore the number of trace enable methods is reduced.
*
* Normally we avoid multiple inheritance in ns-3, however, the classes
* PcapUserHelperForIpv4 and AsciiTraceUserHelperForIpv4 are
* treated as "mixins". A mixin is a self-contained class that
* encapsulates a general attribute or a set of functionality that
* may be of interest to many other classes.
*
* This class aggregates instances of these objects, by default, to each node:
* - ns3::ArpL3Protocol
* - ns3::Ipv4L3Protocol
* - ns3::Icmpv4L4Protocol
* - ns3::UdpL4Protocol
* - a TCP based on the TCP factory provided
* - a PacketSocketFactory
* - Ipv4 routing (a list routing object and a static routing object)
*/
class InternetStackHelper : public PcapHelperForIpv4, public PcapHelperForIpv6,
public AsciiTraceHelperForIpv4, public AsciiTraceHelperForIpv6
{
public:
/**
* Create a new InternetStackHelper which uses a mix of static routing
* and global routing by default. The static routing protocol
* (ns3::Ipv4StaticRouting) and the global routing protocol are
* stored in an ns3::Ipv4ListRouting protocol with priorities 0, and -10
* by default. If you wish to use different priorites and different
* routing protocols, you need to use an adhoc ns3::Ipv4RoutingHelper,
* such as ns3::OlsrHelper
*/
InternetStackHelper(void);
/**
* Destroy the InternetStackHelper
*/
virtual ~InternetStackHelper(void);
InternetStackHelper (const InternetStackHelper &);
InternetStackHelper &operator = (const InternetStackHelper &o);
/**
* Return helper internal state to that of a newly constructed one
*/
void Reset (void);
/**
* \param routing a new routing helper
*
* Set the routing helper to use during Install. The routing
* helper is really an object factory which is used to create
* an object of type ns3::Ipv4RoutingProtocol per node. This routing
* object is then associated to a single ns3::Ipv4 object through its
* ns3::Ipv4::SetRoutingProtocol.
*/
void SetRoutingHelper (const Ipv4RoutingHelper &routing);
/**
* \brief Set IPv6 routing helper.
* \param routing IPv6 routing helper
*/
void SetRoutingHelper (const Ipv6RoutingHelper &routing);
/**
* Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes
* onto the provided node. This method will assert if called on a node that
* already has an Ipv4 object aggregated to it.
*
* \param nodeName The name of the node on which to install the stack.
*/
void Install (std::string nodeName) const;
/**
* Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes
* onto the provided node. This method will assert if called on a node that
* already has an Ipv4 object aggregated to it.
*
* \param node The node on which to install the stack.
*/
void Install (Ptr<Node> node) const;
/**
* For each node in the input container, aggregate implementations of the
* ns3::Ipv4, ns3::Ipv6, ns3::Udp, and, ns3::Tcp classes. The program will assert
* if this method is called on a container with a node that already has
* an Ipv4 object aggregated to it.
*
* \param c NodeContainer that holds the set of nodes on which to install the
* new stacks.
*/
void Install (NodeContainer c) const;
/**
* Aggregate IPv4, IPv6, UDP, and TCP stacks to all nodes in the simulation
*/
void InstallAll (void) const;
/**
* \brief set the Tcp stack which will not need any other parameter.
*
* This function sets up the tcp stack to the given TypeId. It should not be
* used for NSC stack setup because the nsc stack needs the Library attribute
* to be setup, please use instead the version that requires an attribute
* and a value. If you choose to use this function anyways to set nsc stack
* the default value for the linux library will be used: "liblinux2.6.26.so".
*
* \param tid the type id, typically it is set to "ns3::TcpL4Protocol"
*/
void SetTcp (std::string tid);
/**
* \brief This function is used to setup the Network Simulation Cradle stack with library value.
*
* Give the NSC stack a shared library file name to use when creating the
* stack implementation. The attr string is actually the attribute name to
* be setup and val is its value. The attribute is the stack implementation
* to be used and the value is the shared library name.
*
* \param tid The type id, for the case of nsc it would be "ns3::NscTcpL4Protocol"
* \param attr The attribute name that must be setup, for example "Library"
* \param val The attribute value, which will be in fact the shared library name (example:"liblinux2.6.26.so")
*/
void SetTcp (std::string tid, std::string attr, const AttributeValue &val);
/**
* \brief Enable/disable IPv4 stack install.
* \param enable enable state
*/
void SetIpv4StackInstall (bool enable);
/**
* \brief Enable/disable IPv6 stack install.
* \param enable enable state
*/
void SetIpv6StackInstall (bool enable);
private:
/**
* @brief Enable pcap output the indicated Ipv4 and interface pair.
* @internal
*
* @param prefix Filename prefix to use for pcap files.
* @param ipv4 Ptr to the Ipv4 interface on which you want to enable tracing.
* @param interface Interface ID on the Ipv4 on which you want to enable tracing.
*/
virtual void EnablePcapIpv4Internal (std::string prefix,
Ptr<Ipv4> ipv4,
uint32_t interface,
bool explicitFilename);
/**
* @brief Enable ascii trace output on the indicated Ipv4 and interface pair.
* @internal
*
* @param stream An OutputStreamWrapper representing an existing file to use
* when writing trace data.
* @param prefix Filename prefix to use for ascii trace files.
* @param ipv4 Ptr to the Ipv4 interface on which you want to enable tracing.
* @param interface Interface ID on the Ipv4 on which you want to enable tracing.
*/
virtual void EnableAsciiIpv4Internal (Ptr<OutputStreamWrapper> stream,
std::string prefix,
Ptr<Ipv4> ipv4,
uint32_t interface,
bool explicitFilename);
/**
* @brief Enable pcap output the indicated Ipv6 and interface pair.
* @internal
*
* @param prefix Filename prefix to use for pcap files.
* @param ipv6 Ptr to the Ipv6 interface on which you want to enable tracing.
* @param interface Interface ID on the Ipv6 on which you want to enable tracing.
*/
virtual void EnablePcapIpv6Internal (std::string prefix,
Ptr<Ipv6> ipv6,
uint32_t interface,
bool explicitFilename);
/**
* @brief Enable ascii trace output on the indicated Ipv6 and interface pair.
* @internal
*
* @param stream An OutputStreamWrapper representing an existing file to use
* when writing trace data.
* @param prefix Filename prefix to use for ascii trace files.
* @param ipv6 Ptr to the Ipv6 interface on which you want to enable tracing.
* @param interface Interface ID on the Ipv6 on which you want to enable tracing.
*/
virtual void EnableAsciiIpv6Internal (Ptr<OutputStreamWrapper> stream,
std::string prefix,
Ptr<Ipv6> ipv6,
uint32_t interface,
bool explicitFilename);
void Initialize (void);
ObjectFactory m_tcpFactory;
const Ipv4RoutingHelper *m_routing;
/**
* \internal
* \brief IPv6 routing helper.
*/
const Ipv6RoutingHelper *m_routingv6;
/**
* \internal
*/
static void CreateAndAggregateObjectFromTypeId (Ptr<Node> node, const std::string typeId);
/**
* \internal
*/
static void Cleanup (void);
/**
* \internal
*/
bool PcapHooked (Ptr<Ipv4> ipv4);
/**
* \internal
*/
bool AsciiHooked (Ptr<Ipv4> ipv4);
/**
* \internal
*/
bool PcapHooked (Ptr<Ipv6> ipv6);
/**
* \internal
*/
bool AsciiHooked (Ptr<Ipv6> ipv6);
/**
* \brief IPv4 install state (enabled/disabled) ?
*/
bool m_ipv4Enabled;
/**
* \brief IPv6 install state (enabled/disabled) ?
*/
bool m_ipv6Enabled;
};
} // namespace ns3
#endif /* INTERNET_STACK_HELPER_H */
|