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:
parent
b319712f53
commit
856ceb331b
@ -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,
|
||||
|
@ -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
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user