get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/114633/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 114633,
    "url": "http://patches.dpdk.org/api/patches/114633/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20220804165839.1074817-10-cristian.dumitrescu@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20220804165839.1074817-10-cristian.dumitrescu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220804165839.1074817-10-cristian.dumitrescu@intel.com",
    "date": "2022-08-04T16:58:27",
    "name": "[09/21] net/softnic: remove unused text parsing functions",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "1f5936b36d4846d5be34e82a84c2010155abaaad",
    "submitter": {
        "id": 19,
        "url": "http://patches.dpdk.org/api/people/19/?format=api",
        "name": "Cristian Dumitrescu",
        "email": "cristian.dumitrescu@intel.com"
    },
    "delegate": {
        "id": 3961,
        "url": "http://patches.dpdk.org/api/users/3961/?format=api",
        "username": "arybchenko",
        "first_name": "Andrew",
        "last_name": "Rybchenko",
        "email": "andrew.rybchenko@oktetlabs.ru"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20220804165839.1074817-10-cristian.dumitrescu@intel.com/mbox/",
    "series": [
        {
            "id": 24205,
            "url": "http://patches.dpdk.org/api/series/24205/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=24205",
            "date": "2022-08-04T16:58:18",
            "name": "net/softnic: replace the legacy pipeline with SWX pipeline",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/24205/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/114633/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/114633/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 9986EA00C4;\n\tThu,  4 Aug 2022 19:00:26 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 6178D42C49;\n\tThu,  4 Aug 2022 18:59:06 +0200 (CEST)",
            "from mga14.intel.com (mga14.intel.com [192.55.52.115])\n by mails.dpdk.org (Postfix) with ESMTP id 9FA3B42C1C\n for <dev@dpdk.org>; Thu,  4 Aug 2022 18:59:00 +0200 (CEST)",
            "from orsmga001.jf.intel.com ([10.7.209.18])\n by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 04 Aug 2022 09:58:59 -0700",
            "from silpixa00400573.ir.intel.com (HELO\n silpixa00400573.ger.corp.intel.com) ([10.237.223.157])\n by orsmga001.jf.intel.com with ESMTP; 04 Aug 2022 09:58:58 -0700"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1659632341; x=1691168341;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=DM264AdzxyqriLKwD3dgUCAwrSyxCn0E6MNa4okAhvA=;\n b=ZakoDmqPS1lQp2tuOlm08j6NFGjGUp7PwBdy0YeL0dEmmwCZC9pG9m6W\n 7snCxlEr8/TVpPVV1yJw+Isa8JFxs9XUm8IL7m1Bmrhhb2y2evSZJpDcD\n 2dy43iwDH2MoOZqTBnqfkZZhwX6ZiylsrnRIJUAQOstx8fRJOX1PbTBbk\n D8ehi5607lcijXu+6FH6BHaAyAsIaCJmC3sslYTk3+EZNv4VtceviyjgH\n +90+ap8TTi++no0GdZNeyUe9bzC+2+64B5lU0OOtTDPIrjBXHSoueMdDa\n eVAlVOYAMzXEB63XxjBaU2g+qAOvAmLqlEVhTX9wT+T+Tl1Btm//fpBiF Q==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6400,9594,10429\"; a=\"290000144\"",
            "E=Sophos;i=\"5.93,216,1654585200\"; d=\"scan'208\";a=\"290000144\"",
            "E=Sophos;i=\"5.93,216,1654585200\"; d=\"scan'208\";a=\"636163158\""
        ],
        "X-ExtLoop1": "1",
        "From": "Cristian Dumitrescu <cristian.dumitrescu@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "jasvinder.singh@intel.com,\n\tyogesh.jangra@intel.com",
        "Subject": "[PATCH 09/21] net/softnic: remove unused text parsing functions",
        "Date": "Thu,  4 Aug 2022 16:58:27 +0000",
        "Message-Id": "<20220804165839.1074817-10-cristian.dumitrescu@intel.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20220804165839.1074817-1-cristian.dumitrescu@intel.com>",
        "References": "<20220804165839.1074817-1-cristian.dumitrescu@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "Remove the text parsing functions that are not used.\n\nSigned-off-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>\nSigned-off-by: Yogesh Jangra <yogesh.jangra@intel.com>\n---\n drivers/net/softnic/meson.build           |   1 -\n drivers/net/softnic/parser.c              | 523 ----------------------\n drivers/net/softnic/parser.h              |  68 ---\n drivers/net/softnic/rte_eth_softnic_cli.c |  56 ++-\n 4 files changed, 48 insertions(+), 600 deletions(-)\n delete mode 100644 drivers/net/softnic/parser.c\n delete mode 100644 drivers/net/softnic/parser.h",
    "diff": "diff --git a/drivers/net/softnic/meson.build b/drivers/net/softnic/meson.build\nindex 0ffe26d671..5dfbd16c77 100644\n--- a/drivers/net/softnic/meson.build\n+++ b/drivers/net/softnic/meson.build\n@@ -8,7 +8,6 @@ endif\n headers = files('rte_eth_softnic.h')\n sources = files(\n         'conn.c',\n-        'parser.c',\n         'rte_eth_softnic.c',\n         'rte_eth_softnic_cli.c',\n         'rte_eth_softnic_mempool.c',\ndiff --git a/drivers/net/softnic/parser.c b/drivers/net/softnic/parser.c\ndeleted file mode 100644\nindex ebcb10268a..0000000000\n--- a/drivers/net/softnic/parser.c\n+++ /dev/null\n@@ -1,523 +0,0 @@\n-/* SPDX-License-Identifier: BSD-3-Clause\n- * Copyright(c) 2016 Intel Corporation.\n- * Copyright (c) 2009, Olivier MATZ <zer0@droids-corp.org>\n- * All rights reserved.\n- */\n-\n-#include <stdint.h>\n-#include <stdlib.h>\n-#include <stdio.h>\n-#include <ctype.h>\n-#include <getopt.h>\n-#include <errno.h>\n-#include <stdarg.h>\n-#include <string.h>\n-#include <libgen.h>\n-#include <unistd.h>\n-#include <sys/wait.h>\n-#include <arpa/inet.h>\n-#include <sys/socket.h>\n-\n-#include <rte_errno.h>\n-\n-#include \"parser.h\"\n-\n-static uint32_t\n-get_hex_val(char c)\n-{\n-\tswitch (c) {\n-\tcase '0': case '1': case '2': case '3': case '4': case '5':\n-\tcase '6': case '7': case '8': case '9':\n-\t\treturn c - '0';\n-\tcase 'A': case 'B': case 'C': case 'D': case 'E': case 'F':\n-\t\treturn c - 'A' + 10;\n-\tcase 'a': case 'b': case 'c': case 'd': case 'e': case 'f':\n-\t\treturn c - 'a' + 10;\n-\tdefault:\n-\t\treturn 0;\n-\t}\n-}\n-\n-int\n-softnic_parser_read_arg_bool(const char *p)\n-{\n-\tp = skip_white_spaces(p);\n-\tint result = -EINVAL;\n-\n-\tif (((p[0] == 'y') && (p[1] == 'e') && (p[2] == 's')) ||\n-\t\t((p[0] == 'Y') && (p[1] == 'E') && (p[2] == 'S'))) {\n-\t\tp += 3;\n-\t\tresult = 1;\n-\t}\n-\n-\tif (((p[0] == 'o') && (p[1] == 'n')) ||\n-\t\t((p[0] == 'O') && (p[1] == 'N'))) {\n-\t\tp += 2;\n-\t\tresult = 1;\n-\t}\n-\n-\tif (((p[0] == 'n') && (p[1] == 'o')) ||\n-\t\t((p[0] == 'N') && (p[1] == 'O'))) {\n-\t\tp += 2;\n-\t\tresult = 0;\n-\t}\n-\n-\tif (((p[0] == 'o') && (p[1] == 'f') && (p[2] == 'f')) ||\n-\t\t((p[0] == 'O') && (p[1] == 'F') && (p[2] == 'F'))) {\n-\t\tp += 3;\n-\t\tresult = 0;\n-\t}\n-\n-\tp = skip_white_spaces(p);\n-\n-\tif (p[0] != '\\0')\n-\t\treturn -EINVAL;\n-\n-\treturn result;\n-}\n-\n-int\n-softnic_parser_read_int32(int32_t *value, const char *p)\n-{\n-\tchar *next;\n-\tint32_t val;\n-\n-\tp = skip_white_spaces(p);\n-\tif (!isdigit(*p))\n-\t\treturn -EINVAL;\n-\n-\tval = strtol(p, &next, 10);\n-\tif (p == next)\n-\t\treturn -EINVAL;\n-\n-\t*value = val;\n-\treturn 0;\n-}\n-\n-int\n-softnic_parser_read_uint64(uint64_t *value, const char *p)\n-{\n-\tchar *next;\n-\tuint64_t val;\n-\n-\tp = skip_white_spaces(p);\n-\tif (!isdigit(*p))\n-\t\treturn -EINVAL;\n-\n-\tval = strtoul(p, &next, 10);\n-\tif (p == next)\n-\t\treturn -EINVAL;\n-\n-\tp = next;\n-\tswitch (*p) {\n-\tcase 'T':\n-\t\tval *= 1024ULL;\n-\t\t/* fall through */\n-\tcase 'G':\n-\t\tval *= 1024ULL;\n-\t\t/* fall through */\n-\tcase 'M':\n-\t\tval *= 1024ULL;\n-\t\t/* fall through */\n-\tcase 'k':\n-\tcase 'K':\n-\t\tval *= 1024ULL;\n-\t\tp++;\n-\t\tbreak;\n-\t}\n-\n-\tp = skip_white_spaces(p);\n-\tif (*p != '\\0')\n-\t\treturn -EINVAL;\n-\n-\t*value = val;\n-\treturn 0;\n-}\n-\n-int\n-softnic_parser_read_uint64_hex(uint64_t *value, const char *p)\n-{\n-\tchar *next;\n-\tuint64_t val;\n-\n-\tp = skip_white_spaces(p);\n-\n-\tval = strtoul(p, &next, 16);\n-\tif (p == next)\n-\t\treturn -EINVAL;\n-\n-\tp = skip_white_spaces(next);\n-\tif (*p != '\\0')\n-\t\treturn -EINVAL;\n-\n-\t*value = val;\n-\treturn 0;\n-}\n-\n-int\n-softnic_parser_read_uint32(uint32_t *value, const char *p)\n-{\n-\tuint64_t val = 0;\n-\tint ret = softnic_parser_read_uint64(&val, p);\n-\n-\tif (ret < 0)\n-\t\treturn ret;\n-\n-\tif (val > UINT32_MAX)\n-\t\treturn -ERANGE;\n-\n-\t*value = val;\n-\treturn 0;\n-}\n-\n-int\n-softnic_parser_read_uint32_hex(uint32_t *value, const char *p)\n-{\n-\tuint64_t val = 0;\n-\tint ret = softnic_parser_read_uint64_hex(&val, p);\n-\n-\tif (ret < 0)\n-\t\treturn ret;\n-\n-\tif (val > UINT32_MAX)\n-\t\treturn -ERANGE;\n-\n-\t*value = val;\n-\treturn 0;\n-}\n-\n-int\n-softnic_parser_read_uint16(uint16_t *value, const char *p)\n-{\n-\tuint64_t val = 0;\n-\tint ret = softnic_parser_read_uint64(&val, p);\n-\n-\tif (ret < 0)\n-\t\treturn ret;\n-\n-\tif (val > UINT16_MAX)\n-\t\treturn -ERANGE;\n-\n-\t*value = val;\n-\treturn 0;\n-}\n-\n-int\n-softnic_parser_read_uint16_hex(uint16_t *value, const char *p)\n-{\n-\tuint64_t val = 0;\n-\tint ret = softnic_parser_read_uint64_hex(&val, p);\n-\n-\tif (ret < 0)\n-\t\treturn ret;\n-\n-\tif (val > UINT16_MAX)\n-\t\treturn -ERANGE;\n-\n-\t*value = val;\n-\treturn 0;\n-}\n-\n-int\n-softnic_parser_read_uint8(uint8_t *value, const char *p)\n-{\n-\tuint64_t val = 0;\n-\tint ret = softnic_parser_read_uint64(&val, p);\n-\n-\tif (ret < 0)\n-\t\treturn ret;\n-\n-\tif (val > UINT8_MAX)\n-\t\treturn -ERANGE;\n-\n-\t*value = val;\n-\treturn 0;\n-}\n-\n-int\n-softnic_parser_read_uint8_hex(uint8_t *value, const char *p)\n-{\n-\tuint64_t val = 0;\n-\tint ret = softnic_parser_read_uint64_hex(&val, p);\n-\n-\tif (ret < 0)\n-\t\treturn ret;\n-\n-\tif (val > UINT8_MAX)\n-\t\treturn -ERANGE;\n-\n-\t*value = val;\n-\treturn 0;\n-}\n-\n-int\n-softnic_parse_tokenize_string(char *string, char *tokens[], uint32_t *n_tokens)\n-{\n-\tuint32_t i;\n-\n-\tif (string == NULL ||\n-\t\ttokens == NULL ||\n-\t\t(*n_tokens < 1))\n-\t\treturn -EINVAL;\n-\n-\tfor (i = 0; i < *n_tokens; i++) {\n-\t\ttokens[i] = strtok_r(string, PARSE_DELIMITER, &string);\n-\t\tif (tokens[i] == NULL)\n-\t\t\tbreak;\n-\t}\n-\n-\tif (i == *n_tokens &&\n-\t\tstrtok_r(string, PARSE_DELIMITER, &string) != NULL)\n-\t\treturn -E2BIG;\n-\n-\t*n_tokens = i;\n-\treturn 0;\n-}\n-\n-int\n-softnic_parse_hex_string(char *src, uint8_t *dst, uint32_t *size)\n-{\n-\tchar *c;\n-\tuint32_t len, i;\n-\n-\t/* Check input parameters */\n-\tif (src == NULL ||\n-\t\tdst == NULL ||\n-\t\tsize == NULL ||\n-\t\t(*size == 0))\n-\t\treturn -1;\n-\n-\tlen = strlen(src);\n-\tif (((len & 3) != 0) ||\n-\t\t(len > (*size) * 2))\n-\t\treturn -1;\n-\t*size = len / 2;\n-\n-\tfor (c = src; *c != 0; c++) {\n-\t\tif ((((*c) >= '0') && ((*c) <= '9')) ||\n-\t\t\t(((*c) >= 'A') && ((*c) <= 'F')) ||\n-\t\t\t(((*c) >= 'a') && ((*c) <= 'f')))\n-\t\t\tcontinue;\n-\n-\t\treturn -1;\n-\t}\n-\n-\t/* Convert chars to bytes */\n-\tfor (i = 0; i < *size; i++)\n-\t\tdst[i] = get_hex_val(src[2 * i]) * 16 +\n-\t\t\tget_hex_val(src[2 * i + 1]);\n-\n-\treturn 0;\n-}\n-\n-int\n-softnic_parse_mpls_labels(char *string, uint32_t *labels, uint32_t *n_labels)\n-{\n-\tuint32_t n_max_labels = *n_labels, count = 0;\n-\n-\t/* Check for void list of labels */\n-\tif (strcmp(string, \"<void>\") == 0) {\n-\t\t*n_labels = 0;\n-\t\treturn 0;\n-\t}\n-\n-\t/* At least one label should be present */\n-\tfor ( ; (*string != '\\0'); ) {\n-\t\tchar *next;\n-\t\tint value;\n-\n-\t\tif (count >= n_max_labels)\n-\t\t\treturn -1;\n-\n-\t\tif (count > 0) {\n-\t\t\tif (string[0] != ':')\n-\t\t\t\treturn -1;\n-\n-\t\t\tstring++;\n-\t\t}\n-\n-\t\tvalue = strtol(string, &next, 10);\n-\t\tif (next == string)\n-\t\t\treturn -1;\n-\t\tstring = next;\n-\n-\t\tlabels[count++] = (uint32_t)value;\n-\t}\n-\n-\t*n_labels = count;\n-\treturn 0;\n-}\n-\n-static struct rte_ether_addr *\n-my_ether_aton(const char *a)\n-{\n-\tint i;\n-\tchar *end;\n-\tunsigned long o[RTE_ETHER_ADDR_LEN];\n-\tstatic struct rte_ether_addr ether_addr;\n-\n-\ti = 0;\n-\tdo {\n-\t\terrno = 0;\n-\t\to[i] = strtoul(a, &end, 16);\n-\t\tif (errno != 0 || end == a || (end[0] != ':' && end[0] != 0))\n-\t\t\treturn NULL;\n-\t\ta = end + 1;\n-\t} while (++i != sizeof(o) / sizeof(o[0]) && end[0] != 0);\n-\n-\t/* Junk at the end of line */\n-\tif (end[0] != 0)\n-\t\treturn NULL;\n-\n-\t/* Support the format XX:XX:XX:XX:XX:XX */\n-\tif (i == RTE_ETHER_ADDR_LEN) {\n-\t\twhile (i-- != 0) {\n-\t\t\tif (o[i] > UINT8_MAX)\n-\t\t\t\treturn NULL;\n-\t\t\tether_addr.addr_bytes[i] = (uint8_t)o[i];\n-\t\t}\n-\t/* Support the format XXXX:XXXX:XXXX */\n-\t} else if (i == RTE_ETHER_ADDR_LEN / 2) {\n-\t\twhile (i-- != 0) {\n-\t\t\tif (o[i] > UINT16_MAX)\n-\t\t\t\treturn NULL;\n-\t\t\tether_addr.addr_bytes[i * 2] = (uint8_t)(o[i] >> 8);\n-\t\t\tether_addr.addr_bytes[i * 2 + 1] = (uint8_t)(o[i] & 0xff);\n-\t\t}\n-\t/* unknown format */\n-\t} else\n-\t\treturn NULL;\n-\n-\treturn (struct rte_ether_addr *)&ether_addr;\n-}\n-\n-int\n-softnic_parse_ipv4_addr(const char *token, struct in_addr *ipv4)\n-{\n-\tif (strlen(token) >= INET_ADDRSTRLEN)\n-\t\treturn -EINVAL;\n-\n-\tif (inet_pton(AF_INET, token, ipv4) != 1)\n-\t\treturn -EINVAL;\n-\n-\treturn 0;\n-}\n-\n-int\n-softnic_parse_ipv6_addr(const char *token, struct in6_addr *ipv6)\n-{\n-\tif (strlen(token) >= INET6_ADDRSTRLEN)\n-\t\treturn -EINVAL;\n-\n-\tif (inet_pton(AF_INET6, token, ipv6) != 1)\n-\t\treturn -EINVAL;\n-\n-\treturn 0;\n-}\n-\n-int\n-softnic_parse_mac_addr(const char *token, struct rte_ether_addr *addr)\n-{\n-\tstruct rte_ether_addr *tmp;\n-\n-\ttmp = my_ether_aton(token);\n-\tif (tmp == NULL)\n-\t\treturn -1;\n-\n-\tmemcpy(addr, tmp, sizeof(struct rte_ether_addr));\n-\treturn 0;\n-}\n-\n-int\n-softnic_parse_cpu_core(const char *entry,\n-\tstruct softnic_cpu_core_params *p)\n-{\n-\tsize_t num_len;\n-\tchar num[8];\n-\n-\tuint32_t s = 0, c = 0, h = 0, val;\n-\tuint8_t s_parsed = 0, c_parsed = 0, h_parsed = 0;\n-\tconst char *next = skip_white_spaces(entry);\n-\tchar type;\n-\n-\tif (p == NULL)\n-\t\treturn -EINVAL;\n-\n-\t/* Expect <CORE> or [sX][cY][h]. At least one parameter is required. */\n-\twhile (*next != '\\0') {\n-\t\t/* If everything parsed nothing should left */\n-\t\tif (s_parsed && c_parsed && h_parsed)\n-\t\t\treturn -EINVAL;\n-\n-\t\ttype = *next;\n-\t\tswitch (type) {\n-\t\tcase 's':\n-\t\tcase 'S':\n-\t\t\tif (s_parsed || c_parsed || h_parsed)\n-\t\t\t\treturn -EINVAL;\n-\t\t\ts_parsed = 1;\n-\t\t\tnext++;\n-\t\t\tbreak;\n-\t\tcase 'c':\n-\t\tcase 'C':\n-\t\t\tif (c_parsed || h_parsed)\n-\t\t\t\treturn -EINVAL;\n-\t\t\tc_parsed = 1;\n-\t\t\tnext++;\n-\t\t\tbreak;\n-\t\tcase 'h':\n-\t\tcase 'H':\n-\t\t\tif (h_parsed)\n-\t\t\t\treturn -EINVAL;\n-\t\t\th_parsed = 1;\n-\t\t\tnext++;\n-\t\t\tbreak;\n-\t\tdefault:\n-\t\t\t/* If it start from digit it must be only core id. */\n-\t\t\tif (!isdigit(*next) || s_parsed || c_parsed || h_parsed)\n-\t\t\t\treturn -EINVAL;\n-\n-\t\t\ttype = 'C';\n-\t\t}\n-\n-\t\tfor (num_len = 0; *next != '\\0'; next++, num_len++) {\n-\t\t\tif (num_len == RTE_DIM(num))\n-\t\t\t\treturn -EINVAL;\n-\n-\t\t\tif (!isdigit(*next))\n-\t\t\t\tbreak;\n-\n-\t\t\tnum[num_len] = *next;\n-\t\t}\n-\n-\t\tif (num_len == 0 && type != 'h' && type != 'H')\n-\t\t\treturn -EINVAL;\n-\n-\t\tif (num_len != 0 && (type == 'h' || type == 'H'))\n-\t\t\treturn -EINVAL;\n-\n-\t\tnum[num_len] = '\\0';\n-\t\tval = strtol(num, NULL, 10);\n-\n-\t\th = 0;\n-\t\tswitch (type) {\n-\t\tcase 's':\n-\t\tcase 'S':\n-\t\t\ts = val;\n-\t\t\tbreak;\n-\t\tcase 'c':\n-\t\tcase 'C':\n-\t\t\tc = val;\n-\t\t\tbreak;\n-\t\tcase 'h':\n-\t\tcase 'H':\n-\t\t\th = 1;\n-\t\t\tbreak;\n-\t\t}\n-\t}\n-\n-\tp->socket_id = s;\n-\tp->core_id = c;\n-\tp->thread_id = h;\n-\treturn 0;\n-}\ndiff --git a/drivers/net/softnic/parser.h b/drivers/net/softnic/parser.h\ndeleted file mode 100644\nindex 6f408b2485..0000000000\n--- a/drivers/net/softnic/parser.h\n+++ /dev/null\n@@ -1,68 +0,0 @@\n-/* SPDX-License-Identifier: BSD-3-Clause\n- * Copyright(c) 2010-2016 Intel Corporation\n- */\n-\n-#ifndef __INCLUDE_SOFTNIC_PARSER_H__\n-#define __INCLUDE_SOFTNIC_PARSER_H__\n-\n-#include <stdint.h>\n-\n-#include <rte_ip.h>\n-#include <rte_ether.h>\n-\n-#define PARSE_DELIMITER\t\t\t\t\" \\f\\n\\r\\t\\v\"\n-\n-#define skip_white_spaces(pos)\t\t\t\\\n-({\t\t\t\t\t\t\\\n-\t__typeof__(pos) _p = (pos);\t\t\\\n-\tfor ( ; isspace(*_p); _p++)\t\t\\\n-\t\t;\t\t\t\t\\\n-\t_p;\t\t\t\t\t\\\n-})\n-\n-static inline size_t\n-skip_digits(const char *src)\n-{\n-\tsize_t i;\n-\n-\tfor (i = 0; isdigit(src[i]); i++)\n-\t\t;\n-\n-\treturn i;\n-}\n-\n-int softnic_parser_read_arg_bool(const char *p);\n-\n-int softnic_parser_read_int32(int32_t *value, const char *p);\n-\n-int softnic_parser_read_uint64(uint64_t *value, const char *p);\n-int softnic_parser_read_uint32(uint32_t *value, const char *p);\n-int softnic_parser_read_uint16(uint16_t *value, const char *p);\n-int softnic_parser_read_uint8(uint8_t *value, const char *p);\n-\n-int softnic_parser_read_uint64_hex(uint64_t *value, const char *p);\n-int softnic_parser_read_uint32_hex(uint32_t *value, const char *p);\n-int softnic_parser_read_uint16_hex(uint16_t *value, const char *p);\n-int softnic_parser_read_uint8_hex(uint8_t *value, const char *p);\n-\n-int softnic_parse_hex_string(char *src, uint8_t *dst, uint32_t *size);\n-\n-int softnic_parse_ipv4_addr(const char *token, struct in_addr *ipv4);\n-int softnic_parse_ipv6_addr(const char *token, struct in6_addr *ipv6);\n-int softnic_parse_mac_addr(const char *token, struct rte_ether_addr *addr);\n-int softnic_parse_mpls_labels(char *string,\n-\t\tuint32_t *labels, uint32_t *n_labels);\n-\n-struct softnic_cpu_core_params {\n-\tuint32_t socket_id;\n-\tuint32_t core_id;\n-\tuint32_t thread_id;\n-};\n-\n-int softnic_parse_cpu_core(const char *entry,\n-\t\tstruct softnic_cpu_core_params *p);\n-\n-int softnic_parse_tokenize_string(char *string,\n-\t\tchar *tokens[], uint32_t *n_tokens);\n-\n-#endif\ndiff --git a/drivers/net/softnic/rte_eth_softnic_cli.c b/drivers/net/softnic/rte_eth_softnic_cli.c\nindex ec9ac133b9..c87a481355 100644\n--- a/drivers/net/softnic/rte_eth_softnic_cli.c\n+++ b/drivers/net/softnic/rte_eth_softnic_cli.c\n@@ -12,7 +12,6 @@\n #include <rte_string_fns.h>\n \n #include \"rte_eth_softnic_internals.h\"\n-#include \"parser.h\"\n \n #ifndef CMD_MAX_TOKENS\n #define CMD_MAX_TOKENS     256\n@@ -30,6 +29,47 @@\n #define MSG_FILE_NOT_ENOUGH \"Not enough rules in file \\\"%s\\\".\\n\"\n #define MSG_CMD_FAIL        \"Command \\\"%s\\\" failed.\\n\"\n \n+static int\n+parser_read_uint32(uint32_t *value, char *p)\n+{\n+\tuint32_t val = 0;\n+\n+\tif (!value || !p || !p[0])\n+\t\treturn -EINVAL;\n+\n+\tval = strtoul(p, &p, 0);\n+\tif (p[0])\n+\t\treturn -EINVAL;\n+\n+\t*value = val;\n+\treturn 0;\n+}\n+\n+#define PARSE_DELIMITER \" \\f\\n\\r\\t\\v\"\n+\n+static int\n+parse_tokenize_string(char *string, char *tokens[], uint32_t *n_tokens)\n+{\n+\tuint32_t i;\n+\n+\tif ((string == NULL) ||\n+\t\t(tokens == NULL) ||\n+\t\t(*n_tokens < 1))\n+\t\treturn -EINVAL;\n+\n+\tfor (i = 0; i < *n_tokens; i++) {\n+\t\ttokens[i] = strtok_r(string, PARSE_DELIMITER, &string);\n+\t\tif (tokens[i] == NULL)\n+\t\t\tbreak;\n+\t}\n+\n+\tif ((i == *n_tokens) && strtok_r(string, PARSE_DELIMITER, &string))\n+\t\treturn -E2BIG;\n+\n+\t*n_tokens = i;\n+\treturn 0;\n+}\n+\n static int\n is_comment(char *in)\n {\n@@ -70,7 +110,7 @@ cmd_mempool(struct pmd_internals *softnic,\n \t\treturn;\n \t}\n \n-\tif (softnic_parser_read_uint32(&p.buffer_size, tokens[3]) != 0) {\n+\tif (parser_read_uint32(&p.buffer_size, tokens[3]) != 0) {\n \t\tsnprintf(out, out_size, MSG_ARG_INVALID, \"buffer_size\");\n \t\treturn;\n \t}\n@@ -80,7 +120,7 @@ cmd_mempool(struct pmd_internals *softnic,\n \t\treturn;\n \t}\n \n-\tif (softnic_parser_read_uint32(&p.pool_size, tokens[5]) != 0) {\n+\tif (parser_read_uint32(&p.pool_size, tokens[5]) != 0) {\n \t\tsnprintf(out, out_size, MSG_ARG_INVALID, \"pool_size\");\n \t\treturn;\n \t}\n@@ -90,7 +130,7 @@ cmd_mempool(struct pmd_internals *softnic,\n \t\treturn;\n \t}\n \n-\tif (softnic_parser_read_uint32(&p.cache_size, tokens[7]) != 0) {\n+\tif (parser_read_uint32(&p.cache_size, tokens[7]) != 0) {\n \t\tsnprintf(out, out_size, MSG_ARG_INVALID, \"cache_size\");\n \t\treturn;\n \t}\n@@ -129,7 +169,7 @@ cmd_swq(struct pmd_internals *softnic,\n \t\treturn;\n \t}\n \n-\tif (softnic_parser_read_uint32(&p.size, tokens[3]) != 0) {\n+\tif (parser_read_uint32(&p.size, tokens[3]) != 0) {\n \t\tsnprintf(out, out_size, MSG_ARG_INVALID, \"size\");\n \t\treturn;\n \t}\n@@ -161,7 +201,7 @@ cmd_softnic_thread_pipeline_enable(struct pmd_internals *softnic,\n \t\treturn;\n \t}\n \n-\tif (softnic_parser_read_uint32(&thread_id, tokens[1]) != 0) {\n+\tif (parser_read_uint32(&thread_id, tokens[1]) != 0) {\n \t\tsnprintf(out, out_size, MSG_ARG_INVALID, \"thread_id\");\n \t\treturn;\n \t}\n@@ -210,7 +250,7 @@ cmd_softnic_thread_pipeline_disable(struct pmd_internals *softnic,\n \t\treturn;\n \t}\n \n-\tif (softnic_parser_read_uint32(&thread_id, tokens[1]) != 0) {\n+\tif (parser_read_uint32(&thread_id, tokens[1]) != 0) {\n \t\tsnprintf(out, out_size, MSG_ARG_INVALID, \"thread_id\");\n \t\treturn;\n \t}\n@@ -251,7 +291,7 @@ softnic_cli_process(char *in, char *out, size_t out_size, void *arg)\n \tif (is_comment(in))\n \t\treturn;\n \n-\tstatus = softnic_parse_tokenize_string(in, tokens, &n_tokens);\n+\tstatus = parse_tokenize_string(in, tokens, &n_tokens);\n \tif (status) {\n \t\tsnprintf(out, out_size, MSG_ARG_TOO_MANY, \"\");\n \t\treturn;\n",
    "prefixes": [
        "09/21"
    ]
}