Hi Pavin,

<snip>

> > Subject: [dpdk-dev] [PATCH v16 8/8] app/testpmd: add command to set
> > supported ptype mask
> >
> > From: Pavan Nikhilesh <pbhagavat...@marvell.com>
> >
> > Add command to set supported ptype mask.
> > Usage:
> >     set port <port_id> ptype_mask <ptype_mask>
> >
> > Disable ptype parsing by default.
> >
> > Signed-off-by: Pavan Nikhilesh <pbhagavat...@marvell.com>
> > ---
> >  app/test-pmd/cmdline.c                      | 83 +++++++++++++++++++++
> >  app/test-pmd/testpmd.c                      |  5 ++
> >  doc/guides/testpmd_app_ug/testpmd_funcs.rst |  7 ++
> >  3 files changed, 95 insertions(+)
> >
> > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index
> > 49c45a3f0..7af2c58c3 100644
> > --- a/app/test-pmd/cmdline.c
> > +++ b/app/test-pmd/cmdline.c
> 
> The help text should be updated to describe the new command at line 240 in
> cmdline.c
> 
> > @@ -668,6 +668,9 @@ static void cmd_help_long_parsed(void
> > *parsed_result,
> >                     "ptype mapping update (port_id) (hw_ptype)
> (sw_ptype)\n"
> >                     "    Update a ptype mapping item on a port\n\n"
> >
> > +                   "set port (port_id) ptype_mask (ptype_mask)\n"
> > +                   "    set packet types classification for a specific
> > port\n\n"
> > +
> >                     "set port (port_id) queue-region region_id (value) "
> >                     "queue_start_index (value) queue_num (value)\n"
> >                     "    Set a queue region on a port\n\n"
> > @@ -18916,6 +18919,85 @@ cmdline_parse_inst_t
> > cmd_show_port_supported_ptypes = {
> >     },
> >  };
> >
> > +/* Common result structure for set port ptypes */ struct
> > +cmd_set_port_ptypes_result {
> > +   cmdline_fixed_string_t set;
> > +   cmdline_fixed_string_t port;
> > +   portid_t port_id;
> > +   cmdline_fixed_string_t ptype_mask;
> > +   uint32_t mask;
> > +};
> > +
> > +/* Common CLI fields for set port ptypes */
> > +cmdline_parse_token_string_t cmd_set_port_ptypes_set =
> > +   TOKEN_STRING_INITIALIZER
> > +           (struct cmd_set_port_ptypes_result,
> > +            set, "set");
> > +cmdline_parse_token_string_t cmd_set_port_ptypes_port =
> > +   TOKEN_STRING_INITIALIZER
> > +           (struct cmd_set_port_ptypes_result,
> > +            port, "port");
> > +cmdline_parse_token_num_t cmd_set_port_ptypes_port_id =
> > +   TOKEN_NUM_INITIALIZER
> > +           (struct cmd_set_port_ptypes_result,
> > +            port_id, UINT16);
> > +cmdline_parse_token_string_t cmd_set_port_ptypes_mask_str =
> > +   TOKEN_STRING_INITIALIZER
> > +           (struct cmd_set_port_ptypes_result,
> > +            ptype_mask, "ptype_mask");
> > +cmdline_parse_token_num_t cmd_set_port_ptypes_mask_u32 =
> > +   TOKEN_NUM_INITIALIZER
> > +           (struct cmd_set_port_ptypes_result,
> > +            mask, UINT32);
> > +
> > +static void
> > +cmd_set_port_ptypes_parsed(
> > +   void *parsed_result,
> > +   __attribute__((unused)) struct cmdline *cl,
> > +   __attribute__((unused)) void *data)
> > +{
> > +   struct cmd_set_port_ptypes_result *res = parsed_result;
> > +#define PTYPE_NAMESIZE        256
> > +   char ptype_name[PTYPE_NAMESIZE];
> > +   uint16_t port_id = res->port_id;
> > +   uint32_t ptype_mask = res->mask;
> > +   int ret, i;
> > +
> > +   ret = rte_eth_dev_get_supported_ptypes(port_id, ptype_mask,
> > NULL, 0);

The last 2 parameters to the above function do not look correct, here is the 
function declaration:
int rte_eth_dev_get_supported_ptypes(uint16_t port_id, uint32_t ptype_mask,  
uint32_t *ptypes, int num);

ptypes should be a pointer to an array to hold the ptypes, and num should be 
the size of the array.

> > +   if (ret <= 0) {
> > +           printf("Port %d doesn't support any ptypes.\n", port_id);
> > +           return;
> > +   }
> > +
> > +   uint32_t ptypes[ret];

The above declaration can then be moved to the top of the function with the 
other declarations.

> > +
> > +   ret = rte_eth_dev_set_ptypes(port_id, ptype_mask, ptypes, ret);
> > +   if (ret <= 0) {
> > +           printf("Unable to set requested ptypes for Port %d\n",
> > port_id);
> > +           return;
> > +   }
> > +
> > +   printf("Successfully set following ptypes for Port %d\n", port_id);
> > +   for (i = 0; i < ret && ptypes[i] != RTE_PTYPE_UNKNOWN; i++) {
> > +           rte_get_ptype_name(ptypes[i], ptype_name,
> > sizeof(ptype_name));
> > +           printf("%s\n", ptype_name);
> > +   }
> > +}
> > +
> > +cmdline_parse_inst_t cmd_set_port_ptypes = {
> > +   .f = cmd_set_port_ptypes_parsed,
> > +   .data = NULL,
> > +   .help_str = "set port <port_id> ptype_mask <mask>",
> > +   .tokens = {
> > +           (void *)&cmd_set_port_ptypes_set,
> > +           (void *)&cmd_set_port_ptypes_port,
> > +           (void *)&cmd_set_port_ptypes_port_id,
> > +           (void *)&cmd_set_port_ptypes_mask_str,
> > +           (void *)&cmd_set_port_ptypes_mask_u32,
> > +           NULL,
> > +   },
> > +};
> > +
> >  /*
> >
> **********************************************************
> > ********************** */
> >
> >  /* list of instructions */
> > @@ -19155,6 +19237,7 @@ cmdline_parse_ctx_t main_ctx[] = {
> >     (cmdline_parse_inst_t *)&cmd_show_vf_stats,
> >     (cmdline_parse_inst_t *)&cmd_clear_vf_stats,
> >     (cmdline_parse_inst_t *)&cmd_show_port_supported_ptypes,
> > +   (cmdline_parse_inst_t *)&cmd_set_port_ptypes,
> >     (cmdline_parse_inst_t *)&cmd_ptype_mapping_get,
> >     (cmdline_parse_inst_t *)&cmd_ptype_mapping_replace,
> >     (cmdline_parse_inst_t *)&cmd_ptype_mapping_reset, diff --git
> > a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index
> > 5ba974162..812aebf35 100644
> > --- a/app/test-pmd/testpmd.c
> > +++ b/app/test-pmd/testpmd.c
> > @@ -2024,6 +2024,7 @@ start_port(portid_t pid)
> >     queueid_t qi;
> >     struct rte_port *port;
> >     struct rte_ether_addr mac_addr;
> > +   static uint8_t clr_ptypes = 1;
> >
> >     if (port_id_is_invalid(pid, ENABLED_WARN))
> >             return 0;
> > @@ -2153,6 +2154,10 @@ start_port(portid_t pid)
> >                     }
> >             }
> >             configure_rxtx_dump_callbacks(verbose_level);
> > +           if (clr_ptypes) {
> > +                   clr_ptypes = 0;
> > +                   rte_eth_dev_set_ptypes(pi,
> > RTE_PTYPE_UNKNOWN, NULL, 0);
> > +           }
> >             /* start port */
> >             if (rte_eth_dev_start(pi) < 0) {
> >                     printf("Fail to start port %d\n", pi); diff --git
> > a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > index c68a742eb..f78ac9444 100644
> > --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > @@ -472,6 +472,13 @@ Show ptypes supported for a specific port::
> >
> >     testpmd> show port (port_id) ptypes
> >
> > +set port supported ptypes
> > +~~~~~~~~~~~~~~~~~~~~~~~~~
> > +
> > +set packet types classification for a specific port::
> > +
> > +   testpmd> set port (port_id) ptypes_mask (mask)
> > +
> >  show device info
> >  ~~~~~~~~~~~~~~~~
> >
> > --
> > 2.17.1
 Regards,
 
 Bernard.

Reply via email to