Manage ASCII trace files for device models. More...
#include <trace-helper.h>
Public Member Functions | |
AsciiTraceHelper () | |
Create an ascii trace helper. | |
~AsciiTraceHelper () | |
Destroy an ascii trace helper. | |
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 with a device. | |
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 with a node. | |
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. | |
template<typename T > | |
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 context. | |
template<typename T > | |
void | HookDefaultEnqueueSinkWithContext (Ptr< T > object, std::string context, std::string traceName, Ptr< OutputStreamWrapper > stream) |
Hook a trace source to the default enqueue operation trace sink that does accept and log a trace context. | |
template<typename T > | |
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 context. | |
template<typename T > | |
void | HookDefaultDropSinkWithContext (Ptr< T > object, std::string context, std::string traceName, Ptr< OutputStreamWrapper > stream) |
Hook a trace source to the default drop operation trace sink that does accept and log a trace context. | |
template<typename T > | |
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 context. | |
template<typename T > | |
void | HookDefaultDequeueSinkWithContext (Ptr< T > object, std::string context, std::string traceName, Ptr< OutputStreamWrapper > stream) |
Hook a trace source to the default dequeue operation trace sink that does accept and log a trace context. | |
template<typename T > | |
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 context. | |
template<typename T > | |
void | HookDefaultReceiveSinkWithContext (Ptr< T > object, std::string context, std::string traceName, Ptr< OutputStreamWrapper > stream) |
Hook a trace source to the default receive operation trace sink that does accept and log a trace context. | |
Static Public Member Functions | |
static void | DefaultEnqueueSinkWithoutContext (Ptr< OutputStreamWrapper > file, Ptr< const Packet > p) |
static void | DefaultEnqueueSinkWithContext (Ptr< OutputStreamWrapper > file, std::string context, Ptr< const Packet > p) |
static void | DefaultDropSinkWithoutContext (Ptr< OutputStreamWrapper > file, Ptr< const Packet > p) |
static void | DefaultDropSinkWithContext (Ptr< OutputStreamWrapper > file, std::string context, Ptr< const Packet > p) |
static void | DefaultDequeueSinkWithoutContext (Ptr< OutputStreamWrapper > file, Ptr< const Packet > p) |
static void | DefaultDequeueSinkWithContext (Ptr< OutputStreamWrapper > file, std::string context, Ptr< const Packet > p) |
static void | DefaultReceiveSinkWithoutContext (Ptr< OutputStreamWrapper > file, Ptr< const Packet > p) |
static void | DefaultReceiveSinkWithContext (Ptr< OutputStreamWrapper > file, std::string context, Ptr< const Packet > p) |
Manage ASCII trace files for device models.
Handling ascii trace files is a common operation for ns-3 devices. It is useful to provide a common base class for dealing with these ops.
Ptr<OutputStreamWrapper> ns3::AsciiTraceHelper::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.
One of the common issues users run into when trying to use tracing in ns-3 is actually a design decision made in the C++ stream library. It is not widely known that copy and assignment of iostreams is forbidden by std::basic_ios<>. This is because it is not possible to predict the semantics of the stream desired by a user.
The tempting ns-3 idiom when tracing to a file is to create a bound callback with an ofstream as the bound object. Unfortunately, this implies a copy construction in order to get the ofstream object into the callback. This operation, as mentioned above, is forbidden by the STL. You could use a global ostream and pass a pointer to it, but that is pretty ugly. You could create an ostream on the stack and pass a pointer to it, but you may run into object lifetime issues. Ns-3 has a nice reference counted object that can solve the problem so we use one of those to carry the stream around and deal with the lifetime issues.