NDN-DPDK
High-Speed Named Data Networking Forwarder
Loading...
Searching...
No Matches
cs-entry.h
Go to the documentation of this file.
1#ifndef NDNDPDK_PCCT_CS_ENTRY_H
2#define NDNDPDK_PCCT_CS_ENTRY_H
3
5
6#include "../dpdk/bdev.h"
7#include "../ndni/packet.h"
8#include "cs-struct.h"
9
10extern const char* CsEntryKind_Strings_[];
11
12__attribute__((returns_nonnull)) static inline const char*
13CsEntryKind_ToString(CsEntryKind kind) {
14 return CsEntryKind_Strings_[kind];
15}
16
83static_assert(CsMaxIndirects < UINT8_MAX, "");
84
86__attribute__((nonnull)) static inline void
87CsEntry_Init(CsEntry* entry) {
88 memset(entry->zeroizeBegin_, 0, RTE_PTR_DIFF(entry->zeroizeEnd_, entry->zeroizeBegin_));
89}
90
92__attribute__((nonnull)) static __rte_always_inline CsEntry*
93CsEntry_GetDirect(CsEntry* entry) {
94 return unlikely(entry->kind == CsEntryIndirect) ? entry->direct : entry;
95}
96
101__attribute__((nonnull)) static inline void
102CsEntry_FreeData(CsEntry* entry) {
104 rte_pktmbuf_free(Packet_ToMbuf(entry->data));
105 NULLize(entry->data);
106 entry->kind = CsEntryNone;
107}
108
114__attribute__((nonnull)) static inline bool
115CsEntry_Assoc(CsEntry* indirect, CsEntry* direct) {
117 if (unlikely(direct->nIndirects >= CsMaxIndirects)) {
118 return false;
119 }
120
121 direct->indirect[direct->nIndirects++] = indirect;
122 indirect->kind = CsEntryIndirect;
123 indirect->direct = direct;
124 return true;
125}
126
128__attribute__((nonnull)) static inline void
129CsEntry_Disassoc(CsEntry* indirect) {
130 NDNDPDK_ASSERT(indirect->kind == CsEntryIndirect);
131 CsEntry* direct = indirect->direct;
132
133 uint8_t i = 0;
134 for (; i < direct->nIndirects; ++i) {
135 if (direct->indirect[i] == indirect) {
136 break;
137 }
138 }
139 NDNDPDK_ASSERT(i < direct->nIndirects);
140
141 direct->indirect[i] = direct->indirect[--direct->nIndirects];
142 indirect->kind = CsEntryNone;
143}
144
145#endif // NDNDPDK_PCCT_CS_ENTRY_H
#define NDNDPDK_ASSERT(x)
Definition common.h:60
#define NULLize(x)
Set x to NULL to expose memory access bugs.
Definition common.h:79
const char * CsEntryKind_Strings_[]
Definition cs-entry.c:3
@ CsMaxIndirects
Definition cs-enum.h:7
CsListID
Definition cs-enum.h:18
CsEntryKind
Definition cs-enum.h:11
@ CsEntryIndirect
Definition cs-enum.h:15
@ CsEntryMemory
Definition cs-enum.h:13
@ CsEntryNone
Definition cs-enum.h:12
struct Packet Packet
Definition common.h:11
Length and alignment descriptor of a stored packet.
Definition bdev.h:21
A CS entry.
Definition cs-entry.h:22
CsEntry * indirect[CsMaxIndirects]
Associated indirect entries.
Definition cs-entry.h:75
TscTime freshUntil
When Data becomes non-fresh.
Definition cs-entry.h:52
CsNode * next
Definition cs-entry.h:24
uint64_t diskSlot
Disk slot containing the Data packet.
Definition cs-entry.h:39
struct PccEntry * pccEntry
Definition cs-entry.h:25
CsListID arcList
Definition cs-entry.h:68
CsEntry * direct
The direct entry.
Definition cs-entry.h:45
uint8_t nIndirects
Count of indirect entries depending on this direct entry.
Definition cs-entry.h:66
RTE_MARKER zeroizeEnd_
Definition cs-entry.h:69
CsNode * prev
Definition cs-entry.h:23
CsEntryKind kind
Definition cs-entry.h:54
BdevStoredPacket diskStored
Disk packet length and alignment descriptor.
Definition cs-entry.h:81
RTE_MARKER zeroizeBegin_
Definition cs-entry.h:27
Packet * data
The Data packet.
Definition cs-entry.h:33
The prev-next pointers common in CsEntry and CsList.
Definition cs-struct.h:12
PIT-CS composite entry.
Definition pcc-entry.h:56
uint64_t TscTime
TSC clock time point.
Definition tsc.h:9