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 { 35a6d83b6aSNélio Laranjeiro int ret; 36a6d83b6aSNélio Laranjeiro 371b37f5d8SNélio Laranjeiro dev->data->promiscuous = 1; 38a6d83b6aSNélio Laranjeiro ret = mlx5_traffic_restart(dev); 39a6d83b6aSNélio Laranjeiro if (ret) 40*a170a30dSNélio Laranjeiro DRV_LOG(ERR, "port %u cannot enable promiscuous mode: %s", 410f99970bSNélio Laranjeiro dev->data->port_id, 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 { 53a6d83b6aSNélio Laranjeiro int ret; 54a6d83b6aSNélio Laranjeiro 551b37f5d8SNélio Laranjeiro dev->data->promiscuous = 0; 56a6d83b6aSNélio Laranjeiro ret = mlx5_traffic_restart(dev); 57a6d83b6aSNélio Laranjeiro if (ret) 58*a170a30dSNélio Laranjeiro DRV_LOG(ERR, "port %u cannot disable promiscuous mode: %s", 590f99970bSNélio Laranjeiro dev->data->port_id, 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 { 71a6d83b6aSNélio Laranjeiro int ret; 72a6d83b6aSNélio Laranjeiro 736a6b6828SNélio Laranjeiro dev->data->all_multicast = 1; 74a6d83b6aSNélio Laranjeiro ret = mlx5_traffic_restart(dev); 75a6d83b6aSNélio Laranjeiro if (ret) 76*a170a30dSNélio Laranjeiro DRV_LOG(ERR, "port %u cannot enable allmulicast mode: %s", 770f99970bSNélio Laranjeiro dev->data->port_id, 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 { 89a6d83b6aSNélio Laranjeiro int ret; 90a6d83b6aSNélio Laranjeiro 916a6b6828SNélio Laranjeiro dev->data->all_multicast = 0; 92a6d83b6aSNélio Laranjeiro ret = mlx5_traffic_restart(dev); 93a6d83b6aSNélio Laranjeiro if (ret) 94*a170a30dSNélio Laranjeiro DRV_LOG(ERR, "port %u cannot disable allmulicast mode: %s", 950f99970bSNélio Laranjeiro dev->data->port_id, strerror(rte_errno)); 961bdbe1afSAdrien Mazarguil } 97