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

Function ext_mbuf_create

dpdk/app/test/test_cryptodev.c:9890–9993  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9888}
9889
9890static inline struct rte_mbuf *
9891ext_mbuf_create(struct rte_mempool *mbuf_pool, int pkt_len,
9892 int nb_segs, const void *input_text)
9893{
9894 struct rte_mbuf *m = NULL, *mbuf = NULL;
9895 size_t data_off = 0;
9896 uint8_t *dst;
9897 int i, size;
9898 int t_len;
9899
9900 if (pkt_len < 1) {
9901 printf("Packet size must be 1 or more (is %d)\n", pkt_len);
9902 return NULL;
9903 }
9904
9905 if (nb_segs < 1) {
9906 printf("Number of segments must be 1 or more (is %d)\n",
9907 nb_segs);
9908 return NULL;
9909 }
9910
9911 t_len = pkt_len >= nb_segs ? pkt_len / nb_segs : 1;
9912 size = pkt_len;
9913
9914 /* Create chained mbuf_src with external buffer */
9915 for (i = 0; size > 0; i++) {
9916 struct rte_mbuf_ext_shared_info *ret_shinfo = NULL;
9917 uint16_t data_len = RTE_MIN(size, t_len);
9918 char mz_name[RTE_MEMZONE_NAMESIZE];
9919 const struct rte_memzone *memzone;
9920 void *ext_buf_addr = NULL;
9921 rte_iova_t buf_iova;
9922 bool freed = false;
9923 uint16_t buf_len;
9924
9925 buf_len = RTE_ALIGN_CEIL(data_len + 1024 +
9926 sizeof(struct rte_mbuf_ext_shared_info), 8);
9927
9928 snprintf(mz_name, RTE_MEMZONE_NAMESIZE, "ext_buf_%d", i);
9929 memzone = rte_memzone_lookup(mz_name);
9930 if (memzone != NULL && memzone->len != buf_len) {
9931 rte_memzone_free(memzone);
9932 memzone = NULL;
9933 }
9934 if (memzone == NULL) {
9935 memzone = rte_memzone_reserve_aligned(mz_name, buf_len, SOCKET_ID_ANY,
9936 RTE_MEMZONE_IOVA_CONTIG, RTE_CACHE_LINE_SIZE);
9937 if (memzone == NULL) {
9938 printf("Can't allocate memory zone %s\n", mz_name);
9939 return NULL;
9940 }
9941 }
9942
9943 ext_buf_addr = memzone->addr;
9944 memcpy(ext_buf_addr, RTE_PTR_ADD(input_text, data_off), data_len);
9945
9946 /* Create buffer to hold rte_mbuf header */
9947 m = rte_pktmbuf_alloc(mbuf_pool);

Callers 1

test_ipsec_proto_processFunction · 0.85

Calls 14

snprintfFunction · 0.85
rte_memzone_lookupFunction · 0.85
rte_memzone_freeFunction · 0.85
rte_pktmbuf_allocFunction · 0.85
rte_pktmbuf_appendFunction · 0.85
rte_pktmbuf_chainFunction · 0.85
rte_pktmbuf_freeFunction · 0.85
ext_mbuf_memzone_freeFunction · 0.85
printfFunction · 0.50

Tested by

no test coverage detected