NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.5: NDN, CCN, CCNx, content centric networks
API Documentation
nfd::fw::MulticastStrategy Class Reference

A forwarding strategy that forwards Interests to all FIB nexthops. More...

#include <multicast-strategy.hpp>

Inheritance diagram for nfd::fw::MulticastStrategy:
Collaboration diagram for nfd::fw::MulticastStrategy:

Public Member Functions

 MulticastStrategy (Forwarder &forwarder, const Name &name=getStrategyName())
 
void afterReceiveInterest (const Interest &interest, const FaceEndpoint &ingress, const shared_ptr< pit::Entry > &pitEntry) override
 Trigger after an Interest is received. More...
 
void afterNewNextHop (const fib::NextHop &nextHop, const shared_ptr< pit::Entry > &pitEntry) override
 Trigger after a new nexthop is added. More...
 
- Public Member Functions inherited from nfd::fw::Strategy
 Strategy (Forwarder &forwarder)
 Construct a strategy instance. More...
 
virtual ~Strategy ()
 
const NamegetInstanceName () const
 
virtual void afterReceiveLoopedInterest (const FaceEndpoint &ingress, const Interest &interest, pit::Entry &pitEntry)
 trigger after a looped Interest is received More...
 
virtual void beforeSatisfyInterest (const Data &data, const FaceEndpoint &ingress, const shared_ptr< pit::Entry > &pitEntry)
 trigger before PIT entry is satisfied More...
 
virtual void satisfyInterest (const shared_ptr< pit::Entry > &pitEntry, const FaceEndpoint &ingress, const Data &data, std::set< std::pair< Face *, EndpointId >> &satisfiedDownstreams, std::set< std::pair< Face *, EndpointId >> &unsatisfiedDownstreams)
 
virtual void afterContentStoreHit (const Data &data, const FaceEndpoint &ingress, const shared_ptr< pit::Entry > &pitEntry)
 trigger after a Data is matched in CS More...
 
virtual void afterReceiveData (const Data &data, const FaceEndpoint &ingress, const shared_ptr< pit::Entry > &pitEntry)
 trigger after Data is received More...
 
virtual void afterReceiveNack (const lp::Nack &nack, const FaceEndpoint &ingress, const shared_ptr< pit::Entry > &pitEntry)
 Trigger after a Nack is received. More...
 
virtual void onDroppedInterest (const Interest &interest, Face &egress)
 Trigger after an Interest is dropped (e.g., for exceeding allowed retransmissions). More...
 

Static Public Member Functions

static const NamegetStrategyName ()
 
- Static Public Member Functions inherited from nfd::fw::Strategy
template<typename S >
static void registerType (const Name &strategyName=S::getStrategyName())
 Register a strategy type. More...
 
static bool canCreate (const Name &instanceName)
 
static unique_ptr< Strategycreate (const Name &instanceName, Forwarder &forwarder)
 
static bool areSameType (const Name &instanceNameA, const Name &instanceNameB)
 
static std::set< NamelistRegistered ()
 
static const NamegetStrategyName ()
 

Additional Inherited Members

- Protected Member Functions inherited from nfd::fw::Strategy
NFD_VIRTUAL_WITH_TESTS pit::OutRecordsendInterest (const Interest &interest, Face &egress, const shared_ptr< pit::Entry > &pitEntry)
 Send an Interest packet. More...
 
NFD_VIRTUAL_WITH_TESTS bool sendData (const Data &data, Face &egress, const shared_ptr< pit::Entry > &pitEntry)
 Send a Data packet. More...
 
NFD_VIRTUAL_WITH_TESTS void sendDataToAll (const Data &data, const shared_ptr< pit::Entry > &pitEntry, const Face &inFace)
 Send a Data packet to all matched and qualified faces. More...
 
NFD_VIRTUAL_WITH_TESTS void rejectPendingInterest (const shared_ptr< pit::Entry > &pitEntry)
 Schedule the PIT entry for immediate deletion. More...
 
NFD_VIRTUAL_WITH_TESTS bool sendNack (const lp::NackHeader &header, Face &egress, const shared_ptr< pit::Entry > &pitEntry)
 Send a Nack packet. More...
 
