1 /*- 2 * BSD LICENSE 3 * 4 * Copyright(c) 2010-2016 Intel Corporation. All rights reserved. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * * Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * * Neither the name of Intel Corporation nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 #ifndef __INCLUDE_PARSER_H__ 35 #define __INCLUDE_PARSER_H__ 36 37 #include <stdint.h> 38 39 #include <rte_ip.h> 40 #include <rte_ether.h> 41 42 #define PARSE_DELIMITER " \f\n\r\t\v" 43 44 #define skip_white_spaces(pos) \ 45 ({ \ 46 __typeof__(pos) _p = (pos); \ 47 for ( ; isspace(*_p); _p++) \ 48 ; \ 49 _p; \ 50 }) 51 52 static inline size_t 53 skip_digits(const char *src) 54 { 55 size_t i; 56 57 for (i = 0; isdigit(src[i]); i++) 58 ; 59 60 return i; 61 } 62 63 int parser_read_arg_bool(const char *p); 64 65 int parser_read_uint64(uint64_t *value, const char *p); 66 int parser_read_uint32(uint32_t *value, const char *p); 67 int parser_read_uint16(uint16_t *value, const char *p); 68 int parser_read_uint8(uint8_t *value, const char *p); 69 70 int parser_read_uint64_hex(uint64_t *value, const char *p); 71 int parser_read_uint32_hex(uint32_t *value, const char *p); 72 int parser_read_uint16_hex(uint16_t *value, const char *p); 73 int parser_read_uint8_hex(uint8_t *value, const char *p); 74 75 int parse_hex_string(char *src, uint8_t *dst, uint32_t *size); 76 77 int parse_ipv4_addr(const char *token, struct in_addr *ipv4); 78 int parse_ipv6_addr(const char *token, struct in6_addr *ipv6); 79 int parse_mac_addr(const char *token, struct ether_addr *addr); 80 int parse_mpls_labels(char *string, uint32_t *labels, uint32_t *n_labels); 81 82 int parse_tokenize_string(char *string, char *tokens[], uint32_t *n_tokens); 83 84 #endif 85