[dpdk-dev] [PATCH v2 1/1] net/octeontx: fix user supplied index in MAC address add

Harman Kalra hkalra at marvell.com
Wed Jan 29 13:26:11 CET 2020


On Wed, Jan 29, 2020 at 12:12:42PM +0530, Sunil Kumar Kori wrote:
> Earlier after a successful mac_addr_add operation, index was returned
> by underlying layer which was unused but same as provided by DPDK API.
> 
> So API is enhanced to use application provided index location to add
> MAC address entry.
> 
> Fixes: e4373bf1b3f5 ("net/octeontx: add unicast MAC filter")
> 
> Signed-off-by: Sunil Kumar Kori <skori at marvell.com>

Acked-by: Harman Kalra <hkalra at marvell.com>

> ---
> v2:
>  - Disable promiscuous mode flag when default MAC address is set.
> 
>  drivers/net/octeontx/base/octeontx_bgx.c | 13 ++++++-------
>  drivers/net/octeontx/base/octeontx_bgx.h |  7 ++++++-
>  drivers/net/octeontx/octeontx_ethdev.c   | 21 +++++++++++++++++----
>  3 files changed, 29 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/net/octeontx/base/octeontx_bgx.c b/drivers/net/octeontx/base/octeontx_bgx.c
> index e70255b11..a2d615fb2 100644
> --- a/drivers/net/octeontx/base/octeontx_bgx.c
> +++ b/drivers/net/octeontx/base/octeontx_bgx.c
> @@ -245,22 +245,21 @@ octeontx_bgx_port_mac_set(int port, uint8_t *mac_addr)
>  }
>  
>  int
> -octeontx_bgx_port_mac_add(int port, uint8_t *mac_addr)
> +octeontx_bgx_port_mac_add(int port, uint8_t *mac_addr, int index)
>  {
> +	struct octeontx_mbox_bgx_port_mac_filter filter;
>  	struct octeontx_mbox_hdr hdr;
> -	int resp = 0;
>  	int len = 6;
> -	int res = 0;
>  
>  	hdr.coproc = OCTEONTX_BGX_COPROC;
>  	hdr.msg = MBOX_BGX_PORT_ADD_MACADDR;
>  	hdr.vfid = port;
>  
> -	res = octeontx_mbox_send(&hdr, mac_addr, len, &resp, sizeof(int));
> -	if (res < 0)
> -		return -EACCES;
> +	memcpy(filter.mac_addr, mac_addr, len);
> +	filter.index = index;
> +	len = sizeof(struct octeontx_mbox_bgx_port_mac_filter);
>  
> -	return res;
> +	return octeontx_mbox_send(&hdr, &filter, len, NULL, 0);
>  }
>  
>  int
> diff --git a/drivers/net/octeontx/base/octeontx_bgx.h b/drivers/net/octeontx/base/octeontx_bgx.h
> index caaff179c..11c25db67 100644
> --- a/drivers/net/octeontx/base/octeontx_bgx.h
> +++ b/drivers/net/octeontx/base/octeontx_bgx.h
> @@ -112,6 +112,11 @@ typedef struct octeontx_mbox_bgx_port_stats {
>  	uint64_t rx_jabber_errors;
>  } octeontx_mbox_bgx_port_stats_t;
>  
> +struct octeontx_mbox_bgx_port_mac_filter {
> +	uint8_t mac_addr[6];
> +	int index;
> +};
> +
>  int octeontx_bgx_port_open(int port, octeontx_mbox_bgx_port_conf_t *conf);
>  int octeontx_bgx_port_close(int port);
>  int octeontx_bgx_port_start(int port);
> @@ -123,7 +128,7 @@ int octeontx_bgx_port_stats_clr(int port);
>  int octeontx_bgx_port_link_status(int port);
>  int octeontx_bgx_port_promisc_set(int port, int en);
>  int octeontx_bgx_port_mac_set(int port, uint8_t *mac_addr);
> -int octeontx_bgx_port_mac_add(int port, uint8_t *mac_addr);
> +int octeontx_bgx_port_mac_add(int port, uint8_t *mac_addr, int index);
>  int octeontx_bgx_port_mac_del(int port, uint32_t index);
>  int octeontx_bgx_port_mac_entries_get(int port);
>  
> diff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c
> index e23162d8a..f965b946e 100644
> --- a/drivers/net/octeontx/octeontx_ethdev.c
> +++ b/drivers/net/octeontx/octeontx_ethdev.c
> @@ -573,13 +573,14 @@ octeontx_dev_mac_addr_del(struct rte_eth_dev *dev, uint32_t index)
>  static int
>  octeontx_dev_mac_addr_add(struct rte_eth_dev *dev,
>  			  struct rte_ether_addr *mac_addr,
> -			  __rte_unused uint32_t index,
> +			  uint32_t index,
>  			  __rte_unused uint32_t vmdq)
>  {
>  	struct octeontx_nic *nic = octeontx_pmd_priv(dev);
>  	int ret;
>  
> -	ret = octeontx_bgx_port_mac_add(nic->port_id, mac_addr->addr_bytes);
> +	ret = octeontx_bgx_port_mac_add(nic->port_id, mac_addr->addr_bytes,
> +					index);
>  	if (ret < 0) {
>  		octeontx_log_err("failed to add MAC address filter on port %d",
>  				 nic->port_id);
> @@ -594,12 +595,21 @@ octeontx_dev_default_mac_addr_set(struct rte_eth_dev *dev,
>  					struct rte_ether_addr *addr)
>  {
>  	struct octeontx_nic *nic = octeontx_pmd_priv(dev);
> +	uint8_t prom_mode = dev->data->promiscuous;
>  	int ret;
>  
> +	dev->data->promiscuous = 0;
>  	ret = octeontx_bgx_port_mac_set(nic->port_id, addr->addr_bytes);
> -	if (ret != 0)
> +	if (ret == 0) {
> +		/* Update same mac address to BGX CAM table */
> +		ret = octeontx_bgx_port_mac_add(nic->port_id, addr->addr_bytes,
> +						0);
> +	}
> +	if (ret < 0) {
> +		dev->data->promiscuous = prom_mode;
>  		octeontx_log_err("failed to set MAC address on port %d",
> -				nic->port_id);
> +				 nic->port_id);
> +	}
>  
>  	return ret;
>  }
> @@ -1149,6 +1159,9 @@ octeontx_create(struct rte_vdev_device *dev, int port, uint8_t evdev,
>  	/* Update port_id mac to eth_dev */
>  	memcpy(data->mac_addrs, nic->mac_addr, RTE_ETHER_ADDR_LEN);
>  
> +	/* Update same mac address to BGX CAM table at index 0 */
> +	octeontx_bgx_port_mac_add(nic->port_id, nic->mac_addr, 0);
> +
>  	PMD_INIT_LOG(DEBUG, "ethdev info: ");
>  	PMD_INIT_LOG(DEBUG, "port %d, port_ena %d ochan %d num_ochan %d tx_q %d",
>  				nic->port_id, nic->port_ena,
> -- 
> 2.17.1
> 


More information about the dev mailing list