1ac930a55SSrikanth Yalavarthi /* SPDX-License-Identifier: BSD-3-Clause
2ac930a55SSrikanth Yalavarthi * Copyright (c) 2016 Intel Corporation.
3ac930a55SSrikanth Yalavarthi * Copyright (c) 2017 Cavium, Inc.
4ac930a55SSrikanth Yalavarthi * Copyright (c) 2022 Marvell.
5ac930a55SSrikanth Yalavarthi */
6ac930a55SSrikanth Yalavarthi
7ac930a55SSrikanth Yalavarthi #include <ctype.h>
8ac930a55SSrikanth Yalavarthi #include <errno.h>
9ac930a55SSrikanth Yalavarthi #include <stdbool.h>
10ac930a55SSrikanth Yalavarthi #include <stdint.h>
11ac930a55SSrikanth Yalavarthi #include <stdlib.h>
12ac930a55SSrikanth Yalavarthi #include <string.h>
13ac930a55SSrikanth Yalavarthi
14ac930a55SSrikanth Yalavarthi #include <rte_common.h>
15*2df20a1dSDavid Marchand #include <rte_string_fns.h>
16ac930a55SSrikanth Yalavarthi
17ac930a55SSrikanth Yalavarthi #include "parser.h"
18ac930a55SSrikanth Yalavarthi
19ac930a55SSrikanth Yalavarthi static uint32_t
get_hex_val(char c)20ac930a55SSrikanth Yalavarthi get_hex_val(char c)
21ac930a55SSrikanth Yalavarthi {
22ac930a55SSrikanth Yalavarthi switch (c) {
23ac930a55SSrikanth Yalavarthi case '0':
24ac930a55SSrikanth Yalavarthi case '1':
25ac930a55SSrikanth Yalavarthi case '2':
26ac930a55SSrikanth Yalavarthi case '3':
27ac930a55SSrikanth Yalavarthi case '4':
28ac930a55SSrikanth Yalavarthi case '5':
29ac930a55SSrikanth Yalavarthi case '6':
30ac930a55SSrikanth Yalavarthi case '7':
31ac930a55SSrikanth Yalavarthi case '8':
32ac930a55SSrikanth Yalavarthi case '9':
33ac930a55SSrikanth Yalavarthi return c - '0';
34ac930a55SSrikanth Yalavarthi case 'A':
35ac930a55SSrikanth Yalavarthi case 'B':
36ac930a55SSrikanth Yalavarthi case 'C':
37ac930a55SSrikanth Yalavarthi case 'D':
38ac930a55SSrikanth Yalavarthi case 'E':
39ac930a55SSrikanth Yalavarthi case 'F':
40ac930a55SSrikanth Yalavarthi return c - 'A' + 10;
41ac930a55SSrikanth Yalavarthi case 'a':
42ac930a55SSrikanth Yalavarthi case 'b':
43ac930a55SSrikanth Yalavarthi case 'c':
44ac930a55SSrikanth Yalavarthi case 'd':
45ac930a55SSrikanth Yalavarthi case 'e':
46ac930a55SSrikanth Yalavarthi case 'f':
47ac930a55SSrikanth Yalavarthi return c - 'a' + 10;
48ac930a55SSrikanth Yalavarthi default:
49ac930a55SSrikanth Yalavarthi return 0;
50ac930a55SSrikanth Yalavarthi }
51ac930a55SSrikanth Yalavarthi }
52ac930a55SSrikanth Yalavarthi
53ac930a55SSrikanth Yalavarthi int
parser_read_arg_bool(const char * p)54ac930a55SSrikanth Yalavarthi parser_read_arg_bool(const char *p)
55ac930a55SSrikanth Yalavarthi {
56*2df20a1dSDavid Marchand p = rte_str_skip_leading_spaces(p);
57ac930a55SSrikanth Yalavarthi int result = -EINVAL;
58ac930a55SSrikanth Yalavarthi
59ac930a55SSrikanth Yalavarthi if (((p[0] == 'y') && (p[1] == 'e') && (p[2] == 's')) ||
60ac930a55SSrikanth Yalavarthi ((p[0] == 'Y') && (p[1] == 'E') && (p[2] == 'S'))) {
61ac930a55SSrikanth Yalavarthi p += 3;
62ac930a55SSrikanth Yalavarthi result = 1;
63ac930a55SSrikanth Yalavarthi }
64ac930a55SSrikanth Yalavarthi
65ac930a55SSrikanth Yalavarthi if (((p[0] == 'o') && (p[1] == 'n')) || ((p[0] == 'O') && (p[1] == 'N'))) {
66ac930a55SSrikanth Yalavarthi p += 2;
67ac930a55SSrikanth Yalavarthi result = 1;
68ac930a55SSrikanth Yalavarthi }
69ac930a55SSrikanth Yalavarthi
70ac930a55SSrikanth Yalavarthi if (((p[0] == 'n') && (p[1] == 'o')) || ((p[0] == 'N') && (p[1] == 'O'))) {
71ac930a55SSrikanth Yalavarthi p += 2;
72ac930a55SSrikanth Yalavarthi result = 0;
73ac930a55SSrikanth Yalavarthi }
74ac930a55SSrikanth Yalavarthi
75ac930a55SSrikanth Yalavarthi if (((p[0] == 'o') && (p[1] == 'f') && (p[2] == 'f')) ||
76ac930a55SSrikanth Yalavarthi ((p[0] == 'O') && (p[1] == 'F') && (p[2] == 'F'))) {
77ac930a55SSrikanth Yalavarthi p += 3;
78ac930a55SSrikanth Yalavarthi result = 0;
79ac930a55SSrikanth Yalavarthi }
80ac930a55SSrikanth Yalavarthi
81*2df20a1dSDavid Marchand p = rte_str_skip_leading_spaces(p);
82ac930a55SSrikanth Yalavarthi
83ac930a55SSrikanth Yalavarthi if (p[0] != '\0')
84ac930a55SSrikanth Yalavarthi return -EINVAL;
85ac930a55SSrikanth Yalavarthi
86ac930a55SSrikanth Yalavarthi return result;
87ac930a55SSrikanth Yalavarthi }
88ac930a55SSrikanth Yalavarthi
89ac930a55SSrikanth Yalavarthi int
parser_read_uint64(uint64_t * value,const char * p)90ac930a55SSrikanth Yalavarthi parser_read_uint64(uint64_t *value, const char *p)
91ac930a55SSrikanth Yalavarthi {
92ac930a55SSrikanth Yalavarthi char *next;
93ac930a55SSrikanth Yalavarthi uint64_t val;
94ac930a55SSrikanth Yalavarthi
95*2df20a1dSDavid Marchand p = rte_str_skip_leading_spaces(p);
96ac930a55SSrikanth Yalavarthi if (!isdigit(*p))
97ac930a55SSrikanth Yalavarthi return -EINVAL;
98ac930a55SSrikanth Yalavarthi
99ac930a55SSrikanth Yalavarthi val = strtoul(p, &next, 10);
100ac930a55SSrikanth Yalavarthi if (p == next)
101ac930a55SSrikanth Yalavarthi return -EINVAL;
102ac930a55SSrikanth Yalavarthi
103ac930a55SSrikanth Yalavarthi p = next;
104ac930a55SSrikanth Yalavarthi switch (*p) {
105ac930a55SSrikanth Yalavarthi case 'T':
106ac930a55SSrikanth Yalavarthi val *= 1024ULL;
107ac930a55SSrikanth Yalavarthi /* fall through */
108ac930a55SSrikanth Yalavarthi case 'G':
109ac930a55SSrikanth Yalavarthi val *= 1024ULL;
110ac930a55SSrikanth Yalavarthi /* fall through */
111ac930a55SSrikanth Yalavarthi case 'M':
112ac930a55SSrikanth Yalavarthi val *= 1024ULL;
113ac930a55SSrikanth Yalavarthi /* fall through */
114ac930a55SSrikanth Yalavarthi case 'k':
115ac930a55SSrikanth Yalavarthi case 'K':
116ac930a55SSrikanth Yalavarthi val *= 1024ULL;
117ac930a55SSrikanth Yalavarthi p++;
118ac930a55SSrikanth Yalavarthi break;
119ac930a55SSrikanth Yalavarthi }
120ac930a55SSrikanth Yalavarthi
121*2df20a1dSDavid Marchand p = rte_str_skip_leading_spaces(p);
122ac930a55SSrikanth Yalavarthi if (*p != '\0')
123ac930a55SSrikanth Yalavarthi return -EINVAL;
124ac930a55SSrikanth Yalavarthi
125ac930a55SSrikanth Yalavarthi *value = val;
126ac930a55SSrikanth Yalavarthi return 0;
127ac930a55SSrikanth Yalavarthi }
128ac930a55SSrikanth Yalavarthi
129ac930a55SSrikanth Yalavarthi int
parser_read_int32(int32_t * value,const char * p)130ac930a55SSrikanth Yalavarthi parser_read_int32(int32_t *value, const char *p)
131ac930a55SSrikanth Yalavarthi {
132ac930a55SSrikanth Yalavarthi char *next;
133ac930a55SSrikanth Yalavarthi int32_t val;
134ac930a55SSrikanth Yalavarthi
135*2df20a1dSDavid Marchand p = rte_str_skip_leading_spaces(p);
13628a4a819SSrikanth Yalavarthi if ((*p != '-') && (!isdigit(*p)))
137ac930a55SSrikanth Yalavarthi return -EINVAL;
138ac930a55SSrikanth Yalavarthi
139ac930a55SSrikanth Yalavarthi val = strtol(p, &next, 10);
14028a4a819SSrikanth Yalavarthi if ((*next != '\0') || (p == next))
141ac930a55SSrikanth Yalavarthi return -EINVAL;
142ac930a55SSrikanth Yalavarthi
143ac930a55SSrikanth Yalavarthi *value = val;
144ac930a55SSrikanth Yalavarthi return 0;
145ac930a55SSrikanth Yalavarthi }
146ac930a55SSrikanth Yalavarthi
147ac930a55SSrikanth Yalavarthi int
parser_read_int16(int16_t * value,const char * p)148ac930a55SSrikanth Yalavarthi parser_read_int16(int16_t *value, const char *p)
149ac930a55SSrikanth Yalavarthi {
150ac930a55SSrikanth Yalavarthi char *next;
151ac930a55SSrikanth Yalavarthi int16_t val;
152ac930a55SSrikanth Yalavarthi
153*2df20a1dSDavid Marchand p = rte_str_skip_leading_spaces(p);
15428a4a819SSrikanth Yalavarthi if ((*p != '-') && (!isdigit(*p)))
155ac930a55SSrikanth Yalavarthi return -EINVAL;
156ac930a55SSrikanth Yalavarthi
157ac930a55SSrikanth Yalavarthi val = strtol(p, &next, 10);
15828a4a819SSrikanth Yalavarthi if ((*next != '\0') || (p == next))
159ac930a55SSrikanth Yalavarthi return -EINVAL;
160ac930a55SSrikanth Yalavarthi
161ac930a55SSrikanth Yalavarthi *value = val;
162ac930a55SSrikanth Yalavarthi return 0;
163ac930a55SSrikanth Yalavarthi }
164ac930a55SSrikanth Yalavarthi
165ac930a55SSrikanth Yalavarthi int
parser_read_uint64_hex(uint64_t * value,const char * p)166ac930a55SSrikanth Yalavarthi parser_read_uint64_hex(uint64_t *value, const char *p)
167ac930a55SSrikanth Yalavarthi {
168ac930a55SSrikanth Yalavarthi char *next;
169ac930a55SSrikanth Yalavarthi uint64_t val;
170ac930a55SSrikanth Yalavarthi
171*2df20a1dSDavid Marchand p = rte_str_skip_leading_spaces(p);
172ac930a55SSrikanth Yalavarthi
173ac930a55SSrikanth Yalavarthi val = strtoul(p, &next, 16);
174ac930a55SSrikanth Yalavarthi if (p == next)
175ac930a55SSrikanth Yalavarthi return -EINVAL;
176ac930a55SSrikanth Yalavarthi
177*2df20a1dSDavid Marchand p = rte_str_skip_leading_spaces(next);
178ac930a55SSrikanth Yalavarthi if (*p != '\0')
179ac930a55SSrikanth Yalavarthi return -EINVAL;
180ac930a55SSrikanth Yalavarthi
181ac930a55SSrikanth Yalavarthi *value = val;
182ac930a55SSrikanth Yalavarthi return 0;
183ac930a55SSrikanth Yalavarthi }
184ac930a55SSrikanth Yalavarthi
185ac930a55SSrikanth Yalavarthi int
parser_read_uint32(uint32_t * value,const char * p)186ac930a55SSrikanth Yalavarthi parser_read_uint32(uint32_t *value, const char *p)
187ac930a55SSrikanth Yalavarthi {
188ac930a55SSrikanth Yalavarthi uint64_t val = 0;
189ac930a55SSrikanth Yalavarthi int ret = parser_read_uint64(&val, p);
190ac930a55SSrikanth Yalavarthi
191ac930a55SSrikanth Yalavarthi if (ret < 0)
192ac930a55SSrikanth Yalavarthi return ret;
193ac930a55SSrikanth Yalavarthi
194ac930a55SSrikanth Yalavarthi if (val > UINT32_MAX)
195ac930a55SSrikanth Yalavarthi return -ERANGE;
196ac930a55SSrikanth Yalavarthi
197ac930a55SSrikanth Yalavarthi *value = val;
198ac930a55SSrikanth Yalavarthi return 0;
199ac930a55SSrikanth Yalavarthi }
200ac930a55SSrikanth Yalavarthi
201ac930a55SSrikanth Yalavarthi int
parser_read_uint32_hex(uint32_t * value,const char * p)202ac930a55SSrikanth Yalavarthi parser_read_uint32_hex(uint32_t *value, const char *p)
203ac930a55SSrikanth Yalavarthi {
204ac930a55SSrikanth Yalavarthi uint64_t val = 0;
205ac930a55SSrikanth Yalavarthi int ret = parser_read_uint64_hex(&val, p);
206ac930a55SSrikanth Yalavarthi
207ac930a55SSrikanth Yalavarthi if (ret < 0)
208ac930a55SSrikanth Yalavarthi return ret;
209ac930a55SSrikanth Yalavarthi
210ac930a55SSrikanth Yalavarthi if (val > UINT32_MAX)
211ac930a55SSrikanth Yalavarthi return -ERANGE;
212ac930a55SSrikanth Yalavarthi
213ac930a55SSrikanth Yalavarthi *value = val;
214ac930a55SSrikanth Yalavarthi return 0;
215ac930a55SSrikanth Yalavarthi }
216ac930a55SSrikanth Yalavarthi
217ac930a55SSrikanth Yalavarthi int
parser_read_uint16(uint16_t * value,const char * p)218ac930a55SSrikanth Yalavarthi parser_read_uint16(uint16_t *value, const char *p)
219ac930a55SSrikanth Yalavarthi {
220ac930a55SSrikanth Yalavarthi uint64_t val = 0;
221ac930a55SSrikanth Yalavarthi int ret = parser_read_uint64(&val, p);
222ac930a55SSrikanth Yalavarthi
223ac930a55SSrikanth Yalavarthi if (ret < 0)
224ac930a55SSrikanth Yalavarthi return ret;
225ac930a55SSrikanth Yalavarthi
226ac930a55SSrikanth Yalavarthi if (val > UINT16_MAX)
227ac930a55SSrikanth Yalavarthi return -ERANGE;
228ac930a55SSrikanth Yalavarthi
229ac930a55SSrikanth Yalavarthi *value = val;
230ac930a55SSrikanth Yalavarthi return 0;
231ac930a55SSrikanth Yalavarthi }
232ac930a55SSrikanth Yalavarthi
233ac930a55SSrikanth Yalavarthi int
parser_read_uint16_hex(uint16_t * value,const char * p)234ac930a55SSrikanth Yalavarthi parser_read_uint16_hex(uint16_t *value, const char *p)
235ac930a55SSrikanth Yalavarthi {
236ac930a55SSrikanth Yalavarthi uint64_t val = 0;
237ac930a55SSrikanth Yalavarthi int ret = parser_read_uint64_hex(&val, p);
238ac930a55SSrikanth Yalavarthi
239ac930a55SSrikanth Yalavarthi if (ret < 0)
240ac930a55SSrikanth Yalavarthi return ret;
241ac930a55SSrikanth Yalavarthi
242ac930a55SSrikanth Yalavarthi if (val > UINT16_MAX)
243ac930a55SSrikanth Yalavarthi return -ERANGE;
244ac930a55SSrikanth Yalavarthi
245ac930a55SSrikanth Yalavarthi *value = val;
246ac930a55SSrikanth Yalavarthi return 0;
247ac930a55SSrikanth Yalavarthi }
248ac930a55SSrikanth Yalavarthi
249ac930a55SSrikanth Yalavarthi int
parser_read_uint8(uint8_t * value,const char * p)250ac930a55SSrikanth Yalavarthi parser_read_uint8(uint8_t *value, const char *p)
251ac930a55SSrikanth Yalavarthi {
252ac930a55SSrikanth Yalavarthi uint64_t val = 0;
253ac930a55SSrikanth Yalavarthi int ret = parser_read_uint64(&val, p);
254ac930a55SSrikanth Yalavarthi
255ac930a55SSrikanth Yalavarthi if (ret < 0)
256ac930a55SSrikanth Yalavarthi return ret;
257ac930a55SSrikanth Yalavarthi
258ac930a55SSrikanth Yalavarthi if (val > UINT8_MAX)
259ac930a55SSrikanth Yalavarthi return -ERANGE;
260ac930a55SSrikanth Yalavarthi
261ac930a55SSrikanth Yalavarthi *value = val;
262ac930a55SSrikanth Yalavarthi return 0;
263ac930a55SSrikanth Yalavarthi }
264ac930a55SSrikanth Yalavarthi
265ac930a55SSrikanth Yalavarthi int
parser_read_uint8_hex(uint8_t * value,const char * p)266ac930a55SSrikanth Yalavarthi parser_read_uint8_hex(uint8_t *value, const char *p)
267ac930a55SSrikanth Yalavarthi {
268ac930a55SSrikanth Yalavarthi uint64_t val = 0;
269ac930a55SSrikanth Yalavarthi int ret = parser_read_uint64_hex(&val, p);
270ac930a55SSrikanth Yalavarthi
271ac930a55SSrikanth Yalavarthi if (ret < 0)
272ac930a55SSrikanth Yalavarthi return ret;
273ac930a55SSrikanth Yalavarthi
274ac930a55SSrikanth Yalavarthi if (val > UINT8_MAX)
275ac930a55SSrikanth Yalavarthi return -ERANGE;
276ac930a55SSrikanth Yalavarthi
277ac930a55SSrikanth Yalavarthi *value = val;
278ac930a55SSrikanth Yalavarthi return 0;
279ac930a55SSrikanth Yalavarthi }
280ac930a55SSrikanth Yalavarthi
281ac930a55SSrikanth Yalavarthi int
parse_tokenize_string(char * string,char * tokens[],uint32_t * n_tokens)282ac930a55SSrikanth Yalavarthi parse_tokenize_string(char *string, char *tokens[], uint32_t *n_tokens)
283ac930a55SSrikanth Yalavarthi {
284ac930a55SSrikanth Yalavarthi uint32_t i;
285ac930a55SSrikanth Yalavarthi
286ac930a55SSrikanth Yalavarthi if ((string == NULL) || (tokens == NULL) || (*n_tokens < 1))
287ac930a55SSrikanth Yalavarthi return -EINVAL;
288ac930a55SSrikanth Yalavarthi
289ac930a55SSrikanth Yalavarthi for (i = 0; i < *n_tokens; i++) {
290ac930a55SSrikanth Yalavarthi tokens[i] = strtok_r(string, PARSE_DELIMITER, &string);
291ac930a55SSrikanth Yalavarthi if (tokens[i] == NULL)
292ac930a55SSrikanth Yalavarthi break;
293ac930a55SSrikanth Yalavarthi }
294ac930a55SSrikanth Yalavarthi
295ac930a55SSrikanth Yalavarthi if ((i == *n_tokens) && (strtok_r(string, PARSE_DELIMITER, &string) != NULL))
296ac930a55SSrikanth Yalavarthi return -E2BIG;
297ac930a55SSrikanth Yalavarthi
298ac930a55SSrikanth Yalavarthi *n_tokens = i;
299ac930a55SSrikanth Yalavarthi return 0;
300ac930a55SSrikanth Yalavarthi }
301ac930a55SSrikanth Yalavarthi
302ac930a55SSrikanth Yalavarthi int
parse_hex_string(char * src,uint8_t * dst,uint32_t * size)303ac930a55SSrikanth Yalavarthi parse_hex_string(char *src, uint8_t *dst, uint32_t *size)
304ac930a55SSrikanth Yalavarthi {
305ac930a55SSrikanth Yalavarthi char *c;
306ac930a55SSrikanth Yalavarthi uint32_t len, i;
307ac930a55SSrikanth Yalavarthi
308ac930a55SSrikanth Yalavarthi /* Check input parameters */
309ac930a55SSrikanth Yalavarthi if ((src == NULL) || (dst == NULL) || (size == NULL) || (*size == 0))
310ac930a55SSrikanth Yalavarthi return -1;
311ac930a55SSrikanth Yalavarthi
312ac930a55SSrikanth Yalavarthi len = strlen(src);
313ac930a55SSrikanth Yalavarthi if (((len & 3) != 0) || (len > (*size) * 2))
314ac930a55SSrikanth Yalavarthi return -1;
315ac930a55SSrikanth Yalavarthi *size = len / 2;
316ac930a55SSrikanth Yalavarthi
317ac930a55SSrikanth Yalavarthi for (c = src; *c != 0; c++) {
318ac930a55SSrikanth Yalavarthi if ((((*c) >= '0') && ((*c) <= '9')) || (((*c) >= 'A') && ((*c) <= 'F')) ||
319ac930a55SSrikanth Yalavarthi (((*c) >= 'a') && ((*c) <= 'f')))
320ac930a55SSrikanth Yalavarthi continue;
321ac930a55SSrikanth Yalavarthi
322ac930a55SSrikanth Yalavarthi return -1;
323ac930a55SSrikanth Yalavarthi }
324ac930a55SSrikanth Yalavarthi
325ac930a55SSrikanth Yalavarthi /* Convert chars to bytes */
326ac930a55SSrikanth Yalavarthi for (i = 0; i < *size; i++)
327ac930a55SSrikanth Yalavarthi dst[i] = get_hex_val(src[2 * i]) * 16 + get_hex_val(src[2 * i + 1]);
328ac930a55SSrikanth Yalavarthi
329ac930a55SSrikanth Yalavarthi return 0;
330ac930a55SSrikanth Yalavarthi }
331ac930a55SSrikanth Yalavarthi
332ac930a55SSrikanth Yalavarthi int
parse_lcores_list(bool lcores[],int lcores_num,const char * corelist)333ac930a55SSrikanth Yalavarthi parse_lcores_list(bool lcores[], int lcores_num, const char *corelist)
334ac930a55SSrikanth Yalavarthi {
335ac930a55SSrikanth Yalavarthi int i, idx = 0;
336ac930a55SSrikanth Yalavarthi int min, max;
337ac930a55SSrikanth Yalavarthi char *end = NULL;
338ac930a55SSrikanth Yalavarthi
339ac930a55SSrikanth Yalavarthi if (corelist == NULL)
340ac930a55SSrikanth Yalavarthi return -1;
341ac930a55SSrikanth Yalavarthi while (isblank(*corelist))
342ac930a55SSrikanth Yalavarthi corelist++;
343ac930a55SSrikanth Yalavarthi i = strlen(corelist);
344ac930a55SSrikanth Yalavarthi while ((i > 0) && isblank(corelist[i - 1]))
345ac930a55SSrikanth Yalavarthi i--;
346ac930a55SSrikanth Yalavarthi
347ac930a55SSrikanth Yalavarthi /* Get list of lcores */
348ac930a55SSrikanth Yalavarthi min = RTE_MAX_LCORE;
349ac930a55SSrikanth Yalavarthi do {
350ac930a55SSrikanth Yalavarthi while (isblank(*corelist))
351ac930a55SSrikanth Yalavarthi corelist++;
352ac930a55SSrikanth Yalavarthi if (*corelist == '\0')
353ac930a55SSrikanth Yalavarthi return -1;
354ac930a55SSrikanth Yalavarthi idx = strtoul(corelist, &end, 10);
355ac930a55SSrikanth Yalavarthi if (idx < 0 || idx > lcores_num)
356ac930a55SSrikanth Yalavarthi return -1;
357ac930a55SSrikanth Yalavarthi
358ac930a55SSrikanth Yalavarthi if (end == NULL)
359ac930a55SSrikanth Yalavarthi return -1;
360ac930a55SSrikanth Yalavarthi while (isblank(*end))
361ac930a55SSrikanth Yalavarthi end++;
362ac930a55SSrikanth Yalavarthi if (*end == '-') {
363ac930a55SSrikanth Yalavarthi min = idx;
364ac930a55SSrikanth Yalavarthi } else if ((*end == ',') || (*end == '\0')) {
365ac930a55SSrikanth Yalavarthi max = idx;
366ac930a55SSrikanth Yalavarthi if (min == RTE_MAX_LCORE)
367ac930a55SSrikanth Yalavarthi min = idx;
368ac930a55SSrikanth Yalavarthi for (idx = min; idx <= max; idx++) {
369ac930a55SSrikanth Yalavarthi if (lcores[idx] == 1)
370ac930a55SSrikanth Yalavarthi return -E2BIG;
371ac930a55SSrikanth Yalavarthi lcores[idx] = 1;
372ac930a55SSrikanth Yalavarthi }
373ac930a55SSrikanth Yalavarthi
374ac930a55SSrikanth Yalavarthi min = RTE_MAX_LCORE;
375ac930a55SSrikanth Yalavarthi } else
376ac930a55SSrikanth Yalavarthi return -1;
377ac930a55SSrikanth Yalavarthi corelist = end + 1;
378ac930a55SSrikanth Yalavarthi } while (*end != '\0');
379ac930a55SSrikanth Yalavarthi
380ac930a55SSrikanth Yalavarthi return 0;
381ac930a55SSrikanth Yalavarthi }
382