DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH v4 0/2] introduce if_index in device info
@ 2014-01-24 13:24 liljegren.mats2
  2014-01-24 13:24 ` [dpdk-dev] [PATCH v4 1/2] ethdev: " liljegren.mats2
  2014-01-24 13:24 ` [dpdk-dev] [PATCH v4 2/2] pcap: save if_index of the bound device liljegren.mats2
  0 siblings, 2 replies; 5+ messages in thread
From: liljegren.mats2 @ 2014-01-24 13:24 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

Changes since v3:
- Changed commit messages
- Removed compiler warning about unused variable pair

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

* [dpdk-dev] [PATCH v4 1/2] ethdev: introduce if_index in device info
  2014-01-24 13:24 [dpdk-dev] [PATCH v4 0/2] introduce if_index in device info liljegren.mats2
@ 2014-01-24 13:24 ` liljegren.mats2
  2014-01-27 15:46   ` Thomas Monjalon
  2014-01-24 13:24 ` [dpdk-dev] [PATCH v4 2/2] pcap: save if_index of the bound device liljegren.mats2
  1 sibling, 1 reply; 5+ messages in thread
From: liljegren.mats2 @ 2014-01-24 13:24 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 |    2 ++
 2 files changed, 3 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..89e343c 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -787,6 +787,8 @@ 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] 5+ messages in thread

* [dpdk-dev] [PATCH v4 2/2] pcap: save if_index of the bound device
  2014-01-24 13:24 [dpdk-dev] [PATCH v4 0/2] introduce if_index in device info liljegren.mats2
  2014-01-24 13:24 ` [dpdk-dev] [PATCH v4 1/2] ethdev: " liljegren.mats2
@ 2014-01-24 13:24 ` liljegren.mats2
  2014-01-27 15:47   ` Thomas Monjalon
  1 sibling, 1 reply; 5+ messages in thread
From: liljegren.mats2 @ 2014-01-24 13:24 UTC (permalink / raw)
  To: dev; +Cc: Mats Liljegren

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

Use command line parameters to get the name of the interface.
This name is converted into if_index, which is provided as
device info.

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..2345ecd 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 = NULL;
+
+	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 (pair == NULL)
+		(*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] 5+ messages in thread

* Re: [dpdk-dev] [PATCH v4 1/2] ethdev: introduce if_index in device info
  2014-01-24 13:24 ` [dpdk-dev] [PATCH v4 1/2] ethdev: " liljegren.mats2
@ 2014-01-27 15:46   ` Thomas Monjalon
  0 siblings, 0 replies; 5+ messages in thread
From: Thomas Monjalon @ 2014-01-27 15:46 UTC (permalink / raw)
  To: Mats Liljegren; +Cc: dev

24/01/2014 14:24, liljegren.mats2@gmail.com:
> 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>

Acked and applied with a typo fixed.

> +	unsigned int if_index; /**< Index to bounded host interface, or 0 if none.
s/bounded/bound/

Thank you
-- 
Thomas

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

* Re: [dpdk-dev] [PATCH v4 2/2] pcap: save if_index of the bound device
  2014-01-24 13:24 ` [dpdk-dev] [PATCH v4 2/2] pcap: save if_index of the bound device liljegren.mats2
@ 2014-01-27 15:47   ` Thomas Monjalon
  0 siblings, 0 replies; 5+ messages in thread
From: Thomas Monjalon @ 2014-01-27 15:47 UTC (permalink / raw)
  To: Mats Liljegren; +Cc: dev

> From: Mats Liljegren <mats.liljegren@enea.com>
> 
> Use command line parameters to get the name of the interface.
> This name is converted into if_index, which is provided as
> device info.
> 
> Signed-off-by: Mats Liljegren <mats.liljegren@enea.com>

Acked and applied

Thank you
-- 
Thomas

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

end of thread, other threads:[~2014-01-27 15:45 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-24 13:24 [dpdk-dev] [PATCH v4 0/2] introduce if_index in device info liljegren.mats2
2014-01-24 13:24 ` [dpdk-dev] [PATCH v4 1/2] ethdev: " liljegren.mats2
2014-01-27 15:46   ` Thomas Monjalon
2014-01-24 13:24 ` [dpdk-dev] [PATCH v4 2/2] pcap: save if_index of the bound device liljegren.mats2
2014-01-27 15:47   ` Thomas Monjalon

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).