nfd::fw::ProcessNackTraitsBase Class Referenceabstract

provides a common procedure for processing Nacks More...

#include <daemon/fw/process-nack-traits.hpp>

+ Inheritance diagram for nfd::fw::ProcessNackTraitsBase:
+ Collaboration diagram for nfd::fw::ProcessNackTraitsBase:

Protected Member Functions

virtual ~ProcessNackTraitsBase ()=default
void processNack (const Face &inFace, const lp::Nack &nack, const shared_ptr< pit::Entry > &pitEntry)

Detailed Description

provides a common procedure for processing Nacks

This procedure works as follows:

  1. If Nacks have been received from all upstream faces, return a Nack with least severe reason to downstream faces.
  2. If there are more than one upstream face, Nacks have been received from all but one of them, and that face is also a downstream, return a Nack to that face. This is to address a specific "live deadlock" scenario where two hosts are waiting for each other to return the Nack.
  3. Otherwise, wait for the arrival of more Nacks or Data.

To use this helper, the strategy should inherit from ProcessNackTraits<MyStrategy>, and declare that specialization as a friend class. Then, invoke processNack from afterReceiveNack trigger.

Definition at line 49 of file process-nack-traits.hpp.

Constructor & Destructor Documentation

◆ ~ProcessNackTraitsBase()

virtual nfd::fw::ProcessNackTraitsBase::~ProcessNackTraitsBase ( )

Member Function Documentation

◆ processNack()

void nfd::fw::ProcessNackTraitsBase::processNack ( const Face inFace,
const lp::Nack &  nack,
const shared_ptr< pit::Entry > &  pitEntry 

Definition at line 35 of file process-nack-traits.cpp.