12d7b3cccSRakesh Kudurumalla /* SPDX-License-Identifier: BSD-3-Clause
22d7b3cccSRakesh Kudurumalla * Copyright(c) 2023 Marvell.
32d7b3cccSRakesh Kudurumalla */
42d7b3cccSRakesh Kudurumalla
52d7b3cccSRakesh Kudurumalla #include <stdio.h>
62d7b3cccSRakesh Kudurumalla #include <stdlib.h>
72d7b3cccSRakesh Kudurumalla #include <string.h>
82d7b3cccSRakesh Kudurumalla
92d7b3cccSRakesh Kudurumalla #include <cmdline_parse.h>
102d7b3cccSRakesh Kudurumalla #include <cmdline_parse_num.h>
112d7b3cccSRakesh Kudurumalla #include <cmdline_parse_string.h>
122d7b3cccSRakesh Kudurumalla #include <cmdline_socket.h>
132d7b3cccSRakesh Kudurumalla #include <rte_common.h>
142d7b3cccSRakesh Kudurumalla #include <rte_mbuf.h>
152d7b3cccSRakesh Kudurumalla
162d7b3cccSRakesh Kudurumalla #include "mempool_priv.h"
172d7b3cccSRakesh Kudurumalla #include "module_api.h"
182d7b3cccSRakesh Kudurumalla
192d7b3cccSRakesh Kudurumalla static const char
202d7b3cccSRakesh Kudurumalla cmd_mempool_help[] = "mempool <mempool_name> size <mbuf_size> buffers <number_of_buffers> "
212d7b3cccSRakesh Kudurumalla "cache <cache_size> numa <numa_id>";
222d7b3cccSRakesh Kudurumalla
232d7b3cccSRakesh Kudurumalla struct mempools mpconfig;
242d7b3cccSRakesh Kudurumalla
252d7b3cccSRakesh Kudurumalla int
mempool_process(struct mempool_config * config)262d7b3cccSRakesh Kudurumalla mempool_process(struct mempool_config *config)
272d7b3cccSRakesh Kudurumalla {
282d7b3cccSRakesh Kudurumalla struct rte_mempool *mp;
292d7b3cccSRakesh Kudurumalla uint8_t nb_pools;
302d7b3cccSRakesh Kudurumalla
312d7b3cccSRakesh Kudurumalla nb_pools = mpconfig.nb_pools;
322d7b3cccSRakesh Kudurumalla rte_strscpy(mpconfig.config[nb_pools].name, config->name, RTE_MEMPOOL_NAMESIZE);
332d7b3cccSRakesh Kudurumalla mpconfig.config[nb_pools].pool_size = config->pool_size;
342d7b3cccSRakesh Kudurumalla mpconfig.config[nb_pools].buffer_size = config->buffer_size;
352d7b3cccSRakesh Kudurumalla mpconfig.config[nb_pools].cache_size = config->cache_size;
362d7b3cccSRakesh Kudurumalla mpconfig.config[nb_pools].numa_node = config->numa_node;
372d7b3cccSRakesh Kudurumalla
382d7b3cccSRakesh Kudurumalla mp = rte_pktmbuf_pool_create(config->name, config->pool_size, config->cache_size,
392d7b3cccSRakesh Kudurumalla 128, config->buffer_size, config->numa_node);
402d7b3cccSRakesh Kudurumalla if (!mp)
412d7b3cccSRakesh Kudurumalla return -EINVAL;
422d7b3cccSRakesh Kudurumalla
432d7b3cccSRakesh Kudurumalla mpconfig.mp[nb_pools] = mp;
442d7b3cccSRakesh Kudurumalla nb_pools++;
452d7b3cccSRakesh Kudurumalla mpconfig.nb_pools = nb_pools;
462d7b3cccSRakesh Kudurumalla
472d7b3cccSRakesh Kudurumalla return 0;
482d7b3cccSRakesh Kudurumalla }
492d7b3cccSRakesh Kudurumalla
50*0f32dac4SSunil Kumar Kori void
cmd_help_mempool_parsed(__rte_unused void * parsed_result,__rte_unused struct cmdline * cl,__rte_unused void * data)51*0f32dac4SSunil Kumar Kori cmd_help_mempool_parsed(__rte_unused void *parsed_result, __rte_unused struct cmdline *cl,
522d7b3cccSRakesh Kudurumalla __rte_unused void *data)
532d7b3cccSRakesh Kudurumalla {
542d7b3cccSRakesh Kudurumalla size_t len;
552d7b3cccSRakesh Kudurumalla
562d7b3cccSRakesh Kudurumalla len = strlen(conn->msg_out);
572d7b3cccSRakesh Kudurumalla conn->msg_out += len;
582d7b3cccSRakesh Kudurumalla snprintf(conn->msg_out, conn->msg_out_len_max, "\n%s\n%s\n",
592d7b3cccSRakesh Kudurumalla "----------------------------- mempool command help -----------------------------",
602d7b3cccSRakesh Kudurumalla cmd_mempool_help);
612d7b3cccSRakesh Kudurumalla
622d7b3cccSRakesh Kudurumalla len = strlen(conn->msg_out);
632d7b3cccSRakesh Kudurumalla conn->msg_out_len_max -= len;
642d7b3cccSRakesh Kudurumalla }
652d7b3cccSRakesh Kudurumalla
66*0f32dac4SSunil Kumar Kori void
cmd_mempool_parsed(void * parsed_result,__rte_unused struct cmdline * cl,__rte_unused void * data)67*0f32dac4SSunil Kumar Kori cmd_mempool_parsed(void *parsed_result, __rte_unused struct cmdline *cl, __rte_unused void *data)
682d7b3cccSRakesh Kudurumalla {
69*0f32dac4SSunil Kumar Kori struct cmd_mempool_result *res = parsed_result;
702d7b3cccSRakesh Kudurumalla struct mempool_config config;
712d7b3cccSRakesh Kudurumalla int rc = -EINVAL;
722d7b3cccSRakesh Kudurumalla
732d7b3cccSRakesh Kudurumalla
742d7b3cccSRakesh Kudurumalla rte_strscpy(config.name, res->name, RTE_MEMPOOL_NAMESIZE);
752d7b3cccSRakesh Kudurumalla config.name[strlen(res->name)] = '\0';
762d7b3cccSRakesh Kudurumalla config.pool_size = res->nb_bufs;
772d7b3cccSRakesh Kudurumalla config.buffer_size = res->buf_sz;
782d7b3cccSRakesh Kudurumalla config.cache_size = res->cache_size;
792d7b3cccSRakesh Kudurumalla config.numa_node = res->node;
802d7b3cccSRakesh Kudurumalla
812d7b3cccSRakesh Kudurumalla rc = mempool_process(&config);
822d7b3cccSRakesh Kudurumalla if (rc < 0)
832d7b3cccSRakesh Kudurumalla printf(MSG_CMD_FAIL, "mempool");
842d7b3cccSRakesh Kudurumalla }
85