NS-3 based Named Data Networking (NDN) simulator
ndnSIM: NDN, CCN, CCNx, content centric networks
API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
ndn-l3-tracer.h
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
2 /*
3  * Copyright (c) 2011-2012 University of California, Los Angeles
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
19  */
20 
21 #ifndef NDN_L3_TRACER_H
22 #define NDN_L3_TRACER_H
23 
24 #include "ns3/ptr.h"
25 #include "ns3/simple-ref-count.h"
26 
32 namespace ns3 {
33 
34 class Node;
35 class Packet;
36 
37 namespace ndn {
38 
39 namespace pit {
40 class Entry;
41 }
42 
43 class Face;
44 
45 class Interest;
46 class Data;
47 
52 class L3Tracer : public SimpleRefCount<L3Tracer>
53 {
54 public:
59  L3Tracer (Ptr<Node> node);
60 
65  L3Tracer (const std::string &node);
66 
70  virtual ~L3Tracer ();
71 
77  virtual void
78  PrintHeader (std::ostream &os) const = 0;
79 
85  virtual void
86  Print (std::ostream &os) const = 0;
87 
88 protected:
89  void
90  Connect ();
91 
92  virtual void
93  OutInterests (Ptr<const Interest>, Ptr<const Face>) = 0;
94 
95  virtual void
96  InInterests (Ptr<const Interest>, Ptr<const Face>) = 0;
97 
98  virtual void
99  DropInterests (Ptr<const Interest>, Ptr<const Face>) = 0;
100 
101  virtual void
102  OutNacks (Ptr<const Interest>, Ptr<const Face>) = 0;
103 
104  virtual void
105  InNacks (Ptr<const Interest>, Ptr<const Face>) = 0;
106 
107  virtual void
108  DropNacks (Ptr<const Interest>, Ptr<const Face>) = 0;
109 
110 
111  virtual void
112  OutData (Ptr<const Data>, bool fromCache, Ptr<const Face>) = 0;
113 
114  virtual void
115  InData (Ptr<const Data>, Ptr<const Face>) = 0;
116 
117  virtual void
118  DropData (Ptr<const Data>, Ptr<const Face>) = 0;
119 
120  virtual void
121  SatisfiedInterests (Ptr<const pit::Entry>) = 0;
122 
123  virtual void
124  TimedOutInterests (Ptr<const pit::Entry>) = 0;
125 
126 protected:
127  std::string m_node;
128  Ptr<Node> m_nodePtr;
129 
130  struct Stats
131  {
132  inline void Reset ()
133  {
134  m_inInterests = 0;
135  m_outInterests = 0;
136  m_dropInterests = 0;
137  m_inNacks = 0;
138  m_outNacks = 0;
139  m_dropNacks = 0;
140  m_inData = 0;
141  m_outData = 0;
142  m_dropData = 0;
143  m_satisfiedInterests = 0;
144  m_timedOutInterests = 0;
145 
146  m_outSatisfiedInterests = 0;
147  m_outTimedOutInterests = 0;
148  }
149 
150  double m_inInterests;
151  double m_outInterests;
152  double m_dropInterests;
153  double m_inNacks;
154  double m_outNacks;
155  double m_dropNacks;
156  double m_inData;
157  double m_outData;
158  double m_dropData;
159  double m_satisfiedInterests;
160  double m_timedOutInterests;
161  double m_outSatisfiedInterests;
162  double m_outTimedOutInterests;
163  };
164 };
165 
169 inline std::ostream&
170 operator << (std::ostream &os, const L3Tracer &tracer)
171 {
172  os << "# ";
173  tracer.PrintHeader (os);
174  os << "\n";
175  tracer.Print (os);
176  return os;
177 }
178 
179 } // namespace ndn
180 } // namespace ns3
181 
182 #endif // NDN_L3_TRACER_H
virtual void PrintHeader(std::ostream &os) const =0
Print head of the trace (e.g., for post-processing)
Base class for network-layer (incoming/outgoing Interests and Data) tracing of NDN stack...
Definition: ndn-l3-tracer.h:52
L3Tracer(Ptr< Node > node)
Trace constructor that attaches to the node using node pointer.
virtual ~L3Tracer()
Destructor.
virtual void Print(std::ostream &os) const =0
Print current trace data.