blob: d9fc671b5fb9f26edf9e6dcca2c782ce68465bc6 [file] [log] [blame]
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
2/*
3 * Copyright (c) 2011 UCLA
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
Alexander Afanasyev0c395372014-12-20 15:54:02 -080021#include "ndn-l3-aggregate-tracer.hpp"
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -080022
23#include "ns3/node.h"
24#include "ns3/packet.h"
25#include "ns3/config.h"
26#include "ns3/callback.h"
Alexander Afanasyev0c395372014-12-20 15:54:02 -080027#include "ns3/ndn-app.hpp"
28#include "ns3/ndn-face.hpp"
29#include "ns3/ndn-interest.hpp"
30#include "ns3/ndn-data.hpp"
31#include "ns3/ndn-pit-entry.hpp"
Alexander Afanasyev37b84c52013-04-26 13:38:52 -070032
Alexander Afanasyev59314802012-11-26 14:56:04 -080033#include "ns3/simulator.h"
34#include "ns3/node-list.h"
35#include "ns3/log.h"
36
37#include <fstream>
38
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080039NS_LOG_COMPONENT_DEFINE("ndn.L3AggregateTracer");
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -080040
41namespace ns3 {
42namespace ndn {
43
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080044static std::list<boost::tuple<boost::shared_ptr<std::ostream>, std::list<Ptr<L3AggregateTracer>>>>
45 g_tracers;
Alexander Afanasyev3fe94dc2013-08-09 17:12:12 -070046
Alexander Afanasyev5352af32013-07-15 09:51:28 -070047template<class T>
48static inline void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080049NullDeleter(T* ptr)
Alexander Afanasyev5352af32013-07-15 09:51:28 -070050{
51}
52
Alexander Afanasyev3fe94dc2013-08-09 17:12:12 -070053void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080054L3AggregateTracer::Destroy()
Alexander Afanasyevdb5f3b62013-08-09 17:42:12 -070055{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080056 g_tracers.clear();
Alexander Afanasyevdb5f3b62013-08-09 17:42:12 -070057}
58
59void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080060L3AggregateTracer::InstallAll(const std::string& file, Time averagingPeriod /* = Seconds (0.5)*/)
Alexander Afanasyev59314802012-11-26 14:56:04 -080061{
62 using namespace boost;
63 using namespace std;
Alexander Afanasyev37b84c52013-04-26 13:38:52 -070064
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080065 std::list<Ptr<L3AggregateTracer>> tracers;
Alexander Afanasyev5352af32013-07-15 09:51:28 -070066 boost::shared_ptr<std::ostream> outputStream;
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080067 if (file != "-") {
68 boost::shared_ptr<std::ofstream> os(new std::ofstream());
69 os->open(file.c_str(), std::ios_base::out | std::ios_base::trunc);
Alexander Afanasyev59314802012-11-26 14:56:04 -080070
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080071 if (!os->is_open()) {
72 NS_LOG_ERROR("File " << file << " cannot be opened for writing. Tracing disabled");
73 return;
Alexander Afanasyev5352af32013-07-15 09:51:28 -070074 }
Alexander Afanasyev59314802012-11-26 14:56:04 -080075
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080076 outputStream = os;
77 }
78 else {
79 outputStream = boost::shared_ptr<std::ostream>(&std::cout, NullDeleter<std::ostream>);
80 }
Alexander Afanasyev59314802012-11-26 14:56:04 -080081
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080082 for (NodeList::Iterator node = NodeList::Begin(); node != NodeList::End(); node++) {
83 Ptr<L3AggregateTracer> trace = Install(*node, outputStream, averagingPeriod);
84 tracers.push_back(trace);
85 }
Alexander Afanasyev59314802012-11-26 14:56:04 -080086
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080087 if (tracers.size() > 0) {
88 // *m_l3RateTrace << "# "; // not necessary for R's read.table
89 tracers.front()->PrintHeader(*outputStream);
90 *outputStream << "\n";
91 }
92
93 g_tracers.push_back(boost::make_tuple(outputStream, tracers));
Alexander Afanasyev59314802012-11-26 14:56:04 -080094}
95
Alexander Afanasyev3fe94dc2013-08-09 17:12:12 -070096void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -080097L3AggregateTracer::Install(const NodeContainer& nodes, const std::string& file,
98 Time averagingPeriod /* = Seconds (0.5)*/)
Alexander Afanasyeva68783a2013-06-27 13:39:04 -070099{
100 using namespace boost;
101 using namespace std;
Alexander Afanasyev59314802012-11-26 14:56:04 -0800102
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800103 std::list<Ptr<L3AggregateTracer>> tracers;
Alexander Afanasyev5352af32013-07-15 09:51:28 -0700104 boost::shared_ptr<std::ostream> outputStream;
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800105 if (file != "-") {
106 boost::shared_ptr<std::ofstream> os(new std::ofstream());
107 os->open(file.c_str(), std::ios_base::out | std::ios_base::trunc);
Alexander Afanasyeva68783a2013-06-27 13:39:04 -0700108
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800109 if (!os->is_open()) {
110 NS_LOG_ERROR("File " << file << " cannot be opened for writing. Tracing disabled");
111 return;
Alexander Afanasyev5352af32013-07-15 09:51:28 -0700112 }
Alexander Afanasyeva68783a2013-06-27 13:39:04 -0700113
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800114 outputStream = os;
115 }
116 else {
117 outputStream = boost::shared_ptr<std::ostream>(&std::cout, NullDeleter<std::ostream>);
118 }
Alexander Afanasyeva68783a2013-06-27 13:39:04 -0700119
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800120 for (NodeContainer::Iterator node = nodes.Begin(); node != nodes.End(); node++) {
121 Ptr<L3AggregateTracer> trace = Install(*node, outputStream, averagingPeriod);
122 tracers.push_back(trace);
123 }
Alexander Afanasyeva68783a2013-06-27 13:39:04 -0700124
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800125 if (tracers.size() > 0) {
126 // *m_l3RateTrace << "# "; // not necessary for R's read.table
127 tracers.front()->PrintHeader(*outputStream);
128 *outputStream << "\n";
129 }
130
131 g_tracers.push_back(boost::make_tuple(outputStream, tracers));
Alexander Afanasyeva68783a2013-06-27 13:39:04 -0700132}
133
Alexander Afanasyev3fe94dc2013-08-09 17:12:12 -0700134void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800135L3AggregateTracer::Install(Ptr<Node> node, const std::string& file,
136 Time averagingPeriod /* = Seconds (0.5)*/)
Alexander Afanasyeva68783a2013-06-27 13:39:04 -0700137{
138 using namespace boost;
139 using namespace std;
140
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800141 std::list<Ptr<L3AggregateTracer>> tracers;
Alexander Afanasyev5352af32013-07-15 09:51:28 -0700142 boost::shared_ptr<std::ostream> outputStream;
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800143 if (file != "-") {
144 boost::shared_ptr<std::ofstream> os(new std::ofstream());
145 os->open(file.c_str(), std::ios_base::out | std::ios_base::trunc);
Alexander Afanasyeva68783a2013-06-27 13:39:04 -0700146
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800147 if (!os->is_open()) {
148 NS_LOG_ERROR("File " << file << " cannot be opened for writing. Tracing disabled");
149 return;
Alexander Afanasyev5352af32013-07-15 09:51:28 -0700150 }
Alexander Afanasyeva68783a2013-06-27 13:39:04 -0700151
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800152 outputStream = os;
153 }
154 else {
155 outputStream = boost::shared_ptr<std::ostream>(&std::cout, NullDeleter<std::ostream>);
156 }
Alexander Afanasyeva68783a2013-06-27 13:39:04 -0700157
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800158 Ptr<L3AggregateTracer> trace = Install(node, outputStream, averagingPeriod);
159 tracers.push_back(trace);
Alexander Afanasyeva68783a2013-06-27 13:39:04 -0700160
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800161 if (tracers.size() > 0) {
162 // *m_l3RateTrace << "# "; // not necessary for R's read.table
163 tracers.front()->PrintHeader(*outputStream);
164 *outputStream << "\n";
165 }
166
167 g_tracers.push_back(boost::make_tuple(outputStream, tracers));
Alexander Afanasyeva68783a2013-06-27 13:39:04 -0700168}
169
Alexander Afanasyeva68783a2013-06-27 13:39:04 -0700170Ptr<L3AggregateTracer>
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800171L3AggregateTracer::Install(Ptr<Node> node, boost::shared_ptr<std::ostream> outputStream,
172 Time averagingPeriod /* = Seconds (0.5)*/)
Alexander Afanasyeva68783a2013-06-27 13:39:04 -0700173{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800174 NS_LOG_DEBUG("Node: " << node->GetId());
Alexander Afanasyeva68783a2013-06-27 13:39:04 -0700175
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800176 Ptr<L3AggregateTracer> trace = Create<L3AggregateTracer>(outputStream, node);
177 trace->SetAveragingPeriod(averagingPeriod);
Alexander Afanasyeva68783a2013-06-27 13:39:04 -0700178
179 return trace;
180}
Alexander Afanasyev59314802012-11-26 14:56:04 -0800181
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800182L3AggregateTracer::L3AggregateTracer(boost::shared_ptr<std::ostream> os, Ptr<Node> node)
183 : L3Tracer(node)
184 , m_os(os)
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800185{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800186 Reset();
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800187}
188
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800189L3AggregateTracer::L3AggregateTracer(boost::shared_ptr<std::ostream> os, const std::string& node)
190 : L3Tracer(node)
191 , m_os(os)
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800192{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800193 Reset();
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800194}
195
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800196L3AggregateTracer::~L3AggregateTracer(){};
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800197
198void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800199L3AggregateTracer::SetAveragingPeriod(const Time& period)
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800200{
Alexander Afanasyev59314802012-11-26 14:56:04 -0800201 m_period = period;
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800202 m_printEvent.Cancel();
203 m_printEvent = Simulator::Schedule(m_period, &L3AggregateTracer::PeriodicPrinter, this);
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800204}
205
Alexander Afanasyev59314802012-11-26 14:56:04 -0800206void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800207L3AggregateTracer::PeriodicPrinter()
Alexander Afanasyev59314802012-11-26 14:56:04 -0800208{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800209 Print(*m_os);
210 Reset();
Alexander Afanasyev37b84c52013-04-26 13:38:52 -0700211
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800212 m_printEvent = Simulator::Schedule(m_period, &L3AggregateTracer::PeriodicPrinter, this);
Alexander Afanasyev59314802012-11-26 14:56:04 -0800213}
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800214
215void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800216L3AggregateTracer::PrintHeader(std::ostream& os) const
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800217{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800218 os << "Time"
219 << "\t"
Alexander Afanasyev59314802012-11-26 14:56:04 -0800220
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800221 << "Node"
222 << "\t"
223 << "FaceId"
224 << "\t"
225 << "FaceDescr"
226 << "\t"
Alexander Afanasyev59314802012-11-26 14:56:04 -0800227
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800228 << "Type"
229 << "\t"
230 << "Packets"
231 << "\t"
Alexander Afanasyev59314802012-11-26 14:56:04 -0800232 << "Kilobytes";
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800233}
234
235void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800236L3AggregateTracer::Reset()
Alexander Afanasyev59314802012-11-26 14:56:04 -0800237{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800238 for (std::map<Ptr<const Face>, boost::tuple<Stats, Stats>>::iterator stats = m_stats.begin();
239 stats != m_stats.end(); stats++) {
240 stats->second.get<0>().Reset();
241 stats->second.get<1>().Reset();
242 }
Alexander Afanasyev59314802012-11-26 14:56:04 -0800243}
244
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800245#define STATS(INDEX) stats->second.get<INDEX>()
Alexander Afanasyev59314802012-11-26 14:56:04 -0800246
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800247#define PRINTER(printName, fieldName) \
248 os << time.ToDouble(Time::S) << "\t" << m_node << "\t"; \
249 if (stats->first) { \
250 os << stats->first->GetId() << "\t" << *stats->first << "\t"; \
251 } \
252 else { \
253 os << "-1\tall\t"; \
254 } \
255 os << printName << "\t" << STATS(0).fieldName << "\t" << STATS(1).fieldName / 1024.0 << "\n";
Alexander Afanasyev59314802012-11-26 14:56:04 -0800256
257void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800258L3AggregateTracer::Print(std::ostream& os) const
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800259{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800260 Time time = Simulator::Now();
Alexander Afanasyev37b84c52013-04-26 13:38:52 -0700261
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800262 for (std::map<Ptr<const Face>, boost::tuple<Stats, Stats>>::iterator stats = m_stats.begin();
263 stats != m_stats.end(); stats++) {
264 if (!stats->first)
265 continue;
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800266
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800267 PRINTER("InInterests", m_inInterests);
268 PRINTER("OutInterests", m_outInterests);
269 PRINTER("DropInterests", m_dropInterests);
Alexander Afanasyev37b84c52013-04-26 13:38:52 -0700270
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800271 PRINTER("InNacks", m_inNacks);
272 PRINTER("OutNacks", m_outNacks);
273 PRINTER("DropNacks", m_dropNacks);
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800274
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800275 PRINTER("InData", m_inData);
276 PRINTER("OutData", m_outData);
277 PRINTER("DropData", m_dropData);
278 }
Alexander Afanasyev37b84c52013-04-26 13:38:52 -0700279
280 {
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800281 std::map<Ptr<const Face>, boost::tuple<Stats, Stats>>::iterator stats =
282 m_stats.find(Ptr<const Face>(0));
283 if (stats != m_stats.end()) {
284 PRINTER("SatisfiedInterests", m_satisfiedInterests);
285 PRINTER("TimedOutInterests", m_timedOutInterests);
286 }
Alexander Afanasyev37b84c52013-04-26 13:38:52 -0700287 }
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800288}
289
290void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800291L3AggregateTracer::OutInterests(Ptr<const Interest> interest, Ptr<const Face> face)
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800292{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800293 m_stats[face].get<0>().m_outInterests++;
294 if (interest->GetWire()) {
295 m_stats[face].get<1>().m_outInterests += interest->GetWire()->GetSize();
296 }
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800297}
298
299void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800300L3AggregateTracer::InInterests(Ptr<const Interest> interest, Ptr<const Face> face)
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800301{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800302 m_stats[face].get<0>().m_inInterests++;
303 if (interest->GetWire()) {
304 m_stats[face].get<1>().m_inInterests += interest->GetWire()->GetSize();
305 }
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800306}
307
308void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800309L3AggregateTracer::DropInterests(Ptr<const Interest> interest, Ptr<const Face> face)
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800310{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800311 m_stats[face].get<0>().m_dropInterests++;
312 if (interest->GetWire()) {
313 m_stats[face].get<1>().m_dropInterests += interest->GetWire()->GetSize();
314 }
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800315}
316
317void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800318L3AggregateTracer::OutNacks(Ptr<const Interest> nack, Ptr<const Face> face)
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800319{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800320 m_stats[face].get<0>().m_outNacks++;
321 if (nack->GetWire()) {
322 m_stats[face].get<1>().m_outNacks += nack->GetWire()->GetSize();
323 }
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800324}
325
326void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800327L3AggregateTracer::InNacks(Ptr<const Interest> nack, Ptr<const Face> face)
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800328{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800329 m_stats[face].get<0>().m_inNacks++;
330 if (nack->GetWire()) {
331 m_stats[face].get<1>().m_inNacks += nack->GetWire()->GetSize();
332 }
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800333}
334
335void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800336L3AggregateTracer::DropNacks(Ptr<const Interest> nack, Ptr<const Face> face)
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800337{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800338 m_stats[face].get<0>().m_dropNacks++;
339 if (nack->GetWire()) {
340 m_stats[face].get<1>().m_dropNacks += nack->GetWire()->GetSize();
341 }
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800342}
343
344void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800345L3AggregateTracer::OutData(Ptr<const Data> data, bool fromCache, Ptr<const Face> face)
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800346{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800347 m_stats[face].get<0>().m_outData++;
348 if (data->GetWire()) {
349 m_stats[face].get<1>().m_outData += data->GetWire()->GetSize();
350 }
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800351}
352
353void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800354L3AggregateTracer::InData(Ptr<const Data> data, Ptr<const Face> face)
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800355{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800356 m_stats[face].get<0>().m_inData++;
357 if (data->GetWire()) {
358 m_stats[face].get<1>().m_inData += data->GetWire()->GetSize();
359 }
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800360}
361
362void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800363L3AggregateTracer::DropData(Ptr<const Data> data, Ptr<const Face> face)
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800364{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800365 m_stats[face].get<0>().m_dropData++;
366 if (data->GetWire()) {
367 m_stats[face].get<1>().m_dropData += data->GetWire()->GetSize();
368 }
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800369}
370
Alexander Afanasyev37b84c52013-04-26 13:38:52 -0700371void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800372L3AggregateTracer::SatisfiedInterests(Ptr<const pit::Entry>)
Alexander Afanasyev37b84c52013-04-26 13:38:52 -0700373{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800374 m_stats[0].get<0>().m_satisfiedInterests++;
Alexander Afanasyev37b84c52013-04-26 13:38:52 -0700375 // no "size" stats
376}
377
378void
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800379L3AggregateTracer::TimedOutInterests(Ptr<const pit::Entry>)
Alexander Afanasyev37b84c52013-04-26 13:38:52 -0700380{
Alexander Afanasyevbe55cf62014-12-20 17:51:09 -0800381 m_stats[0].get<0>().m_timedOutInterests++;
Alexander Afanasyev37b84c52013-04-26 13:38:52 -0700382 // no "size" stats
383}
384
Alexander Afanasyevc9d5c1a2012-11-21 18:00:26 -0800385} // namespace ndn
386} // namespace ns3