fw: remove ncc strategy

Change-Id: I6de0acf51e965afcbda5cc943cb39daa78cabf2d
diff --git a/tests/daemon/fw/ncc-strategy.t.cpp b/tests/daemon/fw/ncc-strategy.t.cpp
deleted file mode 100644
index 3c3f4d4..0000000
--- a/tests/daemon/fw/ncc-strategy.t.cpp
+++ /dev/null
@@ -1,410 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014-2019,  Regents of the University of California,
- *                           Arizona Board of Regents,
- *                           Colorado State University,
- *                           University Pierre & Marie Curie, Sorbonne University,
- *                           Washington University in St. Louis,
- *                           Beijing Institute of Technology,
- *                           The University of Memphis.
- *
- * This file is part of NFD (Named Data Networking Forwarding Daemon).
- * See AUTHORS.md for complete list of NFD authors and contributors.
- *
- * NFD is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NFD 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
- * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "fw/ncc-strategy.hpp"
-
-#include "tests/daemon/face/dummy-face.hpp"
-#include "strategy-tester.hpp"
-#include "topology-tester.hpp"
-
-namespace nfd {
-namespace fw {
-namespace tests {
-
-using NccStrategyTester = StrategyTester<NccStrategy>;
-NFD_REGISTER_STRATEGY(NccStrategyTester);
-
-BOOST_AUTO_TEST_SUITE(Fw)
-BOOST_FIXTURE_TEST_SUITE(TestNccStrategy, GlobalIoTimeFixture)
-
-BOOST_AUTO_TEST_CASE(FavorRespondingUpstream)
-{
-  // NccStrategy is fairly complex.
-  // The most important property is: it remembers which upstream is the fastest to return Data,
-  // and favors this upstream in subsequent Interests.
-
-  LimitedIo limitedIo(this);
-  FaceTable faceTable;
-  Forwarder forwarder(faceTable);
-  NccStrategyTester& strategy = choose<NccStrategyTester>(forwarder);
-  strategy.afterAction.connect(bind(&LimitedIo::afterOp, &limitedIo));
-
-  shared_ptr<DummyFace> face1 = make_shared<DummyFace>();
-  shared_ptr<DummyFace> face2 = make_shared<DummyFace>();
-  shared_ptr<DummyFace> face3 = make_shared<DummyFace>();
-  faceTable.add(face1);
-  faceTable.add(face2);
-  faceTable.add(face3);
-
-  Fib& fib = forwarder.getFib();
-  fib::Entry& fibEntry = *fib.insert(Name()).first;
-  fib.addOrUpdateNextHop(fibEntry, *face1, 10);
-  fib.addOrUpdateNextHop(fibEntry, *face2, 20);
-
-  Pit& pit = forwarder.getPit();
-
-  // first Interest: strategy knows nothing and follows routing
-  shared_ptr<Interest> interest1p = makeInterest("ndn:/0Jm1ajrW/%00");
-  Interest& interest1 = *interest1p;
-  interest1.setInterestLifetime(8_s);
-  shared_ptr<pit::Entry> pitEntry1 = pit.insert(interest1).first;
-
-  pitEntry1->insertOrUpdateInRecord(*face3, interest1);
-  strategy.afterReceiveInterest(FaceEndpoint(*face3, 0), interest1, pitEntry1);
-
-  // forwards to face1 because routing says it's best
-  // (no io run here: afterReceiveInterest has already sent the Interest)
-  BOOST_REQUIRE_EQUAL(strategy.sendInterestHistory.size(), 1);
-  BOOST_CHECK_EQUAL(strategy.sendInterestHistory[0].outFaceId, face1->getId());
-
-  // forwards to face2 because face1 doesn't respond
-  limitedIo.run(1, 500_ms, 10_ms);
-  BOOST_REQUIRE_EQUAL(strategy.sendInterestHistory.size(), 2);
-  BOOST_CHECK_EQUAL(strategy.sendInterestHistory[1].outFaceId, face2->getId());
-
-  // face2 responds
-  shared_ptr<Data> data1p = makeData("ndn:/0Jm1ajrW/%00");
-  Data& data1 = *data1p;
-  strategy.beforeSatisfyInterest(pitEntry1, FaceEndpoint(*face2, 0), data1);
-  this->advanceClocks(10_ms, 500_ms);
-
-  // second Interest: strategy knows face2 is best
-  shared_ptr<Interest> interest2p = makeInterest("ndn:/0Jm1ajrW/%00%01");
-  Interest& interest2 = *interest2p;
-  interest2.setInterestLifetime(8_s);
-  shared_ptr<pit::Entry> pitEntry2 = pit.insert(interest2).first;
-
-  pitEntry2->insertOrUpdateInRecord(*face3, interest2);
-  strategy.afterReceiveInterest(FaceEndpoint(*face3, 0), interest2, pitEntry2);
-
-  // forwards to face2 because it responds previously
-  this->advanceClocks(1_ms);
-  BOOST_REQUIRE_GE(strategy.sendInterestHistory.size(), 3);
-  BOOST_CHECK_EQUAL(strategy.sendInterestHistory[2].outFaceId, face2->getId());
-}
-
-BOOST_AUTO_TEST_CASE(Bug1853)
-{
-  FaceTable faceTable;
-  Forwarder forwarder(faceTable);
-  NccStrategyTester& strategy = choose<NccStrategyTester>(forwarder);
-
-  shared_ptr<DummyFace> face1 = make_shared<DummyFace>();
-  shared_ptr<DummyFace> face2 = make_shared<DummyFace>();
-  shared_ptr<DummyFace> face3 = make_shared<DummyFace>();
-  faceTable.add(face1);
-  faceTable.add(face2);
-  faceTable.add(face3);
-
-  Fib& fib = forwarder.getFib();
-  fib::Entry& fibEntry = *fib.insert(Name()).first;
-  fib.addOrUpdateNextHop(fibEntry, *face1, 10);
-
-  Pit& pit = forwarder.getPit();
-
-  // first Interest: strategy follows routing and forwards to face1
-  shared_ptr<Interest> interest1 = makeInterest("ndn:/nztwIvHX/%00");
-  interest1->setInterestLifetime(8_s);
-  shared_ptr<pit::Entry> pitEntry1 = pit.insert(*interest1).first;
-
-  pitEntry1->insertOrUpdateInRecord(*face3, *interest1);
-  strategy.afterReceiveInterest(FaceEndpoint(*face3, 0), *interest1, pitEntry1);
-
-  this->advanceClocks(1_ms);
-  BOOST_REQUIRE_EQUAL(strategy.sendInterestHistory.size(), 1);
-  BOOST_CHECK_EQUAL(strategy.sendInterestHistory[0].outFaceId, face1->getId());
-
-  // face1 responds
-  shared_ptr<Data> data1 = makeData("ndn:/nztwIvHX/%00");
-  strategy.beforeSatisfyInterest(pitEntry1, FaceEndpoint(*face1, 0), *data1);
-  this->advanceClocks(10_ms, 500_ms);
-
-  // second Interest: bestFace is face1, nUpstreams becomes 0,
-  // therefore pitEntryInfo->maxInterval cannot be calculated from deferRange and nUpstreams
-  shared_ptr<Interest> interest2 = makeInterest("ndn:/nztwIvHX/%01");
-  interest2->setInterestLifetime(8_s);
-  shared_ptr<pit::Entry> pitEntry2 = pit.insert(*interest2).first;
-
-  pitEntry2->insertOrUpdateInRecord(*face3, *interest2);
-  strategy.afterReceiveInterest(FaceEndpoint(*face3, 0), *interest2, pitEntry2);
-
-  // FIB entry is changed before doPropagate executes
-  fib.addOrUpdateNextHop(fibEntry, *face2, 20);
-  this->advanceClocks(10_ms, 1_s);// should not crash
-}
-
-BOOST_AUTO_TEST_CASE(Bug1961)
-{
-  LimitedIo limitedIo(this);
-  FaceTable faceTable;
-  Forwarder forwarder(faceTable);
-  NccStrategyTester& strategy = choose<NccStrategyTester>(forwarder);
-  strategy.afterAction.connect(bind(&LimitedIo::afterOp, &limitedIo));
-
-  shared_ptr<DummyFace> face1 = make_shared<DummyFace>();
-  shared_ptr<DummyFace> face2 = make_shared<DummyFace>();
-  shared_ptr<DummyFace> face3 = make_shared<DummyFace>();
-  faceTable.add(face1);
-  faceTable.add(face2);
-  faceTable.add(face3);
-
-  Fib& fib = forwarder.getFib();
-  fib::Entry& fibEntry = *fib.insert(Name()).first;
-  fib.addOrUpdateNextHop(fibEntry, *face1, 10);
-  fib.addOrUpdateNextHop(fibEntry, *face2, 20);
-
-  Pit& pit = forwarder.getPit();
-
-  // first Interest: strategy forwards to face1 and face2
-  shared_ptr<Interest> interest1 = makeInterest("ndn:/seRMz5a6/%00");
-  interest1->setInterestLifetime(2_s);
-  shared_ptr<pit::Entry> pitEntry1 = pit.insert(*interest1).first;
-
-  pitEntry1->insertOrUpdateInRecord(*face3, *interest1);
-  strategy.afterReceiveInterest(FaceEndpoint(*face3, 0), *interest1, pitEntry1);
-  limitedIo.run(2 - strategy.sendInterestHistory.size(), 2_s, 10_ms);
-  BOOST_REQUIRE_EQUAL(strategy.sendInterestHistory.size(), 2);
-  BOOST_CHECK_EQUAL(strategy.sendInterestHistory[0].outFaceId, face1->getId());
-  BOOST_CHECK_EQUAL(strategy.sendInterestHistory[1].outFaceId, face2->getId());
-
-  // face1 responds
-  shared_ptr<Data> data1 = makeData("ndn:/seRMz5a6/%00");
-  strategy.beforeSatisfyInterest(pitEntry1, FaceEndpoint(*face1, 0), *data1);
-  pitEntry1->clearInRecords();
-  this->advanceClocks(10_ms);
-  // face2 also responds
-  strategy.beforeSatisfyInterest(pitEntry1, FaceEndpoint(*face2, 0), *data1);
-  this->advanceClocks(10_ms);
-
-  // second Interest: bestFace should be face 1
-  shared_ptr<Interest> interest2 = makeInterest("ndn:/seRMz5a6/%01");
-  interest2->setInterestLifetime(2_s);
-  shared_ptr<pit::Entry> pitEntry2 = pit.insert(*interest2).first;
-
-  pitEntry2->insertOrUpdateInRecord(*face3, *interest2);
-  strategy.afterReceiveInterest(FaceEndpoint(*face3, 0), *interest2, pitEntry2);
-  limitedIo.run(3 - strategy.sendInterestHistory.size(), 2_s, 10_ms);
-
-  BOOST_REQUIRE_GE(strategy.sendInterestHistory.size(), 3);
-  BOOST_CHECK_EQUAL(strategy.sendInterestHistory[2].outFaceId, face1->getId());
-}
-
-BOOST_AUTO_TEST_CASE(Bug1971)
-{
-  LimitedIo limitedIo(this);
-  FaceTable faceTable;
-  Forwarder forwarder(faceTable);
-  NccStrategyTester& strategy = choose<NccStrategyTester>(forwarder);
-  strategy.afterAction.connect(bind(&LimitedIo::afterOp, &limitedIo));
-
-  shared_ptr<DummyFace> face1 = make_shared<DummyFace>();
-  shared_ptr<DummyFace> face2 = make_shared<DummyFace>();
-  faceTable.add(face1);
-  faceTable.add(face2);
-
-  Fib& fib = forwarder.getFib();
-  fib::Entry& fibEntry = *fib.insert(Name()).first;
-  fib.addOrUpdateNextHop(fibEntry, *face2, 10);
-
-  Pit& pit = forwarder.getPit();
-
-  // first Interest: strategy forwards to face2
-  shared_ptr<Interest> interest1 = makeInterest("ndn:/M4mBXCsd");
-  interest1->setInterestLifetime(2_s);
-  shared_ptr<pit::Entry> pitEntry1 = pit.insert(*interest1).first;
-
-  pitEntry1->insertOrUpdateInRecord(*face1, *interest1);
-  strategy.afterReceiveInterest(FaceEndpoint(*face1, 0), *interest1, pitEntry1);
-  limitedIo.run(1 - strategy.sendInterestHistory.size(), 2_s, 10_ms);
-  BOOST_REQUIRE_EQUAL(strategy.sendInterestHistory.size(), 1);
-  BOOST_CHECK_EQUAL(strategy.sendInterestHistory[0].outFaceId, face2->getId());
-
-  // face2 responds
-  shared_ptr<Data> data1 = makeData("ndn:/M4mBXCsd");
-  data1->setFreshnessPeriod(5_ms);
-  strategy.beforeSatisfyInterest(pitEntry1, FaceEndpoint(*face2, 0), *data1);
-  pitEntry1->deleteOutRecord(*face2);
-  pitEntry1->clearInRecords();
-  this->advanceClocks(10_ms);
-
-  // similar Interest: strategy should still forward it
-  pitEntry1->insertOrUpdateInRecord(*face1, *interest1);
-  strategy.afterReceiveInterest(FaceEndpoint(*face1, 0), *interest1, pitEntry1);
-  limitedIo.run(2 - strategy.sendInterestHistory.size(), 2_s, 10_ms);
-  BOOST_REQUIRE_EQUAL(strategy.sendInterestHistory.size(), 2);
-  BOOST_CHECK_EQUAL(strategy.sendInterestHistory[1].outFaceId, face2->getId());
-}
-
-BOOST_AUTO_TEST_CASE(Bug1998)
-{
-  FaceTable faceTable;
-  Forwarder forwarder(faceTable);
-  NccStrategyTester& strategy = choose<NccStrategyTester>(forwarder);
-
-  shared_ptr<DummyFace> face1 = make_shared<DummyFace>();
-  shared_ptr<DummyFace> face2 = make_shared<DummyFace>();
-  faceTable.add(face1);
-  faceTable.add(face2);
-
-  Fib& fib = forwarder.getFib();
-  fib::Entry& fibEntry = *fib.insert(Name()).first;
-  fib.addOrUpdateNextHop(fibEntry, *face1, 10); // face1 is top-ranked nexthop
-  fib.addOrUpdateNextHop(fibEntry, *face2, 20);
-
-  Pit& pit = forwarder.getPit();
-
-  // Interest comes from face1, which is sole downstream
-  shared_ptr<Interest> interest1 = makeInterest("ndn:/tFy5HzUzD4");
-  shared_ptr<pit::Entry> pitEntry1 = pit.insert(*interest1).first;
-  pitEntry1->insertOrUpdateInRecord(*face1, *interest1);
-
-  strategy.afterReceiveInterest(FaceEndpoint(*face1, 0), *interest1, pitEntry1);
-
-  // Interest shall go to face2, not loop back to face1
-  BOOST_REQUIRE_EQUAL(strategy.sendInterestHistory.size(), 1);
-  BOOST_CHECK_EQUAL(strategy.sendInterestHistory[0].outFaceId, face2->getId());
-}
-
-BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES(PredictionAdjustment, 1)
-BOOST_AUTO_TEST_CASE(PredictionAdjustment) // Bug 3411
-{
-  /*
-   * /----------\
-   * | consumer |
-   * \----------/
-   *     |
-   *     |
-   *   +---+  5ms  +---+
-   *   | A |-------| B |
-   *   +---+       +---+
-   *     |           |
-   *     | 5ms       | 15ms/5ms
-   *     |           |
-   *   +---+       +---+
-   *   | C |-------| D |
-   *   +---+ 15ms  +---+
-   *         /5ms    |
-   *                 |
-   *         /----------\
-   *         | producer |
-   *         \----------/
-   */
-
-  TopologyTester topo;
-  TopologyNode nodeA = topo.addForwarder("A"),
-               nodeB = topo.addForwarder("B"),
-               nodeC = topo.addForwarder("C"),
-               nodeD = topo.addForwarder("D");
-
-  for (TopologyNode node : {nodeA, nodeB, nodeC, nodeD}) {
-    topo.setStrategy<NccStrategy>(node);
-  }
-
-  shared_ptr<TopologyLink> linkAB = topo.addLink("AB", 5_ms, {nodeA, nodeB}),
-                           linkAC = topo.addLink("AC", 5_ms, {nodeA, nodeC}),
-                           linkBD = topo.addLink("BD", 15_ms, {nodeB, nodeD}),
-                           linkCD = topo.addLink("CD", 15_ms, {nodeC, nodeD});
-
-  topo.registerPrefix(nodeA, linkAB->getFace(nodeA), "ndn:/P");
-  topo.registerPrefix(nodeA, linkAC->getFace(nodeA), "ndn:/P");
-  topo.registerPrefix(nodeB, linkBD->getFace(nodeB), "ndn:/P");
-  topo.registerPrefix(nodeC, linkCD->getFace(nodeC), "ndn:/P");
-
-  shared_ptr<TopologyAppLink> producer = topo.addAppFace("producer", nodeD, "ndn:/P");
-  topo.addEchoProducer(producer->getClientFace());
-
-  shared_ptr<TopologyAppLink> consumer = topo.addAppFace("consumer", nodeA);
-  topo.addIntervalConsumer(consumer->getClientFace(), "ndn:/P",
-                           100_ms, 300);
-
-  auto getMeInfo = [&] () -> NccStrategy::MeasurementsEntryInfo* {
-    Measurements& measurements = topo.getForwarder(nodeA).getMeasurements();
-    measurements::Entry* me = measurements.findExactMatch("ndn:/P");
-    return me == nullptr ? nullptr : me->getStrategyInfo<NccStrategy::MeasurementsEntryInfo>();
-  };
-
-  // NccStrategy starts with an exploration period when the algorithm adjusts
-  // its prediction to converge near the path RTT.
-  bool isExplorationFinished = false;
-  const time::milliseconds TRUE_RTT1(40);
-  bool isLastPredictionUnder = true;
-  int nPredictionCrossings = 0;
-  for (int i = 0; i < 10000; ++i) {
-    this->advanceClocks(5_ms);
-    auto meInfo = getMeInfo();
-    if (meInfo == nullptr) {
-      continue;
-    }
-
-    if ((isLastPredictionUnder && meInfo->prediction > TRUE_RTT1) ||
-        (!isLastPredictionUnder && meInfo->prediction < TRUE_RTT1)) {
-      isLastPredictionUnder = !isLastPredictionUnder;
-      if (++nPredictionCrossings > 6) {
-        isExplorationFinished = true;
-        BOOST_TEST_MESSAGE("exploration finishes after " << (i * 5) << "ms");
-        break;
-      }
-    }
-  }
-  BOOST_REQUIRE_MESSAGE(isExplorationFinished, "exploration did not finish within 50s");
-
-  // NccStrategy has selected one path as the best.
-  // When we reduce the RTT of the other path, ideally it should be selected as the best face.
-  // However, this won't happen due to a weakness in NccStrategy.
-  // See  https://redmine.named-data.net/issues/3411#note-4
-  shared_ptr<Face> bestFace1 = getMeInfo()->bestFace.lock();
-  if (bestFace1.get() == &linkAB->getFace(nodeA)) {
-    linkCD->setDelay(5_ms);
-  }
-  else if (bestFace1.get() == &linkAC->getFace(nodeA)) {
-    linkBD->setDelay(5_ms);
-  }
-  else {
-    BOOST_FAIL("unexpected best face");
-  }
-
-  bool isNewBestChosen = false;
-  for (int i = 0; i < 10000; ++i) {
-    this->advanceClocks(5_ms);
-    auto meInfo = getMeInfo();
-    if (meInfo == nullptr) {
-      continue;
-    }
-
-    if (meInfo->bestFace.lock() != bestFace1) {
-      isNewBestChosen = true;
-      BOOST_TEST_MESSAGE("new best face is found after " << (i * 5) << "ms");
-      break;
-    }
-  }
-  BOOST_CHECK_MESSAGE(isNewBestChosen, "new best face is not found in 50000ms"); // expected failure
-}
-
-BOOST_AUTO_TEST_SUITE_END() // TestNccStrategy
-BOOST_AUTO_TEST_SUITE_END() // Fw
-
-} // namespace tests
-} // namespace fw
-} // namespace nfd
diff --git a/tests/daemon/fw/strategy-instantiation.t.cpp b/tests/daemon/fw/strategy-instantiation.t.cpp
index 4ea9bb3..cd057bc 100644
--- a/tests/daemon/fw/strategy-instantiation.t.cpp
+++ b/tests/daemon/fw/strategy-instantiation.t.cpp
@@ -33,19 +33,17 @@
 #include "fw/best-route-strategy.hpp"
 #include "fw/best-route-strategy2.hpp"
 #include "fw/multicast-strategy.hpp"
