xref: /dpdk/drivers/net/mlx5/mlx5_rxmode.c (revision 358309f36776ba397601ba25710e7d23ee8f55ce)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2015 6WIND S.A.
3  * Copyright 2015 Mellanox.
4  */
5 
6 #include <stddef.h>
7 #include <errno.h>
8 #include <string.h>
9 
10 /* Verbs header. */
11 /* ISO C doesn't support unnamed structs/unions, disabling -pedantic. */
12 #ifdef PEDANTIC
13 #pragma GCC diagnostic ignored "-Wpedantic"
14 #endif
15 #include <infiniband/verbs.h>
16 #ifdef PEDANTIC
17 #pragma GCC diagnostic error "-Wpedantic"
18 #endif
19 
20 #include <rte_ethdev_driver.h>
21 
22 #include "mlx5.h"
23 #include "mlx5_rxtx.h"
24 #include "mlx5_utils.h"
25 
26 /**
27  * DPDK callback to enable promiscuous mode.
28  *
29  * @param dev
30  *   Pointer to Ethernet device structure.
31  */
32 void
33 mlx5_promiscuous_enable(struct rte_eth_dev *dev)
34 {
35 	int ret;
36 
37 	dev->data->promiscuous = 1;
38 	ret = mlx5_traffic_restart(dev);
39 	if (ret)
40 		DRV_LOG(ERR, "port %u cannot enable promiscuous mode: %s",
41 			dev->data->port_id, strerror(rte_errno));
42 }
43 
44 /**
45  * DPDK callback to disable promiscuous mode.
46  *
47  * @param dev
48  *   Pointer to Ethernet device structure.
49  */
50 void
51 mlx5_promiscuous_disable(struct rte_eth_dev *dev)
52 {
53 	int ret;
54 
55 	dev->data->promiscuous = 0;
56 	ret = mlx5_traffic_restart(dev);
57 	if (ret)
58 		DRV_LOG(ERR, "port %u cannot disable promiscuous mode: %s",
59 			dev->data->port_id, strerror(rte_errno));
60 }
61 
62 /**
63  * DPDK callback to enable allmulti mode.
64  *
65  * @param dev
66  *   Pointer to Ethernet device structure.
67  */
68 void
69 mlx5_allmulticast_enable(struct rte_eth_dev *dev)
70 {
71 	int ret;
72 
73 	dev->data->all_multicast = 1;
74 	ret = mlx5_traffic_restart(dev);
75 	if (ret)
76 		DRV_LOG(ERR, "port %u cannot enable allmulicast mode: %s",
77 			dev->data->port_id, strerror(rte_errno));
78 }
79 
80 /**
81  * DPDK callback to disable allmulti mode.
82  *
83  * @param dev
84  *   Pointer to Ethernet device structure.
85  */
86 void
87 mlx5_allmulticast_disable(struct rte_eth_dev *dev)
88 {
89 	int ret;
90 
91 	dev->data->all_multicast = 0;
92 	ret = mlx5_traffic_restart(dev);
93 	if (ret)
94 		DRV_LOG(ERR, "port %u cannot disable allmulicast mode: %s",
95 			dev->data->port_id, strerror(rte_errno));
96 }
97