1 #ifndef NDNDPDK_NDNI_PACKET_H
2 #define NDNDPDK_NDNI_PACKET_H
12 __attribute__((returns_nonnull))
static inline const char*
18 static __rte_always_inline
PktType
24 static __rte_always_inline
PktType
26 return (t & 0x03) | 0x04;
49 __attribute__((nonnull, returns_nonnull))
static __rte_always_inline
Packet*
50 Packet_FromMbuf(
struct rte_mbuf* pkt) {
55 static __rte_always_inline
struct rte_mbuf*
56 Packet_ToMbuf(
const Packet* npkt) {
57 return (
struct rte_mbuf*)npkt;
61 __attribute__((nonnull))
static __rte_always_inline
PktType
62 Packet_GetType(
const Packet* npkt) {
63 return Packet_ToMbuf(npkt)->inner_l3_type;
67 __attribute__((nonnull))
static __rte_always_inline
void
69 Packet_ToMbuf(npkt)->inner_l3_type = t;
72 __attribute__((nonnull, returns_nonnull))
static __rte_always_inline
PacketPriv*
73 Packet_GetPriv_(
Packet* npkt) {
74 return (
PacketPriv*)rte_mbuf_to_priv(rte_mbuf_from_indirect(Packet_ToMbuf(npkt)));
81 __attribute__((nonnull, returns_nonnull))
static __rte_always_inline
LpHeader*
82 Packet_GetLpHdr(
Packet* npkt) {
84 return &Packet_GetPriv_(npkt)->
lp;
88 __attribute__((nonnull, returns_nonnull))
static __rte_always_inline
LpL3*
89 Packet_GetLpL3Hdr(
Packet* npkt) {
90 return &Packet_GetPriv_(npkt)->
lpl3;
97 __attribute__((nonnull, returns_nonnull))
static __rte_always_inline
PInterest*
98 Packet_GetInterestHdr(
Packet* npkt) {
100 return &Packet_GetPriv_(npkt)->
interest;
107 __attribute__((nonnull, returns_nonnull))
static __rte_always_inline
PData*
108 Packet_GetDataHdr(
Packet* npkt) {
110 return &Packet_GetPriv_(npkt)->
data;
117 __attribute__((nonnull, returns_nonnull))
static __rte_always_inline
PNack*
118 Packet_GetNackHdr(
Packet* npkt) {
120 return &Packet_GetPriv_(npkt)->
nack;
131 __attribute__((nonnull, warn_unused_result))
bool
143 __attribute__((nonnull, warn_unused_result))
bool
150 __attribute__((nonnull))
static inline PName*
151 Packet_GetName(
Packet* npkt) {
152 switch (Packet_GetType(npkt)) {
154 return &Packet_GetInterestHdr(npkt)->
name;
156 return &Packet_GetDataHdr(npkt)->
name;
170 __attribute__((nonnull))
Packet*
179 __attribute__((nonnull))
static inline void
180 Packet_Free(
Packet* npkt) {
182 PInterest* interest = Packet_GetInterestHdr(npkt);
184 struct rte_mbuf* mbufs[2] = {Packet_ToMbuf(npkt), Packet_ToMbuf(interest->
diskData)};
185 rte_pktmbuf_free_bulk(mbufs, RTE_DIM(mbufs));
189 rte_pktmbuf_free(Packet_ToMbuf(npkt));
192 __attribute__((nonnull, returns_nonnull))
static inline Packet*
193 Packet_EncodeFinish_(
struct rte_mbuf* m, uint32_t type,
PktType t) {
194 TlvEncoder_PrependTL(m, type, m->pkt_len);
195 Packet* output = Packet_FromMbuf(m);
196 Packet_SetType(output, t);
197 *Packet_GetLpL3Hdr(output) = (
const LpL3){0};
#define NDNDPDK_ASSERT(x)
Definition: common.h:60
struct LpL3 LpL3
NDNLPv2 layer 3 fields.
struct Packet Packet
Definition: common.h:11
ParseFor
Definition: enum.h:29
PktType
Definition: enum.h:35
@ PktFragment
Definition: enum.h:36
@ PktInterest
Definition: enum.h:37
@ PktNack
Definition: enum.h:39
@ PktData
Definition: enum.h:38
union PacketPriv PacketPriv
mbuf private data for NDN packet.
const char * PktType_Strings_[]
Definition: packet.c:4
bool Packet_Parse(Packet *npkt, ParseFor parseFor)
Parse layer 2 and layer 3 in mbuf.
Definition: packet.c:11
bool Packet_ParseL3(Packet *npkt, ParseFor parseFor)
Parse layer 3 in mbuf.
Definition: packet.c:33
Packet * Packet_Clone(Packet *npkt, PacketMempools *mp, PacketTxAlign align)
Clone packet to new mbufs.
Definition: packet.c:102
NDNLPv2 layer 3 fields.
Definition: lp.h:56
Parsed Data packet.
Definition: data.h:9
PName name
Definition: data.h:10
Parsed Interest packet.
Definition: interest.h:9
Packet * diskData
DiskStore loaded Data.
Definition: interest.h:30
PName name
Definition: interest.h:24
Parsed Nack packet.
Definition: nack.h:19
PInterest interest
Definition: nack.h:21
Parsed name.
Definition: name.h:139
Mempools for packet modification.
Definition: common.h:17
mbuf alignment requirements for encoding or packet modification.
Definition: common.h:35
mbuf private data for NDN packet.
Definition: packet.h:30
LpHeader lp
Definition: packet.h:31
PData data
Definition: packet.h:36
PInterest interest
Definition: packet.h:35
PNack nack
Definition: packet.h:39
LpL3 lpl3
Definition: packet.h:33