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 lp::Nack &nack, const Face &inFace, 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 the Strategy::afterReceiveNack() trigger.

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

Constructor & Destructor Documentation

◆ ~ProcessNackTraitsBase()

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

Member Function Documentation

◆ processNack()

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

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