1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright 2015 6WIND S.A. 3 * Copyright 2015 Mellanox Technologies, Ltd 4 */ 5 6 #include <stddef.h> 7 #include <errno.h> 8 #include <string.h> 9 10 /* Verbs header. */ 11 /* ISO C doesn't support unnamed structs/unions, disabling -pedantic. */ 12 #ifdef PEDANTIC 13 #pragma GCC diagnostic ignored "-Wpedantic" 14 #endif 15 #include <infiniband/verbs.h> 16 #ifdef PEDANTIC 17 #pragma GCC diagnostic error "-Wpedantic" 18 #endif 19 20 #include <rte_ethdev_driver.h> 21 22 #include "mlx5.h" 23 #include "mlx5_rxtx.h" 24 #include "mlx5_utils.h" 25 26 /** 27 * DPDK callback to enable promiscuous mode. 28 * 29 * @param dev 30 * Pointer to Ethernet device structure. 31 */ 32 void 33 mlx5_promiscuous_enable(struct rte_eth_dev *dev) 34 { 35 int ret; 36 37 dev->data->promiscuous = 1; 38 if (((struct priv *)dev->data->dev_private)->config.vf) 39 mlx5_nl_promisc(dev, 1); 40 ret = mlx5_traffic_restart(dev); 41 if (ret) 42 DRV_LOG(ERR, "port %u cannot enable promiscuous mode: %s", 43 dev->data->port_id, strerror(rte_errno)); 44 } 45 46 /** 47 * DPDK callback to disable promiscuous mode. 48 * 49 * @param dev 50 * Pointer to Ethernet device structure. 51 */ 52 void 53 mlx5_promiscuous_disable(struct rte_eth_dev *dev) 54 { 55 int ret; 56 57 dev->data->promiscuous = 0; 58 if (((struct priv *)dev->data->dev_private)->config.vf) 59 mlx5_nl_promisc(dev, 0); 60 ret = mlx5_traffic_restart(dev); 61 if (ret) 62 DRV_LOG(ERR, "port %u cannot disable promiscuous mode: %s", 63 dev->data->port_id, strerror(rte_errno)); 64 } 65 66 /** 67 * DPDK callback to enable allmulti mode. 68 * 69 * @param dev 70 * Pointer to Ethernet device structure. 71 */ 72 void 73 mlx5_allmulticast_enable(struct rte_eth_dev *dev) 74 { 75 int ret; 76 77 dev->data->all_multicast = 1; 78 if (((struct priv *)dev->data->dev_private)->config.vf) 79 mlx5_nl_allmulti(dev, 1); 80 ret = mlx5_traffic_restart(dev); 81 if (ret) 82 DRV_LOG(ERR, "port %u cannot enable allmulicast mode: %s", 83 dev->data->port_id, strerror(rte_errno)); 84 } 85 86 /** 87 * DPDK callback to disable allmulti mode. 88 * 89 * @param dev 90 * Pointer to Ethernet device structure. 91 */ 92 void 93 mlx5_allmulticast_disable(struct rte_eth_dev *dev) 94 { 95 int ret; 96 97 dev->data->all_multicast = 0; 98 if (((struct priv *)dev->data->dev_private)->config.vf) 99 mlx5_nl_allmulti(dev, 0); 100 ret = mlx5_traffic_restart(dev); 101 if (ret) 102 DRV_LOG(ERR, "port %u cannot disable allmulicast mode: %s", 103 dev->data->port_id, strerror(rte_errno)); 104 } 105