blob: 49ad8e065cca269884bf0530a8c5a70de75fb4a9 [file] [log] [blame]
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
/*
* Copyright (c) 2010 University of Washington
*
* 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
*
* Authors: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
*/
#ifndef CCNX_TRACE_HELPER_H
#define CCNX_TRACE_HELPER_H
#include "ns3/assert.h"
#include "ns3/ccnx-face-container.h"
#include "ns3/ccnx.h"
#include "ns3/trace-helper.h"
namespace ns3 {
/**
* \ingroup ccnx-helpers
*
* @brief Base class providing common user-level pcap operations for helpers
* representing Ccnx protocols .
*/
class PcapHelperForCcnx
{
public:
/**
* @brief Construct a PcapHelperForCcnx.
*/
PcapHelperForCcnx () {}
/**
* @brief Destroy a PcapHelperForCcnx.
*/
virtual ~PcapHelperForCcnx () {}
/**
* @brief Enable pcap output the indicated Ccnx and interface pair.
* @internal
*
* @param prefix Filename prefix to use for pcap files.
* @param Ccnx Ptr<Ccnx> on which you want to enable tracing.
* @param interface Interface on Ccnx on which you want to enable tracing.
* @param explicitFilename Treat the prefix as an explicit filename if true
*/
virtual void EnablePcapCcnxInternal (std::string prefix,
Ptr<Ccnx> ccnx,
uint32_t interface,
bool explicitFilename) = 0;
/**
* @brief Enable pcap output the indicated Ccnx and interface pair.
*
* @param prefix Filename prefix to use for pcap files.
* @param ccnx Ptr<Ccnx> on which you want to enable tracing.
* @param interface Interface on ccnx on which you want to enable tracing.
* @param explicitFilename Treat the prefix as an explicit filename if true.
*/
void EnablePcapCcnx (std::string prefix, Ptr<Ccnx> ccnx, uint32_t interface, bool explicitFilename = false);
/**
* @brief Enable pcap output the indicated ccnx and interface pair using a
* Ptr<Ccnx> previously named using the ns-3 object name service.
*
* @param prefix filename prefix to use for pcap files.
* @param ccnxName Name of the Ptr<Ccnx> on which you want to enable tracing.
* @param interface Interface on ccnx on which you want to enable tracing.
* @param explicitFilename Treat the prefix as an explicit filename if true.
*/
void EnablePcapCcnx (std::string prefix, std::string ccnxName, uint32_t interface, bool explicitFilename = false);
/**
* @brief Enable pcap output on each Ccnx and interface pair in the container.
*
* @param prefix Filename prefix to use for pcap files.
* @param c CcnxFaceContainer of Ccnx and interface pairs
*/
void EnablePcapCcnx (std::string prefix, CcnxFaceContainer c);
/**
* @brief Enable pcap output on all Ccnx and interface pairs existing in the
* nodes provided in the container.
*
* \param prefix Filename prefix to use for pcap files.
* \param n container of nodes.
*/
void EnablePcapCcnx (std::string prefix, NodeContainer n);
/**
* @brief Enable pcap output on the Ccnx and interface pair specified by a
* global node-id (of a previously created node) and interface. Since there
* can be only one Ccnx aggregated to a node, the node-id unambiguously
* determines the Ccnx.
*
* @param prefix Filename prefix to use for pcap files.
* @param nodeid The node identifier/number of the node on which to enable tracing.
* @param interface Interface on ccnx on which you want to enable tracing.
* @param explicitFilename Treat the prefix as an explicit filename if true
*/
void EnablePcapCcnx (std::string prefix, uint32_t nodeid, uint32_t interface, bool explicitFilename);
/**
* @brief Enable pcap output on all Ccnx and interface pairs existing in the
* set of all nodes created in the simulation.
*
* @param prefix Filename prefix to use for pcap files.
*/
void EnablePcapCcnxAll (std::string prefix);
};
/**
* \ingroup ccnx-helpers
*
* @brief Base class providing common user-level ascii trace operations for
* helpers representing Ccnx protocols .
*/
class AsciiTraceHelperForCcnx
{
public:
/**
* @brief Construct an AsciiTraceHelperForCcnx.
*/
AsciiTraceHelperForCcnx () {}
/**
* @brief Destroy an AsciiTraceHelperForCcnx
*/
virtual ~AsciiTraceHelperForCcnx () {}
/**
* @brief Enable ascii trace output on the indicated Ccnx and interface pair.
* @internal
*
* The implementation is expected to use a provided Ptr<OutputStreamWrapper>
* if it is non-null. If the OutputStreamWrapper is null, the implementation
* is expected to use a provided prefix to construct a new file name for
* each net device using the rules described in the class overview.
*
* If the prefix is provided, there will be one file per Ccnx and interface pair
* created. In this case, adding a trace context to the file would be pointless,
* so the helper implementation is expected to TraceConnectWithoutContext.
*
* If the output stream object is provided, there may be many different Ccnx
* and interface pairs writing to a single file. In this case, the trace
* context could be important, so the helper implementation is expected to
* TraceConnect.
*
* @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 ccnx Ptr<Ccnx> on which you want to enable tracing.
* @param interface The interface on which you want to enable tracing.
* @param explicitFilename Treat the prefix as an explicit filename if true.
*/
virtual void EnableAsciiCcnxInternal (Ptr<OutputStreamWrapper> stream,
std::string prefix,
Ptr<Ccnx> ccnx,
uint32_t interface,
bool explicitFilename) = 0;
/**
* @brief Enable ascii trace output on the indicated ccnx and interface pair.
*
* @param prefix Filename prefix to use for ascii files.
* @param ccnx Ptr<Ccnx> on which you want to enable tracing.
* @param interface The interface on which you want to enable tracing.
* @param explicitFilename Treat the prefix as an explicit filename if true.
*/
void EnableAsciiCcnx (std::string prefix, Ptr<Ccnx> ccnx, uint32_t interface, bool explicitFilename = false);
/**
* @brief Enable ascii trace output on the indicated Ccnx and interface pair.
*
* @param stream An OutputStreamWrapper representing an existing file to use
* when writing trace data.
* @param ccnx Ptr<Ccnx> on which you want to enable tracing.
* @param interface The interface on which you want to enable tracing.
*/
void EnableAsciiCcnx (Ptr<OutputStreamWrapper> stream, Ptr<Ccnx> ccnx, uint32_t interface);
/**
* @brief Enable ascii trace output the indicated ccnx and interface pair
* using an ccnx previously named using the ns-3 object name service.
*
* @param prefix filename prefix to use for ascii files.
* @param ccnxName The name of the ccnx on which you want to enable tracing.
* @param interface The interface on which you want to enable tracing.
* @param explicitFilename Treat the prefix as an explicit filename if true.
*/
void EnableAsciiCcnx (std::string prefix, std::string ccnxName, uint32_t interface, bool explicitFilename = false);
/**
* @brief Enable ascii trace output the indicated net device using a device
* previously named using the ns-3 object name service.
*
* @param stream An OutputStreamWrapper representing an existing file to use
* when writing trace data.
* @param ccnxName The name of the ccnx on which you want to enable tracing.
* @param interface The interface on which you want to enable tracing.
*/
void EnableAsciiCcnx (Ptr<OutputStreamWrapper> stream, std::string ccnxName, uint32_t interface);
/**
* @brief Enable ascii trace output on each Ccnx and interface pair in the
* container
*
* @param prefix Filename prefix to use for ascii files.
* @param c CcnxFaceContainer of Ccnx and interface pairs on which to
* enable tracing.
*/
void EnableAsciiCcnx (std::string prefix, CcnxFaceContainer c);
/**
* @brief Enable ascii trace output on each device in the container which is
* of the appropriate type.
*
* @param stream An OutputStreamWrapper representing an existing file to use
* when writing trace data.
* @param c ccnxInterfaceContainer of ccnx and interface pairs on which to
* enable tracing.
*/
void EnableAsciiCcnx (Ptr<OutputStreamWrapper> stream, CcnxFaceContainer c);
/**
* @brief Enable ascii trace output on all ccnx and interface pairs existing
* in the nodes provided in the container.
*
* \param prefix Filename prefix to use for ascii files.
* \param n container of nodes.
*/
void EnableAsciiCcnx (std::string prefix, NodeContainer n);
/**
* @brief Enable ascii trace output on all ccnx and interface pairs existing
* in the nodes provided in the container.
*
* @param stream An OutputStreamWrapper representing an existing file to use
* when writing trace data.
* \param n container of nodes.
*/
void EnableAsciiCcnx (Ptr<OutputStreamWrapper> stream, NodeContainer n);
/**
* @brief Enable ascii trace output on all Ccnx and interface pairs existing
* in the set of all nodes created in the simulation.
*
* @param prefix Filename prefix to use for ascii files.
*/
void EnableAsciiCcnxAll (std::string prefix);
/**
* @brief Enable ascii trace output on each device (which is of the
* appropriate type) in the set of all nodes created in the simulation.
*
* @param stream An OutputStreamWrapper representing an existing file to use
* when writing trace data.
*/
void EnableAsciiCcnxAll (Ptr<OutputStreamWrapper> stream);
/**
* @brief Enable pcap output on the Ccnx and interface pair specified by a
* global node-id (of a previously created node) and interface. Since there
* can be only one Ccnx aggregated to a node, the node-id unambiguously
* determines the Ccnx.
*
* @param prefix Filename prefix to use when creating ascii trace files
* @param nodeid The node identifier/number of the node on which to enable
* ascii tracing
* @param deviceid The device identifier/index of the device on which to enable
* ascii tracing
* @param explicitFilename Treat the prefix as an explicit filename if true
*/
void EnableAsciiCcnx (std::string prefix, uint32_t nodeid, uint32_t deviceid, bool explicitFilename);
/**
* @brief Enable pcap output on the ccnx and interface pair specified by a
* global node-id (of a previously created node) and interface. Since there
* can be only one ccnx aggregated to a node, the node-id unambiguously
* determines the ccnx.
*
* @param stream An OutputStreamWrapper representing an existing file to use
* when writing trace data.
* @param nodeid The node identifier/number of the node on which to enable
* ascii tracing
* @param interface The interface on which you want to enable tracing.
* @param explicitFilename Treat the prefix as an explicit filename if true
*/
void EnableAsciiCcnx (Ptr<OutputStreamWrapper> stream, uint32_t nodeid, uint32_t interface, bool explicitFilename);
private:
/**
* @internal Avoid code duplication.
*/
void EnableAsciiCcnxImpl (Ptr<OutputStreamWrapper> stream,
std::string prefix,
uint32_t nodeid,
uint32_t interface,
bool explicitFilename);
/**
* @internal Avoid code duplication.
*/
void EnableAsciiCcnxImpl (Ptr<OutputStreamWrapper> stream, std::string prefix, NodeContainer n);
/**
* @internal Avoid code duplication.
*/
void EnableAsciiCcnxImpl (Ptr<OutputStreamWrapper> stream, std::string prefix, CcnxFaceContainer c);
/**
* @internal Avoid code duplication.
*/
void EnableAsciiCcnxImpl (Ptr<OutputStreamWrapper> stream,
std::string prefix,
std::string ccnxName,
uint32_t interface,
bool explicitFilename);
/**
* @internal Avoid code duplication.
*/
void EnableAsciiCcnxImpl (Ptr<OutputStreamWrapper> stream,
std::string prefix,
Ptr<Ccnx> ccnx,
uint32_t interface,
bool explicitFilename);
};
} // namespace ns3
#endif /* CCNX_TRACE_HELPER_H */