app/testpmd: enable DDP remove profile feature

New command 'ddp del (port) (profile_path)' removes previously
loaded profile and deletes it from the list of the loaded profiles.

Signed-off-by: Andrey Chilikin <andrey.chilikin@intel.com>
Acked-by: Beilei Xing <beilei.xing@intel.com>
This commit is contained in:
Andrey Chilikin 2017-06-28 09:15:27 +01:00 committed by Ferruh Yigit
parent b319712f53
commit 856ceb331b
2 changed files with 81 additions and 0 deletions

View File

@ -606,6 +606,9 @@ static void cmd_help_long_parsed(void *parsed_result,
"ddp add (port_id) (profile_path[,output_path])\n"
" Load a profile package on a port\n\n"
"ddp del (port_id) (profile_path)\n"
" Delete a profile package from a port\n\n"
"ptype mapping get (port_id) (valid_only)\n"
" Get ptype mapping on a port\n\n"
@ -13014,6 +13017,76 @@ cmdline_parse_inst_t cmd_ddp_add = {
},
};
/* Delete dynamic device personalization*/
struct cmd_ddp_del_result {
cmdline_fixed_string_t ddp;
cmdline_fixed_string_t del;
uint8_t port_id;
char filepath[];
};
cmdline_parse_token_string_t cmd_ddp_del_ddp =
TOKEN_STRING_INITIALIZER(struct cmd_ddp_del_result, ddp, "ddp");
cmdline_parse_token_string_t cmd_ddp_del_del =
TOKEN_STRING_INITIALIZER(struct cmd_ddp_del_result, del, "del");
cmdline_parse_token_num_t cmd_ddp_del_port_id =
TOKEN_NUM_INITIALIZER(struct cmd_ddp_del_result, port_id, UINT8);
cmdline_parse_token_string_t cmd_ddp_del_filepath =
TOKEN_STRING_INITIALIZER(struct cmd_ddp_del_result, filepath, NULL);
static void
cmd_ddp_del_parsed(
void *parsed_result,
__attribute__((unused)) struct cmdline *cl,
__attribute__((unused)) void *data)
{
struct cmd_ddp_del_result *res = parsed_result;
uint8_t *buff;
uint32_t size;
int ret = -ENOTSUP;
if (res->port_id > nb_ports) {
printf("Invalid port, range is [0, %d]\n", nb_ports - 1);
return;
}
if (!all_ports_stopped()) {
printf("Please stop all ports first\n");
return;
}
buff = open_ddp_package_file(res->filepath, &size);
if (!buff)
return;
#ifdef RTE_LIBRTE_I40E_PMD
if (ret == -ENOTSUP)
ret = rte_pmd_i40e_process_ddp_package(res->port_id,
buff, size,
RTE_PMD_I40E_PKG_OP_WR_DEL);
#endif
if (ret == -EACCES)
printf("Profile does not exist.\n");
else if (ret < 0)
printf("Failed to delete profile.\n");
close_ddp_package_file(buff);
}
cmdline_parse_inst_t cmd_ddp_del = {
.f = cmd_ddp_del_parsed,
.data = NULL,
.help_str = "ddp del <port_id> <profile_path>",
.tokens = {
(void *)&cmd_ddp_del_ddp,
(void *)&cmd_ddp_del_del,
(void *)&cmd_ddp_del_port_id,
(void *)&cmd_ddp_del_filepath,
NULL,
},
};
/* Get dynamic device personalization profile info */
struct cmd_ddp_info_result {
cmdline_fixed_string_t ddp;
@ -13993,6 +14066,7 @@ cmdline_parse_ctx_t main_ctx[] = {
(cmdline_parse_inst_t *)&cmd_strict_link_prio,
(cmdline_parse_inst_t *)&cmd_tc_min_bw,
(cmdline_parse_inst_t *)&cmd_ddp_add,
(cmdline_parse_inst_t *)&cmd_ddp_del,
(cmdline_parse_inst_t *)&cmd_ddp_get_list,
(cmdline_parse_inst_t *)&cmd_ddp_get_info,
(cmdline_parse_inst_t *)&cmd_show_vf_stats,

View File

@ -1232,6 +1232,13 @@ Load a dynamic device personalization (DDP) package::
testpmd> ddp add (port_id) (package_path[,output_path])
ddp del
~~~~~~~
Delete a dynamic device personalization package::
testpmd> ddp del (port_id) (package_path)
ptype mapping
~~~~~~~~~~~~~