NDN-DPDK
High-Speed Named Data Networking Forwarder
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
face.h
Go to the documentation of this file.
1 #ifndef NDNDPDK_IFACE_FACE_H
2 #define NDNDPDK_IFACE_FACE_H
3 
6 #include "input-demux.h"
7 #include "reassembler.h"
8 
9 #include "../core/urcu.h"
10 #include "../pdump/source.h"
11 #include <urcu/rcuhlist.h>
12 
14 typedef struct FaceRxInputCtx {
15  struct rte_mbuf** pkts;
17  struct rte_mbuf** frees;
18  uint16_t count;
19  uint16_t nL3;
20  uint16_t nFree;
22 
28 typedef void (*Face_RxInputFunc)(Face* face, int rxThread, FaceRxInputCtx* ctx);
29 
36 typedef uint16_t (*Face_TxLoopFunc)(Face* face, int txThread);
37 
44 typedef uint16_t (*Face_TxBurstFunc)(Face* face, struct rte_mbuf** pkts, uint16_t nPkts);
45 
46 enum {
49 };
50 
52 typedef struct FaceRxThread {
53  uint64_t nFrames[PktMax];
54  uint64_t nDecodeErr;
56 } __rte_cache_aligned FaceRxThread;
57 
59 typedef struct FaceTxThread {
60  uint64_t nextSeqNum;
61 
62  uint64_t nL3Fragmented;
63  uint64_t nL3OverLength;
64  uint64_t nAllocFails;
65 
66  uint64_t nFrames[PktMax];
67  uint64_t nOctets;
68  uint64_t nDroppedFrames;
69  uint64_t nDroppedOctets;
70 } __rte_cache_aligned FaceTxThread;
71 
78 typedef struct FaceImpl {
81 
82  RTE_MARKER rxMarker __rte_cache_aligned;
87 
88  RTE_MARKER txMarker __rte_cache_aligned;
93 
94  uint8_t priv[] __rte_cache_aligned;
96 
98 struct Face {
100  struct rte_ring* outputQueue;
101  struct cds_hlist_node txlNode;
105 };
106 static_assert(sizeof(Face) <= RTE_CACHE_LINE_SIZE, "");
107 
108 __attribute__((nonnull, returns_nonnull)) static inline void*
109 Face_GetPriv(Face* face) {
110  return face->impl->priv;
111 }
112 
114 extern Face gFaces[];
115 
121 __attribute__((returns_nonnull)) static inline Face*
122 Face_Get(FaceID id) {
123  return &gFaces[id];
124 }
125 
127 static inline bool
128 Face_IsDown(FaceID faceID) {
129  Face* face = Face_Get(faceID);
130  return face->state != FaceStateUp;
131 }
132 
134 static inline PacketTxAlign
135 Face_PacketTxAlign(FaceID faceID) {
136  Face* face = Face_Get(faceID);
137  return face->txAlign;
138 }
139 
147 __attribute__((nonnull)) static inline void
148 Face_TxBurst(FaceID faceID, Packet** npkts, uint16_t count) {
149  Face* face = Face_Get(faceID);
150  if (likely(face->state == FaceStateUp)) {
151  Mbuf_EnqueueVector((struct rte_mbuf**)npkts, count, face->outputQueue, true);
152  // TODO count rejects
153  } else {
154  rte_pktmbuf_free_bulk((struct rte_mbuf**)npkts, count);
155  }
156 }
157 
162 __attribute__((nonnull)) static inline void
163 Face_Tx(FaceID faceID, Packet* npkt) {
164  Face_TxBurst(faceID, &npkt, 1);
165 }
166 
167 #endif // NDNDPDK_IFACE_FACE_H
uint16_t FaceID
Numeric face identifier.
Definition: faceid.h:13
FaceState
Definition: enum.h:20
@ FaceStateUp
Definition: enum.h:22
@ MaxFaceRxThreads
Definition: enum.h:9
@ MaxFaceTxThreads
Definition: enum.h:10
void(* Face_RxInputFunc)(Face *face, int rxThread, FaceRxInputCtx *ctx)
Process a burst of received L2 frames.
Definition: face.h:28
struct FaceImpl FaceImpl
Face details.
@ FaceRxThread_cntNOctets
FaceRxThread.nFrames[cntNOctets] is nOctets counter.
Definition: face.h:48
struct FaceRxInputCtx FaceRxInputCtx
Face_RxInputFunc inputs and outputs.
uint16_t(* Face_TxBurstFunc)(Face *face, struct rte_mbuf **pkts, uint16_t nPkts)
Transmit a burst of L2 frames.
Definition: face.h:44
struct FaceRxThread FaceRxThread
Face RX per-thread information.
uint16_t(* Face_TxLoopFunc)(Face *face, int txThread)
Transfer a burst of L3 packets from outputQueue to Face_TxBurstFunc .
Definition: face.h:36
struct FaceTxThread FaceTxThread
Face TX per-thread information.
Face gFaces[]
Static array of all faces.
Definition: face.c:5
InputDemux InputDemuxes[PktMax - 1]
InputDemuxes for Interest, Data, Nack.
Definition: input-demux.h:88
struct Packet Packet
Definition: common.h:11
ParseFor
Definition: enum.h:29
@ PktFragment
Definition: enum.h:36
@ PktMax
Definition: enum.h:43
Face details.
Definition: face.h:78
Face_TxBurstFunc txBurst
Definition: face.h:91
PdumpSourceRef txPdump
Definition: face.h:92
PdumpSourceRef rxPdump
Definition: face.h:85
uint8_t priv[] __rte_cache_aligned
Definition: face.h:94
RTE_MARKER txMarker __rte_cache_aligned
Definition: face.h:88
FaceRxThread rx[MaxFaceRxThreads]
Definition: face.h:79
InputDemuxes * rxDemuxes
per-face demuxes, overrides RxLoop demuxes
Definition: face.h:84
PacketMempools txMempools
mempools for fragmentation
Definition: face.h:89
FaceTxThread tx[MaxFaceTxThreads]
Definition: face.h:80
ParseFor rxParseFor
Definition: face.h:86
Face_TxLoopFunc txLoop
Definition: face.h:90
Face_RxInputFunc rxInput
Definition: face.h:83
RTE_MARKER rxMarker __rte_cache_aligned
Definition: face.h:82
Face_RxInputFunc inputs and outputs.
Definition: face.h:14
uint16_t count
input, non-zero
Definition: face.h:18
uint16_t nFree
output, initialized to zero, cannot exceed count
Definition: face.h:20
struct rte_mbuf ** pkts
pkts[:count] is received L2 frames
Definition: face.h:15
Packet ** npkts
npkts[:nL3] shall be filled with L3 packets ready for dispatching
Definition: face.h:16
uint16_t nL3
output, initialized to zero, cannot exceed count
Definition: face.h:19
struct rte_mbuf ** frees
frees[:nFree] shall be filled with mbufs to be freed
Definition: face.h:17
Face RX per-thread information.
Definition: face.h:52
uint64_t nDecodeErr
decode errors
Definition: face.h:54
Reassembler reass
Definition: face.h:55
uint64_t nFrames[PktMax]
nOctets or accepted L3 packets
Definition: face.h:53
Face TX per-thread information.
Definition: face.h:59
uint64_t nDroppedFrames
dropped L2 frames
Definition: face.h:68
uint64_t nDroppedOctets
dropped L2 octets
Definition: face.h:69
uint64_t nAllocFails
dropped L3 packets due to allocation failure
Definition: face.h:64
uint64_t nextSeqNum
next fragmentation sequence number
Definition: face.h:60
uint64_t nFrames[PktMax]
sent+dropped L2 frames and L3 packets
Definition: face.h:66
uint64_t nL3OverLength
dropped L3 packets due to over length
Definition: face.h:63
uint64_t nL3Fragmented
L3 packets that required fragmentation.
Definition: face.h:62
uint64_t nOctets
sent+dropped L2 octets (including LpHeader)
Definition: face.h:67
Generic network interface.
Definition: face.h:98
struct rte_ring * outputQueue
Definition: face.h:100
FaceState state
Definition: face.h:104
FaceImpl * impl
Definition: face.h:99
FaceID id
Definition: face.h:103
PacketTxAlign txAlign
Definition: face.h:102
struct cds_hlist_node txlNode
Definition: face.h:101
Mempools for packet modification.
Definition: common.h:17
mbuf alignment requirements for encoding or packet modification.
Definition: common.h:35
RCU-protected pointer to PdumpSource.
Definition: source.h:31
NDNLPv2 reassembler.
Definition: reassembler.h:9