void sendNacks (const lp::NackHeader &header, const shared_ptr< pit::Entry > &pitEntry, std::initializer_list< const Face *> exceptFaces={})
 Send Nack to every face that has an in-record, except those in exceptFaces. More...
 
void setExpiryTimer (const shared_ptr< pit::Entry > &pitEntry, time::milliseconds duration)
 Schedule the PIT entry to be erased after duration. More...
 
const fib::EntrylookupFib (const pit::Entry &pitEntry) const
 Performs a FIB lookup, considering Link object if present. More...
 
MeasurementsAccessorgetMeasurements ()
 
FacegetFace (FaceId id) const
 
const FaceTablegetFaceTable () const
 
void setInstanceName (const Name &name)
 Set strategy instance name. More...
 
- Static Protected Member Functions inherited from nfd::fw::Strategy
static ParsedInstanceName parseInstanceName (const Name &input)
 Parse a strategy instance name. More...
 
static Name makeInstanceName (const Name &input, const Name &strategyName)
 Construct a strategy instance name. More...
 
- Protected Attributes inherited from nfd::fw::Strategy
signal::Signal< FaceTable, Face > & afterAddFace
 
signal::Signal< FaceTable, Face > & beforeRemoveFace
 

Detailed Description

A forwarding strategy that forwards Interests to all FIB nexthops.

Definition at line 37 of file multicast-strategy.hpp.

Constructor & Destructor Documentation

◆ MulticastStrategy()

Member Function Documentation

◆ getStrategyName()

const Name & nfd::fw::MulticastStrategy::getStrategyName ( )
static

Definition at line 58 of file multicast-strategy.cpp.

References ns3::ndn::Name.

Referenced by MulticastStrategy().

◆ afterReceiveInterest()

void nfd::fw::MulticastStrategy::afterReceiveInterest ( const Interest interest,
const FaceEndpoint ingress,
const shared_ptr< pit::Entry > &  pitEntry 
)
overridevirtual

Trigger after an Interest is received.

The Interest:

  • has not exceeded HopLimit
  • does not violate Scope
  • is not looped
  • cannot be satisfied by ContentStore
  • is under a namespace managed by this strategy

The PIT entry is set to expire after InterestLifetime has elapsed at each downstream.

The strategy should decide whether and where to forward this Interest.

  • If the strategy decides to forward this Interest, invoke sendInterest() for each upstream, either now or shortly after via a scheduler event, but before the PIT entry expires. Optionally, the strategy can invoke setExpiryTimer() to adjust how long it would wait for a response.
  • If the strategy has already forwarded this Interest previously and decides to continue waiting, do nothing. Optionally, the strategy can invoke setExpiryTimer() to adjust how long it would wait for a response.
  • If the strategy concludes that this Interest cannot be satisfied, invoke rejectPendingInterest() to erase the PIT entry.
Warning
The strategy must not retain a copy of the pitEntry shared_ptr after this function returns, otherwise undefined behavior may occur. However, the strategy is allowed to construct and keep a weak_ptr to pitEntry.

Implements nfd::fw::Strategy.

Definition at line 65 of file multicast-strategy.cpp.

References nfd::fw::RetxSuppressionExponential::decidePerUpstream(), Face, nfd::FaceEndpoint::face, nfd::fw::FORWARD, nfd::fib::Entry::getNextHops(), nfd::fw::RetxSuppressionExponential::incrementIntervalForOutRecord(), nfd::fw::isNextHopEligible(), nfd::fw::Strategy::lookupFib(), NFD_LOG_DEBUG, nfd::fw::Strategy::sendInterest(), and nfd::fw::SUPPRESS.

◆ afterNewNextHop()

void nfd::fw::MulticastStrategy::afterNewNextHop ( const fib::NextHop nextHop,
const shared_ptr< pit::Entry > &  pitEntry 
)
overridevirtual

Trigger after a new nexthop is added.

The strategy should decide whether to send the buffered Interests to the new nexthop.

In the base class, this method does nothing.

Reimplemented from nfd::fw::Strategy.

Definition at line 94 of file multicast-strategy.cpp.

References nfd::fib::NextHop::getFace(), nfd::fw::isNextHopEligible(), NFD_LOG_DEBUG, and nfd::fw::Strategy::sendInterest().


The documentation for this class was generated from the following files: