NDN-DPDK
High-Speed Named Data Networking Forwarder
pit-result.h
Go to the documentation of this file.
1 #ifndef NDNDPDK_PCCT_PIT_RESULT_H
2 #define NDNDPDK_PCCT_PIT_RESULT_H
3 
6 #include "pcc-entry.h"
7 
9 typedef enum PitInsertResultKind {
14 
16 typedef struct PitInsertResult {
18  union {
21  };
23 
25 typedef enum PitFindResultFlag {
27 
28  PIT_FIND_PIT0 = RTE_BIT32(0),
29  PIT_FIND_PIT1 = RTE_BIT32(1),
30 
33  PIT_FIND_NEED_DIGEST = RTE_BIT32(2),
35 
37 typedef struct PitFindResult {
39  uint8_t kind;
41 
42 static inline bool
43 PitFindResult_Is(PitFindResult res, PitFindResultFlag flag) {
44  if (flag == PIT_FIND_NONE) {
45  return res.kind == PIT_FIND_NONE;
46  }
47  return (res.kind & flag) != 0;
48 }
49 
50 static inline PitEntry*
51 PitFindResult_GetPitEntry0(PitFindResult res) {
52  if (!PitFindResult_Is(res, PIT_FIND_PIT0)) {
53  return NULL;
54  }
55  return PccEntry_GetPitEntry0(res.entry);
56 }
57 
58 static inline PitEntry*
59 PitFindResult_GetPitEntry1(PitFindResult res) {
60  if (!PitFindResult_Is(res, PIT_FIND_PIT1)) {
61  return NULL;
62  }
63  return PccEntry_GetPitEntry1(res.entry);
64 }
65 
71 __attribute__((returns_nonnull)) static inline PInterest*
72 PitFindResult_GetInterest(PitFindResult res) {
73  PitEntry* pitEntry = PitFindResult_GetPitEntry0(res);
74  if (pitEntry == NULL) {
75  pitEntry = PitFindResult_GetPitEntry1(res);
76  }
77  NDNDPDK_ASSERT(pitEntry != NULL);
78  return Packet_GetInterestHdr(pitEntry->npkt);
79 }
80 
81 #endif // NDNDPDK_PCCT_PIT_RESULT_H
struct vlanhdr __rte_packed
#define NDNDPDK_ASSERT(x)
Definition: common.h:60
struct PitInsertResult PitInsertResult
Result of PIT insert.
PitInsertResultKind
Result kind of PIT insert.
Definition: pit-result.h:9
@ PIT_INSERT_CS
found existing CS entry that matches the Interest
Definition: pit-result.h:12
@ PIT_INSERT_FULL
PIT is full, cannot insert.
Definition: pit-result.h:10
@ PIT_INSERT_PIT
created or found PIT entry
Definition: pit-result.h:11
PitFindResultFlag
Result flag of PIT find, bitwise OR.
Definition: pit-result.h:25
@ PIT_FIND_PIT0
matched PIT entry of MustBeFresh=0
Definition: pit-result.h:28
@ PIT_FIND_NONE
no PIT match
Definition: pit-result.h:26
@ PIT_FIND_NEED_DIGEST
Definition: pit-result.h:33
@ PIT_FIND_PIT1
matched PIT entry of MustBeFresh=1
Definition: pit-result.h:29
struct PitFindResult PitFindResult
Result of PIT find.
A CS entry.
Definition: cs-entry.h:22
Parsed Interest packet.
Definition: interest.h:9
PIT-CS composite entry.
Definition: pcc-entry.h:56
A PIT entry.
Definition: pit-entry.h:24
Packet * npkt
representative Interest packet
Definition: pit-entry.h:25
Result of PIT find.
Definition: pit-result.h:37
PccEntry * entry
Definition: pit-result.h:38
uint8_t kind
Definition: pit-result.h:39
Result of PIT insert.
Definition: pit-result.h:16
PitEntry * pitEntry
PIT entry, valid if kind==PIT_INSERT_PIT.
Definition: pit-result.h:19
PitInsertResultKind kind
Definition: pit-result.h:17
CsEntry * csEntry
direct CS entry, valid if kind==PIT_INSERT_CS
Definition: pit-result.h:20