From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id F264D4318A; Tue, 17 Oct 2023 14:14:09 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B1DBE42DA6; Tue, 17 Oct 2023 14:13:39 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id A310142D91 for ; Tue, 17 Oct 2023 14:13:37 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1697544817; x=1729080817; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=5icIuUY+8/2afBY+54eoAIutWNrbC2j868jtw+6qSBE=; b=aUUgcBRSW67yfxSXm2iQmedjydYSbuTeLfIKO6vKe3HYJ+9KoRMstkjS RCY4yXa8PQjANSY9LlcOtTtJx2QRn9cciqErz+HbyQQBdolWYMwyIESWn Yo6fv4sCd3eHGNmZAumnywmAT5/EqJOHR0wEKNM641qWakNlEFV9Fj218 XKCw39Tu2ESPEVFNtRGy7gBL7uYWIE2Hj4ZpjZY3XwUI6R4JPPtYrKKt5 uHp8aK5RK+w6DgM0IN25jdKLON9viPNbNauF27eklY5ZA9hhlkD60fX3C cgcTIW9B4YHfv7fu5TaiUUv09pePJawtadlFu+FlTrl5x9kE9DtIuKBs+ w==; X-IronPort-AV: E=McAfee;i="6600,9927,10865"; a="449984820" X-IronPort-AV: E=Sophos;i="6.03,232,1694761200"; d="scan'208";a="449984820" Received: from fmviesa001.fm.intel.com ([10.60.135.141]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Oct 2023 05:13:37 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.03,232,1694761200"; d="scan'208";a="4068944" Received: from unknown (HELO silpixa00401385.ir.intel.com) ([10.237.214.41]) by fmviesa001.fm.intel.com with ESMTP; 17 Oct 2023 05:13:40 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: david.marchand@redhat.com, rjarry@redhat.com, Bruce Richardson , Chas Williams , "Min Hu (Connor)" , Anatoly Burakov Subject: [PATCH v5 6/9] examples/bond: auto-generate cmdline boilerplate Date: Tue, 17 Oct 2023 13:13:15 +0100 Message-Id: <20231017121318.146007-7-bruce.richardson@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231017121318.146007-1-bruce.richardson@intel.com> References: <20230802170052.955323-1-bruce.richardson@intel.com> <20231017121318.146007-1-bruce.richardson@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 + .../multi_process/simple_mp/mp_commands.list | 3 + 6 files changed, 40 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 diff --git a/examples/multi_process/simple_mp/mp_commands.list b/examples/multi_process/simple_mp/mp_commands.list index c8890cb071..afce5eb1c1 100644 --- a/examples/multi_process/simple_mp/mp_commands.list +++ b/examples/multi_process/simple_mp/mp_commands.list @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2023 Intel Corporation +# send message # send a string to another process help # show help quit # close the application -- 2.39.2