1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright 2015 6WIND S.A. 3 * Copyright 2015 Mellanox. 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 ret = mlx5_traffic_restart(dev); 39 if (ret) 40 DRV_LOG(ERR, "port %u cannot enable promiscuous mode: %s", 41 dev->data->port_id, strerror(rte_errno)); 42 } 43 44 /** 45 * DPDK callback to disable promiscuous mode. 46 * 47 * @param dev 48 * Pointer to Ethernet device structure. 49 */ 50 void 51 mlx5_promiscuous_disable(struct rte_eth_dev *dev) 52 { 53 int ret; 54 55 dev->data->promiscuous = 0; 56 ret = mlx5_traffic_restart(dev); 57 if (ret) 58 DRV_LOG(ERR, "port %u cannot disable promiscuous mode: %s", 59 dev->data->port_id, strerror(rte_errno)); 60 } 61 62 /** 63 * DPDK callback to enable allmulti mode. 64 * 65 * @param dev 66 * Pointer to Ethernet device structure. 67 */ 68 void 69 mlx5_allmulticast_enable(struct rte_eth_dev *dev) 70 { 71 int ret; 72 73 dev->data->all_multicast = 1; 74 ret = mlx5_traffic_restart(dev); 75 if (ret) 76 DRV_LOG(ERR, "port %u cannot enable allmulicast mode: %s", 77 dev->data->port_id, strerror(rte_errno)); 78 } 79 80 /** 81 * DPDK callback to disable allmulti mode. 82 * 83 * @param dev 84 * Pointer to Ethernet device structure. 85 */ 86 void 87 mlx5_allmulticast_disable(struct rte_eth_dev *dev) 88 { 89 int ret; 90 91 dev->data->all_multicast = 0; 92 ret = mlx5_traffic_restart(dev); 93 if (ret) 94 DRV_LOG(ERR, "port %u cannot disable allmulicast mode: %s", 95 dev->data->port_id, strerror(rte_errno)); 96 } 97