1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2019 Cesnet
3 * Copyright(c) 2019 Netcope Technologies, a.s. <info@netcope.com>
7 #include "nfb_rxmode.h"
11 nfb_eth_promiscuous_enable(struct rte_eth_dev *dev)
13 struct pmd_internals *internals = (struct pmd_internals *)
14 dev->data->dev_private;
17 for (i = 0; i < internals->max_rxmac; ++i) {
18 nc_rxmac_mac_filter_enable(internals->rxmac[i],
19 RXMAC_MAC_FILTER_PROMISCUOUS);
26 nfb_eth_promiscuous_disable(struct rte_eth_dev *dev)
28 struct pmd_internals *internals = (struct pmd_internals *)
29 dev->data->dev_private;
31 enum nc_rxmac_mac_filter filter = RXMAC_MAC_FILTER_TABLE_BCAST;
33 if (dev->data->all_multicast)
34 filter = RXMAC_MAC_FILTER_TABLE_BCAST_MCAST;
36 for (i = 0; i < internals->max_rxmac; ++i) {
37 nc_rxmac_mac_filter_enable(internals->rxmac[i], filter);
44 nfb_eth_promiscuous_get(struct rte_eth_dev *dev)
46 struct pmd_internals *internals = (struct pmd_internals *)
47 dev->data->dev_private;
49 struct nc_rxmac_status status;
50 status.mac_filter = RXMAC_MAC_FILTER_PROMISCUOUS;
52 if (internals->max_rxmac > 0)
53 nc_rxmac_read_status(internals->rxmac[0], &status);
55 return (status.mac_filter == RXMAC_MAC_FILTER_PROMISCUOUS);
59 nfb_eth_allmulticast_enable(struct rte_eth_dev *dev)
61 struct pmd_internals *internals = (struct pmd_internals *)
62 dev->data->dev_private;
65 if (dev->data->promiscuous)
67 for (i = 0; i < internals->max_rxmac; ++i) {
68 nc_rxmac_mac_filter_enable(internals->rxmac[i],
69 RXMAC_MAC_FILTER_TABLE_BCAST_MCAST);
76 nfb_eth_allmulticast_disable(struct rte_eth_dev *dev)
78 struct pmd_internals *internals = (struct pmd_internals *)
79 dev->data->dev_private;
83 if (dev->data->promiscuous)
86 for (i = 0; i < internals->max_rxmac; ++i) {
87 nc_rxmac_mac_filter_enable(internals->rxmac[i],
88 RXMAC_MAC_FILTER_TABLE_BCAST);
95 nfb_eth_allmulticast_get(struct rte_eth_dev *dev)
97 struct pmd_internals *internals = (struct pmd_internals *)
98 dev->data->dev_private;
100 struct nc_rxmac_status status;
101 status.mac_filter = RXMAC_MAC_FILTER_PROMISCUOUS;
103 if (internals->max_rxmac > 0)
104 nc_rxmac_read_status(internals->rxmac[0], &status);
106 return (status.mac_filter == RXMAC_MAC_FILTER_TABLE_BCAST_MCAST);