[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