xref: /dpdk/examples/ip_pipeline/parser.h (revision 72b452c5f2599f970f47fd17d3e8e5d60bfebe7a)
13998e2a0SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
23998e2a0SBruce Richardson  * Copyright(c) 2010-2016 Intel Corporation
31a33c5eaSFan Zhang  */
41a33c5eaSFan Zhang 
51a33c5eaSFan Zhang #ifndef __INCLUDE_PARSER_H__
61a33c5eaSFan Zhang #define __INCLUDE_PARSER_H__
71a33c5eaSFan Zhang 
8*72b452c5SDmitry Kozlyuk #include <ctype.h>
9ed7a0490SPiotr Azarewicz #include <stdint.h>
101a33c5eaSFan Zhang 
11ed7a0490SPiotr Azarewicz #include <rte_ip.h>
12ed7a0490SPiotr Azarewicz #include <rte_ether.h>
131a33c5eaSFan Zhang 
14ed7a0490SPiotr Azarewicz #define PARSE_DELIMITER				" \f\n\r\t\v"
151a33c5eaSFan Zhang 
16ed7a0490SPiotr Azarewicz #define skip_white_spaces(pos)			\
17ed7a0490SPiotr Azarewicz ({						\
18ed7a0490SPiotr Azarewicz 	__typeof__(pos) _p = (pos);		\
19ed7a0490SPiotr Azarewicz 	for ( ; isspace(*_p); _p++)		\
20ed7a0490SPiotr Azarewicz 		;				\
21ed7a0490SPiotr Azarewicz 	_p;					\
22ed7a0490SPiotr Azarewicz })
23ed7a0490SPiotr Azarewicz 
24ed7a0490SPiotr Azarewicz static inline size_t
25ed7a0490SPiotr Azarewicz skip_digits(const char *src)
26ed7a0490SPiotr Azarewicz {
27ed7a0490SPiotr Azarewicz 	size_t i;
28ed7a0490SPiotr Azarewicz 
29ed7a0490SPiotr Azarewicz 	for (i = 0; isdigit(src[i]); i++)
30ed7a0490SPiotr Azarewicz 		;
31ed7a0490SPiotr Azarewicz 
32ed7a0490SPiotr Azarewicz 	return i;
33ed7a0490SPiotr Azarewicz }
34ed7a0490SPiotr Azarewicz 
35ed7a0490SPiotr Azarewicz int parser_read_arg_bool(const char *p);
36ed7a0490SPiotr Azarewicz 
37ed7a0490SPiotr Azarewicz int parser_read_uint64(uint64_t *value, const char *p);
38ed7a0490SPiotr Azarewicz int parser_read_uint32(uint32_t *value, const char *p);
39ed7a0490SPiotr Azarewicz int parser_read_uint16(uint16_t *value, const char *p);
40ed7a0490SPiotr Azarewicz int parser_read_uint8(uint8_t *value, const char *p);
41ed7a0490SPiotr Azarewicz 
42ed7a0490SPiotr Azarewicz int parser_read_uint64_hex(uint64_t *value, const char *p);
43ed7a0490SPiotr Azarewicz int parser_read_uint32_hex(uint32_t *value, const char *p);
44ed7a0490SPiotr Azarewicz int parser_read_uint16_hex(uint16_t *value, const char *p);
45ed7a0490SPiotr Azarewicz int parser_read_uint8_hex(uint8_t *value, const char *p);
46ed7a0490SPiotr Azarewicz 
47ed7a0490SPiotr Azarewicz int parse_hex_string(char *src, uint8_t *dst, uint32_t *size);
48ed7a0490SPiotr Azarewicz 
49ed7a0490SPiotr Azarewicz int parse_ipv4_addr(const char *token, struct in_addr *ipv4);
50ed7a0490SPiotr Azarewicz int parse_ipv6_addr(const char *token, struct in6_addr *ipv6);
516d13ea8eSOlivier Matz int parse_mac_addr(const char *token, struct rte_ether_addr *addr);
52ed7a0490SPiotr Azarewicz int parse_mpls_labels(char *string, uint32_t *labels, uint32_t *n_labels);
53ed7a0490SPiotr Azarewicz 
54fbc74e66SJasvinder Singh struct cpu_core_params {
55fbc74e66SJasvinder Singh 	uint32_t socket_id;
56fbc74e66SJasvinder Singh 	uint32_t core_id;
57fbc74e66SJasvinder Singh 	uint32_t thread_id;
58fbc74e66SJasvinder Singh };
59fbc74e66SJasvinder Singh 
60fbc74e66SJasvinder Singh int parse_cpu_core(const char *entry, struct cpu_core_params *p);
61fbc74e66SJasvinder Singh 
62ed7a0490SPiotr Azarewicz int parse_tokenize_string(char *string, char *tokens[], uint32_t *n_tokens);
631a33c5eaSFan Zhang 
641a33c5eaSFan Zhang #endif
65