X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_ethdev%2Frte_class_eth.c;h=6338355e25574c901cfb6385bf53d71f6355250e;hb=ba1e69f121b97b4c8673a48c98072accdbc5af46;hp=16b47c3bc7ddb673422c1b7162487ed39aafa82b;hpb=c10cdce180a6ac535dc420376f115ca4ac44aead;p=dpdk.git diff --git a/lib/librte_ethdev/rte_class_eth.c b/lib/librte_ethdev/rte_class_eth.c index 16b47c3bc7..6338355e25 100644 --- a/lib/librte_ethdev/rte_class_eth.c +++ b/lib/librte_ethdev/rte_class_eth.c @@ -4,7 +4,6 @@ #include -#include #include #include #include @@ -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, };