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 <[email protected]>
---
 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

Reply via email to