[PATCH 14/62] net/af_packet: use kvargs numeric helpers
Stephen Hemminger
stephen at networkplumber.org
Mon Sep 14 07:46:45 CEST 2026
The open coded parse_uint() is correct, but the same checks are now
available from kvargs. Use them, and express the lower bound as part of
the range rather than as a separate test after each call.
qdisc_bypass is a boolean, so parse it with rte_kvargs_handle_bool()
into a bool. A bare "qdisc_bypass" with no value now enables it, which
the manual pair loop here supports without any further change.
Note that the qdisc_bypass parameter of rte_pmd_init_internals() stays
an unsigned int: its address is passed to setsockopt(), which expects a
four byte int.
Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
---
drivers/net/af_packet/rte_eth_af_packet.c | 72 +++++------------------
1 file changed, 16 insertions(+), 56 deletions(-)
diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
index b0ff22ea55..8de4705744 100644
--- a/drivers/net/af_packet/rte_eth_af_packet.c
+++ b/drivers/net/af_packet/rte_eth_af_packet.c
@@ -15,7 +15,6 @@
#include <rte_kvargs.h>
#include <bus_vdev_driver.h>
-#include <ctype.h>
#include <errno.h>
#include <limits.h>
#include <linux/if_ether.h>
@@ -1143,36 +1142,17 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
/* Parse an unsigned integer device argument. */
static int
parse_uint(const char *key, const char *value,
- unsigned int *out, unsigned long limit)
+ unsigned int *out, unsigned long min, unsigned long max)
{
- unsigned long val;
- char *endptr;
+ uint64_t val;
- if (value == NULL) {
- PMD_LOG(ERR, "no value for argument \"%s\"", key);
- return -1;
- }
-
- /* Skip leading whitespace so a leading sign can be detected. */
- while (isspace((unsigned char)*value))
- value++;
-
- /* strtoul() silently accepts and negates a leading '-'. */
- if (*value == '\0' || *value == '-') {
- PMD_LOG(ERR, "invalid value \"%s\" for argument \"%s\"",
- value, key);
- return -1;
- }
-
- errno = 0;
- val = strtoul(value, &endptr, 10);
- if (errno != 0 || *endptr != '\0' || val > limit) {
+ if (rte_kvargs_to_uint(value, min, max, &val) < 0) {
PMD_LOG(ERR, "invalid value \"%s\" for argument \"%s\"",
- value, key);
+ value == NULL ? "" : value, key);
return -1;
}
- *out = (unsigned int)val;
+ *out = val;
return 0;
}
@@ -1191,7 +1171,7 @@ rte_eth_from_packet(struct rte_vdev_device *dev,
unsigned int framesize = DFLT_FRAME_SIZE;
unsigned int framecount = DFLT_FRAME_COUNT;
unsigned int qpairs = 1;
- unsigned int qdisc_bypass = 1;
+ bool qdisc_bypass = true;
const char *fanout_mode = NULL;
/* do some parameter checking */
@@ -1206,52 +1186,32 @@ rte_eth_from_packet(struct rte_vdev_device *dev,
for (k_idx = 0; k_idx < kvlist->count; k_idx++) {
pair = &kvlist->pairs[k_idx];
if (strstr(pair->key, ETH_AF_PACKET_NUM_Q_ARG) != NULL) {
- if (parse_uint(pair->key, pair->value,
- &qpairs, RTE_MAX_QUEUES_PER_PORT) < 0)
+ if (parse_uint(pair->key, pair->value, &qpairs,
+ 1, RTE_MAX_QUEUES_PER_PORT) < 0)
return -1;
- if (qpairs < 1) {
- PMD_LOG(ERR,
- "%s: invalid qpairs value",
- name);
- return -1;
- }
continue;
}
if (strstr(pair->key, ETH_AF_PACKET_BLOCKSIZE_ARG) != NULL) {
- if (parse_uint(pair->key, pair->value, &blocksize, UINT_MAX) < 0)
+ if (parse_uint(pair->key, pair->value, &blocksize,
+ 1, UINT_MAX) < 0)
return -1;
- if (!blocksize) {
- PMD_LOG(ERR,
- "%s: invalid blocksize value",
- name);
- return -1;
- }
continue;
}
if (strstr(pair->key, ETH_AF_PACKET_FRAMESIZE_ARG) != NULL) {
- if (parse_uint(pair->key, pair->value, &framesize, UINT_MAX) < 0)
+ if (parse_uint(pair->key, pair->value, &framesize,
+ 1, UINT_MAX) < 0)
return -1;
- if (!framesize) {
- PMD_LOG(ERR,
- "%s: invalid framesize value",
- name);
- return -1;
- }
continue;
}
if (strstr(pair->key, ETH_AF_PACKET_FRAMECOUNT_ARG) != NULL) {
- if (parse_uint(pair->key, pair->value, &framecount, UINT_MAX) < 0)
+ if (parse_uint(pair->key, pair->value, &framecount,
+ 1, UINT_MAX) < 0)
return -1;
- if (!framecount) {
- PMD_LOG(ERR,
- "%s: invalid framecount value",
- name);
- return -1;
- }
continue;
}
if (strstr(pair->key, ETH_AF_PACKET_QDISC_BYPASS_ARG) != NULL) {
- if (parse_uint(pair->key, pair->value, &qdisc_bypass, 1) < 0)
+ if (rte_kvargs_handle_bool(pair->key, pair->value,
+ &qdisc_bypass) < 0)
return -1;
continue;
}
--
2.53.0
More information about the dev
mailing list