1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2010-2014 Intel Corporation. 3 * Copyright (c) 2009, Olivier MATZ <zer0@droids-corp.org> 4 * All rights reserved. 5 */ 6 7 #ifndef _PARSE_IPADDR_H_ 8 #define _PARSE_IPADDR_H_ 9 10 #include <cmdline_parse.h> 11 #include <rte_ip.h> 12 13 #ifdef __cplusplus 14 extern "C" { 15 #endif 16 17 #define CMDLINE_IPADDR_V4 0x01 18 #define CMDLINE_IPADDR_V6 0x02 19 #define CMDLINE_IPADDR_NETWORK 0x04 20 21 struct cmdline_ipaddr { 22 uint8_t family; 23 union { 24 struct in_addr ipv4; 25 struct rte_ipv6_addr ipv6; 26 } addr; 27 unsigned int prefixlen; /* in case of network only */ 28 }; 29 typedef struct cmdline_ipaddr cmdline_ipaddr_t; 30 31 struct cmdline_token_ipaddr_data { 32 uint8_t flags; 33 }; 34 35 struct cmdline_token_ipaddr { 36 struct cmdline_token_hdr hdr; 37 struct cmdline_token_ipaddr_data ipaddr_data; 38 }; 39 typedef struct cmdline_token_ipaddr cmdline_parse_token_ipaddr_t; 40 41 extern struct cmdline_token_ops cmdline_token_ipaddr_ops; 42 43 int cmdline_parse_ipaddr(cmdline_parse_token_hdr_t *tk, const char *srcbuf, 44 void *res, unsigned ressize); 45 int cmdline_get_help_ipaddr(cmdline_parse_token_hdr_t *tk, char *dstbuf, 46 unsigned int size); 47 48 #define TOKEN_IPADDR_INITIALIZER(structure, field) \ 49 { \ 50 /* hdr */ \ 51 { \ 52 &cmdline_token_ipaddr_ops, /* ops */ \ 53 offsetof(structure, field), /* offset */ \ 54 }, \ 55 /* ipaddr_data */ \ 56 { \ 57 CMDLINE_IPADDR_V4 | /* flags */ \ 58 CMDLINE_IPADDR_V6, \ 59 }, \ 60 } 61 62 #define TOKEN_IPV4_INITIALIZER(structure, field) \ 63 { \ 64 /* hdr */ \ 65 { \ 66 &cmdline_token_ipaddr_ops, /* ops */ \ 67 offsetof(structure, field), /* offset */ \ 68 }, \ 69 /* ipaddr_data */ \ 70 { \ 71 CMDLINE_IPADDR_V4, /* flags */ \ 72 }, \ 73 } 74 75 #define TOKEN_IPV6_INITIALIZER(structure, field) \ 76 { \ 77 /* hdr */ \ 78 { \ 79 &cmdline_token_ipaddr_ops, /* ops */ \ 80 offsetof(structure, field), /* offset */ \ 81 }, \ 82 /* ipaddr_data */ \ 83 { \ 84 CMDLINE_IPADDR_V6, /* flags */ \ 85 }, \ 86 } 87 88 #define TOKEN_IPNET_INITIALIZER(structure, field) \ 89 { \ 90 /* hdr */ \ 91 { \ 92 &cmdline_token_ipaddr_ops, /* ops */ \ 93 offsetof(structure, field), /* offset */ \ 94 }, \ 95 /* ipaddr_data */ \ 96 { \ 97 CMDLINE_IPADDR_V4 | /* flags */ \ 98 CMDLINE_IPADDR_V6 | \ 99 CMDLINE_IPADDR_NETWORK, \ 100 }, \ 101 } 102 103 #define TOKEN_IPV4NET_INITIALIZER(structure, field) \ 104 { \ 105 /* hdr */ \ 106 { \ 107 &cmdline_token_ipaddr_ops, /* ops */ \ 108 offsetof(structure, field), /* offset */ \ 109 }, \ 110 /* ipaddr_data */ \ 111 { \ 112 CMDLINE_IPADDR_V4 | /* flags */ \ 113 CMDLINE_IPADDR_NETWORK, \ 114 }, \ 115 } 116 117 #define TOKEN_IPV6NET_INITIALIZER(structure, field) \ 118 { \ 119 /* hdr */ \ 120 { \ 121 &cmdline_token_ipaddr_ops, /* ops */ \ 122 offsetof(structure, field), /* offset */ \ 123 }, \ 124 /* ipaddr_data */ \ 125 { \ 126 CMDLINE_IPADDR_V4 | /* flags */ \ 127 CMDLINE_IPADDR_NETWORK, \ 128 }, \ 129 } 130 131 #ifdef __cplusplus 132 } 133 #endif 134 135 #endif /* _PARSE_IPADDR_H_ */ 136