[PATCH 15/62] net/pcap: use kvargs numeric helpers
Stephen Hemminger
stephen at networkplumber.org
Mon Sep 14 07:46:46 CEST 2026
The open coded conversion is correct, but the same checks are now
available from kvargs.
process_bool_flag() duplicated what rte_kvargs_handle_bool() does, so
drop it and use the helper for phy_mac, infinite_rx and eof. The
process_opt() form newly enables the bare "infinite_rx" spelling: the
value == NULL branch of process_bool_flag() was dead, since
rte_kvargs_process() rejects a missing value before the handler runs.
The usual words such as "on" and "true" are now accepted as well,
while an empty "infinite_rx=" is rejected rather than taken as true.
Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
---
drivers/net/pcap/pcap_ethdev.c | 51 ++++++++--------------------------
1 file changed, 12 insertions(+), 39 deletions(-)
diff --git a/drivers/net/pcap/pcap_ethdev.c b/drivers/net/pcap/pcap_ethdev.c
index 08d3ab9e91..b262498f7d 100644
--- a/drivers/net/pcap/pcap_ethdev.c
+++ b/drivers/net/pcap/pcap_ethdev.c
@@ -1586,46 +1586,19 @@ open_tx_iface(const char *key, const char *value, void *extra_args)
return open_iface(key, value, extra_args);
}
-static int
-process_bool_flag(const char *key, const char *value, void *extra_args)
-{
- bool *flag = extra_args;
-
- if (value == NULL || *value == '\0') {
- *flag = true; /* default with no additional argument */
- } else if (strcmp(value, "0") == 0) {
- *flag = false;
- } else if (strcmp(value, "1") == 0) {
- *flag = true;
- } else {
- PMD_LOG(ERR, "Invalid '%s' value '%s'", key, value);
- return -1;
- }
- return 0;
-}
-
static int
process_snapshot_len(const char *key, const char *value, void *extra_args)
{
- uint32_t *snaplen = extra_args;
- unsigned long val;
- char *endptr;
-
- if (value == NULL || *value == '\0') {
- PMD_LOG(ERR, "Argument '%s' requires a value", key);
- return -1;
- }
+ uint64_t val;
- errno = 0;
- val = strtoul(value, &endptr, 10);
- if (errno != 0 || *endptr != '\0' ||
- val < RTE_ETHER_HDR_LEN ||
- val > ETH_PCAP_MAXIMUM_SNAPLEN) {
- PMD_LOG(ERR, "Invalid '%s' value '%s'", key, value);
+ if (rte_kvargs_to_uint(value, RTE_ETHER_HDR_LEN,
+ ETH_PCAP_MAXIMUM_SNAPLEN, &val) < 0) {
+ PMD_LOG(ERR, "Invalid '%s' value '%s'", key,
+ value == NULL ? "" : value);
return -1;
}
- *snaplen = (uint32_t)val;
+ *(uint32_t *)extra_args = val;
return 0;
}
@@ -1934,8 +1907,8 @@ pmd_pcap_probe(struct rte_vdev_device *dev)
dumpers.queue[0] = pcaps.queue[0];
- ret = rte_kvargs_process(kvlist, ETH_PCAP_PHY_MAC_ARG,
- &process_bool_flag, &pcaps.phy_mac);
+ ret = rte_kvargs_process_opt(kvlist, ETH_PCAP_PHY_MAC_ARG,
+ rte_kvargs_handle_bool, &pcaps.phy_mac);
if (ret < 0)
goto free_kvlist;
@@ -1973,9 +1946,9 @@ pmd_pcap_probe(struct rte_vdev_device *dev)
ETH_PCAP_INFINITE_RX_ARG);
if (infinite_rx_arg_cnt == 1) {
- ret = rte_kvargs_process(kvlist,
+ ret = rte_kvargs_process_opt(kvlist,
ETH_PCAP_INFINITE_RX_ARG,
- &process_bool_flag,
+ rte_kvargs_handle_bool,
&devargs_all.infinite_rx);
if (ret < 0)
goto free_kvlist;
@@ -1993,8 +1966,8 @@ pmd_pcap_probe(struct rte_vdev_device *dev)
* Check whether to signal EOF via link status change.
*/
if (rte_kvargs_count(kvlist, ETH_PCAP_EOF_ARG) == 1) {
- ret = rte_kvargs_process(kvlist, ETH_PCAP_EOF_ARG,
- &process_bool_flag,
+ ret = rte_kvargs_process_opt(kvlist, ETH_PCAP_EOF_ARG,
+ rte_kvargs_handle_bool,
&devargs_all.eof);
if (ret < 0)
goto free_kvlist;
--
2.53.0
More information about the dev
mailing list