1#ifndef NDNDPDK_NDNI_PACKET_H
2#define NDNDPDK_NDNI_PACKET_H
12__attribute__((returns_nonnull))
static inline const char*
18static __rte_always_inline
PktType
24static __rte_always_inline
PktType
26 return (t & 0x03) | 0x04;
49__attribute__((nonnull, returns_nonnull))
static __rte_always_inline
Packet*
50Packet_FromMbuf(
struct rte_mbuf* pkt) {
55static __rte_always_inline
struct rte_mbuf*
56Packet_ToMbuf(
const Packet* npkt) {
57 return (
struct rte_mbuf*)npkt;
61__attribute__((nonnull))
static __rte_always_inline
PktType
62Packet_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*
73Packet_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*
82Packet_GetLpHdr(
Packet* npkt) {
84 return &Packet_GetPriv_(npkt)->lp;
88__attribute__((nonnull, returns_nonnull))
static __rte_always_inline
LpL3*
89Packet_GetLpL3Hdr(
Packet* npkt) {
90 return &Packet_GetPriv_(npkt)->lpl3;
97__attribute__((nonnull, returns_nonnull))
static __rte_always_inline
PInterest*
98Packet_GetInterestHdr(
Packet* npkt) {
100 return &Packet_GetPriv_(npkt)->interest;
107__attribute__((nonnull, returns_nonnull))
static __rte_always_inline
PData*
108Packet_GetDataHdr(
Packet* npkt) {
110 return &Packet_GetPriv_(npkt)->data;
117__attribute__((nonnull, returns_nonnull))
static __rte_always_inline
PNack*
118Packet_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*
151Packet_GetName(
Packet* npkt) {
152 switch (Packet_GetType(npkt)) {
154 return &Packet_GetInterestHdr(npkt)->name;
156 return &Packet_GetDataHdr(npkt)->name;
158 return &Packet_GetNackHdr(npkt)->interest.name;
170__attribute__((nonnull))
Packet*
179__attribute__((nonnull))
static inline void
180Packet_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*
193Packet_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 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
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
Packet * Packet_Clone(Packet *npkt, PacketMempools *mp, PacketTxAlign align)
Clone packet to new mbufs.
Definition packet.c:102
bool Packet_ParseL3(Packet *npkt, ParseFor parseFor)
Parse layer 3 in mbuf.
Definition packet.c:33
NDNLPv2 layer 3 fields.
Definition lp.h:56
Parsed Data packet.
Definition data.h:9
Parsed Interest packet.
Definition interest.h:9
Packet * diskData
DiskStore loaded Data.
Definition interest.h:30
Parsed Nack packet.
Definition nack.h:19
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