DPDK patches and discussions
 help / color / mirror / Atom feed
From: Tiago Lam <tiago.lam@intel.com>
To: dev@dpdk.org
Cc: ferruh.yigit@intel.com, linville@tuxdriver.com,
	Tiago Lam <tiago.lam@intel.com>
Subject: [dpdk-dev] [PATCH 2/3] net/af_packet: Move parse and validation of iface.
Date: Tue, 20 Nov 2018 09:54:56 +0000	[thread overview]
Message-ID: <1542707697-175836-2-git-send-email-tiago.lam@intel.com> (raw)
In-Reply-To: <1542707697-175836-1-git-send-email-tiago.lam@intel.com>

Instead of re-iterating through kvlist just to parse the
ETH_AF_PACKET_IFACE_ARG argument in rte_pmd_init_internals(), we now use
the already existing iteration in rte_eth_from_packet() to parse and
validate the ETH_AF_PACKET_IFACE_ARG argument.

This will be useful for a later commit, which needs to access the
interface name to get the underlying configured MTU.

Signed-off-by: Tiago Lam <tiago.lam@intel.com>
---
 drivers/net/af_packet/rte_eth_af_packet.c | 77 ++++++++++++++++---------------
 1 file changed, 41 insertions(+), 36 deletions(-)

diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
index 264cfc0..4e95dd7 100644
--- a/drivers/net/af_packet/rte_eth_af_packet.c
+++ b/drivers/net/af_packet/rte_eth_af_packet.c
@@ -540,15 +540,12 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
 		       unsigned int qdisc_bypass,
                        struct pmd_internals **internals,
                        struct rte_eth_dev **eth_dev,
-                       struct rte_kvargs *kvlist)
+                       const char *ifname)
 {
 	const char *name = rte_vdev_device_name(dev);
 	const unsigned int numa_node = dev->device.numa_node;
 	struct rte_eth_dev_data *data = NULL;
-	struct rte_kvargs_pair *pair = NULL;
 	struct ifreq ifr;
-	size_t ifnamelen;
-	unsigned k_idx;
 	struct sockaddr_ll sockaddr;
 	struct tpacket_req *req;
 	struct pkt_rx_queue *rx_queue;
@@ -560,18 +557,6 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
 	int fanout_arg;
 #endif
 
-	for (k_idx = 0; k_idx < kvlist->count; k_idx++) {
-		pair = &kvlist->pairs[k_idx];
-		if (strstr(pair->key, ETH_AF_PACKET_IFACE_ARG) != NULL)
-			break;
-	}
-	if (pair == NULL) {
-		PMD_LOG(ERR,
-			"%s: no interface specified for AF_PACKET ethdev",
-		        name);
-		return -1;
-	}
-
 	PMD_LOG(INFO,
 		"%s: creating AF_PACKET-backed ethdev on numa socket %u",
 		name, numa_node);
@@ -593,23 +578,14 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
 	req->tp_frame_size = framesize;
 	req->tp_frame_nr = framecnt;
 
-	ifnamelen = strlen(pair->value);
-	if (ifnamelen < sizeof(ifr.ifr_name)) {
-		memcpy(ifr.ifr_name, pair->value, ifnamelen);
-		ifr.ifr_name[ifnamelen] = '\0';
-	} else {
-		PMD_LOG(ERR,
-			"%s: I/F name too long (%s)",
-			name, pair->value);
-		return -1;
-	}
+	memcpy(ifr.ifr_name, ifname, strlen(ifname));
 	if (ioctl(sockfd, SIOCGIFINDEX, &ifr) == -1) {
 		PMD_LOG(ERR,
 			"%s: ioctl failed (SIOCGIFINDEX)",
 		        name);
 		return -1;
 	}
-	(*internals)->if_name = strdup(pair->value);
+	(*internals)->if_name = strdup(ifname);
 	if ((*internals)->if_name == NULL)
 		return -1;
 	(*internals)->if_index = ifr.ifr_ifindex;
@@ -651,7 +627,7 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
 		if (rc == -1) {
 			PMD_LOG(ERR,
 				"%s: could not set PACKET_VERSION on AF_PACKET socket for %s",
-				name, pair->value);
+				name, ifname);
 			goto error;
 		}
 
@@ -661,7 +637,7 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
 		if (rc == -1) {
 			PMD_LOG(ERR,
 				"%s: could not set PACKET_LOSS on AF_PACKET socket for %s",
-				name, pair->value);
+				name, ifname);
 			goto error;
 		}
 
@@ -671,7 +647,7 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
 		if (rc == -1) {
 			PMD_LOG(ERR,
 				"%s: could not set PACKET_QDISC_BYPASS on AF_PACKET socket for %s",
-				name, pair->value);
+				name, ifname);
 			goto error;
 		}
 #else
@@ -682,7 +658,7 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
 		if (rc == -1) {
 			PMD_LOG(ERR,
 				"%s: could not set PACKET_RX_RING on AF_PACKET socket for %s",
-				name, pair->value);
+				name, ifname);
 			goto error;
 		}
 
