From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ee0-x231.google.com (mail-ee0-x231.google.com [IPv6:2a00:1450:4013:c00::231]) by dpdk.org (Postfix) with ESMTP id 99C6A9A for ; Wed, 8 Jan 2014 10:49:13 +0100 (CET) Received: by mail-ee0-f49.google.com with SMTP id c41so559544eek.8 for ; Wed, 08 Jan 2014 01:50:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:cc:content-type; bh=fh4TGm6O2MfmnS7NUno+ipdNtoqNB2jAS2czKBtTipA=; b=R916m+v+62uVgyiMRgcNd80UnXGL38I+BSNqvxzqvPXVx71bd7FE3tsrn1d53De8AM ME7xQh8QuA0TfiK7BwfBf1MKlp4VVUJ1XMOTYQDKH/xNdO4SJiIqbmTefgP4tKfNSJ7A bZvhMt4i5tzHkJF5y30jw9PY3y0d8Nt1SudE4/lHrGJb0SDK0U6nS6Lrw+mJFejL+/GS PFwVXUTmwho+g5IizUd1cwnE8DRQquV18njjt2k2MpdkRSd6vzmax3eGwZMSrCXJCPSS 1ewPuwR4URLXvNomf/E7IO6sn+7zxVvXmmM6zP35SUgwDp+HWA0XRjrbIJe7pPURX5vA eT0g== MIME-Version: 1.0 X-Received: by 10.14.3.1 with SMTP id 1mr25027977eeg.94.1389174625284; Wed, 08 Jan 2014 01:50:25 -0800 (PST) Received: by 10.15.94.5 with HTTP; Wed, 8 Jan 2014 01:50:25 -0800 (PST) Date: Wed, 8 Jan 2014 10:50:25 +0100 Message-ID: From: Mats Liljegren To: Thomas Monjalon , stephen@networkplumber.org Content-Type: text/plain; charset=UTF-8 Cc: "dev@dpdk.org" Subject: [dpdk-dev] [PATCH 2/2] pcap: Fill in if_index field for rte_eth_dev_info_get() calls X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jan 2014 09:49:14 -0000 Signed-off-by: Mats Liljegren --- lib/librte_pmd_pcap/rte_eth_pcap.c | 39 ++++++++++++++++++++++++++++++-------- lib/librte_pmd_pcap/rte_eth_pcap.h | 6 ++++-- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/lib/librte_pmd_pcap/rte_eth_pcap.c b/lib/librte_pmd_pcap/rte_eth_pcap.c index 87d1306..ebd16f3 100644 --- a/lib/librte_pmd_pcap/rte_eth_pcap.c +++ b/lib/librte_pmd_pcap/rte_eth_pcap.c @@ -86,6 +86,8 @@ struct pmd_internals { unsigned nb_rx_queues; unsigned nb_tx_queues; + int if_index; + struct pcap_rx_queue rx_queue[RTE_PMD_RING_MAX_RX_RINGS]; struct pcap_tx_queue tx_queue[RTE_PMD_RING_MAX_TX_RINGS]; }; @@ -300,6 +302,7 @@ eth_dev_info(struct rte_eth_dev *dev, { struct pmd_internals *internals = dev->data->dev_private; dev_info->driver_name = drivername; + dev_info->if_index = internals->if_index; dev_info->max_mac_addrs = 1; dev_info->max_rx_pktlen = (uint32_t) -1; dev_info->max_rx_queues = (uint16_t)internals->nb_rx_queues; @@ -543,10 +546,19 @@ rte_pmd_init_internals(const unsigned nb_rx_queues, const unsigned nb_tx_queues, const unsigned numa_node, struct pmd_internals **internals, - struct rte_eth_dev **eth_dev) + struct rte_eth_dev **eth_dev, + struct args_dict *dict) { struct rte_eth_dev_data *data = NULL; struct rte_pci_device *pci_dev = NULL; + unsigned k_idx; + struct key_value *pair; + + for (k_idx = 0; k_idx < dict->index; k_idx++) { + pair = &dict->pairs[k_idx]; + if (strstr(pair->key, ETH_PCAP_IFACE_ARG) != NULL) + break; + } RTE_LOG(INFO, PMD, "Creating pcap-backed ethdev on numa socket %u\n", numa_node); @@ -583,6 +595,15 @@ rte_pmd_init_internals(const unsigned nb_rx_queues, (*internals)->nb_rx_queues = nb_rx_queues; (*internals)->nb_tx_queues = nb_tx_queues; + if (k_idx == dict->index) + (*internals)->if_index = -1; + else + (*internals)->if_index = if_nametoindex(pair->value); + + /* if_nametoindex() uses 0 as error report value, translate to -1 */ + if ((*internals)->if_index == 0) + (*internals)->if_index = -1; + pci_dev->numa_node = numa_node; data->dev_private = *internals; @@ -612,7 +633,8 @@ rte_eth_from_pcaps_n_dumpers(pcap_t * const rx_queues[], const unsigned nb_rx_queues, pcap_dumper_t * const tx_queues[], const unsigned nb_tx_queues, - const unsigned numa_node) + const unsigned numa_node, + struct args_dict *dict) { struct pmd_internals *internals = NULL; struct rte_eth_dev *eth_dev = NULL; @@ -625,7 +647,7 @@ rte_eth_from_pcaps_n_dumpers(pcap_t * const rx_queues[], return -1; if (rte_pmd_init_internals(nb_rx_queues, nb_tx_queues, numa_node, - &internals, ð_dev) < 0) + &internals, ð_dev, dict) < 0) return -1; for (i = 0; i < nb_rx_queues; i++) { @@ -646,7 +668,8 @@ rte_eth_from_pcaps(pcap_t * const rx_queues[], const unsigned nb_rx_queues, pcap_t * const tx_queues[], const unsigned nb_tx_queues, - const unsigned numa_node) + const unsigned numa_node, + struct args_dict *dict) { struct pmd_internals *internals = NULL; struct rte_eth_dev *eth_dev = NULL; @@ -659,7 +682,7 @@ rte_eth_from_pcaps(pcap_t * const rx_queues[], return -1; if (rte_pmd_init_internals(nb_rx_queues, nb_tx_queues, numa_node, - &internals, ð_dev) < 0) + &internals, ð_dev, dict) < 0) return -1; for (i = 0; i < nb_rx_queues; i++) { @@ -707,7 +730,7 @@ rte_pmd_pcap_init(const char *name, const char *params) if (ret < 0) return -1; - return rte_eth_from_pcaps(pcaps.pcaps, 1, pcaps.pcaps, 1, numa_node); + return rte_eth_from_pcaps(pcaps.pcaps, 1, pcaps.pcaps, 1, numa_node, &dict); } /* @@ -748,10 +771,10 @@ rte_pmd_pcap_init(const char *name, const char *params) if (using_dumpers) return rte_eth_from_pcaps_n_dumpers(pcaps.pcaps, pcaps.num_of_rx, - dumpers.dumpers, dumpers.num_of_tx, numa_node); + dumpers.dumpers, dumpers.num_of_tx, numa_node, &dict); return rte_eth_from_pcaps(pcaps.pcaps, pcaps.num_of_rx, dumpers.pcaps, - dumpers.num_of_tx, numa_node); + dumpers.num_of_tx, numa_node, &dict); } diff --git a/lib/librte_pmd_pcap/rte_eth_pcap.h b/lib/librte_pmd_pcap/rte_eth_pcap.h index 368ed88..a0f409a 100644 --- a/lib/librte_pmd_pcap/rte_eth_pcap.h +++ b/lib/librte_pmd_pcap/rte_eth_pcap.h @@ -51,13 +51,15 @@ int rte_eth_from_pcaps(pcap_t * const rx_queues[], const unsigned nb_rx_queues, pcap_t * const tx_queues[], const unsigned nb_tx_queues, - const unsigned numa_node); + const unsigned numa_node, + struct args_dict *dict); int rte_eth_from_pcaps_n_dumpers(pcap_t * const rx_queues[], const unsigned nb_rx_queues, pcap_dumper_t * const tx_queues[], const unsigned nb_tx_queues, - const unsigned numa_node); + const unsigned numa_node, + struct args_dict *dict); /** * For use by the EAL only. Called as part of EAL init to set up any dummy NICs -- 1.8.3.2