From patchwork Wed Oct 11 13:33:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 132558 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B90B142361; Wed, 11 Oct 2023 15:34:49 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 996A440A76; Wed, 11 Oct 2023 15:34:22 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id AB6AC40A76 for ; Wed, 11 Oct 2023 15:34:20 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1697031261; x=1728567261; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=NV4j1wIHHJcQg6VrB1Rj0MHOImS4hlMuPp47LiL1hX4=; b=NIw3AKBauhx67aH8Vy52gnM9gpVjtFLm2j4gfLLz31ImvQKcyufqCO8M dZcdnoCBpXAA+Awz1p9YaRq9JPA2tCJ1NV6jLzXAs8IWLwvG57Qf2ydO4 c1bsHyczQpHZZM8LzQFsxsGeAuwuyToFUZ2hGPV74llsWodOlMauOnmlC e7WKNuOFpGGC6tshbuBKidnm10Lk95QmJR1KigvamZT5dUz7GfdUOmRXZ pZoWtHf5UYRAIGpJ8JxE5uL9z9UPR7Ckpvqj3Xx3oJjPEa6J893buIFhX 6hx8S/tYhQEf3O78E5xmf5EJn5udUNcV+IykFhmX1ZLz01FUNBW1kKc9G g==; X-IronPort-AV: E=McAfee;i="6600,9927,10860"; a="364025764" X-IronPort-AV: E=Sophos;i="6.03,216,1694761200"; d="scan'208";a="364025764" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Oct 2023 06:34:20 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10860"; a="1001111908" X-IronPort-AV: E=Sophos;i="6.03,216,1694761200"; d="scan'208";a="1001111908" Received: from unknown (HELO silpixa00401385.ir.intel.com) ([10.237.214.46]) by fmsmga006.fm.intel.com with ESMTP; 11 Oct 2023 06:34:18 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: Bruce Richardson , Chas Williams , "Min Hu (Connor)" Subject: [PATCH v3 5/5] examples/bond: auto-generate cmdline boilerplate Date: Wed, 11 Oct 2023 14:33:57 +0100 Message-Id: <20231011133357.111058-6-bruce.richardson@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231011133357.111058-1-bruce.richardson@intel.com> References: <20230802170052.955323-1-bruce.richardson@intel.com> <20231011133357.111058-1-bruce.richardson@intel.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Use the dpdk-cmdline-gen script to autogenerate all the boilerplate structs and defines for the commandline part of the app. Signed-off-by: Bruce Richardson --- Note: the original help text on some of the commands in this example were not useful "this command do not handle any arguments". Therefore, when converting over to the command script, the per-command help info has been updated with reference to the code rather than a literal transfer of the existing help text, as was done with the previous 2 example apps. --- examples/bond/Makefile | 12 ++- examples/bond/commands.list | 6 ++ examples/bond/main.c | 161 ++++-------------------------------- examples/bond/main.h | 10 --- examples/bond/meson.build | 8 ++ 5 files changed, 37 insertions(+), 160 deletions(-) create mode 100644 examples/bond/commands.list delete mode 100644 examples/bond/main.h diff --git a/examples/bond/Makefile b/examples/bond/Makefile index ad711a5bee..d87c7a32ba 100644 --- a/examples/bond/Makefile +++ b/examples/bond/Makefile @@ -6,6 +6,7 @@ APP = bond_app # all source are stored in SRCS-y SRCS-y := main.c +SRC-DEPS := build/commands.h PKGCONF ?= pkg-config @@ -24,10 +25,13 @@ static: build/$(APP)-static LDFLAGS += -lrte_net_bond PC_FILE := $(shell $(PKGCONF) --path libdpdk 2>/dev/null) -CFLAGS += -O3 $(shell $(PKGCONF) --cflags libdpdk) +CFLAGS += -O3 $(shell $(PKGCONF) --cflags libdpdk) -I build/ LDFLAGS_SHARED = $(shell $(PKGCONF) --libs libdpdk) LDFLAGS_STATIC = $(shell $(PKGCONF) --static --libs libdpdk) +build/commands.h: commands.list Makefile + dpdk-cmdline-gen.py -o $@ --context-name=main_ctx $< + ifeq ($(MAKECMDGOALS),static) # check for broken pkg-config ifeq ($(shell echo $(LDFLAGS_STATIC) | grep 'whole-archive.*l:lib.*no-whole-archive'),) @@ -38,10 +42,10 @@ endif CFLAGS += -DALLOW_EXPERIMENTAL_API -build/$(APP)-shared: $(SRCS-y) Makefile $(PC_FILE) | build +build/$(APP)-shared: $(SRCS-y) Makefile $(PC_FILE) | build $(SRC-DEPS) $(CC) $(CFLAGS) $(SRCS-y) -o $@ $(LDFLAGS) $(LDFLAGS_SHARED) -build/$(APP)-static: $(SRCS-y) Makefile $(PC_FILE) | build +build/$(APP)-static: $(SRCS-y) Makefile $(PC_FILE) | build $(SRC-DEPS) $(CC) $(CFLAGS) $(SRCS-y) -o $@ $(LDFLAGS) $(LDFLAGS_STATIC) build: @@ -49,5 +53,5 @@ build: .PHONY: clean clean: - rm -f build/$(APP) build/$(APP)-static build/$(APP)-shared + rm -f build/$(APP) build/$(APP)-static build/$(APP)-shared build/*.h test -d build && rmdir -p build || true diff --git a/examples/bond/commands.list b/examples/bond/commands.list new file mode 100644 index 0000000000..a10bf75708 --- /dev/null +++ b/examples/bond/commands.list @@ -0,0 +1,6 @@ +send ip # sends one ARPrequest through bonding for IP +start # starts listening if not started at startup +stop # stops listening +show # shows some bond info, e.g. active members +help # show help +quit # close application diff --git a/examples/bond/main.c b/examples/bond/main.c index 90f422ec11..8528abf675 100644 --- a/examples/bond/main.c +++ b/examples/bond/main.c @@ -45,16 +45,8 @@ #include #include -#include -#include -#include -#include -#include -#include #include -#include - -#include "main.h" +#include "commands.h" #define RTE_LOGTYPE_DCB RTE_LOGTYPE_USER1 @@ -462,11 +454,7 @@ static int lcore_main(__rte_unused void *arg1) return 0; } -struct cmd_obj_send_result { - cmdline_fixed_string_t action; - cmdline_ipaddr_t ip; -}; -static inline void get_string(struct cmd_obj_send_result *res, char *buf, uint8_t size) +static inline void get_string(struct cmd_send_result *res, char *buf, uint8_t size) { snprintf(buf, size, NIPQUAD_FMT, ((unsigned)((unsigned char *)&(res->ip.addr.ipv4))[0]), @@ -475,12 +463,11 @@ static inline void get_string(struct cmd_obj_send_result *res, char *buf, uint8_ ((unsigned)((unsigned char *)&(res->ip.addr.ipv4))[3]) ); } -static void cmd_obj_send_parsed(void *parsed_result, - __rte_unused struct cmdline *cl, - __rte_unused void *data) +void +cmd_send_parsed(void *parsed_result, __rte_unused struct cmdline *cl, __rte_unused void *data) { - struct cmd_obj_send_result *res = parsed_result; + struct cmd_send_result *res = parsed_result; char ip_str[INET6_ADDRSTRLEN]; struct rte_ether_addr bond_mac_addr; @@ -544,29 +531,8 @@ static void cmd_obj_send_parsed(void *parsed_result, cmdline_printf(cl, "\n"); } -cmdline_parse_token_string_t cmd_obj_action_send = - TOKEN_STRING_INITIALIZER(struct cmd_obj_send_result, action, "send"); -cmdline_parse_token_ipaddr_t cmd_obj_ip = - TOKEN_IPV4_INITIALIZER(struct cmd_obj_send_result, ip); - -cmdline_parse_inst_t cmd_obj_send = { - .f = cmd_obj_send_parsed, /* function to call */ - .data = NULL, /* 2nd arg of func */ - .help_str = "send client_ip", - .tokens = { /* token list, NULL terminated */ - (void *)&cmd_obj_action_send, - (void *)&cmd_obj_ip, - NULL, - }, -}; - -struct cmd_start_result { - cmdline_fixed_string_t start; -}; - -static void cmd_start_parsed(__rte_unused void *parsed_result, - struct cmdline *cl, - __rte_unused void *data) +void +cmd_start_parsed(__rte_unused void *parsed_result, struct cmdline *cl, __rte_unused void *data) { int worker_core_id = rte_lcore_id(); @@ -605,26 +571,8 @@ static void cmd_start_parsed(__rte_unused void *parsed_result, ); } -cmdline_parse_token_string_t cmd_start_start = - TOKEN_STRING_INITIALIZER(struct cmd_start_result, start, "start"); - -cmdline_parse_inst_t cmd_start = { - .f = cmd_start_parsed, /* function to call */ - .data = NULL, /* 2nd arg of func */ - .help_str = "starts listening if not started at startup", - .tokens = { /* token list, NULL terminated */ - (void *)&cmd_start_start, - NULL, - }, -}; - -struct cmd_help_result { - cmdline_fixed_string_t help; -}; - -static void cmd_help_parsed(__rte_unused void *parsed_result, - struct cmdline *cl, - __rte_unused void *data) +void +cmd_help_parsed(__rte_unused void *parsed_result, struct cmdline *cl, __rte_unused void *data) { cmdline_printf(cl, "ALB - link bonding mode 6 example\n" @@ -637,26 +585,8 @@ static void cmd_help_parsed(__rte_unused void *parsed_result, ); } -cmdline_parse_token_string_t cmd_help_help = - TOKEN_STRING_INITIALIZER(struct cmd_help_result, help, "help"); - -cmdline_parse_inst_t cmd_help = { - .f = cmd_help_parsed, /* function to call */ - .data = NULL, /* 2nd arg of func */ - .help_str = "show help", - .tokens = { /* token list, NULL terminated */ - (void *)&cmd_help_help, - NULL, - }, -}; - -struct cmd_stop_result { - cmdline_fixed_string_t stop; -}; - -static void cmd_stop_parsed(__rte_unused void *parsed_result, - struct cmdline *cl, - __rte_unused void *data) +void +cmd_stop_parsed(__rte_unused void *parsed_result, struct cmdline *cl, __rte_unused void *data) { rte_spinlock_lock(&global_flag_stru_p->lock); if (global_flag_stru_p->LcoreMainIsRunning == 0) { @@ -678,26 +608,8 @@ static void cmd_stop_parsed(__rte_unused void *parsed_result, rte_spinlock_unlock(&global_flag_stru_p->lock); } -cmdline_parse_token_string_t cmd_stop_stop = - TOKEN_STRING_INITIALIZER(struct cmd_stop_result, stop, "stop"); - -cmdline_parse_inst_t cmd_stop = { - .f = cmd_stop_parsed, /* function to call */ - .data = NULL, /* 2nd arg of func */ - .help_str = "this command do not handle any arguments", - .tokens = { /* token list, NULL terminated */ - (void *)&cmd_stop_stop, - NULL, - }, -}; - -struct cmd_quit_result { - cmdline_fixed_string_t quit; -}; - -static void cmd_quit_parsed(__rte_unused void *parsed_result, - struct cmdline *cl, - __rte_unused void *data) +void +cmd_quit_parsed(__rte_unused void *parsed_result, struct cmdline *cl, __rte_unused void *data) { rte_spinlock_lock(&global_flag_stru_p->lock); if (global_flag_stru_p->LcoreMainIsRunning == 0) { @@ -721,26 +633,8 @@ static void cmd_quit_parsed(__rte_unused void *parsed_result, cmdline_quit(cl); } -cmdline_parse_token_string_t cmd_quit_quit = - TOKEN_STRING_INITIALIZER(struct cmd_quit_result, quit, "quit"); - -cmdline_parse_inst_t cmd_quit = { - .f = cmd_quit_parsed, /* function to call */ - .data = NULL, /* 2nd arg of func */ - .help_str = "this command do not handle any arguments", - .tokens = { /* token list, NULL terminated */ - (void *)&cmd_quit_quit, - NULL, - }, -}; - -struct cmd_show_result { - cmdline_fixed_string_t show; -}; - -static void cmd_show_parsed(__rte_unused void *parsed_result, - struct cmdline *cl, - __rte_unused void *data) +void +cmd_show_parsed(__rte_unused void *parsed_result, struct cmdline *cl, __rte_unused void *data) { uint16_t members[16] = {0}; uint8_t len = 16; @@ -772,31 +666,6 @@ static void cmd_show_parsed(__rte_unused void *parsed_result, rte_spinlock_unlock(&global_flag_stru_p->lock); } -cmdline_parse_token_string_t cmd_show_show = - TOKEN_STRING_INITIALIZER(struct cmd_show_result, show, "show"); - -cmdline_parse_inst_t cmd_show = { - .f = cmd_show_parsed, /* function to call */ - .data = NULL, /* 2nd arg of func */ - .help_str = "this command do not handle any arguments", - .tokens = { /* token list, NULL terminated */ - (void *)&cmd_show_show, - NULL, - }, -}; - -/****** CONTEXT (list of instruction) */ - -cmdline_parse_ctx_t main_ctx[] = { - (cmdline_parse_inst_t *)&cmd_start, - (cmdline_parse_inst_t *)&cmd_obj_send, - (cmdline_parse_inst_t *)&cmd_stop, - (cmdline_parse_inst_t *)&cmd_show, - (cmdline_parse_inst_t *)&cmd_quit, - (cmdline_parse_inst_t *)&cmd_help, - NULL, -}; - /* prompt function, called from main on MAIN lcore */ static void prompt(__rte_unused void *arg1) { diff --git a/examples/bond/main.h b/examples/bond/main.h deleted file mode 100644 index f91ed9c885..0000000000 --- a/examples/bond/main.h +++ /dev/null @@ -1,10 +0,0 @@ -/* SPDX-License-Identifier: BSD-3-Clause - * Copyright(c) 2010-2015 Intel Corporation - */ - -#ifndef _MAIN_H_ -#define _MAIN_H_ - -int main(int argc, char *argv[]); - -#endif /* ifndef _MAIN_H_ */ diff --git a/examples/bond/meson.build b/examples/bond/meson.build index ed22b7887d..bfbec04ecd 100644 --- a/examples/bond/meson.build +++ b/examples/bond/meson.build @@ -11,3 +11,11 @@ allow_experimental_apis = true sources = files( 'main.c', ) + +cmd_h = custom_target('commands_hdr', + output: 'commands.h', + input: files('commands.list'), + capture: true, + command: [cmdline_gen_cmd, '--context-name=main_ctx', '@INPUT@'] +) +sources += cmd_h