port: add eventdev port type
[dpdk.git] / lib / librte_ethdev / rte_class_eth.c
index 16b47c3..6338355 100644 (file)
@@ -4,7 +4,6 @@
 
 #include <string.h>
 
-#include <cmdline_parse_etheraddr.h>
 #include <rte_class.h>
 #include <rte_compat.h>
 #include <rte_errno.h>
@@ -43,25 +42,19 @@ static int
 eth_mac_cmp(const char *key __rte_unused,
                const char *value, void *opaque)
 {
-       int ret;
-       struct ether_addr mac;
+       struct rte_ether_addr mac;
        const struct rte_eth_dev_data *data = opaque;
        struct rte_eth_dev_info dev_info;
        uint32_t index;
 
        /* Parse devargs MAC address. */
-       /*
-        * cannot use ether_aton_r(value, &mac)
-        * because of include conflict with rte_ether.h
-        */
-       ret = cmdline_parse_etheraddr(NULL, value, &mac, sizeof(mac));
-       if (ret < 0)
+       if (rte_ether_unformat_addr(value, &mac) < 0)
                return -1; /* invalid devargs value */
 
        /* Return 0 if devargs MAC is matching one of the device MACs. */
        rte_eth_dev_info_get(data->port_id, &dev_info);
        for (index = 0; index < dev_info.max_mac_addrs; index++)
-               if (is_same_ether_addr(&mac, &data->mac_addrs[index]))
+               if (rte_is_same_ether_addr(&mac, &data->mac_addrs[index]))
                        return 0;
        return -1; /* no match */
 }
@@ -106,14 +99,12 @@ eth_dev_match(const struct rte_eth_dev *edev,
        int ret;
        const struct eth_dev_match_arg *arg = _arg;
        const struct rte_kvargs *kvlist = arg->kvlist;
+       unsigned int pair;
 
        if (edev->state == RTE_ETH_DEV_UNUSED)
                return -1;
        if (arg->device != NULL && arg->device != edev->device)
                return -1;
-       if (kvlist == NULL)
-               /* Empty string matches everything. */
-               return 0;
 
        ret = rte_kvargs_process(kvlist,
                        eth_params_keys[RTE_ETH_PARAM_MAC],
@@ -126,6 +117,17 @@ eth_dev_match(const struct rte_eth_dev *edev,
                        eth_representor_cmp, edev->data);
        if (ret != 0)
                return -1;
+       /* search for representor key */
+       for (pair = 0; pair < kvlist->count; pair++) {
+               ret = strcmp(kvlist->pairs[pair].key,
+                               eth_params_keys[RTE_ETH_PARAM_REPRESENTOR]);
+               if (ret == 0)
+                       break; /* there is a representor key */
+       }
+       /* if no representor key, default is to not match representor ports */
+       if (ret != 0)
+               if ((edev->data->dev_flags & RTE_ETH_DEV_REPRESENTOR) != 0)
+                       return -1; /* do not match any representor */
 
        return 0;
 }
@@ -157,7 +159,7 @@ eth_dev_iterate(const void *start,
        return edev;
 }
 
-struct rte_class rte_class_eth = {
+static struct rte_class rte_class_eth = {
        .dev_iterate = eth_dev_iterate,
 };