NDN-DPDK
High-Speed Named Data Networking Forwarder
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
fwd.h
Go to the documentation of this file.
1 #ifndef NDNDPDK_FWDP_FWD_H
2 #define NDNDPDK_FWDP_FWD_H
3 
6 #include "../core/running-stat.h"
7 #include "../dpdk/thread.h"
8 #include "../fib/fib.h"
9 #include "../fib/nexthop-filter.h"
10 #include "../iface/face.h"
11 #include "../iface/pktqueue.h"
12 #include "../pcct/cs.h"
13 #include "../pcct/pit.h"
14 #include "../strategyapi/api.h"
15 
16 typedef struct FwFwdCtx FwFwdCtx;
17 
19 typedef struct FwFwd {
25 
26  Fib* fib;
27  Pit* pit;
28  Cs* cs;
29 
30  pcg32_random_t sgRng;
32 
33  uint8_t id;
34  uint8_t fibDynIndex;
35 
36  uint64_t nNoFibMatch;
37  uint64_t nDupNonce;
38  uint64_t nSgNoFwd;
39  uint64_t nNackMismatch;
40 
42 
43  struct rte_ring* cryptoHelper;
44 
48 
49 __attribute__((nonnull)) int
50 FwFwd_Run(FwFwd* fwd);
51 
52 __attribute__((nonnull)) void
53 FwFwd_RxInterest(FwFwd* fwd, FwFwdCtx* ctx);
54 
55 __attribute__((nonnull)) void
56 FwFwd_RxData(FwFwd* fwd, FwFwdCtx* ctx);
57 
58 __attribute__((nonnull)) void
59 FwFwd_RxNack(FwFwd* fwd, FwFwdCtx* ctx);
60 
71 struct FwFwdCtx {
72  FwFwd* fwd; // T,F,I,D,N
73  TscTime rxTime; // T(=now),F,I,D,N
74  SgEvent eventKind; // T,F,I,D,N
75  FibNexthopFilter nhFlt; // T,I,D,N
76  union {
78  struct rte_mbuf* pkt;
79  }; // F,D,N
80  FibEntry* fibEntry; // T,I,D,N
81  FibEntryDyn* fibEntryDyn; // T,I,D,N
82  PitEntry* pitEntry; // T,I,D,N
83 
84  // end of SgCtx fields
85  RTE_MARKER endofSgCtx;
86 
87  PitUp* pitUp; // N
88  LpPitToken rxToken; // F,I,D,N
89  uint32_t dnNonce; // I
90  int nForwarded; // T,I,N
91  FaceID rxFace; // F,I,D
92 };
93 
95 __attribute__((nonnull)) static inline void
96 FwFwdCtx_FreePkt(FwFwdCtx* ctx) {
97  Packet_Free(ctx->npkt);
98  NULLize(ctx->npkt);
99 }
100 
102 __attribute__((nonnull(1))) static inline void
103 FwFwdCtx_SetFibEntry(FwFwdCtx* ctx, FibEntry* fibEntry) {
104  ctx->fibEntry = fibEntry;
105  if (likely(fibEntry != NULL)) {
106  ctx->fibEntryDyn = FibEntry_PtrDyn(fibEntry, ctx->fwd->fibDynIndex);
107  } else {
108  ctx->fibEntryDyn = NULL;
109  }
110 }
111 
112 #endif // NDNDPDK_FWDP_FWD_H
#define NULLize(x)
Set x to NULL to expose memory access bugs.
Definition: common.h:79
SgEvent
Indicate why the strategy program is invoked.
Definition: api.h:17
uint16_t FaceID
Numeric face identifier.
Definition: faceid.h:13
void FwFwd_RxNack(FwFwd *fwd, FwFwdCtx *ctx)
Definition: fwd-nack.c:182
void FwFwd_RxInterest(FwFwd *fwd, FwFwdCtx *ctx)
Definition: fwd-interest.c:124
int FwFwd_Run(FwFwd *fwd)
Definition: fwd.c:53
void FwFwd_RxData(FwFwd *fwd, FwFwdCtx *ctx)
Definition: fwd-data.c:92
struct FwFwd FwFwd
Forwarding thread.
struct Packet Packet
Definition: common.h:11
uint32_t FibNexthopFilter
A filter over FIB nexthops.
Definition: nexthop-filter.h:13
The Content Store (CS).
Definition: cs-struct.h:63
Definition: entry.h:13
A FIB entry.
Definition: entry.h:27
A replica of the Forwarding Information Base (FIB).
Definition: fib.h:9
Per-packet context in forwarding.
Definition: fwd.h:71
struct rte_mbuf * pkt
Definition: fwd.h:78
uint32_t dnNonce
Definition: fwd.h:89
PitUp * pitUp
Definition: fwd.h:87
RTE_MARKER endofSgCtx
Definition: fwd.h:85
FwFwd * fwd
Definition: fwd.h:72
SgEvent eventKind
Definition: fwd.h:74
int nForwarded
Definition: fwd.h:90
FibNexthopFilter nhFlt
Definition: fwd.h:75
LpPitToken rxToken
Definition: fwd.h:88
Packet * npkt
Definition: fwd.h:77
FibEntry * fibEntry
Definition: fwd.h:80
PitEntry * pitEntry
Definition: fwd.h:82
FibEntryDyn * fibEntryDyn
Definition: fwd.h:81
TscTime rxTime
Definition: fwd.h:73
FaceID rxFace
Definition: fwd.h:91
Forwarding thread.
Definition: fwd.h:19
ThreadCtrl ctrl
Definition: fwd.h:21
Fib * fib
Definition: fwd.h:26
PacketMempools mp
mempools for packet modification
Definition: fwd.h:41
uint8_t id
fwd process id
Definition: fwd.h:33
SgGlobal sgGlobal
Definition: fwd.h:20
RunningStat latencyStat
Statistics of latency from packet arrival to start processing.
Definition: fwd.h:46
uint8_t fibDynIndex
FibEntry.dyn index.
Definition: fwd.h:34
struct rte_ring * cryptoHelper
queue to crypto helper
Definition: fwd.h:43
uint64_t nSgNoFwd
Interests not forwarded by strategy.
Definition: fwd.h:38
PktQueue queueI
Definition: fwd.h:22
uint64_t nNoFibMatch
Interests dropped due to no FIB match.
Definition: fwd.h:36
PktQueue queueD
Definition: fwd.h:23
Pit * pit
Definition: fwd.h:27
PktQueue queueN
Definition: fwd.h:24
uint64_t nDupNonce
Interests dropped due to duplicate nonce.
Definition: fwd.h:37
Cs * cs
Definition: fwd.h:28
PitSuppressConfig suppressCfg
Definition: fwd.h:31
uint64_t nNackMismatch
Nack dropped due to outdated nonce.
Definition: fwd.h:39
pcg32_random_t sgRng
Definition: fwd.h:30
NDNLPv2 PIT token value.
Definition: lp.h:35
Mempools for packet modification.
Definition: common.h:17
A PIT entry.
Definition: pit-entry.h:24
Interest suppression configuration.
Definition: pit-suppress-config.h:9
A PIT upstream record.
Definition: pit-up.h:14
The Pending Interest Table (PIT).
Definition: pit-struct.h:20
Thread-safe packet queue.
Definition: pktqueue.h:23
Facility to compute mean and variance.
Definition: running-stat.h:9
Global static parameters.
Definition: api.h:12
Thread load stats and stop flag.
Definition: thread.h:10
uint64_t TscTime
TSC clock time point.
Definition: tsc.h:9