DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH v3 0/2] Introduce if_index field to struct rte_eth_dev_info
@ 2014-01-09 13:42 liljegren.mats2
  2014-01-09 13:42 ` [dpdk-dev] [PATCH v3 1/2] ethdev: " liljegren.mats2
  2014-01-09 13:42 ` [dpdk-dev] [PATCH v3 2/2] pcap: Fill in if_index field for rte_eth_dev_info_get() liljegren.mats2
  0 siblings, 2 replies; 6+ messages in thread
From: liljegren.mats2 @ 2014-01-09 13:42 UTC (permalink / raw)
  To: dev

Changes since v1:
- Split into two patches: Generic and pcap specific.
- Changed interface name to interface index

Changes since v2:
- Interface index is now unsigned
- Value 0 used as error rather than 0
- Added missing include of net/if.h in rte_eth_pcap.c
- Declared struct args_dict in rte_eth_pcap.h

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [dpdk-dev] [PATCH v3 1/2] ethdev: Introduce if_index field to struct rte_eth_dev_info
  2014-01-09 13:42 [dpdk-dev] [PATCH v3 0/2] Introduce if_index field to struct rte_eth_dev_info liljegren.mats2
@ 2014-01-09 13:42 ` liljegren.mats2
  2014-01-17 17:33   ` Thomas Monjalon
  2014-01-09 13:42 ` [dpdk-dev] [PATCH v3 2/2] pcap: Fill in if_index field for rte_eth_dev_info_get() liljegren.mats2
  1 sibling, 1 reply; 6+ messages in thread
From: liljegren.mats2 @ 2014-01-09 13:42 UTC (permalink / raw)
  To: dev; +Cc: Mats Liljegren

From: Mats Liljegren <mats.liljegren@enea.com>

This field is intended for pcap to describe the name of the interface
as known to Linux. It is an interface index, but can be translated into
an interface name using if_indextoname() function.

When using pcap, interrupt affinity becomes important, and this field
gives the application a chance to ensure that interrupt affinity is set
to the lcore handling the device.

Signed-off-by: Mats Liljegren <mats.liljegren@enea.com>
---
 lib/librte_ether/rte_ethdev.c |    1 +
 lib/librte_ether/rte_ethdev.h |    1 +
 2 files changed, 2 insertions(+)

diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index 859ec92..09cc4c7 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -1037,6 +1037,7 @@ rte_eth_dev_info_get(uint8_t port_id, struct rte_eth_dev_info *dev_info)
 	/* Default device offload capabilities to zero */
 	dev_info->rx_offload_capa = 0;
 	dev_info->tx_offload_capa = 0;
+	dev_info->if_index = 0;
 	FUNC_PTR_OR_RET(*dev->dev_ops->dev_infos_get);
 	(*dev->dev_ops->dev_infos_get)(dev, dev_info);
 	dev_info->pci_dev = dev->pci_dev;
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index 302d378..b4f839d 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -787,6 +787,7 @@ struct rte_eth_conf {
 struct rte_eth_dev_info {
 	struct rte_pci_device *pci_dev; /**< Device PCI information. */
 	const char *driver_name; /**< Device Driver name. */
+	unsigned int if_index; /**< Index to bounded host interface, or 0 if none. Use if_indextoname() to translate into an interface name. */
 	uint32_t min_rx_bufsize; /**< Minimum size of RX buffer. */
 	uint32_t max_rx_pktlen; /**< Maximum configurable length of RX pkt. */
 	uint16_t max_rx_queues; /**< Maximum number of RX queues. */
-- 
1.7.10.4

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [dpdk-dev] [PATCH v3 2/2] pcap: Fill in if_index field for rte_eth_dev_info_get()
  2014-01-09 13:42 [dpdk-dev] [PATCH v3 0/2] Introduce if_index field to struct rte_eth_dev_info liljegren.mats2
  2014-01-09 13:42 ` [dpdk-dev] [PATCH v3 1/2] ethdev: " liljegren.mats2
@ 2014-01-09 13:42 ` liljegren.mats2
  2014-01-17 17:48   ` Thomas Monjalon
  1 sibling, 1 reply; 6+ messages in thread
From: liljegren.mats2 @ 2014-01-09 13:42 UTC (permalink / raw)
  To: dev; +Cc: Mats Liljegren

From: Mats Liljegren <mats.liljegren@enea.com>

Signed-off-by: Mats Liljegren <mats.liljegren@enea.com>
---
 lib/librte_pmd_pcap/rte_eth_pcap.c |   36 ++++++++++++++++++++++++++++--------
 lib/librte_pmd_pcap/rte_eth_pcap.h |    9 +++++++--
 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..2912b5f 100644
--- a/lib/librte_pmd_pcap/rte_eth_pcap.c
+++ b/lib/librte_pmd_pcap/rte_eth_pcap.c
@@ -38,6 +38,7 @@
 #include <rte_memcpy.h>
 #include <rte_string_fns.h>
 #include <rte_cycles.h>
+#include <net/if.h>
 
 #include "rte_eth_pcap.h"
 #include "rte_eth_pcap_arg_parser.h"
