nfd::DeadNonceList Class Reference

represents the Dead Nonce list More...

#include <daemon/table/dead-nonce-list.hpp>

+ Inheritance diagram for nfd::DeadNonceList:
+ Collaboration diagram for nfd::DeadNonceList:

Public Member Functions

 DeadNonceList (const time::nanoseconds &lifetime=DEFAULT_LIFETIME)
 constructs the Dead Nonce List More...
 
 ~DeadNonceList ()
 
void add (const Name &name, uint32_t nonce)
 records name+nonce More...
 
const time::nanoseconds & getLifetime () const
 
bool has (const Name &name, uint32_t nonce) const
 determines if name+nonce exists More...
 
size_t size () const
 

Static Public Attributes

static const time::nanoseconds DEFAULT_LIFETIME = time::seconds(6)
 default entry lifetime More...
 
static const time::nanoseconds MIN_LIFETIME = time::milliseconds(1)
 minimum entry lifetime More...
 

Detailed Description

represents the Dead Nonce list

The Dead Nonce List is a global table that supplements PIT for loop detection. When a Nonce is erased (dead) from PIT entry, the Nonce and the Interest Name is added to Dead Nonce List, and kept for a duration in which most loops are expected to have occured.

To reduce memory usage, the Interest Name and Nonce are stored as a 64-bit hash. There could be false positives (non-looping Interest could be considered looping), but the probability is small, and the error is recoverable when consumer retransmits with a different Nonce.

To reduce memory usage, entries do not have associated timestamps. Instead, lifetime of entries is controlled by dynamically adjusting the capacity of the container. At fixed intervals, the MARK, an entry with a special value, is inserted into the container. The number of MARKs stored in the container reflects the lifetime of entries, because MARKs are inserted at fixed intervals.

Definition at line 54 of file dead-nonce-list.hpp.

Constructor & Destructor Documentation

nfd::DeadNonceList::DeadNonceList ( const time::nanoseconds &  lifetime = DEFAULT_LIFETIME)
explicit

constructs the Dead Nonce List

Parameters
lifetimeduration of the expected lifetime of each nonce, must be no less than MIN_LIFETIME. This should be set to the duration in which most loops would have occured. A loop cannot be detected if delay of the cycle is greater than lifetime.
Exceptions
std::invalid_argumentif lifetime is less than MIN_LIFETIME

Definition at line 45 of file dead-nonce-list.cpp.

nfd::DeadNonceList::~DeadNonceList ( )

Definition at line 66 of file dead-nonce-list.cpp.

Member Function Documentation

void nfd::DeadNonceList::add ( const Name &  name,
uint32_t  nonce 
)

records name+nonce

Definition at line 97 of file dead-nonce-list.cpp.

const time::nanoseconds & nfd::DeadNonceList::getLifetime ( ) const
inline
Returns
expected lifetime

Definition at line 215 of file dead-nonce-list.hpp.

bool nfd::DeadNonceList::has ( const Name &  name,
uint32_t  nonce 
) const

determines if name+nonce exists

Returns
true if name+nonce exists

Definition at line 90 of file dead-nonce-list.cpp.

size_t nfd::DeadNonceList::size ( ) const
Returns
number of stored Nonces
Note
The return value does not contain non-Nonce entries in the index, if any.

Definition at line 84 of file dead-nonce-list.cpp.

Member Data Documentation

const time::nanoseconds nfd::DeadNonceList::DEFAULT_LIFETIME = time::seconds(6)
static

default entry lifetime

Definition at line 136 of file dead-nonce-list.hpp.

const time::nanoseconds nfd::DeadNonceList::MIN_LIFETIME = time::milliseconds(1)
static

minimum entry lifetime

Definition at line 139 of file dead-nonce-list.hpp.