fw: delegate sending Nack-Duplicate to forwarding strategy
This commit introduces a new strategy trigger (onInterestLoop) that
is invoked when a duplicate Interest is received. The default behavior
of the new trigger is to send a Nack as before. We also modify the
MulticastStrategy to override onInterestLoop and skip sending the Nack.
Refs: #5278
Co-authored-by: Davide Pesavento <davidepesa@gmail.com>
Change-Id: I07bb520bd31cbfc8d8f8581e05c49927f8ea35f7
diff --git a/tests/daemon/fw/strategy-tester.hpp b/tests/daemon/fw/strategy-tester.hpp
index e7dcccc..32785b8 100644
--- a/tests/daemon/fw/strategy-tester.hpp
+++ b/tests/daemon/fw/strategy-tester.hpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
- * Copyright (c) 2014-2022, Regents of the University of California,
+ * Copyright (c) 2014-2024, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -99,8 +99,7 @@
protected:
pit::OutRecord*
- sendInterest(const Interest& interest, Face& egress,
- const shared_ptr<pit::Entry>& pitEntry) override
+ sendInterest(const Interest& interest, Face& egress, const shared_ptr<pit::Entry>& pitEntry) override
{
sendInterestHistory.push_back({pitEntry->getInterest(), egress.getId(), interest});
auto it = pitEntry->insertOrUpdateOutRecord(egress, interest);
@@ -117,8 +116,7 @@
}
bool
- sendNack(const lp::NackHeader& header, Face& egress,
- const shared_ptr<pit::Entry>& pitEntry) override
+ sendNack(const lp::NackHeader& header, Face& egress, const shared_ptr<pit::Entry>& pitEntry) override
{
sendNackHistory.push_back({pitEntry->getInterest(), egress.getId(), header});
pitEntry->deleteInRecord(egress);
@@ -126,6 +124,14 @@
return true;
}
+ bool
+ sendNack(const lp::Nack& nack, Face& egress) override
+ {
+ sendNackHistory.push_back({nack.getInterest(), egress.getId(), nack.getHeader()});
+ afterAction();
+ return true;
+ }
+
public:
struct SendInterestArgs
{