On 9/1/2017 5:01 PM, Kirill Rybalchenko wrote: > Update 'ddp get info' command to display protocols defined in a profile > > Signed-off-by: Kirill Rybalchenko <kirill.rybalche...@intel.com> > --- > app/test-pmd/cmdline.c | 98 > +++++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 97 insertions(+), 1 deletion(-) > > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c > index 0144191..1402c6d 100644 > --- a/app/test-pmd/cmdline.c > +++ b/app/test-pmd/cmdline.c > @@ -13423,12 +13423,18 @@ cmd_ddp_info_parsed( > uint32_t pkg_size; > int ret = -ENOTSUP; > #ifdef RTE_LIBRTE_I40E_PMD > - uint32_t i; > + uint32_t i, j, n; > uint8_t *buff; > uint32_t buff_size; > struct rte_pmd_i40e_profile_info info; > uint32_t dev_num; > struct rte_pmd_i40e_ddp_device_id *devs; > + uint32_t proto_num; > + struct rte_pmd_i40e_proto_info *proto; > + uint32_t pctype_num; > + struct rte_pmd_i40e_ptype_info *pctype; > + uint32_t ptype_num; > + struct rte_pmd_i40e_ptype_info *ptype; > #endif > > pkg = open_ddp_package_file(res->filepath, &pkg_size); > @@ -13502,6 +13508,96 @@ cmd_ddp_info_parsed( > free(devs); > } > } > + > + /* get information about protocols and packet types */ > + ret = rte_pmd_i40e_get_ddp_info(pkg, pkg_size, > + (uint8_t *)&proto_num, sizeof(proto_num), > + RTE_PMD_I40E_PKG_INFO_PROTOCOL_NUM); > + if (!ret && proto_num) { > + uint8_t proto_id; > + > + proto = (struct rte_pmd_i40e_proto_info *) > + malloc(proto_num * sizeof(struct > rte_pmd_i40e_proto_info)); > + if (proto) {
This function is hard to trace, can you please reduce indentation, either: - Extract protocol_list, pctype_list, ptype_list into their own functions, or - by using logic something like: if (!proto) goto xyz; > + ret = rte_pmd_i40e_get_ddp_info(pkg, pkg_size, > + (uint8_t *)proto, proto_num, > + RTE_PMD_I40E_PKG_INFO_PROTOCOL_LIST); > + if (!ret) { > + printf("List of used protocols:\n"); > + for (i = 0; i < proto_num; i++) > + printf(" %2u: %s\n", proto[i].proto_id, > + proto[i].name); > + printf("\n"); > + } > + ret = rte_pmd_i40e_get_ddp_info(pkg, pkg_size, > + (uint8_t *)&pctype_num, sizeof(pctype_num), > + RTE_PMD_I40E_PKG_INFO_PCTYPE_NUM); > + if (!ret && pctype_num) { > + pctype = (struct rte_pmd_i40e_ptype_info *) > + malloc(pctype_num * > + sizeof(struct > rte_pmd_i40e_ptype_info)); > + if (pctype) { > + ret = rte_pmd_i40e_get_ddp_info(pkg, > pkg_size, > + (uint8_t *)pctype, pctype_num, > + > RTE_PMD_I40E_PKG_INFO_PCTYPE_LIST); > + if (!ret) { > + printf("List of defined packet > classification types:\n"); > + for (i = 0; i < pctype_num; > i++) { > + printf(" %2u:", > pctype[i].ptype_id); > + for (j = 0; j < > RTE_PMD_I40E_PROTO_NUM; j++) { > + proto_id = > pctype[i].protocols[j]; > + if (proto_id != > RTE_PMD_I40E_PROTO_UNUSED) { > + for (n > = 0; n < proto_num; n++) { > + > if (proto[n].proto_id == proto_id) { > + > printf(" %s", proto[n].name); > + > break; > + > } > + } > + } > + } > + printf("\n"); > + } > + printf("\n"); > + } > + free(pctype); > + } > + } > + ret = rte_pmd_i40e_get_ddp_info(pkg, pkg_size, > + (uint8_t *)&ptype_num, sizeof(ptype_num), > + RTE_PMD_I40E_PKG_INFO_PTYPE_NUM); > + if (!ret && ptype_num) { > + ptype = (struct rte_pmd_i40e_ptype_info *) > + malloc(ptype_num * > + sizeof(struct > rte_pmd_i40e_ptype_info)); > + if (ptype) { > + ret = rte_pmd_i40e_get_ddp_info(pkg, > pkg_size, > + (uint8_t *)ptype, ptype_num, > + > RTE_PMD_I40E_PKG_INFO_PTYPE_LIST); > + if (!ret) { > + printf("List of defined packet > types:\n"); > + for (i = 0; i < ptype_num; i++) > { > + printf(" %2u:", > ptype[i].ptype_id); > + for (j = 0; j < > RTE_PMD_I40E_PROTO_NUM; j++) { > + proto_id = > ptype[i].protocols[j]; > + if (proto_id != > RTE_PMD_I40E_PROTO_UNUSED) { > + for (n > = 0; n < proto_num; n++) { > + > if (proto[n].proto_id == proto_id) { > + > printf(" %s", proto[n].name); > + > break; > + > } > + } > + } > + } > + printf("\n"); > + } > + } > + free(ptype); > + } > + printf("\n"); > + } > + free(proto); > + } > + } > ret = 0; > #endif > if (ret == -ENOTSUP) >