2 * Copyright (c) 2009, Olivier MATZ <zer0@droids-corp.org>
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the University of California, Berkeley nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
16 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 #ifndef _PARSE_IPADDR_H_
29 #define _PARSE_IPADDR_H_
31 #include "cmdline_parse.h"
33 #define CMDLINE_IPADDR_V4 0x01
34 #define CMDLINE_IPADDR_V6 0x02
35 #define CMDLINE_IPADDR_NETWORK 0x04
37 struct cmdline_ipaddr {
43 unsigned int prefixlen; /* in case of network only */
45 typedef struct cmdline_ipaddr cmdline_ipaddr_t;
47 struct cmdline_token_ipaddr_data {
51 struct cmdline_token_ipaddr {
52 struct cmdline_token_hdr hdr;
53 struct cmdline_token_ipaddr_data ipaddr_data;
55 typedef struct cmdline_token_ipaddr cmdline_parse_token_ipaddr_t;
57 extern struct cmdline_token_ops cmdline_token_ipaddr_ops;
59 int cmdline_parse_ipaddr(cmdline_parse_token_hdr_t *tk, const char *srcbuf,
61 int cmdline_get_help_ipaddr(cmdline_parse_token_hdr_t *tk, char *dstbuf,
64 #define TOKEN_IPADDR_INITIALIZER(structure, field) \
67 .ops = &cmdline_token_ipaddr_ops, \
68 .offset = offsetof(structure, field), \
71 .flags = CMDLINE_IPADDR_V4 | \
76 #define TOKEN_IPV4_INITIALIZER(structure, field) \
79 .ops = &cmdline_token_ipaddr_ops, \
80 .offset = offsetof(structure, field), \
83 .flags = CMDLINE_IPADDR_V4, \
87 #define TOKEN_IPV6_INITIALIZER(structure, field) \
90 .ops = &cmdline_token_ipaddr_ops, \
91 .offset = offsetof(structure, field), \
94 .flags = CMDLINE_IPADDR_V6, \
98 #define TOKEN_IPNET_INITIALIZER(structure, field) \
101 .ops = &cmdline_token_ipaddr_ops, \
102 .offset = offsetof(structure, field), \
105 .flags = CMDLINE_IPADDR_V4 | \
106 CMDLINE_IPADDR_V6 | \
107 CMDLINE_IPADDR_NETWORK, \
111 #define TOKEN_IPV4NET_INITIALIZER(structure, field) \
114 .ops = &cmdline_token_ipaddr_ops, \
115 .offset = offsetof(structure, field), \
118 .flags = CMDLINE_IPADDR_V4 | \
119 CMDLINE_IPADDR_NETWORK, \
123 #define TOKEN_IPV6NET_INITIALIZER(structure, field) \
126 .ops = &cmdline_token_ipaddr_ops, \
127 .offset = offsetof(structure, field), \
130 .flags = CMDLINE_IPADDR_V4 | \
131 CMDLINE_IPADDR_NETWORK, \
135 #endif /* _PARSE_IPADDR_H_ */