1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2023 Marvell. 3 */ 4 5 #include <stdio.h> 6 #include <stdlib.h> 7 #include <string.h> 8 9 #include <cmdline_parse.h> 10 #include <cmdline_parse_num.h> 11 #include <cmdline_parse_string.h> 12 #include <cmdline_socket.h> 13 #include <rte_common.h> 14 #include <rte_mbuf.h> 15 16 #include "mempool_priv.h" 17 #include "module_api.h" 18 19 static const char 20 cmd_mempool_help[] = "mempool <mempool_name> size <mbuf_size> buffers <number_of_buffers> " 21 "cache <cache_size> numa <numa_id>"; 22 23 struct mempools mpconfig; 24 25 int 26 mempool_process(struct mempool_config *config) 27 { 28 struct rte_mempool *mp; 29 uint8_t nb_pools; 30 31 nb_pools = mpconfig.nb_pools; 32 rte_strscpy(mpconfig.config[nb_pools].name, config->name, RTE_MEMPOOL_NAMESIZE); 33 mpconfig.config[nb_pools].pool_size = config->pool_size; 34 mpconfig.config[nb_pools].buffer_size = config->buffer_size; 35 mpconfig.config[nb_pools].cache_size = config->cache_size; 36 mpconfig.config[nb_pools].numa_node = config->numa_node; 37 38 mp = rte_pktmbuf_pool_create(config->name, config->pool_size, config->cache_size, 39 128, config->buffer_size, config->numa_node); 40 if (!mp) 41 return -EINVAL; 42 43 mpconfig.mp[nb_pools] = mp; 44 nb_pools++; 45 mpconfig.nb_pools = nb_pools; 46 47 return 0; 48 } 49 50 void 51 cmd_help_mempool_parsed(__rte_unused void *parsed_result, __rte_unused struct cmdline *cl, 52 __rte_unused void *data) 53 { 54 size_t len; 55 56 len = strlen(conn->msg_out); 57 conn->msg_out += len; 58 snprintf(conn->msg_out, conn->msg_out_len_max, "\n%s\n%s\n", 59 "----------------------------- mempool command help -----------------------------", 60 cmd_mempool_help); 61 62 len = strlen(conn->msg_out); 63 conn->msg_out_len_max -= len; 64 } 65 66 void 67 cmd_mempool_parsed(void *parsed_result, __rte_unused struct cmdline *cl, __rte_unused void *data) 68 { 69 struct cmd_mempool_result *res = parsed_result; 70 struct mempool_config config; 71 int rc = -EINVAL; 72 73 74 rte_strscpy(config.name, res->name, RTE_MEMPOOL_NAMESIZE); 75 config.name[strlen(res->name)] = '\0'; 76 config.pool_size = res->nb_bufs; 77 config.buffer_size = res->buf_sz; 78 config.cache_size = res->cache_size; 79 config.numa_node = res->node; 80 81 rc = mempool_process(&config); 82 if (rc < 0) 83 printf(MSG_CMD_FAIL, "mempool"); 84 } 85