1
2
3
4
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
14extern "C" {
15#endif
16
17#define CMDLINE_IPADDR_V4 0x01
18#define CMDLINE_IPADDR_V6 0x02
19#define CMDLINE_IPADDR_NETWORK 0x04
20
21struct cmdline_ipaddr {
22 uint8_t family;
23 union {
24 struct in_addr ipv4;
25 struct in6_addr ipv6;
26 } addr;
27 unsigned int prefixlen;
28};
29typedef struct cmdline_ipaddr cmdline_ipaddr_t;
30
31struct cmdline_token_ipaddr_data {
32 uint8_t flags;
33};
34
35struct cmdline_token_ipaddr {
36 struct cmdline_token_hdr hdr;
37 struct cmdline_token_ipaddr_data ipaddr_data;
38};
39typedef struct cmdline_token_ipaddr cmdline_parse_token_ipaddr_t;
40
41extern struct cmdline_token_ops cmdline_token_ipaddr_ops;
42
43int cmdline_parse_ipaddr(cmdline_parse_token_hdr_t *tk, const char *srcbuf,
44 void *res, unsigned ressize);
45int 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 \
51 { \
52 &cmdline_token_ipaddr_ops, \
53 offsetof(structure, field), \
54 }, \
55 \
56 { \
57 CMDLINE_IPADDR_V4 | \
58 CMDLINE_IPADDR_V6, \
59 }, \
60}
61
62#define TOKEN_IPV4_INITIALIZER(structure, field) \
63{ \
64 \
65 { \
66 &cmdline_token_ipaddr_ops, \
67 offsetof(structure, field), \
68 }, \
69 \
70 { \
71 CMDLINE_IPADDR_V4, \
72 }, \
73}
74
75#define TOKEN_IPV6_INITIALIZER(structure, field) \
76{ \
77 \
78 { \
79 &cmdline_token_ipaddr_ops, \
80 offsetof(structure, field), \
81 }, \
82 \
83 { \
84 CMDLINE_IPADDR_V6, \
85 }, \
86}
87
88#define TOKEN_IPNET_INITIALIZER(structure, field) \
89{ \
90 \
91 { \
92 &cmdline_token_ipaddr_ops, \
93 offsetof(structure, field), \
94 }, \
95 \
96 { \
97 CMDLINE_IPADDR_V4 | \
98 CMDLINE_IPADDR_V6 | \
99 CMDLINE_IPADDR_NETWORK, \
100 }, \
101}
102
103#define TOKEN_IPV4NET_INITIALIZER(structure, field) \
104{ \
105 \
106 { \
107 &cmdline_token_ipaddr_ops, \
108 offsetof(structure, field), \
109 }, \
110 \
111 { \
112 CMDLINE_IPADDR_V4 | \
113 CMDLINE_IPADDR_NETWORK, \
114 }, \
115}
116
117#define TOKEN_IPV6NET_INITIALIZER(structure, field) \
118{ \
119 \
120 { \
121 &cmdline_token_ipaddr_ops, \
122 offsetof(structure, field), \
123 }, \
124 \
125 { \
126 CMDLINE_IPADDR_V4 | \
127 CMDLINE_IPADDR_NETWORK, \
128 }, \
129}
130
131#ifdef __cplusplus
132}
133#endif
134
135#endif
136