NDN-DPDK
High-Speed Named Data Networking Forwarder
Loading...
Searching...
No Matches
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
5
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
12enum {
14};
15static_assert(RTE_BIT32(PitFibPrefixLenBits_) > FibMaxNameLength, "");
16
17typedef struct PitEntryExt PitEntryExt;
18
45static_assert(offsetof(PitEntry, dns) <= RTE_CACHE_LINE_SIZE, "");
46
52
53__attribute__((nonnull)) static inline void
54PitEntry_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
70PitEntry_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
88PitEntry_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
109PitEntry_GetToken(PitEntry* entry);
110// Implementation is in pit.h to avoid circular dependency.
111
116__attribute__((nonnull)) static inline void
117PitEntry_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*
133
135__attribute__((nonnull)) void
137
143__attribute__((nonnull)) bool
144PitEntry_SetSgTimer(PitEntry* entry, Pit* pit, TscDuration after);
145
146__attribute__((nonnull)) void
147PitEntry_Timeout_(MinTmr* tmr, uintptr_t pitPtr);
148
153__attribute__((nonnull)) FaceID
154PitEntry_FindDuplicateNonce(PitEntry* entry, uint32_t nonce, FaceID rxFace);
155
162__attribute__((nonnull)) PitDn*
163PitEntry_InsertDn(PitEntry* entry, Pit* pit, Packet* npkt);
164
171__attribute__((nonnull)) PitUp*
172PitEntry_FindUp(PitEntry* entry, FaceID face);
173
182__attribute__((nonnull)) PitUp*
184
186__attribute__((nonnull)) void
187PitEntry_GetTxInterestIlHl(PitEntry* entry, TscTime now, uint32_t* lifetime, uint8_t* hopLimit);
188
189#endif // NDNDPDK_PCCT_PIT_ENTRY_H
struct __rte_packed_begin vlanhdr __rte_packed_end
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
PitDn * PitEntry_InsertDn(PitEntry *entry, Pit *pit, Packet *npkt)
Insert new DN record, or update existing DN record.
Definition pit-entry.c:159
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
@ PitFibPrefixLenBits_
Definition pit-entry.h:13
PitUp * PitEntry_FindUp(PitEntry *entry, FaceID face)
Find existing UP record.
Definition pit-entry.c:214
const char * PitEntry_ToDebugString(PitEntry *entry)
Convert entry to a string for debug purpose.
Definition pit-entry.c:12
PitUp * PitEntry_ReserveUp(PitEntry *entry, FaceID face)
Find existing UP record, or reserve slot for new UP record.
Definition pit-entry.c:228
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
FibEntry * PitEntry_FindFibEntry(PitEntry *entry, Fib *fib)
Retrieve FIB entry via PIT entry's FIB reference.
Definition pit-entry.c:63
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
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
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
Definition pit-entry.h:31
bool hasSgTimer
whether timeout is set by strategy or expiry
Definition pit-entry.h:36
bool mustBeFresh
entry for MustBeFresh 0 or 1?
Definition pit-entry.h:35
uint16_t fibPrefixL
TLV-LENGTH of FIB prefix.
Definition pit-entry.h:34
uint8_t nCanBePrefix
how many DNs want CanBePrefix?
Definition pit-entry.h:33
uint32_t fibSeqNum
FIB entry sequence number.
Definition pit-entry.h:32
A PIT entry.
Definition pit-entry.h:24
uint64_t fibPrefixHash
hash value of FIB prefix
Definition pit-entry.h:30
Packet * npkt
representative Interest packet
Definition pit-entry.h:25
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
struct PccEntry * pccEntry
Definition pit-entry.h:27
PitDn dns[PitMaxDns]
Definition pit-entry.h:40
PitEntryExt * ext
Definition pit-entry.h:39
A PIT upstream record.
Definition pit-up.h:14
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