@@ -690,7 +666,7 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
 		if (rc == -1) {
 			PMD_LOG(ERR,
 				"%s: could not set PACKET_TX_RING on AF_PACKET "
-				"socket for %s", name, pair->value);
+				"socket for %s", name, ifname);
 			goto error;
 		}
 
@@ -703,7 +679,7 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
 		if (rx_queue->map == MAP_FAILED) {
 			PMD_LOG(ERR,
 				"%s: call to mmap failed on AF_PACKET socket for %s",
-				name, pair->value);
+				name, ifname);
 			goto error;
 		}
 
@@ -740,7 +716,7 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
 		if (rc == -1) {
 			PMD_LOG(ERR,
 				"%s: could not bind AF_PACKET socket to %s",
-			        name, pair->value);
+			        name, ifname);
 			goto error;
 		}
 
@@ -750,7 +726,7 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
 		if (rc == -1) {
 			PMD_LOG(ERR,
 				"%s: could not set PACKET_FANOUT on AF_PACKET socket "
-				"for %s", name, pair->value);
+				"for %s", name, ifname);
 			goto error;
 		}
 #endif
@@ -816,6 +792,9 @@ rte_eth_from_packet(struct rte_vdev_device *dev,
 	unsigned int framecount = DFLT_FRAME_COUNT;
 	unsigned int qpairs = 1;
 	unsigned int qdisc_bypass = 1;
+	struct ifreq ifr;
+	char *ifname = NULL;
+	size_t ifnamelen;
 
 	/* do some parameter checking */
 	if (*sockfd < 0)
@@ -877,6 +856,32 @@ rte_eth_from_packet(struct rte_vdev_device *dev,
 			}
 			continue;
 		}
+		if (strstr(pair->key, ETH_AF_PACKET_IFACE_ARG) != NULL) {
+			ifname = pair->value;
+			if (strlen(ifname) == 0) {
+				RTE_LOG(ERR, PMD,
+					"%s: invalid iface value\n",
+					name);
+				return -1;
+			}
+
+			continue;
+		}
+	}
+
+	if (ifname == NULL) {
+		RTE_LOG(ERR, PMD,
+			"%s: no interface specified for AF_PACKET ethdev\n",
+		        name);
+		return -1;
+	}
+
+	ifnamelen = strlen(ifname);
+	if (ifnamelen >= sizeof(ifr.ifr_name)) {
+		RTE_LOG(ERR, PMD,
+			"%s: I/F name too long (%s)\n",
+			name, ifname);
+		return -1;
 	}
 
 	if (framesize > blocksize) {
@@ -904,7 +909,7 @@ rte_eth_from_packet(struct rte_vdev_device *dev,
 				   framesize, framecount,
 				   qdisc_bypass,
 				   &internals, &eth_dev,
-				   kvlist) < 0)
+				   ifname) < 0)
 		return -1;
 
 	eth_dev->rx_pkt_burst = eth_af_packet_rx;
-- 
2.7.4

  reply	other threads:[~2018-11-20  9:55 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-20  9:54 [dpdk-dev] [PATCH 1/3] net/af_packet: set_mtu() decrements sockaddr twice Tiago Lam
2018-11-20  9:54 ` Tiago Lam [this message]
2018-11-20  9:54 ` [dpdk-dev] [PATCH 3/3] net/af_packet: Get 'framesz' from the iface's MTU Tiago Lam
2018-11-20 10:26 ` [dpdk-dev] [PATCH v2 1/3] net/af_packet: set_mtu() decrements sockaddr twice Tiago Lam
2018-11-20 10:26   ` [dpdk-dev] [PATCH v2 2/3] net/af_packet: move parse and validation of iface Tiago Lam
2018-11-27 17:42     ` Ferruh Yigit
2018-11-20 10:26   ` [dpdk-dev] [PATCH v2 3/3] net/af_packet: get 'framesz' from the iface's MTU Tiago Lam
2018-11-27 17:43     ` Ferruh Yigit
2018-11-27 17:45       ` Ferruh Yigit
2018-11-28 13:12       ` Lam, Tiago
2018-11-28 13:33         ` Ferruh Yigit
2018-12-17  9:21           ` Lam, Tiago
2018-12-21 12:21             ` Ferruh Yigit
2019-02-18 18:01         ` Yigit, Ferruh
2019-03-19 13:16           ` Yigit, Ferruh
2019-03-19 13:16             ` Yigit, Ferruh
2018-11-20 10:29   ` [dpdk-dev] [PATCH v2 1/3] net/af_packet: set_mtu() decrements sockaddr twice Kevin Traynor
2018-11-20 10:45     ` Lam, Tiago
2018-11-27 17:42   ` Ferruh Yigit
2018-12-21 12:29   ` Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1542707697-175836-2-git-send-email-tiago.lam@intel.com \
    --to=tiago.lam@intel.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=linville@tuxdriver.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).