/** \brief determines whether a NextHop is eligible * \param currentDownstream incoming FaceId of current Interest * \param wantUnused if true, NextHop must not have unexpired OutRecord * \param now time::steady_clock::now(), ignored if !wantUnused */ static inline bool congestion_Predicate_NextHop_eligible(const shared_ptr<pit::Entry>& pitEntry, const fib::NextHop& nexthop, FaceId currentDownstream, const Name& prefix, bool wantUnused = false, time::steady_clock::TimePoint now = time::steady_clock::TimePoint::min()) { shared_ptr<Face> upstream = nexthop.getFace(); // upstream is current downstream if (upstream->getId() == currentDownstream) return false; // forwarding would violate scope if (pitEntry->violatesScope(*upstream)) return false; // BOOST_CHECK_MESSAGE(true, "f**k"); if (!upstream->m_cc->available(prefix)) return false; if (wantUnused) { // NextHop must not have unexpired OutRecord pit::OutRecordCollection::const_iterator outRecord = pitEntry->getOutRecord(*upstream); if (outRecord != pitEntry->getOutRecords().end() && outRecord->getExpiry() > now) { return false; } } return true; }
static bool canForwardToNextHop(shared_ptr<pit::Entry> pitEntry, const fib::NextHop& nexthop) { return pitEntry->canForwardTo(*nexthop.getFace()); }