[experimental] Allow strategy to expire PIT entry
This somewhat duplicates logic in the Forwarder, but may be needed in
certain cases.
Change-Id: I05bceb86024579153d72bf0e41ca48e89790a209
diff --git a/daemon/fw/strategy.cpp b/daemon/fw/strategy.cpp
index 7cf73ad..27ca68c 100644
--- a/daemon/fw/strategy.cpp
+++ b/daemon/fw/strategy.cpp
@@ -272,7 +272,15 @@
data2.setTag(pitToken);
return m_forwarder.onOutgoingData(data2, egress);
}
- return m_forwarder.onOutgoingData(data, egress);
+ m_forwarder.onOutgoingData(data, egress);
+
+ if (pitEntry->getInRecords().empty()) { // if nothing left, "closing down" the entry
+ // set PIT expiry timer to now
+ m_forwarder.setExpiryTimer(pitEntry, 0_ms);
+
+ // mark PIT satisfied
+ pitEntry->isSatisfied = true;
+ }
}
void
@@ -295,6 +303,14 @@
for (const auto& pendingDownstream : pendingDownstreams) {
this->sendData(data, *pendingDownstream, pitEntry);
}
+
+ pitEntry->clearInRecords();
+
+ // set PIT expiry timer to now
+ m_forwarder.setExpiryTimer(pitEntry, 0_ms);
+
+ // mark PIT satisfied
+ pitEntry->isSatisfied = true;
}
void