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 v2 2/3] net/af_packet: move parse and validation of iface
Date: Tue, 20 Nov 2018 10:26:30 +0000 [thread overview]
Message-ID: <1542709592-215007-2-git-send-email-tiago.lam@intel.com> (raw)
In-Reply-To: <1542709592-215007-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>
---
v2: Fix checkpatches.sh and check-git-log.sh warnings.
---
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..8d749a2 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, ð_dev,
- kvlist) < 0)
+ ifname) < 0)
return -1;
eth_dev->rx_pkt_burst = eth_af_packet_rx;
--
2.7.4
next prev parent reply other threads:[~2018-11-20 10:26 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 ` [dpdk-dev] [PATCH 2/3] net/af_packet: Move parse and validation of iface Tiago Lam
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 ` Tiago Lam [this message]
2018-11-27 17:42 ` [dpdk-dev] [PATCH v2 2/3] net/af_packet: move parse and validation of iface 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=1542709592-215007-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).