NDN-DPDK
High-Speed Named Data Networking Forwarder
Loading...
Searching...
No Matches
face.h
Go to the documentation of this file.
1#ifndef NDNDPDK_IFACE_FACE_H
2#define NDNDPDK_IFACE_FACE_H
3
5
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
14typedef 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
28typedef void (*Face_RxInputFunc)(Face* face, int rxThread, FaceRxInputCtx* ctx);
29
36typedef uint16_t (*Face_TxLoopFunc)(Face* face, int txThread);
37
44typedef uint16_t (*Face_TxBurstFunc)(Face* face, struct rte_mbuf** pkts, uint16_t nPkts);
45
46enum {
49};
50
52typedef struct FaceRxThread {
53 uint64_t nFrames[PktMax];
54 uint64_t nDecodeErr;
56} __rte_cache_aligned FaceRxThread;
57
59typedef 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
96
98struct Face {
100 struct rte_ring* outputQueue;
101 struct cds_hlist_node txlNode;
105};
106static_assert(sizeof(Face) <= RTE_CACHE_LINE_SIZE, "");
107
108__attribute__((nonnull, returns_nonnull)) static inline void*
109Face_GetPriv(Face* face) {
110 return face->impl->priv;
111}
112
114extern Face gFaces[];
115
121__attribute__((returns_nonnull)) static inline Face*
122Face_Get(FaceID id) {
123 return &gFaces[id];
124}
125
127static inline bool
128Face_IsDown(FaceID faceID) {
129 Face* face = Face_Get(faceID);
130 return face->state != FaceStateUp;
131}
132
134static inline PacketTxAlign
135Face_PacketTxAlign(FaceID faceID) {
136 Face* face = Face_Get(faceID);
137 return face->txAlign;
138}
139
147__attribute__((nonnull)) static inline void
148Face_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
163Face_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
Face gFaces[UINT16_MAX+1]
Static array of all faces.
Definition face.c:5
void(* Face_RxInputFunc)(Face *face, int rxThread, FaceRxInputCtx *ctx)
Process a burst of received L2 frames.
Definition face.h:28
@ FaceRxThread_cntNOctets
FaceRxThread.nFrames[cntNOctets] is nOctets counter.
Definition face.h:48
uint16_t(* Face_TxBurstFunc)(Face *face, struct rte_mbuf **pkts, uint16_t nPkts)
Transmit a burst of L2 frames.
Definition face.h:44
uint16_t(* Face_TxLoopFunc)(Face *face, int txThread)
Transfer a burst of L3 packets from outputQueue to Face_TxBurstFunc .
Definition face.h:36
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
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