10#include "ns3/config.h" 
   13#include "ns3/net-device-queue-interface.h" 
   14#include "ns3/packet.h" 
   15#include "ns3/point-to-point-channel.h" 
   16#include "ns3/point-to-point-net-device.h" 
   17#include "ns3/simulator.h" 
   20#include "ns3/mpi-interface.h" 
   21#include "ns3/mpi-receiver.h" 
   22#include "ns3/point-to-point-remote-channel.h" 
   27#include "ns3/trace-helper.h" 
   64                                       bool explicitFilename)
 
   74        NS_LOG_INFO(
"Device " << device << 
" not of type ns3::PointToPointNetDevice");
 
 
   98                                        bool explicitFilename)
 
  108        NS_LOG_INFO(
"Device " << device << 
" not of type ns3::PointToPointNetDevice");
 
  133        std::string filename;
 
  134        if (explicitFilename)
 
  185    uint32_t nodeid = nd->GetNode()->GetId();
 
  186    uint32_t deviceid = nd->GetIfIndex();
 
  187    std::ostringstream oss;
 
  189    oss << 
"/NodeList/" << nodeid << 
"/DeviceList/" << deviceid
 
  190        << 
"/$ns3::PointToPointNetDevice/MacRx";
 
  195    oss << 
"/NodeList/" << nodeid << 
"/DeviceList/" << deviceid
 
  196        << 
"/$ns3::PointToPointNetDevice/TxQueue/Enqueue";
 
  201    oss << 
"/NodeList/" << nodeid << 
"/DeviceList/" << deviceid
 
  202        << 
"/$ns3::PointToPointNetDevice/TxQueue/Dequeue";
 
  207    oss << 
"/NodeList/" << nodeid << 
"/DeviceList/" << deviceid
 
  208        << 
"/$ns3::PointToPointNetDevice/TxQueue/Drop";
 
  213    oss << 
"/NodeList/" << nodeid << 
"/DeviceList/" << deviceid
 
  214        << 
"/$ns3::PointToPointNetDevice/PhyRxDrop";
 
 
  235    devA->SetQueue(queueA);
 
  240    devB->SetQueue(queueB);
 
  245        ndqiA->GetTxQueue(0)->ConnectQueueTraces(queueA);
 
  246        devA->AggregateObject(ndqiA);
 
  248        ndqiB->GetTxQueue(0)->ConnectQueueTraces(queueB);
 
  249        devB->AggregateObject(ndqiB);
 
  258    bool useNormalChannel = 
true;
 
  261        uint32_t n1SystemId = a->GetSystemId();
 
  262        uint32_t n2SystemId = b->GetSystemId();
 
  264        if (n1SystemId != currSystemId || n2SystemId != currSystemId)
 
  266            useNormalChannel = 
false;
 
  269    if (useNormalChannel)
 
  282        devA->AggregateObject(mpiRecA);
 
  283        devB->AggregateObject(mpiRecB);
 
  289    devA->Attach(channel);
 
  290    devB->Attach(channel);
 
 
Manage ASCII trace files for device models.
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::string GetFilenameFromDevice(std::string prefix, Ptr< NetDevice > device, bool useObjectNames=true)
Let the ascii trace helper figure out a reasonable filename to use for an ascii trace file associated...
static void DefaultDropSinkWithContext(Ptr< OutputStreamWrapper > file, std::string context, Ptr< const Packet > p)
Basic Drop default trace sink.
static void DefaultReceiveSinkWithContext(Ptr< OutputStreamWrapper > file, std::string context, Ptr< const Packet > p)
Basic Receive default trace sink.
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.
void HookDefaultEnqueueSinkWithoutContext(Ptr< T > object, std::string traceName, Ptr< OutputStreamWrapper > stream)
Hook a trace source to the default enqueue operation trace sink that does not accept nor log a trace ...
void HookDefaultReceiveSinkWithoutContext(Ptr< T > object, std::string traceName, Ptr< OutputStreamWrapper > stream)
Hook a trace source to the default receive operation trace sink that does not accept nor log a trace ...
static void DefaultEnqueueSinkWithContext(Ptr< OutputStreamWrapper > file, std::string context, Ptr< const Packet > p)
Basic Enqueue default trace sink.
void HookDefaultDequeueSinkWithoutContext(Ptr< T > object, std::string traceName, Ptr< OutputStreamWrapper > stream)
Hook a trace source to the default dequeue operation trace sink that does not accept nor log a trace ...
static void DefaultDequeueSinkWithContext(Ptr< OutputStreamWrapper > file, std::string context, Ptr< const Packet > p)
Basic Dequeue default trace sink.
Hold a value for an Attribute.
static Mac48Address Allocate()
Allocate a new Mac48Address.
static bool IsEnabled()
Returns enabled state of parallel environment.
static uint32_t GetSystemId()
Get the id number of this rank.
static Ptr< T > Find(std::string path)
Given a name path string, look to see if there's an object in the system with that associated to it.
holds a vector of ns3::NetDevice pointers
keep track of a set of node pointers.
uint32_t GetN() const
Get the number of Ptr<Node> stored in this container.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
Ptr< Object > Create() const
Create an Object instance of the configured TypeId.
void Set(const std::string &name, const AttributeValue &value, Args &&... args)
Set an attribute to be set during construction.
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
static void EnablePrinting()
Enable printing packets metadata.
Manage pcap files for device models.
std::string GetFilenameFromDevice(std::string prefix, Ptr< NetDevice > device, bool useObjectNames=true)
Let the pcap helper figure out a reasonable filename to use for a pcap file associated with a device.
Ptr< PcapFileWrapper > CreateFile(std::string filename, std::ios::openmode filemode, DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits< uint32_t >::max(), int32_t tzCorrection=0)
Create and initialize a pcap file.
void HookDefaultSink(Ptr< T > object, std::string traceName, Ptr< PcapFileWrapper > file)
Hook a trace source to the default trace sink.
Simple Point To Point Channel.
ObjectFactory m_channelFactory
Channel Factory.
PointToPointHelper()
Create a PointToPointHelper to make life easier when creating point to point networks.
bool m_enableFlowControl
whether to enable flow control
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
void DisableFlowControl()
Disable flow control only if you know what you are doing.
void EnablePcapInternal(std::string prefix, Ptr< NetDevice > nd, bool promiscuous, bool explicitFilename) override
Enable pcap output the indicated net device.
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
ObjectFactory m_queueFactory
Queue Factory.
ObjectFactory m_deviceFactory
Device Factory.
NetDeviceContainer Install(NodeContainer c)
void EnableAsciiInternal(Ptr< OutputStreamWrapper > stream, std::string prefix, Ptr< NetDevice > nd, bool explicitFilename) override
Enable ascii trace output on the indicated net device.
A Device for a Point to Point Network Link.
Ptr< Queue< Packet > > GetQueue() const
Get a copy of the attached Queue.
void Receive(Ptr< Packet > p)
Receive a packet from a connected PointToPointChannel.
A Remote Point-To-Point Channel.
Smart pointer class similar to boost::intrusive_ptr.
Template class for packet Queues.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
void Connect(std::string path, const CallbackBase &cb)
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
auto MakeBoundCallback(R(*fnPtr)(Args...), BArgs &&... bargs)
Make Callbacks with varying number of bound arguments.
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...