22 #include "ns3/core-module.h" 
   24 #include "ns3/dsr-module.h"        
   25 #include "ns3/internet-module.h"   
   27 #include "ns3/lr-wpan-mac.h"       
   28 #include "ns3/lte-module.h"        
   31 #include "ns3/mesh-module.h"       
   32 #include "ns3/mobility-module.h"   
   33 #include "ns3/network-module.h"    
   34 #include "ns3/olsr-module.h"       
   35 #include "ns3/sixlowpan-module.h"  
   36 #include "ns3/spectrum-module.h"   
   37 #include "ns3/stats-module.h"      
   38 #include "ns3/uan-module.h"        
   39 #include "ns3/wifi-module.h"       
   69   template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5>
 
   73   template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5>
 
   76   template <
typename T1, 
typename T2, 
typename T3, 
typename T4>
 
   79   template <
typename T1, 
typename T2, 
typename T3>
 
   83   template <
typename T1, 
typename T2>
 
   86   template <
typename T1>
 
   89   virtual void DoRun (
void);
 
  102 std::set<std::string>
 
  105   std::set<std::string> dupes;
 
  107   dupes.insert (
"LteRlc::NotifyTxTracedCallback");
 
  108   dupes.insert (
"LteRlc::ReceiveTracedCallback");
 
  109   dupes.insert (
"LteUeRrc::ImsiCidRntiTracedCallback");
 
  110   dupes.insert (
"LteUeRrc::MibSibHandoverTracedCallback");
 
  111   dupes.insert (
"WifiPhyStateHelper::RxEndErrorTracedCallback");
 
  129 template <
typename T>
 
  136 #define TYPENAME(T)               \ 
  139   TypeName < T >     (int N)      \ 
  141     std::stringstream ss;         \ 
  142     ss << # T << "(" << N << ")"; \ 
  219   std::cout << 