@@ -86,6 +87,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 +303,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 +547,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 +596,11 @@ 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 = 0;
+	else
+		(*internals)->if_index = if_nametoindex(pair->value);
+
 	pci_dev->numa_node = numa_node;
 
 	data->dev_private = *internals;
@@ -612,7 +630,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 +644,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, &eth_dev) < 0)
+		        &internals, &eth_dev, dict) < 0)
 		return -1;
 
 	for (i = 0; i < nb_rx_queues; i++) {
@@ -646,7 +665,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 +679,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, &eth_dev) < 0)
+		        &internals, &eth_dev, dict) < 0)
 		return -1;
 
 	for (i = 0; i < nb_rx_queues; i++) {
@@ -707,7 +727,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 +768,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..aa5b89c 100644
--- a/lib/librte_pmd_pcap/rte_eth_pcap.h
+++ b/lib/librte_pmd_pcap/rte_eth_pcap.h
@@ -47,17 +47,22 @@ extern "C" {
 
 #define RTE_ETH_PCAP_PARAM_NAME "eth_pcap"
 
+/* struct args_dict is declared in rte_eth_pcap_args_parser.h */
+struct args_dict;
+
 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.7.10.4

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [dpdk-dev] [PATCH v3 1/2] ethdev: Introduce if_index field to struct rte_eth_dev_info
  2014-01-09 13:42 ` [dpdk-dev] [PATCH v3 1/2] ethdev: " liljegren.mats2
@ 2014-01-17 17:33   ` Thomas Monjalon
  0 siblings, 0 replies; 6+ messages in thread
From: Thomas Monjalon @ 2014-01-17 17:33 UTC (permalink / raw)
  To: Mats Liljegren; +Cc: dev

what about this title?
"ethdev: introduce if_index in device info"

> This field is intended for pcap to describe the name of the interface
> as known to Linux. It is an interface index, but can be translated into
> an interface name using if_indextoname() function.
> 
> When using pcap, interrupt affinity becomes important, and this field
> gives the application a chance to ensure that interrupt affinity is set
> to the lcore handling the device.
> 
> Signed-off-by: Mats Liljegren <mats.liljegren@enea.com>
> 
[...]
> +	unsigned int if_index; /**< Index to bounded host interface, or 0 if
> none. Use if_indextoname() to translate into an interface name. */

I'd split this long line like this:
+	unsigned if_index; /**< Index to bounded host interface, or 0 if none.
+	         Use if_indextoname() to translate into an interface name. */

-- 
Thomas

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [dpdk-dev] [PATCH v3 2/2] pcap: Fill in if_index field for rte_eth_dev_info_get()
  2014-01-09 13:42 ` [dpdk-dev] [PATCH v3 2/2] pcap: Fill in if_index field for rte_eth_dev_info_get() liljegren.mats2
@ 2014-01-17 17:48   ` Thomas Monjalon
  2014-01-21  8:40     ` Mats Liljegren
  0 siblings, 1 reply; 6+ messages in thread
From: Thomas Monjalon @ 2014-01-17 17:48 UTC (permalink / raw)
  To: Mats Liljegren; +Cc: dev

what about this title?
"pcap: save if_index of the bound device"

> From: Mats Liljegren <mats.liljegren@enea.com>
> 
> Signed-off-by: Mats Liljegren <mats.liljegren@enea.com>

Could you provide a little explanation, especially about struct args_dict ?

The code seems OK.
Thanks
-- 
Thomas

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [dpdk-dev] [PATCH v3 2/2] pcap: Fill in if_index field for rte_eth_dev_info_get()
  2014-01-17 17:48   ` Thomas Monjalon
@ 2014-01-21  8:40     ` Mats Liljegren
  0 siblings, 0 replies; 6+ messages in thread
From: Mats Liljegren @ 2014-01-21  8:40 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: dev, Mats Liljegren

I can make new patches with the requested new titles. I found a
compiler warning caused by my code that I can remove at the same
time...

struct args_dict is found in rte_eth_pcap_arg_parser.h and is a
dictionary for command line parameters.

/Mats

On Fri, Jan 17, 2014 at 6:48 PM, Thomas Monjalon
<thomas.monjalon@6wind.com> wrote:
> what about this title?
> "pcap: save if_index of the bound device"
>
>> From: Mats Liljegren <mats.liljegren@enea.com>
>>
>> Signed-off-by: Mats Liljegren <mats.liljegren@enea.com>
>
> Could you provide a little explanation, especially about struct args_dict ?
>
> The code seems OK.
> Thanks
> --
> Thomas

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2014-01-21  8:38 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-09 13:42 [dpdk-dev] [PATCH v3 0/2] Introduce if_index field to struct rte_eth_dev_info liljegren.mats2
2014-01-09 13:42 ` [dpdk-dev] [PATCH v3 1/2] ethdev: " liljegren.mats2
2014-01-17 17:33   ` Thomas Monjalon
2014-01-09 13:42 ` [dpdk-dev] [PATCH v3 2/2] pcap: Fill in if_index field for rte_eth_dev_info_get() liljegren.mats2
2014-01-17 17:48   ` Thomas Monjalon
2014-01-21  8:40     ` Mats Liljegren

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).