MCPcopy Create free account
hub / github.com/F-Stack/f-stack / create_segmented_mbuf

Function create_segmented_mbuf

dpdk/app/test/test_cryptodev.h:181–239  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

179}
180
181static inline struct rte_mbuf *
182create_segmented_mbuf(struct rte_mempool *mbuf_pool, int pkt_len,
183 int nb_segs, uint8_t pattern) {
184
185 struct rte_mbuf *m = NULL, *mbuf = NULL;
186 uint8_t *dst;
187 int data_len = 0;
188 int i, size;
189 int t_len;
190
191 if (pkt_len < 1) {
192 printf("Packet size must be 1 or more (is %d)\n", pkt_len);
193 return NULL;
194 }
195
196 if (nb_segs < 1) {
197 printf("Number of segments must be 1 or more (is %d)\n",
198 nb_segs);
199 return NULL;
200 }
201
202 t_len = pkt_len >= nb_segs ? pkt_len / nb_segs : 1;
203 size = pkt_len;
204
205 /* Create chained mbuf_src and fill it generated data */
206 for (i = 0; size > 0; i++) {
207
208 m = rte_pktmbuf_alloc(mbuf_pool);
209 if (i == 0)
210 mbuf = m;
211
212 if (m == NULL) {
213 printf("Cannot create segment for source mbuf");
214 goto fail;
215 }
216
217 /* Make sure if tailroom is zeroed */
218 memset(m->buf_addr, pattern, m->buf_len);
219
220 data_len = size > t_len ? t_len : size;
221 dst = (uint8_t *)rte_pktmbuf_append(m, data_len);
222 if (dst == NULL) {
223 printf("Cannot append %d bytes to the mbuf\n",
224 data_len);
225 goto fail;
226 }
227
228 if (mbuf != m)
229 rte_pktmbuf_chain(mbuf, m);
230
231 size -= data_len;
232
233 }
234 return mbuf;
235
236fail:
237 rte_pktmbuf_free(mbuf);
238 return NULL;

Calls 6

rte_pktmbuf_allocFunction · 0.85
memsetFunction · 0.85
rte_pktmbuf_appendFunction · 0.85
rte_pktmbuf_chainFunction · 0.85
rte_pktmbuf_freeFunction · 0.85
printfFunction · 0.50

Tested by

no test coverage detected