net/nfp: fix Rx interrupt
[dpdk.git] / drivers / net / tap / rte_eth_tap.c
index c531feb..f8d9cc7 100644 (file)
@@ -38,6 +38,7 @@
 #include <rte_malloc.h>
 #include <rte_vdev.h>
 #include <rte_kvargs.h>
+#include <rte_net.h>
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -285,6 +286,8 @@ pmd_rx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
                mbuf->data_len = len;
                mbuf->pkt_len = len;
                mbuf->port = rxq->in_port;
+               mbuf->packet_type = rte_net_get_ptype(mbuf, NULL,
+                                                     RTE_PTYPE_ALL_MASK);
 
                /* account for the receive frame */
                bufs[num_rx++] = mbuf;
@@ -750,6 +753,66 @@ tap_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
        return err;
 }
 
+static int
+tap_set_mc_addr_list(struct rte_eth_dev *dev __rte_unused,
+                    struct ether_addr *mc_addr_set __rte_unused,
+                    uint32_t nb_mc_addr __rte_unused)
+{
+       /*
+        * Nothing to do actually: the tap has no filtering whatsoever, every
+        * packet is received.
+        */
+       return 0;
+}
+
+static const uint32_t*
+tap_dev_supported_ptypes_get(struct rte_eth_dev *dev __rte_unused)
+{
+       static const uint32_t ptypes[] = {
+               RTE_PTYPE_INNER_L2_ETHER,
+               RTE_PTYPE_INNER_L2_ETHER_VLAN,
+               RTE_PTYPE_INNER_L2_ETHER_QINQ,
+               RTE_PTYPE_INNER_L3_IPV4,
+               RTE_PTYPE_INNER_L3_IPV4_EXT,
+               RTE_PTYPE_INNER_L3_IPV6,
+               RTE_PTYPE_INNER_L3_IPV6_EXT,
+               RTE_PTYPE_INNER_L4_FRAG,
+               RTE_PTYPE_INNER_L4_UDP,
+               RTE_PTYPE_INNER_L4_TCP,
+               RTE_PTYPE_INNER_L4_SCTP,
+               RTE_PTYPE_L2_ETHER,
+               RTE_PTYPE_L2_ETHER_VLAN,
+               RTE_PTYPE_L2_ETHER_QINQ,
+               RTE_PTYPE_L3_IPV4,
+               RTE_PTYPE_L3_IPV4_EXT,
+               RTE_PTYPE_L3_IPV6_EXT,
+               RTE_PTYPE_L3_IPV6,
+               RTE_PTYPE_L4_FRAG,
+               RTE_PTYPE_L4_UDP,
+               RTE_PTYPE_L4_TCP,
+               RTE_PTYPE_L4_SCTP,
+       };
+
+       return ptypes;
+}
+
+static int
+tap_flow_ctrl_get(struct rte_eth_dev *dev __rte_unused,
+                 struct rte_eth_fc_conf *fc_conf)
+{
+       fc_conf->mode = RTE_FC_NONE;
+       return 0;
+}
+
+static int
+tap_flow_ctrl_set(struct rte_eth_dev *dev __rte_unused,
+                 struct rte_eth_fc_conf *fc_conf)
+{
+       if (fc_conf->mode != RTE_FC_NONE)
+               return -ENOTSUP;
+       return 0;
+}
+
 static const struct eth_dev_ops ops = {
        .dev_start              = tap_dev_start,
        .dev_stop               = tap_dev_stop,
@@ -760,6 +823,8 @@ static const struct eth_dev_ops ops = {
        .tx_queue_setup         = tap_tx_queue_setup,
        .rx_queue_release       = tap_rx_queue_release,
        .tx_queue_release       = tap_tx_queue_release,
+       .flow_ctrl_get          = tap_flow_ctrl_get,
+       .flow_ctrl_set          = tap_flow_ctrl_set,
        .link_update            = tap_link_update,
        .dev_set_link_up        = tap_link_set_up,
        .dev_set_link_down      = tap_link_set_down,
@@ -769,8 +834,10 @@ static const struct eth_dev_ops ops = {
        .allmulticast_disable   = tap_allmulti_disable,
        .mac_addr_set           = tap_mac_set,
        .mtu_set                = tap_mtu_set,
+       .set_mc_addr_list       = tap_set_mc_addr_list,
        .stats_get              = tap_stats_get,
        .stats_reset            = tap_stats_reset,
+       .dev_supported_ptypes_get = tap_dev_supported_ptypes_get,
 };
 
 static int