"with " << N << 
" args." << std::endl;
 
  227 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5>
 
  231   static void Sink (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
 
  237 template <
typename T1, 
typename T2, 
typename T3, 
typename T4>
 
  241   static void Sink (T1 a1, T2 a2, T3 a3, T4 a4)
 
  247 template <
typename T1, 
typename T2, 
typename T3>
 
  251   static void Sink (T1 a1, T2 a2, T3 a3)
 
  257 template <
typename T1, 
typename T2>
 
  261   static void Sink (T1 a1, T2 a2)
 
  267 template <
typename T1>
 
  293 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5>
 
  307         std::cout << std::endl;
 
  314 template <
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5>
 
  320   template <
typename U>
 
  324     U 
sink = TracedCbSink<T1, T2, T3, T4, T5>::Sink;
 
  327     std::cout << TypeName<U> (N) << 
" invoked ";
 
  329     m_cb (this->
m1, this->
m2, this->m3, this->m4, this->m5);
 
  334 template <
typename T1, 
typename T2, 
typename T3, 
typename T4>
 
  341   template <
typename U>
 
  345     U 
sink = TracedCbSink<T1, T2, T3, T4, empty>::Sink;
 
  348     std::cout << TypeName<U> (N) << 
" invoked ";
 
  350     m_cb (this->
m1, this->
m2, this->m3, this->m4);
 
  355 template <
typename T1, 
typename T2, 
typename T3>
 
  362   template <
typename U>
 
  366     U 
sink = TracedCbSink<T1, T2, T3, empty, empty>::Sink;
 
  369     std::cout << TypeName<U> (N) << 
" invoked ";
 
  371     m_cb (this->
m1, this->
m2, this->m3);
 
  376 template <
typename T1, 
typename T2>
 
  383   template <
typename U>
 
  387     U 
sink = TracedCbSink<T1, T2, empty, empty, empty>::Sink;
 
  390     std::cout << TypeName<U> (N) << 
" invoked ";
 
  392     m_cb (this->
m1, this->
m2);
 
  397 template <
typename T1>
 
  399   : 
public CheckerBase<T1, empty, empty, empty, empty>
 
  404   template <
typename U>
 
  408     U 
sink = TracedCbSink<T1, empty, empty, empty, empty>::Sink;
 
  411     std::cout << TypeName<U> (N) << 
" invoked ";
 
  419   : 
TestCase (
"Check basic TracedCallback operation")
 
  427 #define DUPE(U, T1)                                                     \ 
  428   if (g_dupes.find ( # U ) == g_dupes.end ()) {                           \ 
  429       NS_TEST_ASSERT_MSG_NE (0, 1,                                        \ 
  430                              "expected to find " <<  # U << " in dupes."); }  \ 
  431   if (TypeName<U> (0) == TypeName<T1> (0)) {                              \ 
  432       std::cout << # U << " matches " << # T1  << std::endl; }              \ 
  434     NS_TEST_ASSERT_MSG_EQ                                               \ 
  435       (TypeName<U> (0), TypeName<T1> (0),                               \ 
  436       "the typedef " << # U <<                                         \ 
  437       " used to match the typedef " << # T1 <<                         \ 
  438       " but no longer does.  Please add a new CHECK call.") 
  440 #define CHECK(U, T1, T2, T3, T4, T5)                                    \ 
  441   CreateObject< Checker<T1, T2, T3, T4, T5> > ()->Invoke<U> () 
  443   CHECK (dsr::DsrOptionSRHeader::TracedCallback,
 
  447   CHECK (EpcUeNas::StateTracedCallback,
 
  451   CHECK (Ipv4L3Protocol::DropTracedCallback,
 
  455   CHECK (Ipv4L3Protocol::SentTracedCallback,
 
  459   CHECK (Ipv4L3Protocol::TxRxTracedCallback,
 
  463   CHECK (Ipv6L3Protocol::DropTracedCallback,
 
  468   CHECK (Ipv6L3Protocol::SentTracedCallback,
 
  472   CHECK (Ipv6L3Protocol::TxRxTracedCallback,
 
  476   CHECK (LrWpanMac::SentTracedCallback,
 
  480   CHECK (LrWpanMac::StateTracedCallback,
 
  484   CHECK (LrWpanPhy::StateTracedCallback,
 
  495   CHECK (LteEnbMac::UlSchedulingTracedCallback,
 
  496          uint32_t, uint32_t, uint16_t, uint8_t, uint16_t);
 
  498   CHECK (LteEnbPhy::ReportUeSinrTracedCallback,
 
  499          uint16_t, uint16_t, 
double, uint8_t,
 
  502   CHECK (LteEnbPhy::ReportInterferenceTracedCallback,
 
  506   CHECK (LteEnbRrc::ConnectionHandoverTracedCallback,
 
  507          uint64_t, uint16_t, uint16_t,
 
  510   CHECK (LteEnbRrc::HandoverStartTracedCallback,
 
  511          uint64_t, uint16_t, uint16_t, uint16_t,
 
  514   CHECK (LteEnbRrc::NewUeContextTracedCallback,
 
  518   CHECK (LteEnbRrc::ReceiveReportTracedCallback,
 
  522   CHECK (LtePdcp::PduRxTracedCallback,
 
  523          uint16_t, uint8_t, uint32_t, uint64_t,
 
  526   CHECK (LtePdcp::PduTxTracedCallback,
 
  527          uint16_t, uint8_t, uint32_t,
 
  530   DUPE  (LteRlc::NotifyTxTracedCallback, LtePdcp::PduTxTracedCallback);
 
  532   DUPE  (LteRlc::ReceiveTracedCallback, LtePdcp::PduRxTracedCallback);
 
  534   CHECK (LteUePhy::RsrpSinrTracedCallback,
 
  535          uint16_t, uint16_t, 
double, 
double, uint8_t);
 
  537   CHECK (LteUePhy::StateTracedCallback,
 
  541   CHECK (LteUeRrc::CellSelectionTracedCallback,
 
  545   DUPE  (LteUeRrc::ImsiCidRntiTracedCallback, LteEnbRrc::ConnectionHandoverTracedCallback);
 
  547   DUPE   (LteUeRrc::MibSibHandoverTracedCallback, LteEnbRrc::HandoverStartTracedCallback);
 
  549   CHECK (LteUeRrc::StateTracedCallback,
 
  552   CHECK (Mac48Address::TracedCallback,
 
  556   CHECK (MobilityModel::TracedCallback,
 
  560   CHECK (olsr::RoutingProtocol::PacketTxRxTracedCallback,
 
  564   CHECK (olsr::RoutingProtocol::TableChangeTracedCallback,
 
  568   CHECK (Packet::AddressTracedCallback,
 
  572   CHECK (Packet::Mac48AddressTracedCallback,
 
  576   CHECK (Packet::SinrTracedCallback,
 
  580   CHECK (Packet::SizeTracedCallback,
 
  584   CHECK (Packet::TracedCallback,
 
  588   CHECK (PacketBurst::TracedCallback,
 
  592   CHECK (dot11s::PeerManagementProtocol::LinkOpenCloseTracedCallback,
 
  596   CHECK (PhyReceptionStatParameters::TracedCallback,
 
  600   CHECK (PhyTransmissionStatParameters::TracedCallback,
 
  604   CHECK (SixLowPanNetDevice::DropTracedCallback,
 
  609   CHECK (SixLowPanNetDevice::RxTxTracedCallback,
 
  613   CHECK (SpectrumChannel::LossTracedCallback,
 
  617   CHECK (SpectrumValue::TracedCallback,
 
  621   CHECK (TimeSeriesAdaptor::OutputTracedCallback,
 
  625   CHECK (UanMac::PacketModeTracedCallback,
 
  629   CHECK (UanMacCw::QueueTracedCallback,
 
  633   CHECK (UanMacRc::QueueTracedCallback,
 
  637   CHECK (UanNetDevice::RxTxTracedCallback,
 
  641   CHECK (UanPhy::TracedCallback,
 
  645   CHECK (UeManager::StateTracedCallback,
 
  648   CHECK (WifiMacHeader::TracedCallback,
 
  652   CHECK (WifiPhyStateHelper::RxEndErrorTracedCallback,
 
  656   CHECK (WifiPhyStateHelper::RxOkTracedCallback,
 
  660   CHECK (WifiPhyStateHelper::StateTracedCallback,
 
  664   CHECK (WifiPhyStateHelper::TxTracedCallback,
 
  668   CHECK (WifiRemoteStationManager::PowerChangeTracedCallback,
 
  672   CHECK (WifiRemoteStationManager::RateChangeTracedCallback,
 
  684   : 
TestSuite (
"traced-callback-typedef", SYSTEM)
 
static void Sink(T1 a1, T2 a2, T3 a3, T4 a4)
 
void(* Mac48AddressTracedCallback)(Ptr< const Packet > packet, Mac48Address mac)
TracedCallback signature for packet and Mac48Address. 
 
void(* UlSchedulingTracedCallback)(const uint32_t frame, const uint32_t subframe, const uint16_t rnti, const uint8_t mcs, const uint16_t tbsSize)
TracedCallback signature for UL scheduling events. 
 
Simulation virtual time values and global simulation resolution. 
 
MeasurementReport structure. 
 
void(* ReportUeSinrTracedCallback)(uint16_t cellId, uint16_t rnti, double sinrLinear, uint8_t componentCarrierId)
TracedCallback signature for the linear average of SRS SINRs. 
 
static void Sink(T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
 
void(* PowerChangeTracedCallback)(double oldPower, double newPower, Mac48Address remoteAddress)
TracedCallback signature for power change events. 
 
void(* StateTracedCallback)(Time time, LrWpanPhyEnumeration oldState, LrWpanPhyEnumeration newState)
TracedCallback signature for Trx state change events. 
 
void(* NewUeContextTracedCallback)(const uint16_t cellId, const uint16_t rnti)
TracedCallback signature for new Ue Context events. 
 
void(* ConnectionHandoverTracedCallback)(const uint64_t imsi, const uint16_t cellId, const uint16_t rnti)
TracedCallback signature for connection and handover end events. 
 
TracedCallback< T1, T2, T3 > m_cb
 
void(* QueueTracedCallback)(Ptr< const Packet > packet, uint32_t proto)
TracedCallback signature for dequeue of a packet. 
 
void(* QueueTracedCallback)(Ptr< const Packet > packet, uint16_t proto)
TracedCallback signature for enqueue/dequeue of a packet. 
 
void(* StateTracedCallback)(Time start, Time duration, WifiPhyState state)
TracedCallback signature for state changes. 
 
void(* StateTracedCallback)(const State oldState, const State newState)
TracedCallback signature for state change events. 
 
void(* SizeTracedCallback)(uint32_t oldSize, uint32_t newSize)
TracedCallback signature for changes in packet size. 
 
void(* TracedCallback)(Ptr< const Packet > packet)
TracedCallback signature for Ptr
  
TypeTraits< T5 >::BaseType m5
 
void(* PduTxTracedCallback)(uint16_t rnti, uint8_t lcid, uint32_t size)
TracedCallback for PDU transmission event. 
 
void(* TableChangeTracedCallback)(uint32_t size)
TracedCallback signature for routing table computation. 
 
const double m1
First component modulus, 232 - 209. 
 
static void Sink(T1 a1, T2 a2, T3 a3)
 
DropReason
Enumeration of the dropping reasons in SixLoWPAN. 
 
void(* ReportInterferenceTracedCallback)(uint16_t cellId, Ptr< SpectrumValue > spectrumValue)
TracedCallback signature for the linear average of SRS SINRs. 
 
State
The states of the UE PHY entity. 
 
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
 
TracedCallback< T1 > m_cb
 
std::string TypeName(int N)
Stringify the known TracedCallback type names. 
 
a polymophic address class 
 
Class for representing data rates. 
 
DropReason
Reason why a packet has been dropped. 
 
TracedCallback< T1, T2, T3, T4, T5 > m_cb
 
void(* PacketModeTracedCallback)(Ptr< const Packet > packet, UanTxMode mode)
TracedCallback signature for packet reception/enqueue/dequeue events. 
 
WifiPreamble
The type of preamble to be used by an IEEE 802.11 transmission. 
 
void(* StateTracedCallback)(uint16_t cellId, uint16_t rnti, State oldState, State newState)
TracedCallback signature for state transition events. 
 
NS_ASSERT_MSG(false,"Ipv4AddressGenerator::MaskToIndex(): Impossible")
 
make Callback use a separate empty type 
 
void(* AddressTracedCallback)(Ptr< const Packet > packet, const Address &address)
TracedCallback signature for packet and Address. 
 
void(* DropTracedCallback)(const Ipv6Header &header, Ptr< const Packet > packet, DropReason reason, Ptr< Ipv6 > ipv6, uint32_t interface)
TracedCallback signature for packet drop events. 
 
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite. 
 
void(* RxOkTracedCallback)(Ptr< const Packet > packet, double snr, WifiMode mode, WifiPreamble preamble)
TracedCallback signature for receive end ok event. 
 
void(* TxRxTracedCallback)(Ptr< const Packet > packet, Ptr< Ipv6 > ipv6, uint32_t interface)
TracedCallback signature for packet transmission or reception events. 
 
void(* HandoverStartTracedCallback)(const uint64_t imsi, const uint16_t cellId, const uint16_t rnti, const uint16_t targetCid)
TracedCallback signature for handover start events. 
 
static int m_nArgs
Number of arguments passed to callback. 
 
Abstraction of packet modulation information. 
 
void(* ReceiveReportTracedCallback)(const uint64_t imsi, const uint16_t cellId, const uint16_t rnti, const LteRrcSap::MeasurementReport report)
TracedCallback signature for receive measurement report events. 
 
void(* PduRxTracedCallback)(const uint16_t rnti, const uint8_t lcid, const uint32_t size, const uint64_t delay)
TracedCallback signature for PDU receive event. 
 
A class used for addressing MAC8 MAC's. 
 
TracedCallback< T1, T2, T3, T4 > m_cb
 
virtual ~TracedCallbackTypedefTestCase()
 
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
 
void(* TxTracedCallback)(Ptr< const Packet > packet, WifiMode mode, WifiPreamble preamble, uint8_t power)
TracedCallback signature for transmit event. 
 
void(* SinrTracedCallback)(Ptr< const Packet > packet, double sinr)
TracedCallback signature for packet and SINR. 
 
void(* RxTxTracedCallback)(Ptr< const Packet > packet, Mac8Address address)
TracedCallback signature for MAC send/receive events. 
 
void(* StateTracedCallback)(const uint64_t imsi, const uint16_t cellId, const uint16_t rnti, const State oldState, const State newState)
TracedCallback signature for state transition events. 
 
void(* LossTracedCallback)(Ptr< SpectrumPhy > txPhy, Ptr< SpectrumPhy > rxPhy, double lossDb)
TracedCallback signature for path loss calculation events. 
 
void(* TracedCallback)(Ptr< SpectrumValue > value)
TracedCallback signature for SpectrumValue. 
 
void SinkIt(unsigned int N)
Log that a callback was invoked. 
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
void(* TracedCallback)(const PhyReceptionStatParameters params)
TracedCallback signature. 
 
TracedCallback< T1, T2 > m_cb
 
void(* TracedCallback)(Mac48Address value)
TracedCallback signature for Mac48Address. 
 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
 
PhyReceptionStatParameters structure. 
 
State
The state of the UeManager at the eNB RRC. 
 
void(* LinkOpenCloseTracedCallback)(Mac48Address src, const Mac48Address dst)
TracedCallback signature for link open/close events. 
 
WifiPhyState
The state of the PHY layer. 
 
std::set< std::string > g_dupes
Container for duplicate types. 
 
TypeTraits< T4 >::BaseType m4
 
std::vector< MessageHeader > MessageList
 
static TracedCallbackTypedefTestSuite tracedCallbackTypedefTestSuite
 
TracedCallbackTypedefTestCase()
 
void(* DropTracedCallback)(DropReason reason, Ptr< const Packet > packet, Ptr< SixLowPanNetDevice > sixNetDevice, uint32_t ifindex)
TracedCallback signature for. 
 
void(* OutputTracedCallback)(const double now, const double data)
TracedCallback signature for output trace. 
 
void(* SentTracedCallback)(const Ipv6Header &header, Ptr< const Packet > packet, uint32_t interface)
TracedCallback signature for packet sent, forwarded or local-delivered events. 
 
void(* SentTracedCallback)(const Ipv4Header &header, Ptr< const Packet > packet, uint32_t interface)
TracedCallback signature for packet send, forward, or local deliver events. 
 
State
The states of the UE RRC entity. 
 
void(* TracedCallback)(Ptr< const Packet > pkt, double sinr, UanTxMode mode)
TracedCallback signature for UanPhy packet send/receive events. 
 
void(* PacketTxRxTracedCallback)(const PacketHeader &header, const MessageList &messages)
TracedCallback signature for Packet transmit and receive events. 
 
TypeTraits< T3 >::BaseType m3
 
Inspect a type to deduce its features. 
 
void(* TracedCallback)(Ptr< const PacketBurst > burst)
TracedCallback signature for Ptr
  
void(* TracedCallback)(Ptr< const MobilityModel > model)
TracedCallback signature. 
 
TracedCallbackTypedefTestSuite()
 
void ConnectWithoutContext(const CallbackBase &callback)
Append a Callback to the chain (without a context). 
 
State
Definition of NAS states as per "LTE - From theory to practice", Section 3.2.3.2 "Connection Establis...
 
void(* RxTxTracedCallback)(Ptr< const Packet > packet, Ptr< SixLowPanNetDevice > sixNetDevice, uint32_t ifindex)
TracedCallback signature for packet send/receive events. 
 
void(* StateTracedCallback)(uint64_t imsi, uint16_t cellId, uint16_t rnti, State oldState, State newState)
TracedCallback signature for state transition events. 
 
static void Sink(T1 a1, T2 a2)
 
void(* TracedCallback)(const PhyTransmissionStatParameters params)
TracedCallback signature. 
 
LrWpanMacState
MAC states. 
 
DropReason
Reason why a packet has been dropped. 
 
const double m2
Second component modulus, 232 - 22853. 
 
void(* StateTracedCallback)(LrWpanMacState oldState, LrWpanMacState newState)
TracedCallback signature for LrWpanMacState change events. 
 
TypeTraits< T1 >::BaseType m1
 
LrWpanPhyEnumeration
IEEE802.15.4-2006 PHY Emumerations Table 18 in section 6.2.3. 
 
A base class which provides memory management and object aggregation. 
 
void(* TxRxTracedCallback)(Ptr< const Packet > packet, Ptr< Ipv4 > ipv4, uint32_t interface)
TracedCallback signature for packet transmission or reception events. 
 
PhyTransmissionStatParameters structure. 
 
std::set< std::string > Duplicates(void)
Record typedefs which are identical to previously declared. 
 
void(* RateChangeTracedCallback)(DataRate oldRate, DataRate newRate, Mac48Address remoteAddress)
TracedCallback signature for rate change events. 
 
void(* CellSelectionTracedCallback)(uint64_t imsi, uint16_t cellId)
TracedCallback signature for imsi, cellId and rnti events. 
 
TypeTraits< T2 >::BaseType m2
 
#define CHECK(U, T1, T2, T3, T4, T5)
 
void(* SentTracedCallback)(Ptr< const Packet > packet, uint8_t retries, uint8_t backoffs)
TracedCallback signature for sent packets. 
 
void(* RsrpSinrTracedCallback)(uint16_t cellId, uint16_t rnti, double rsrp, double sinr, uint8_t componentCarrierId)
TracedCallback signature for cell RSRP and SINR report. 
 
void(* DropTracedCallback)(const Ipv4Header &header, Ptr< const Packet > packet, DropReason reason, Ptr< Ipv4 > ipv4, uint32_t interface)
TracedCallback signature for packet drop events.