[PATCH v2] examples/ethtool: update rxmode to increase functionality

Stephen Hemminger stephen at networkplumber.org
Tue Jul 4 00:19:44 CEST 2023


On Thu, 11 Aug 2022 17:58:40 +0500
Muhammad Jawad Hussain <jawad.hussain at emumba.com> wrote:

> @@ -142,7 +183,6 @@ pcmd_quit_callback(__rte_unused void *ptr_params,
>  	cmdline_quit(ctx);
>  }
>  
> -
>  static void
>  pcmd_drvinfo_callback(__rte_unused void *ptr_params,
>  	__rte_unused struct cmdline *ctx,

Please don't do unrelated whitespace changes.

>  
> -
>  static void
> -pcmd_rxmode_callback(void *ptr_params,
> -	__rte_unused struct cmdline *ctx,
> -	__rte_unused void *ptr_data)
> +pcmd_rxmode_callback(void *parsed_result,
> +		       __rte_unused struct cmdline *cl,
> +		       __rte_unused void *data)
>  {
> -	struct pcmd_intstr_params *params = ptr_params;
> -	int stat;
> +	int ret = -ENOTSUP;
> +	uint16_t vf_rxmode = 0;
> +	struct cmd_set_vf_rxmode *res = parsed_result;
> +
> +	int is_on = (strcmp(res->on, "on") == 0) ? 1 : 0;

Simpler as:
	bool is_on = !strcmp(res->on, "on");

Also what if use gives bogus value for on/off?

> +	if (!strcmp(res->what, "rxmode")) {
> +		if (!strcmp(res->mode, "AUPE"))
> +			vf_rxmode |= RTE_ETH_VMDQ_ACCEPT_UNTAG;
> +		else if (!strcmp(res->mode, "ROPE"))
> +			vf_rxmode |= RTE_ETH_VMDQ_ACCEPT_HASH_UC;
> +		else if (!strcmp(res->mode, "BAM"))
> +			vf_rxmode |= RTE_ETH_VMDQ_ACCEPT_BROADCAST;
> +		else if (!strncmp(res->mode, "MPE", 3))
> +			vf_rxmode |= RTE_ETH_VMDQ_ACCEPT_MULTICAST;
> +	}

You need to handle the "none of the above" case.

>  
> -	if (!rte_eth_dev_is_valid_port(params->port)) {
> -		printf("Error: Invalid port number %i\n", params->port);
> -		return;
> +	RTE_SET_USED(is_on);
> +	RTE_SET_USED(vf_rxmode);
> +
> +#ifdef RTE_NET_IXGBE
> +	if (ret == -ENOTSUP) {
> +		ret = rte_pmd_ixgbe_set_vf_rxmode(res->port_id, res->vf_id,
> +						  vf_rxmode, (uint8_t)is_on);
> +		if (ret == -ENOTSUP)
> +			printf("ixgbe not supported\n");
>  	}
> -	stat = rte_ethtool_net_set_rx_mode(params->port);
> -	if (stat == 0)
> -		return;
> -	else if (stat == -ENOTSUP)
> -		printf("Port %i: Operation not supported\n", params->port);
> -	else
> -		printf("Port %i: Error setting rx mode\n", params->port);
> +#endif
> +#ifdef RTE_NET_BNXT
> +	if (ret == -ENOTSUP) {
> +		ret = rte_pmd_bnxt_set_vf_rxmode(res->port_id, res->vf_id,
> +						 vf_rxmode, (uint8_t)is_on);
> +		if (ret == -ENOTSUP)
> +			printf("bnxt not supported\n");
> +	}
> +#endif


This is a mess. And it shows missing ethdev functionality.
Calling a driver with some unrelated device may break it.

Not sure if anyone really cares about ethtool?
But if they do please fixup and resubmit


More information about the dev mailing list