From 8d21a6228d73b1a5380e1bf441535d4fc04852e1 Mon Sep 17 00:00:00 2001 From: Andrey Chilikin Date: Tue, 27 Jun 2017 13:06:48 +0100 Subject: [PATCH] app/testpmd: update DDP add command parameters This patch adds optional output file path to 'ddp add' command: 'ddp add (port) (profile_path[,output_path])' Signed-off-by: Andrey Chilikin Reviewed-by: Ferruh Yigit --- app/test-pmd/cmdline.c | 29 ++++++++++++++++----- app/test-pmd/config.c | 21 +++++++++++++++ app/test-pmd/testpmd.h | 1 + doc/guides/testpmd_app_ug/testpmd_funcs.rst | 2 +- 4 files changed, 45 insertions(+), 8 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 89ef83a97a..89b06b878d 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -603,7 +603,7 @@ static void cmd_help_long_parsed(void *parsed_result, "E-tag set filter del e-tag-id (value) port (port_id)\n" " Delete an E-tag forwarding filter on a port\n\n" - "ddp add (port_id) (profile_path)\n" + "ddp add (port_id) (profile_path[,output_path])\n" " Load a profile package on a port\n\n" "ptype mapping get (port_id) (valid_only)\n" @@ -12955,6 +12955,9 @@ cmd_ddp_add_parsed( struct cmd_ddp_add_result *res = parsed_result; uint8_t *buff; uint32_t size; + char *filepath; + char *file_fld[2]; + int file_num; int ret = -ENOTSUP; if (res->port_id > nb_ports) { @@ -12967,9 +12970,18 @@ cmd_ddp_add_parsed( return; } - buff = open_ddp_package_file(res->filepath, &size); - if (!buff) + filepath = strdup(res->filepath); + if (filepath == NULL) { + printf("Failed to allocate memory\n"); return; + } + file_num = rte_strsplit(filepath, strlen(filepath), file_fld, 2, ','); + + buff = open_ddp_package_file(file_fld[0], &size); + if (!buff) { + free((void *)filepath); + return; + } #ifdef RTE_LIBRTE_I40E_PMD if (ret == -ENOTSUP) @@ -12978,18 +12990,21 @@ cmd_ddp_add_parsed( RTE_PMD_I40E_PKG_OP_WR_ADD); #endif - if (ret < 0) - printf("Failed to load profile.\n"); - else if (ret > 0) + if (ret == -EEXIST) printf("Profile has already existed.\n"); + else if (ret < 0) + printf("Failed to load profile.\n"); + else if (file_num == 2) + save_ddp_package_file(file_fld[1], buff, size); close_ddp_package_file(buff); + free((void *)filepath); } cmdline_parse_inst_t cmd_ddp_add = { .f = cmd_ddp_add_parsed, .data = NULL, - .help_str = "ddp add ", + .help_str = "ddp add ", .tokens = { (void *)&cmd_ddp_add_ddp, (void *)&cmd_ddp_add_add, diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index aa3550571d..593677e568 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -3309,6 +3309,27 @@ open_ddp_package_file(const char *file_path, uint32_t *size) return buf; } +int +save_ddp_package_file(const char *file_path, uint8_t *buf, uint32_t size) +{ + FILE *fh = fopen(file_path, "wb"); + + if (fh == NULL) { + printf("%s: Failed to open %s\n", __func__, file_path); + return -1; + } + + if (fwrite(buf, 1, size, fh) != size) { + fclose(fh); + printf("%s: File write operation failed\n", __func__); + return -1; + } + + fclose(fh); + + return 0; +} + int close_ddp_package_file(uint8_t *buf) { diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index c73196f287..368a129fc2 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -635,6 +635,7 @@ void mcast_addr_remove(uint8_t port_id, struct ether_addr *mc_addr); void port_dcb_info_display(uint8_t port_id); uint8_t *open_ddp_package_file(const char *file_path, uint32_t *size); +int save_ddp_package_file(const char *file_path, uint8_t *buf, uint32_t size); int close_ddp_package_file(uint8_t *buf); enum print_warning { diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 093b85a322..871e76e3d7 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -1230,7 +1230,7 @@ ddp add Load a dynamic device personalization (DDP) package:: - testpmd> ddp add (port_id) (package_path) + testpmd> ddp add (port_id) (package_path[,output_path]) ptype mapping ~~~~~~~~~~~~~ -- 2.20.1