NDN-DPDK
High-Speed Named Data Networking Forwarder
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
entry.h
Go to the documentation of this file.
1 #ifndef NDNDPDK_FIB_ENTRY_H
2 #define NDNDPDK_FIB_ENTRY_H
3 
6 #include "../core/rttest.h"
7 #include "../core/urcu.h"
8 #include "../iface/faceid.h"
9 #include "../strategycode/strategy-code.h"
10 #include "enum.h"
11 #include <urcu/rculfhash.h>
12 
13 typedef struct FibEntryDyn {
14  uint32_t nRxInterests;
15  uint32_t nRxData;
16  uint32_t nRxNacks;
17  uint32_t nTxInterests;
18  char a_[16];
22 static_assert(sizeof(FibEntryDyn) % RTE_CACHE_LINE_SIZE == 0, "");
23 
24 typedef struct FibEntry FibEntry;
25 
27 struct FibEntry {
28  struct cds_lfht_node lfhtnode;
29  uint16_t nameL;
31  RTE_MARKER cachelineA_;
32 
33  union {
39 
45  };
46 
47  uint32_t seqNum;
48 
49  uint8_t nComps;
50  uint8_t nNexthops;
51 
59  uint8_t height;
60 
62 
63  char b_[16];
64  struct rcu_head rcuhead;
65  RTE_MARKER cachelineB_;
67 };
68 static_assert(offsetof(FibEntry, cachelineA_) % RTE_CACHE_LINE_SIZE == 0, "");
69 static_assert(offsetof(FibEntry, cachelineB_) % RTE_CACHE_LINE_SIZE == 0, "");
70 
71 // FibEntry.nComps must be able to represent maximum number of name components that
72 // can fit in FibMaxNameLength octets.
73 static_assert(UINT8_MAX >= FibMaxNameLength / 2, "");
74 
75 static inline FibEntry*
76 FibEntry_GetReal(FibEntry* entry) {
77  if (unlikely(entry == NULL) || likely(entry->height == 0)) {
78  return entry;
79  }
80  return entry->realEntry;
81 }
82 
83 __attribute__((nonnull)) static inline FibEntryDyn*
84 FibEntry_PtrDyn(FibEntry* entry, int index) {
85  return &entry->dyn[index];
86 }
87 
88 __attribute__((nonnull)) void
90 
91 typedef struct SgGlobal SgGlobal;
92 
93 typedef struct FibSgInitCtx {
96  uint8_t a_[16];
99  uint8_t b_[8];
100  uintptr_t goHandle;
102 
103 #endif // NDNDPDK_FIB_ENTRY_H
uint16_t FaceID
Numeric face identifier.
Definition: faceid.h:13
void FibEntry_DeferredFree(FibEntry *entry)
Definition: entry.c:20
struct FibSgInitCtx FibSgInitCtx
struct FibEntryDyn FibEntryDyn
@ FibMaxNameLength
Definition: enum.h:7
@ FibScratchSize
Definition: enum.h:9
@ FibMaxNexthops
Definition: enum.h:8
Definition: entry.h:13
uint32_t nRxData
Definition: entry.h:15
char scratch[FibScratchSize]
Definition: entry.h:19
RttValue rtt[FibMaxNexthops]
Definition: entry.h:20
uint32_t nRxNacks
Definition: entry.h:16
char a_[16]
Definition: entry.h:18
uint32_t nRxInterests
Definition: entry.h:14
uint32_t nTxInterests
Definition: entry.h:17
A FIB entry.
Definition: entry.h:27
StrategyCode * strategy
Forwarding strategy.
Definition: entry.h:38
uint8_t nameV[FibMaxNameLength]
Definition: entry.h:30
FibEntryDyn dyn[]
Definition: entry.h:66
struct rcu_head rcuhead
Definition: entry.h:64
uint32_t seqNum
sequence number to detect FIB changes
Definition: entry.h:47
uint8_t nNexthops
number of nexthops
Definition: entry.h:50
uint16_t nameL
TLV-LENGTH of name.
Definition: entry.h:29
RTE_MARKER cachelineB_
Definition: entry.h:65
uint8_t nComps
number of name components
Definition: entry.h:49
FaceID nexthops[FibMaxNexthops]
Definition: entry.h:61
RTE_MARKER cachelineA_
Definition: entry.h:31
struct cds_lfht_node lfhtnode
Definition: entry.h:28
FibEntry * realEntry
Real FIB entry.
Definition: entry.h:44
uint8_t height
Height of a virtual node.
Definition: entry.h:59
char b_[16]
Definition: entry.h:63
Definition: entry.h:93
TscTime now
Definition: entry.h:95
uintptr_t goHandle
Definition: entry.h:100
SgGlobal * global
Definition: entry.h:94
uint8_t a_[16]
Definition: entry.h:96
uint8_t b_[8]
Definition: entry.h:99
FibEntryDyn * dyn
Definition: entry.h:98
FibEntry * entry
Definition: entry.h:97
SRTT and RTTVAR values in RTT estimator.
Definition: rttest.h:13
Global static parameters.
Definition: api.h:12
Forwarding strategy BPF programs.
Definition: strategy-code.h:28
uint64_t TscTime
TSC clock time point.
Definition: tsc.h:9