18fd92a66SOlivier Matz /* SPDX-License-Identifier: BSD-3-Clause 21bdbe1afSAdrien Mazarguil * Copyright 2015 6WIND S.A. 31bdbe1afSAdrien Mazarguil * Copyright 2015 Mellanox. 41bdbe1afSAdrien Mazarguil */ 51bdbe1afSAdrien Mazarguil 61bdbe1afSAdrien Mazarguil #include <stddef.h> 71bdbe1afSAdrien Mazarguil #include <errno.h> 81bdbe1afSAdrien Mazarguil #include <string.h> 91bdbe1afSAdrien Mazarguil 101bdbe1afSAdrien Mazarguil /* Verbs header. */ 111bdbe1afSAdrien Mazarguil /* ISO C doesn't support unnamed structs/unions, disabling -pedantic. */ 121bdbe1afSAdrien Mazarguil #ifdef PEDANTIC 13fc5b160fSBruce Richardson #pragma GCC diagnostic ignored "-Wpedantic" 141bdbe1afSAdrien Mazarguil #endif 151bdbe1afSAdrien Mazarguil #include <infiniband/verbs.h> 161bdbe1afSAdrien Mazarguil #ifdef PEDANTIC 17fc5b160fSBruce Richardson #pragma GCC diagnostic error "-Wpedantic" 181bdbe1afSAdrien Mazarguil #endif 191bdbe1afSAdrien Mazarguil 20ffc905f3SFerruh Yigit #include <rte_ethdev_driver.h> 211bdbe1afSAdrien Mazarguil 221bdbe1afSAdrien Mazarguil #include "mlx5.h" 231bdbe1afSAdrien Mazarguil #include "mlx5_rxtx.h" 241bdbe1afSAdrien Mazarguil #include "mlx5_utils.h" 251bdbe1afSAdrien Mazarguil 260d218674SAdrien Mazarguil /** 271bdbe1afSAdrien Mazarguil * DPDK callback to enable promiscuous mode. 281bdbe1afSAdrien Mazarguil * 291bdbe1afSAdrien Mazarguil * @param dev 301bdbe1afSAdrien Mazarguil * Pointer to Ethernet device structure. 311bdbe1afSAdrien Mazarguil */ 321bdbe1afSAdrien Mazarguil void 331bdbe1afSAdrien Mazarguil mlx5_promiscuous_enable(struct rte_eth_dev *dev) 341bdbe1afSAdrien Mazarguil { 35*a6d83b6aSNélio Laranjeiro int ret; 36*a6d83b6aSNélio Laranjeiro 371b37f5d8SNélio Laranjeiro dev->data->promiscuous = 1; 38*a6d83b6aSNélio Laranjeiro ret = mlx5_traffic_restart(dev); 39*a6d83b6aSNélio Laranjeiro if (ret) 40*a6d83b6aSNélio Laranjeiro ERROR("%p cannot enable promiscuous mode: %s", (void *)dev, 41*a6d83b6aSNélio Laranjeiro strerror(rte_errno)); 421bdbe1afSAdrien Mazarguil } 431bdbe1afSAdrien Mazarguil 441bdbe1afSAdrien Mazarguil /** 451bdbe1afSAdrien Mazarguil * DPDK callback to disable promiscuous mode. 461bdbe1afSAdrien Mazarguil * 471bdbe1afSAdrien Mazarguil * @param dev 481bdbe1afSAdrien Mazarguil * Pointer to Ethernet device structure. 491bdbe1afSAdrien Mazarguil */ 501bdbe1afSAdrien Mazarguil void 511bdbe1afSAdrien Mazarguil mlx5_promiscuous_disable(struct rte_eth_dev *dev) 521bdbe1afSAdrien Mazarguil { 53*a6d83b6aSNélio Laranjeiro int ret; 54*a6d83b6aSNélio Laranjeiro 551b37f5d8SNélio Laranjeiro dev->data->promiscuous = 0; 56*a6d83b6aSNélio Laranjeiro ret = mlx5_traffic_restart(dev); 57*a6d83b6aSNélio Laranjeiro if (ret) 58*a6d83b6aSNélio Laranjeiro ERROR("%p cannot disable promiscuous mode: %s", (void *)dev, 59*a6d83b6aSNélio Laranjeiro strerror(rte_errno)); 601bdbe1afSAdrien Mazarguil } 611bdbe1afSAdrien Mazarguil 621bdbe1afSAdrien Mazarguil /** 631bdbe1afSAdrien Mazarguil * DPDK callback to enable allmulti mode. 641bdbe1afSAdrien Mazarguil * 651bdbe1afSAdrien Mazarguil * @param dev 661bdbe1afSAdrien Mazarguil * Pointer to Ethernet device structure. 671bdbe1afSAdrien Mazarguil */ 681bdbe1afSAdrien Mazarguil void 691bdbe1afSAdrien Mazarguil mlx5_allmulticast_enable(struct rte_eth_dev *dev) 701bdbe1afSAdrien Mazarguil { 71*a6d83b6aSNélio Laranjeiro int ret; 72*a6d83b6aSNélio Laranjeiro 736a6b6828SNélio Laranjeiro dev->data->all_multicast = 1; 74*a6d83b6aSNélio Laranjeiro ret = mlx5_traffic_restart(dev); 75*a6d83b6aSNélio Laranjeiro if (ret) 76*a6d83b6aSNélio Laranjeiro ERROR("%p cannot enable allmulicast mode: %s", (void *)dev, 77*a6d83b6aSNélio Laranjeiro strerror(rte_errno)); 781bdbe1afSAdrien Mazarguil } 791bdbe1afSAdrien Mazarguil 801bdbe1afSAdrien Mazarguil /** 811bdbe1afSAdrien Mazarguil * DPDK callback to disable allmulti mode. 821bdbe1afSAdrien Mazarguil * 831bdbe1afSAdrien Mazarguil * @param dev 841bdbe1afSAdrien Mazarguil * Pointer to Ethernet device structure. 851bdbe1afSAdrien Mazarguil */ 861bdbe1afSAdrien Mazarguil void 871bdbe1afSAdrien Mazarguil mlx5_allmulticast_disable(struct rte_eth_dev *dev) 881bdbe1afSAdrien Mazarguil { 89*a6d83b6aSNélio Laranjeiro int ret; 90*a6d83b6aSNélio Laranjeiro 916a6b6828SNélio Laranjeiro dev->data->all_multicast = 0; 92*a6d83b6aSNélio Laranjeiro ret = mlx5_traffic_restart(dev); 93*a6d83b6aSNélio Laranjeiro if (ret) 94*a6d83b6aSNélio Laranjeiro ERROR("%p cannot disable allmulicast mode: %s", (void *)dev, 95*a6d83b6aSNélio Laranjeiro strerror(rte_errno)); 961bdbe1afSAdrien Mazarguil } 97