-#include "fw/ncc-strategy.hpp"
 #include "fw/self-learning-strategy.hpp"
 #include "fw/random-strategy.hpp"
 
 #include "tests/test-common.hpp"
+
 #include <boost/mpl/vector.hpp>
 
 namespace nfd {
 namespace fw {
 namespace tests {
 
-using namespace nfd::tests;
-
 BOOST_AUTO_TEST_SUITE(Fw)
 BOOST_AUTO_TEST_SUITE(TestStrategyInstantiation)
 
@@ -80,7 +78,6 @@
   Test<BestRouteStrategy, false, 1>,
   Test<BestRouteStrategy2, false, 5>,
   Test<MulticastStrategy, false, 4>,
-  Test<NccStrategy, false, 1>,
   Test<SelfLearningStrategy, false, 1>,
   Test<RandomStrategy, false, 1>
 >;
diff --git a/tests/daemon/fw/strategy-scope-control.t.cpp b/tests/daemon/fw/strategy-scope-control.t.cpp
index 123a4f8..a707a46 100644
--- a/tests/daemon/fw/strategy-scope-control.t.cpp
+++ b/tests/daemon/fw/strategy-scope-control.t.cpp
@@ -33,7 +33,6 @@
 #include "fw/best-route-strategy.hpp"
 #include "fw/best-route-strategy2.hpp"
 #include "fw/multicast-strategy.hpp"
-#include "fw/ncc-strategy.hpp"
 #include "fw/random-strategy.hpp"
 
 #include "tests/test-common.hpp"
@@ -41,7 +40,6 @@
 #include "choose-strategy.hpp"
 #include "strategy-tester.hpp"
 
-#include <boost/mpl/copy_if.hpp>
 #include <boost/mpl/vector.hpp>
 
 namespace nfd {
@@ -87,7 +85,7 @@
 BOOST_AUTO_TEST_SUITE(Fw)
 BOOST_AUTO_TEST_SUITE(TestStrategyScopeControl)
 
-template<typename S, bool WillSendNackNoRoute, bool CanProcessNack, bool WillRejectPitEntry = true>
+template<typename S, bool WillSendNackNoRoute, bool CanProcessNack, bool WillRejectPitEntry>
 class Test
 {
 public:
@@ -113,13 +111,12 @@
 };
 
 using Tests = boost::mpl::vector<
-  Test<AccessStrategy, false, false>,
-  Test<AsfStrategy, true, false>,
-  Test<BestRouteStrategy, false, false>,
-  Test<BestRouteStrategy2, true, true>,
+  Test<AccessStrategy, false, false, true>,
+  Test<AsfStrategy, true, false, true>,
+  Test<BestRouteStrategy, false, false, true>,
+  Test<BestRouteStrategy2, true, true, true>,
   Test<MulticastStrategy, false, false, false>,
-  Test<NccStrategy, false, false>,
-  Test<RandomStrategy, true, true>
+  Test<RandomStrategy, true, true, true>
 >;
 
 BOOST_FIXTURE_TEST_CASE_TEMPLATE(LocalhostInterestToLocal,
@@ -259,7 +256,7 @@
   this->fib.addOrUpdateNextHop(*fibEntry, *this->localFace4, 10);
   this->fib.addOrUpdateNextHop(*fibEntry, *this->nonLocalFace2, 20);
 
-  auto interest = makeInterest("/localhop/A/1", 1377);
+  auto interest = makeInterest("/localhop/A/1", false, nullopt, 1377);
   shared_ptr<pit::Entry> pitEntry = this->pit.insert(*interest).first;
   pitEntry->insertOrUpdateInRecord(*this->nonLocalFace1, *interest);
   lp::Nack nack = makeNack(*interest, lp::NackReason::NO_ROUTE);