1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2019 Cesnet 3 * Copyright(c) 2019 Netcope Technologies, a.s. <info@netcope.com> 4 * All rights reserved. 5 */ 6 7 #include "nfb_rxmode.h" 8 #include "nfb.h" 9 10 int nfb_eth_promiscuous_enable(struct rte_eth_dev * dev)11nfb_eth_promiscuous_enable(struct rte_eth_dev *dev) 12 { 13 struct pmd_internals *internals = (struct pmd_internals *) 14 dev->data->dev_private; 15 uint16_t i; 16 17 for (i = 0; i < internals->max_rxmac; ++i) { 18 nc_rxmac_mac_filter_enable(internals->rxmac[i], 19 RXMAC_MAC_FILTER_PROMISCUOUS); 20 } 21 22 return 0; 23 } 24 25 int nfb_eth_promiscuous_disable(struct rte_eth_dev * dev)26nfb_eth_promiscuous_disable(struct rte_eth_dev *dev) 27 { 28 struct pmd_internals *internals = (struct pmd_internals *) 29 dev->data->dev_private; 30 uint16_t i; 31 enum nc_rxmac_mac_filter filter = RXMAC_MAC_FILTER_TABLE_BCAST; 32 33 if (dev->data->all_multicast) 34 filter = RXMAC_MAC_FILTER_TABLE_BCAST_MCAST; 35 36 for (i = 0; i < internals->max_rxmac; ++i) { 37 nc_rxmac_mac_filter_enable(internals->rxmac[i], filter); 38 } 39 40 return 0; 41 } 42 43 int nfb_eth_promiscuous_get(struct rte_eth_dev * dev)44nfb_eth_promiscuous_get(struct rte_eth_dev *dev) 45 { 46 struct pmd_internals *internals = (struct pmd_internals *) 47 dev->data->dev_private; 48 49 struct nc_rxmac_status status; 50 status.mac_filter = RXMAC_MAC_FILTER_PROMISCUOUS; 51 52 if (internals->max_rxmac > 0) 53 nc_rxmac_read_status(internals->rxmac[0], &status); 54 55 return (status.mac_filter == RXMAC_MAC_FILTER_PROMISCUOUS); 56 } 57 58 int nfb_eth_allmulticast_enable(struct rte_eth_dev * dev)59nfb_eth_allmulticast_enable(struct rte_eth_dev *dev) 60 { 61 struct pmd_internals *internals = (struct pmd_internals *) 62 dev->data->dev_private; 63 64 uint16_t i; 65 if (dev->data->promiscuous) 66 return 0; 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); 70 } 71 72 return 0; 73 } 74 75 int nfb_eth_allmulticast_disable(struct rte_eth_dev * dev)76nfb_eth_allmulticast_disable(struct rte_eth_dev *dev) 77 { 78 struct pmd_internals *internals = (struct pmd_internals *) 79 dev->data->dev_private; 80 81 uint16_t i; 82 83 if (dev->data->promiscuous) 84 return 0; 85 86 for (i = 0; i < internals->max_rxmac; ++i) { 87 nc_rxmac_mac_filter_enable(internals->rxmac[i], 88 RXMAC_MAC_FILTER_TABLE_BCAST); 89 } 90 91 return 0; 92 } 93 94 int nfb_eth_allmulticast_get(struct rte_eth_dev * dev)95nfb_eth_allmulticast_get(struct rte_eth_dev *dev) 96 { 97 struct pmd_internals *internals = (struct pmd_internals *) 98 dev->data->dev_private; 99 100 struct nc_rxmac_status status; 101 status.mac_filter = RXMAC_MAC_FILTER_PROMISCUOUS; 102 103 if (internals->max_rxmac > 0) 104 nc_rxmac_read_status(internals->rxmac[0], &status); 105 106 return (status.mac_filter == RXMAC_MAC_FILTER_TABLE_BCAST_MCAST); 107 } 108