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