From 123c42a487580890fab58b1bcb7cc0af0eee2027 Mon Sep 17 00:00:00 2001 From: Pascal Mazon Date: Thu, 2 Feb 2017 17:18:04 +0100 Subject: [PATCH] net/tap: support promiscuous and allmulticast Signed-off-by: Pascal Mazon Acked-by: Keith Wiles --- drivers/net/tap/rte_eth_tap.c | 40 +++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index 3e916a465b..c7b04bb9df 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -460,6 +460,42 @@ tap_link_update(struct rte_eth_dev *dev __rte_unused, return 0; } +static void +tap_promisc_enable(struct rte_eth_dev *dev) +{ + struct pmd_internals *pmd = dev->data->dev_private; + + dev->data->promiscuous = 1; + tap_link_set_flags(pmd, IFF_PROMISC, 1); +} + +static void +tap_promisc_disable(struct rte_eth_dev *dev) +{ + struct pmd_internals *pmd = dev->data->dev_private; + + dev->data->promiscuous = 0; + tap_link_set_flags(pmd, IFF_PROMISC, 0); +} + +static void +tap_allmulti_enable(struct rte_eth_dev *dev) +{ + struct pmd_internals *pmd = dev->data->dev_private; + + dev->data->all_multicast = 1; + tap_link_set_flags(pmd, IFF_ALLMULTI, 1); +} + +static void +tap_allmulti_disable(struct rte_eth_dev *dev) +{ + struct pmd_internals *pmd = dev->data->dev_private; + + dev->data->all_multicast = 0; + tap_link_set_flags(pmd, IFF_ALLMULTI, 0); +} + static int tap_setup_queue(struct rte_eth_dev *dev, struct pmd_internals *internals, @@ -590,6 +626,10 @@ static const struct eth_dev_ops ops = { .link_update = tap_link_update, .dev_set_link_up = tap_link_set_up, .dev_set_link_down = tap_link_set_down, + .promiscuous_enable = tap_promisc_enable, + .promiscuous_disable = tap_promisc_disable, + .allmulticast_enable = tap_allmulti_enable, + .allmulticast_disable = tap_allmulti_disable, .stats_get = tap_stats_get, .stats_reset = tap_stats_reset, }; -- 2.20.1