xref: /dpdk/drivers/net/mlx5/mlx5_rxmode.c (revision a170a30d22a8c34c36541d0dd6bcc2fcc4c9ee2f)
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