1 /*- 2 * BSD LICENSE 3 * 4 * Copyright 2015 6WIND S.A. 5 * Copyright 2015 Mellanox. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * * Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * * Neither the name of 6WIND S.A. nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 #include <stddef.h> 35 #include <errno.h> 36 #include <string.h> 37 38 /* Verbs header. */ 39 /* ISO C doesn't support unnamed structs/unions, disabling -pedantic. */ 40 #ifdef PEDANTIC 41 #pragma GCC diagnostic ignored "-Wpedantic" 42 #endif 43 #include <infiniband/verbs.h> 44 #ifdef PEDANTIC 45 #pragma GCC diagnostic error "-Wpedantic" 46 #endif 47 48 #include <rte_ethdev.h> 49 50 #include "mlx5.h" 51 #include "mlx5_rxtx.h" 52 #include "mlx5_utils.h" 53 54 /** 55 * DPDK callback to enable promiscuous mode. 56 * 57 * @param dev 58 * Pointer to Ethernet device structure. 59 */ 60 void 61 mlx5_promiscuous_enable(struct rte_eth_dev *dev) 62 { 63 if (mlx5_is_secondary()) 64 return; 65 dev->data->promiscuous = 1; 66 mlx5_traffic_restart(dev); 67 } 68 69 /** 70 * DPDK callback to disable promiscuous mode. 71 * 72 * @param dev 73 * Pointer to Ethernet device structure. 74 */ 75 void 76 mlx5_promiscuous_disable(struct rte_eth_dev *dev) 77 { 78 if (mlx5_is_secondary()) 79 return; 80 dev->data->promiscuous = 0; 81 mlx5_traffic_restart(dev); 82 } 83 84 /** 85 * DPDK callback to enable allmulti mode. 86 * 87 * @param dev 88 * Pointer to Ethernet device structure. 89 */ 90 void 91 mlx5_allmulticast_enable(struct rte_eth_dev *dev) 92 { 93 if (mlx5_is_secondary()) 94 return; 95 dev->data->all_multicast = 1; 96 mlx5_traffic_restart(dev); 97 } 98 99 /** 100 * DPDK callback to disable allmulti mode. 101 * 102 * @param dev 103 * Pointer to Ethernet device structure. 104 */ 105 void 106 mlx5_allmulticast_disable(struct rte_eth_dev *dev) 107 { 108 if (mlx5_is_secondary()) 109 return; 110 dev->data->all_multicast = 0; 111 mlx5_traffic_restart(dev); 112 } 113