NDN-DPDK
High-Speed Named Data Networking Forwarder
Loading...
Searching...
No Matches
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
5
6#include "../ndt/ndt.h"
7#include "faceid.h"
8#include "pktqueue.h"
9
20
27
29typedef 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
48typedef uint64_t (*InputDemux_DispatchFunc)(InputDemux* demux, Packet** npkts, uint16_t count);
50
51__attribute__((nonnull, returns_nonnull)) NdtQuerier*
53
54__attribute__((nonnull)) void
55InputDemux_SetDispatchDiv(InputDemux* demux, uint32_t nDest, bool byGenericHash);
56
57__attribute__((nonnull)) void
58InputDemux_SetDispatchByToken(InputDemux* demux, uint8_t offset);
59
65__attribute__((nonnull, warn_unused_result)) static inline uint64_t
66InputDemux_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
79InputDemux_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*
92InputDemux_Of(InputDemuxes* demuxes, PktType t) {
93 return &((InputDemux*)demuxes)[PktType_ToFull(t) - 1];
94}
95
96#endif // NDNDPDK_IFACE_INPUT_DEMUX_H
struct __rte_packed_begin vlanhdr __rte_packed_end
#define NDNDPDK_ASSERT(x)
Definition common.h:60
@ MaxInputDemuxDest
Definition enum.h:8
const InputDemux_DispatchFunc InputDemux_DispatchJmp[]
Definition input-demux.c:193
InputDemuxActByNdt
Definition input-demux.h:17
InputDemuxActRoundrobinMask
Definition input-demux.h:14
InputDemuxActGenericHashMask
Definition input-demux.h:16
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
InputDemuxActDrop
Definition input-demux.h:12
InputDemuxActGenericHashDiv
Definition input-demux.h:15
NdtQuerier * InputDemux_SetDispatchByNdt(InputDemux *demux)
Definition input-demux.c:166
InputDemuxActRoundrobinDiv
Definition input-demux.h:13
InputDemux InputDemuxes[PktMax - 1]
InputDemuxes for Interest, Data, Nack.
Definition input-demux.h:88
InputDemuxActByToken
Definition input-demux.h:18
enum __rte_packed_begin InputDemuxAct InputDemuxAct
Input demultiplexer dispatch method.
Definition input-demux.h:11
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::@354005110203055147315341153352016007041063141216::@314245231102253075346164055002300065373105265242 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::@354005110203055147315341153352016007041063141216::@032044341316071211245107261362221371144303046267 div
NDT querier with counters.
Definition ndt.h:48
Thread-safe packet queue.
Definition pktqueue.h:23