NDN-DPDK
High-Speed Named Data Networking Forwarder
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
input-demux.h
Go to the documentation of this file.
1 #ifndef NDNDPDK_IFACE_INPUT_DEMUX_H
2 #define NDNDPDK_IFACE_INPUT_DEMUX_H
3 
6 #include "../ndt/ndt.h"
7 #include "faceid.h"
8 #include "pktqueue.h"
9 
11 typedef enum InputDemuxAct {
20 
22 typedef struct InputDemuxDest {
24  uint64_t nQueued;
25  uint64_t nDropped;
27 
29 typedef struct InputDemux {
30  uint64_t nDrops;
32  union {
33  struct {
34  uint32_t i;
35  union {
36  uint32_t n;
37  uint32_t mask;
38  };
39  } div;
41  struct {
42  uint8_t offset;
44  };
47 
48 typedef uint64_t (*InputDemux_DispatchFunc)(InputDemux* demux, Packet** npkts, uint16_t count);
50 
51 __attribute__((nonnull, returns_nonnull)) NdtQuerier*
53 
54 __attribute__((nonnull)) void
55 InputDemux_SetDispatchDiv(InputDemux* demux, uint32_t nDest, bool byGenericHash);
56 
57 __attribute__((nonnull)) void
58 InputDemux_SetDispatchByToken(InputDemux* demux, uint8_t offset);
59 
65 __attribute__((nonnull, warn_unused_result)) static inline uint64_t
66 InputDemux_Dispatch(InputDemux* demux, Packet** npkts, uint16_t count) {
67  NDNDPDK_ASSERT(count > 0 && count <= 64);
68  return InputDemux_DispatchJmp[demux->dispatch](demux, npkts, count);
69 }
70 
78 __attribute__((nonnull)) static inline void
79 InputDemux_FreeRejected(struct rte_mbuf** frees, uint16_t* nFree, Packet** npkts, uint64_t mask) {
80  uint32_t i = 0;
81  while (rte_bsf64_safe(mask, &i)) {
82  frees[(*nFree)++] = Packet_ToMbuf(npkts[i]);
83  rte_bit_clear(&mask, i);
84  }
85 }
86 
89 
91 __attribute__((nonnull, returns_nonnull)) static __rte_always_inline InputDemux*
92 InputDemux_Of(InputDemuxes* demuxes, PktType t) {
93  return &((InputDemux*)demuxes)[PktType_ToFull(t) - 1];
94 }
95 
96 #endif // NDNDPDK_IFACE_INPUT_DEMUX_H
struct vlanhdr __rte_packed
#define NDNDPDK_ASSERT(x)
Definition: common.h:60
@ MaxInputDemuxDest
Definition: enum.h:8
InputDemuxAct
Input demultiplexer dispatch method.
Definition: input-demux.h:11
@ InputDemuxActGenericHashMask
Definition: input-demux.h:16
@ InputDemuxActDrop
Definition: input-demux.h:12
@ InputDemuxActRoundrobinDiv
Definition: input-demux.h:13
@ InputDemuxActByNdt
Definition: input-demux.h:17
@ InputDemuxActRoundrobinMask
Definition: input-demux.h:14
@ InputDemuxActGenericHashDiv
Definition: input-demux.h:15
@ InputDemuxActByToken
Definition: input-demux.h:18
void InputDemux_SetDispatchDiv(InputDemux *demux, uint32_t nDest, bool byGenericHash)
Definition: input-demux.c:142
uint64_t(* InputDemux_DispatchFunc)(InputDemux *demux, Packet **npkts, uint16_t count)
Definition: input-demux.h:48
const InputDemux_DispatchFunc InputDemux_DispatchJmp[]
Definition: input-demux.c:193
NdtQuerier * InputDemux_SetDispatchByNdt(InputDemux *demux)
Definition: input-demux.c:166
struct InputDemuxDest InputDemuxDest
Destination of input packet demultiplexer.
InputDemux InputDemuxes[PktMax - 1]
InputDemuxes for Interest, Data, Nack.
Definition: input-demux.h:88
struct InputDemux InputDemux
Input packet demultiplexer for a single packet type.
void InputDemux_SetDispatchByToken(InputDemux *demux, uint8_t offset)
Definition: input-demux.c:188
struct Packet Packet
Definition: common.h:11
PktType
Definition: enum.h:35
@ PktMax
Definition: enum.h:43
Destination of input packet demultiplexer.
Definition: input-demux.h:22
uint64_t nDropped
Definition: input-demux.h:25
PktQueue * queue
Definition: input-demux.h:23
uint64_t nQueued
Definition: input-demux.h:24
Input packet demultiplexer for a single packet type.
Definition: input-demux.h:29
uint64_t nDrops
Definition: input-demux.h:30
InputDemuxAct dispatch
Definition: input-demux.h:31
uint32_t n
Definition: input-demux.h:36
uint32_t mask
Definition: input-demux.h:37
struct InputDemux::@55::@58 byToken
InputDemuxDest dest[MaxInputDemuxDest]
Definition: input-demux.h:45
uint8_t offset
Definition: input-demux.h:42
NdtQuerier ndq
Definition: input-demux.h:40
uint32_t i
Definition: input-demux.h:34
struct InputDemux::@55::@57 div
NDT querier with counters.
Definition: ndt.h:48
Thread-safe packet queue.
Definition: pktqueue.h:23