ethdev: support MAC address as iterator filter
[dpdk.git] / drivers / net / tap / tap_flow.c
index 6b60e6d..3ba6945 100644 (file)
@@ -537,7 +537,7 @@ tap_flow_create_eth(const struct rte_flow_item *item, void *data)
        if (!flow)
                return 0;
        msg = &flow->msg;
-       if (!is_zero_ether_addr(&spec->dst)) {
+       if (!is_zero_ether_addr(&mask->dst)) {
                tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_ETH_DST, ETHER_ADDR_LEN,
                           &spec->dst.addr_bytes);
                tap_nlattr_add(&msg->nh,
@@ -651,13 +651,13 @@ tap_flow_create_ipv4(const struct rte_flow_item *item, void *data)
                info->eth_type = htons(ETH_P_IP);
        if (!spec)
                return 0;
-       if (spec->hdr.dst_addr) {
+       if (mask->hdr.dst_addr) {
                tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_DST,
                             spec->hdr.dst_addr);
                tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_DST_MASK,
                             mask->hdr.dst_addr);
        }
-       if (spec->hdr.src_addr) {
+       if (mask->hdr.src_addr) {
                tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_SRC,
                             spec->hdr.src_addr);
                tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_SRC_MASK,
@@ -707,13 +707,13 @@ tap_flow_create_ipv6(const struct rte_flow_item *item, void *data)
                info->eth_type = htons(ETH_P_IPV6);
        if (!spec)
                return 0;
-       if (memcmp(spec->hdr.dst_addr, empty_addr, 16)) {
+       if (memcmp(mask->hdr.dst_addr, empty_addr, 16)) {
                tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_DST,
                           sizeof(spec->hdr.dst_addr), &spec->hdr.dst_addr);
                tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_DST_MASK,
                           sizeof(mask->hdr.dst_addr), &mask->hdr.dst_addr);
        }
-       if (memcmp(spec->hdr.src_addr, empty_addr, 16)) {
+       if (memcmp(mask->hdr.src_addr, empty_addr, 16)) {
                tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_SRC,
                           sizeof(spec->hdr.src_addr), &spec->hdr.src_addr);
                tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_SRC_MASK,
@@ -762,10 +762,10 @@ tap_flow_create_udp(const struct rte_flow_item *item, void *data)
        tap_nlattr_add8(&msg->nh, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_UDP);
        if (!spec)
                return 0;
-       if (spec->hdr.dst_port & mask->hdr.dst_port)
+       if (mask->hdr.dst_port)
                tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_UDP_DST,
                             spec->hdr.dst_port);
-       if (spec->hdr.src_port & mask->hdr.src_port)
+       if (mask->hdr.src_port)
                tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_UDP_SRC,
                             spec->hdr.src_port);
        return 0;
@@ -808,10 +808,10 @@ tap_flow_create_tcp(const struct rte_flow_item *item, void *data)
        tap_nlattr_add8(&msg->nh, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_TCP);
        if (!spec)
                return 0;
-       if (spec->hdr.dst_port & mask->hdr.dst_port)
+       if (mask->hdr.dst_port)
                tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_TCP_DST,
                             spec->hdr.dst_port);
-       if (spec->hdr.src_port & mask->hdr.src_port)
+       if (mask->hdr.src_port)
                tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_TCP_SRC,
                             spec->hdr.src_port);
        return 0;
@@ -1567,6 +1567,7 @@ tap_flow_isolate(struct rte_eth_dev *dev,
                 struct rte_flow_error *error __rte_unused)
 {
        struct pmd_internals *pmd = dev->data->dev_private;
+       struct pmd_process_private *process_private = dev->process_private;
 
        /* normalize 'set' variable to contain 0 or 1 values */
        if (set)
@@ -1580,7 +1581,7 @@ tap_flow_isolate(struct rte_eth_dev *dev,
         * If netdevice is there, setup appropriate flow rules immediately.
         * Otherwise it will be set when bringing up the netdevice (tun_alloc).
         */
-       if (!pmd->rxq[0].fd)
+       if (!process_private->rxq_fds[0])
                return 0;
        if (set) {
                struct rte_flow *remote_flow;