NDN-DPDK
High-Speed Named Data Networking Forwarder
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
pit-entry.h
Go to the documentation of this file.
1 #ifndef NDNDPDK_PCCT_PIT_ENTRY_H
2 #define NDNDPDK_PCCT_PIT_ENTRY_H
3 
6 #include "../fib/fib.h"
7 #include "pit-const.h"
8 #include "pit-dn.h"
9 #include "pit-struct.h"
10 #include "pit-up.h"
11 
12 enum {
14 };
15 static_assert(RTE_BIT32(PitFibPrefixLenBits_) > FibMaxNameLength, "");
16 
17 typedef struct PitEntryExt PitEntryExt;
18 
24 struct PitEntry {
27  struct PccEntry* pccEntry;
29 
30  uint64_t fibPrefixHash;
31  struct {
32  uint32_t fibSeqNum;
33  uint8_t nCanBePrefix;
35  bool mustBeFresh : 1;
36  bool hasSgTimer : 1;
38 
42 
44 };
45 static_assert(offsetof(PitEntry, dns) <= RTE_CACHE_LINE_SIZE, "");
46 
47 struct PitEntryExt {
51 };
52 
53 __attribute__((nonnull)) static inline void
54 PitEntry_SetFibEntry_(PitEntry* entry, PInterest* interest, const FibEntry* fibEntry) {
55  entry->fibPrefixL = fibEntry->nameL;
56  entry->fibSeqNum = fibEntry->seqNum;
57  PName* name = &interest->name;
58  if (unlikely(interest->activeFwHint >= 0)) {
59  name = &interest->fwHint;
60  }
61  entry->fibPrefixHash = PName_ComputePrefixHash(name, fibEntry->nComps);
62  memset(entry->sgScratch, 0, PitScratchSize);
63 }
64 
69 __attribute__((nonnull)) static inline void
70 PitEntry_Init(PitEntry* entry, Packet* npkt, const FibEntry* fibEntry) {
71  PInterest* interest = Packet_GetInterestHdr(npkt);
72  entry->npkt = npkt;
73  MinTmr_Init(&entry->timeout);
74  entry->expiry = 0;
75 
76  entry->nCanBePrefix = (uint8_t)interest->canBePrefix;
77  entry->mustBeFresh = interest->mustBeFresh;
78 
79  entry->dns[0].face = 0;
80  entry->ups[0].face = 0;
81  entry->ext = NULL;
82 
83  PitEntry_SetFibEntry_(entry, interest, fibEntry);
84 }
85 
87 __attribute__((nonnull)) static inline void
88 PitEntry_Finalize(PitEntry* entry) {
89  if (likely(entry->npkt != NULL)) {
90  rte_pktmbuf_free(Packet_ToMbuf(entry->npkt));
91  }
92  MinTmr_Cancel(&entry->timeout);
93  for (PitEntryExt* ext = entry->ext; unlikely(ext != NULL);) {
94  PitEntryExt* next = ext->next;
95  rte_mempool_put(rte_mempool_from_obj(ext), ext);
96  ext = next;
97  }
98 }
99 
104 __attribute__((nonnull, returns_nonnull)) const char*
106 
108 __attribute__((nonnull)) static inline uint64_t
109 PitEntry_GetToken(PitEntry* entry);
110 // Implementation is in pit.h to avoid circular dependency.
111 
116 __attribute__((nonnull)) static inline void
117 PitEntry_RefreshFibEntry(PitEntry* entry, Packet* npkt, const FibEntry* fibEntry) {
118  if (likely(entry->fibSeqNum == fibEntry->seqNum)) {
119  return;
120  }
121 
122  PInterest* interest = Packet_GetInterestHdr(npkt);
123  PitEntry_SetFibEntry_(entry, interest, fibEntry);
124 }
125 
131 __attribute__((nonnull)) FibEntry*
132 PitEntry_FindFibEntry(PitEntry* entry, Fib* fib);
133 
135 __attribute__((nonnull)) void
136 PitEntry_SetExpiryTimer(PitEntry* entry, Pit* pit);
137 
143 __attribute__((nonnull)) bool
144 PitEntry_SetSgTimer(PitEntry* entry, Pit* pit, TscDuration after);
145 
146 __attribute__((nonnull)) void
147 PitEntry_Timeout_(MinTmr* tmr, uintptr_t pitPtr);
148 
153 __attribute__((nonnull)) FaceID
154 PitEntry_FindDuplicateNonce(PitEntry* entry, uint32_t nonce, FaceID rxFace);
155 
162 __attribute__((nonnull)) PitDn*
163 PitEntry_InsertDn(PitEntry* entry, Pit* pit, Packet* npkt);
164 
171 __attribute__((nonnull)) PitUp*
172 PitEntry_FindUp(PitEntry* entry, FaceID face);
173 
182 __attribute__((nonnull)) PitUp*
183 PitEntry_ReserveUp(PitEntry* entry, FaceID face);
184 
186 __attribute__((nonnull)) void
187 PitEntry_GetTxInterestIlHl(PitEntry* entry, TscTime now, uint32_t* lifetime, uint8_t* hopLimit);
188 
189 #endif // NDNDPDK_PCCT_PIT_ENTRY_H
uint16_t FaceID
Numeric face identifier.
Definition: faceid.h:13
@ FibMaxNameLength
Definition: enum.h:7
struct Packet Packet
Definition: common.h:11
@ PitMaxExtUps
Definition: pit-const.h:10
@ PitMaxExtDns
Definition: pit-const.h:9
@ PitMaxUps
Definition: pit-const.h:8
@ PitScratchSize
Definition: pit-const.h:11
@ PitMaxDns
Definition: pit-const.h:7
FibEntry * PitEntry_FindFibEntry(PitEntry *entry, Fib *fib)
Retrieve FIB entry via PIT entry's FIB reference.
Definition: pit-entry.c:63
PitUp * PitEntry_FindUp(PitEntry *entry, FaceID face)
Find existing UP record.
Definition: pit-entry.c:214
void PitEntry_GetTxInterestIlHl(PitEntry *entry, TscTime now, uint32_t *lifetime, uint8_t *hopLimit)
Calculate InterestLifetime and HopLimit for TX Interest.
Definition: pit-entry.c:250
PitDn * PitEntry_InsertDn(PitEntry *entry, Pit *pit, Packet *npkt)
Insert new DN record, or update existing DN record.
Definition: pit-entry.c:159
PitUp * PitEntry_ReserveUp(PitEntry *entry, FaceID face)
Find existing UP record, or reserve slot for new UP record.
Definition: pit-entry.c:228
@ PitFibPrefixLenBits_
Definition: pit-entry.h:13
const char * PitEntry_ToDebugString(PitEntry *entry)
Convert entry to a string for debug purpose.
Definition: pit-entry.c:12
void PitEntry_SetExpiryTimer(PitEntry *entry, Pit *pit)
Set timer to erase PIT entry when its last PitDn expires.
Definition: pit-entry.c:77
FaceID PitEntry_FindDuplicateNonce(PitEntry *entry, uint32_t nonce, FaceID rxFace)
Find duplicate nonce among DN records other than rxFace.
Definition: pit-entry.c:112
void PitEntry_Timeout_(MinTmr *tmr, uintptr_t pitPtr)
Definition: pit-entry.c:97
bool PitEntry_SetSgTimer(PitEntry *entry, Pit *pit, TscDuration after)
Set timer to invoke strategy after after.
Definition: pit-entry.c:84
A FIB entry.
Definition: entry.h:27
uint32_t seqNum
sequence number to detect FIB changes
Definition: entry.h:47
uint16_t nameL
TLV-LENGTH of name.
Definition: entry.h:29
uint8_t nComps
number of name components
Definition: entry.h:49
A replica of the Forwarding Information Base (FIB).
Definition: fib.h:9
Timer on minute scheduler.
Definition: mintmr.h:9
Parsed Interest packet.
Definition: interest.h:9
bool canBePrefix
Definition: interest.h:18
bool mustBeFresh
Definition: interest.h:19
int8_t activeFwHint
index of active forwarding hint
Definition: interest.h:21
PName fwHint
parsed forwarding hint at activeFwHint
Definition: interest.h:27
PName name
Definition: interest.h:24
Parsed name.
Definition: name.h:139
PIT-CS composite entry.
Definition: pcc-entry.h:56
A PIT downstream record.
Definition: pit-dn.h:11
FaceID face
Definition: pit-dn.h:14
Definition: pit-entry.h:47
PitDn dns[PitMaxExtDns]
Definition: pit-entry.h:48
PitEntryExt * next
Definition: pit-entry.h:50
PitUp ups[PitMaxExtUps]
Definition: pit-entry.h:49
A PIT entry.
Definition: pit-entry.h:24
uint16_t fibPrefixL
TLV-LENGTH of FIB prefix.
Definition: pit-entry.h:34
uint64_t fibPrefixHash
hash value of FIB prefix
Definition: pit-entry.h:30
Packet * npkt
representative Interest packet
Definition: pit-entry.h:25
struct PitEntry::@85 __rte_packed
PitUp ups[PitMaxUps]
Definition: pit-entry.h:41
TscTime expiry
when all DNs expire
Definition: pit-entry.h:26
char sgScratch[PitScratchSize]
Definition: pit-entry.h:43
MinTmr timeout
timeout timer
Definition: pit-entry.h:28
bool hasSgTimer
whether timeout is set by strategy or expiry
Definition: pit-entry.h:36
struct PccEntry * pccEntry
Definition: pit-entry.h:27
uint8_t nCanBePrefix
how many DNs want CanBePrefix?
Definition: pit-entry.h:33
PitDn dns[PitMaxDns]
Definition: pit-entry.h:40
uint32_t fibSeqNum
FIB entry sequence number.
Definition: pit-entry.h:32
bool mustBeFresh
entry for MustBeFresh 0 or 1?
Definition: pit-entry.h:35
PitEntryExt * ext
Definition: pit-entry.h:39
A PIT upstream record.
Definition: pit-up.h:14
FaceID face
the upstream face
Definition: pit-up.h:16
The Pending Interest Table (PIT).
Definition: pit-struct.h:20
int64_t TscDuration
Duration in TscTime unit.
Definition: tsc.h:12
uint64_t TscTime
TSC clock time point.
Definition: tsc.h:9