NDN-DPDK
High-Speed Named Data Networking Forwarder
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
data.h
Go to the documentation of this file.
1 #ifndef NDNDPDK_NDNI_DATA_H
2 #define NDNDPDK_NDNI_DATA_H
3 
6 #include "name.h"
7 
9 typedef struct PData {
11  uint32_t freshness;
12  bool hasDigest;
14  uint32_t contentOffset;
15  uint32_t contentL;
16  RTE_MARKER64 a_;
18  RTE_MARKER64 b_;
19  uint8_t helperScratch[192];
21 
28 __attribute__((nonnull)) bool
29 PData_Parse(PData* data, struct rte_mbuf* pkt, ParseFor parseFor);
30 
32 __attribute__((nonnull)) DataSatisfyResult
33 PData_CanSatisfy(PData* data, PInterest* interest);
34 
40 __attribute__((nonnull, returns_nonnull)) struct rte_crypto_op*
42 
47 __attribute__((nonnull)) uint16_t
48 DataDigest_Enqueue(CryptoQueuePair* cqp, struct rte_crypto_op** ops, uint16_t count);
49 
56 __attribute__((nonnull)) bool
57 DataDigest_Finish(struct rte_crypto_op* op, Packet** npkt);
58 
60 extern uint8_t DataEnc_NoMetaInfo[];
61 
76 __attribute__((nonnull)) void
77 DataEnc_PrepareMetaInfo(uint8_t* room, ContentType ct, uint32_t freshness, LName finalBlock);
78 
83 __attribute__((nonnull)) static inline uint16_t
84 DataEnc_SizeofMetaInfo(const uint8_t* meta) {
85  return likely(meta[0] == TtMetaInfo) ? 2 + meta[1] : 0;
86 }
87 
97 __attribute__((nonnull)) struct rte_mbuf*
98 DataEnc_EncodeTpl(LName prefix, LName suffix, const uint8_t* meta, struct rte_mbuf* tplV,
99  struct iovec* tplIov, int tplIovcnt, PacketMempools* mp, PacketTxAlign align);
100 
111 __attribute__((nonnull)) struct rte_mbuf*
112 DataEnc_EncodeRoom(LName prefix, LName suffix, const uint8_t* meta, uint32_t roomL,
113  struct iovec* roomIov, int* roomIovcnt, PacketMempools* mp, PacketTxAlign align);
114 
121 __attribute__((nonnull)) Packet*
122 DataEnc_Sign(struct rte_mbuf* pkt, PacketMempools* mp, PacketTxAlign align);
123 
125 typedef struct DataGen {
126  struct rte_mbuf* tpl;
128  const uint8_t* meta;
129  struct iovec contentIov[1];
131 
144 __attribute__((nonnull)) static inline Packet*
145 DataGen_Encode(DataGen* gen, LName prefix, PacketMempools* mp, PacketTxAlign align) {
146  struct rte_mbuf* pkt =
147  DataEnc_EncodeTpl(prefix, gen->suffix, gen->meta, gen->tpl, gen->contentIov, 1, mp, align);
148  if (unlikely(pkt == NULL)) {
149  return NULL;
150  }
151  return DataEnc_Sign(pkt, mp, align);
152 }
153 
154 #endif // NDNDPDK_NDNI_DATA_H
struct PData PData
Parsed Data packet.
struct rte_crypto_op * DataDigest_Prepare(CryptoQueuePair *cqp, Packet *npkt)
Prepare a crypto_op for Data digest computation.
Definition: data.c:142
uint8_t DataEnc_NoMetaInfo[]
Indicate that Data MetaInfo field should be omitted.
Definition: data.c:26
struct rte_mbuf * DataEnc_EncodeRoom(LName prefix, LName suffix, const uint8_t *meta, uint32_t roomL, struct iovec *roomIov, int *roomIovcnt, PacketMempools *mp, PacketTxAlign align)
Encode Data with unfilled Content room.
Definition: data.c:315
struct DataGen DataGen
Data encoder optimized for traffic generator.
struct rte_mbuf * DataEnc_EncodeTpl(LName prefix, LName suffix, const uint8_t *meta, struct rte_mbuf *tplV, struct iovec *tplIov, int tplIovcnt, PacketMempools *mp, PacketTxAlign align)
Encode Data with Content from template.
Definition: data.c:292
bool PData_Parse(PData *data, struct rte_mbuf *pkt, ParseFor parseFor)
Parse Data.
Definition: data.c:67
uint16_t DataDigest_Enqueue(CryptoQueuePair *cqp, struct rte_crypto_op **ops, uint16_t count)
Enqueue crypto_ops for Data digest computation.
Definition: data.c:157
DataSatisfyResult PData_CanSatisfy(PData *data, PInterest *interest)
Determine whether Data can satisfy Interest.
Definition: data.c:132
Packet * DataEnc_Sign(struct rte_mbuf *pkt, PacketMempools *mp, PacketTxAlign align)
Append Null signature to Data.
Definition: data.c:352
bool DataDigest_Finish(struct rte_crypto_op *op, Packet **npkt)
Finish Data digest computation.
Definition: data.c:166
void DataEnc_PrepareMetaInfo(uint8_t *room, ContentType ct, uint32_t freshness, LName finalBlock)
Prepare Data MetaInfo.
Definition: data.c:175
ContentType
Definition: an.h:61
@ TtMetaInfo
Definition: an.h:41
struct Packet Packet
Definition: common.h:11
DataSatisfyResult
Definition: enum.h:23
@ ImplicitDigestLength
Definition: enum.h:11
ParseFor
Definition: enum.h:29
Crypto queue pair.
Definition: cryptodev.h:12
Data encoder optimized for traffic generator.
Definition: data.h:125
struct rte_mbuf * tpl
Definition: data.h:126
const uint8_t * meta
Definition: data.h:128
LName suffix
Definition: data.h:127
struct iovec contentIov[1]
Definition: data.h:129
Name in linear buffer.
Definition: name.h:11
Parsed Data packet.
Definition: data.h:9
RTE_MARKER64 a_
Definition: data.h:16
uint32_t contentOffset
Content TLV-VALUE offset.
Definition: data.h:14
bool isFinalBlock
Definition: data.h:13
uint32_t freshness
FreshnessPeriod in millis.
Definition: data.h:11
bool hasDigest
Definition: data.h:12
uint32_t contentL
Content TLV-LENGTH.
Definition: data.h:15
RTE_MARKER64 b_
Definition: data.h:18
uint8_t digest[ImplicitDigestLength]
Definition: data.h:17
PName name
Definition: data.h:10
uint8_t helperScratch[192]
scratch area for helper threads
Definition: data.h:19
Parsed Interest packet.
Definition: interest.h:9
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