]>
Commit | Line | Data |
---|---|---|
0fdebb3b | 1 | /* Copyright 2007-2010 Jozsef Kadlecsik (kadlec@netfilter.org) |
ab7c1721 OS |
2 | * Copyright 2013 Oliver Smith (oliver@8.c.9.b.0.7.4.0.1.0.0.2.ip6.arpa) |
3 | * | |
4 | * This program is free software; you can redistribute it and/or modify | |
5 | * it under the terms of the GNU General Public License version 2 as | |
6 | * published by the Free Software Foundation. | |
7 | */ | |
8 | #include <libipset/data.h> /* IPSET_OPT_* */ | |
9 | #include <libipset/parse.h> /* parser functions */ | |
10 | #include <libipset/print.h> /* printing functions */ | |
11 | #include <libipset/types.h> /* prototypes */ | |
12 | ||
d71dd935 | 13 | /* Initial revision */ |
ab7c1721 OS |
14 | static struct ipset_type ipset_hash_netnet0 = { |
15 | .name = "hash:net,net", | |
16 | .alias = { "netnethash", NULL }, | |
17 | .revision = 0, | |
18 | .family = NFPROTO_IPSET_IPV46, | |
19 | .dimension = IPSET_DIM_TWO, | |
20 | .elem = { | |
21 | [IPSET_DIM_ONE - 1] = { | |
22 | .parse = ipset_parse_ip4_net6, | |
23 | .print = ipset_print_ip, | |
24 | .opt = IPSET_OPT_IP | |
25 | }, | |
26 | [IPSET_DIM_TWO - 1] = { | |
27 | .parse = ipset_parse_ip4_net6, | |
28 | .print = ipset_print_ip, | |
29 | .opt = IPSET_OPT_IP2 | |
30 | }, | |
31 | }, | |
d71dd935 JK |
32 | .cmd = { |
33 | [IPSET_CREATE] = { | |
34 | .args = { | |
35 | IPSET_ARG_FAMILY, | |
36 | /* Aliases */ | |
37 | IPSET_ARG_INET, | |
38 | IPSET_ARG_INET6, | |
39 | IPSET_ARG_HASHSIZE, | |
40 | IPSET_ARG_MAXELEM, | |
41 | IPSET_ARG_TIMEOUT, | |
42 | IPSET_ARG_COUNTERS, | |
43 | IPSET_ARG_COMMENT, | |
44 | IPSET_ARG_NONE, | |
45 | }, | |
46 | .need = 0, | |
47 | .full = 0, | |
48 | .help = "", | |
49 | }, | |
50 | [IPSET_ADD] = { | |
51 | .args = { | |
52 | IPSET_ARG_TIMEOUT, | |
53 | IPSET_ARG_NOMATCH, | |
54 | IPSET_ARG_PACKETS, | |
55 | IPSET_ARG_BYTES, | |
56 | IPSET_ARG_ADT_COMMENT, | |
57 | IPSET_ARG_NONE, | |
58 | }, | |
59 | .need = IPSET_FLAG(IPSET_OPT_IP) | |
60 | | IPSET_FLAG(IPSET_OPT_IP2), | |
61 | .full = IPSET_FLAG(IPSET_OPT_IP) | |
62 | | IPSET_FLAG(IPSET_OPT_CIDR) | |
63 | | IPSET_FLAG(IPSET_OPT_IP_TO) | |
64 | | IPSET_FLAG(IPSET_OPT_IP2) | |
65 | | IPSET_FLAG(IPSET_OPT_CIDR2) | |
66 | | IPSET_FLAG(IPSET_OPT_IP2_TO), | |
67 | .help = "IP[/CIDR]|FROM-TO,IP[/CIDR]|FROM-TO", | |
68 | }, | |
69 | [IPSET_DEL] = { | |
70 | .args = { | |
71 | IPSET_ARG_NONE, | |
72 | }, | |
73 | .need = IPSET_FLAG(IPSET_OPT_IP) | |
74 | | IPSET_FLAG(IPSET_OPT_IP2), | |
75 | .full = IPSET_FLAG(IPSET_OPT_IP) | |
76 | | IPSET_FLAG(IPSET_OPT_CIDR) | |
77 | | IPSET_FLAG(IPSET_OPT_IP_TO) | |
78 | | IPSET_FLAG(IPSET_OPT_IP2) | |
79 | | IPSET_FLAG(IPSET_OPT_CIDR2) | |
80 | | IPSET_FLAG(IPSET_OPT_IP2_TO), | |
81 | .help = "IP[/CIDR]|FROM-TO,IP[/CIDR]|FROM-TO", | |
82 | }, | |
83 | [IPSET_TEST] = { | |
84 | .args = { | |
85 | IPSET_ARG_NOMATCH, | |
86 | IPSET_ARG_NONE, | |
87 | }, | |
88 | .need = IPSET_FLAG(IPSET_OPT_IP) | |
89 | | IPSET_FLAG(IPSET_OPT_IP2), | |
90 | .full = IPSET_FLAG(IPSET_OPT_IP) | |
91 | | IPSET_FLAG(IPSET_OPT_CIDR) | |
92 | | IPSET_FLAG(IPSET_OPT_IP2) | |
93 | | IPSET_FLAG(IPSET_OPT_CIDR2), | |
94 | .help = "IP[/CIDR],IP[/CIDR]", | |
95 | }, | |
ab7c1721 | 96 | }, |
d71dd935 JK |
97 | .usage = "where depending on the INET family\n" |
98 | " IP is an IPv4 or IPv6 address (or hostname),\n" | |
99 | " CIDR is a valid IPv4 or IPv6 CIDR prefix.\n" | |
100 | " IP range is not supported with IPv6.", | |
ab7c1721 OS |
101 | .description = "initial revision", |
102 | }; | |
103 | ||
d71dd935 | 104 | /* forceadd support */ |
51ffda2e JH |
105 | static struct ipset_type ipset_hash_netnet1 = { |
106 | .name = "hash:net,net", | |
107 | .alias = { "netnethash", NULL }, | |
108 | .revision = 1, | |
109 | .family = NFPROTO_IPSET_IPV46, | |
110 | .dimension = IPSET_DIM_TWO, | |
111 | .elem = { | |
112 | [IPSET_DIM_ONE - 1] = { | |
113 | .parse = ipset_parse_ip4_net6, | |
114 | .print = ipset_print_ip, | |
115 | .opt = IPSET_OPT_IP | |
116 | }, | |
117 | [IPSET_DIM_TWO - 1] = { | |
118 | .parse = ipset_parse_ip4_net6, | |
119 | .print = ipset_print_ip, | |
120 | .opt = IPSET_OPT_IP2 | |
121 | }, | |
122 | }, | |
d71dd935 JK |
123 | .cmd = { |
124 | [IPSET_CREATE] = { | |
125 | .args = { | |
126 | IPSET_ARG_FAMILY, | |
127 | /* Aliases */ | |
128 | IPSET_ARG_INET, | |
129 | IPSET_ARG_INET6, | |
130 | IPSET_ARG_HASHSIZE, | |
131 | IPSET_ARG_MAXELEM, | |
132 | IPSET_ARG_TIMEOUT, | |
133 | IPSET_ARG_COUNTERS, | |
134 | IPSET_ARG_COMMENT, | |
135 | IPSET_ARG_FORCEADD, | |
136 | IPSET_ARG_NONE, | |
137 | }, | |
138 | .need = 0, | |
139 | .full = 0, | |
140 | .help = "", | |
141 | }, | |
142 | [IPSET_ADD] = { | |
143 | .args = { | |
144 | IPSET_ARG_TIMEOUT, | |
145 | IPSET_ARG_NOMATCH, | |
146 | IPSET_ARG_PACKETS, | |
147 | IPSET_ARG_BYTES, | |
148 | IPSET_ARG_ADT_COMMENT, | |
149 | IPSET_ARG_NONE, | |
150 | }, | |
151 | .need = IPSET_FLAG(IPSET_OPT_IP) | |
152 | | IPSET_FLAG(IPSET_OPT_IP2), | |
153 | .full = IPSET_FLAG(IPSET_OPT_IP) | |
154 | | IPSET_FLAG(IPSET_OPT_CIDR) | |
155 | | IPSET_FLAG(IPSET_OPT_IP_TO) | |
156 | | IPSET_FLAG(IPSET_OPT_IP2) | |
157 | | IPSET_FLAG(IPSET_OPT_CIDR2) | |
158 | | IPSET_FLAG(IPSET_OPT_IP2_TO), | |
159 | .help = "IP[/CIDR]|FROM-TO,IP[/CIDR]|FROM-TO", | |
160 | }, | |
161 | [IPSET_DEL] = { | |
162 | .args = { | |
163 | IPSET_ARG_NONE, | |
164 | }, | |
165 | .need = IPSET_FLAG(IPSET_OPT_IP) | |
166 | | IPSET_FLAG(IPSET_OPT_IP2), | |
167 | .full = IPSET_FLAG(IPSET_OPT_IP) | |
168 | | IPSET_FLAG(IPSET_OPT_CIDR) | |
169 | | IPSET_FLAG(IPSET_OPT_IP_TO) | |
170 | | IPSET_FLAG(IPSET_OPT_IP2) | |
171 | | IPSET_FLAG(IPSET_OPT_CIDR2) | |
172 | | IPSET_FLAG(IPSET_OPT_IP2_TO), | |
173 | .help = "IP[/CIDR]|FROM-TO,IP[/CIDR]|FROM-TO", | |
174 | }, | |
175 | [IPSET_TEST] = { | |
176 | .args = { | |
177 | IPSET_ARG_NOMATCH, | |
178 | IPSET_ARG_NONE, | |
179 | }, | |
180 | .need = IPSET_FLAG(IPSET_OPT_IP) | |
181 | | IPSET_FLAG(IPSET_OPT_IP2), | |
182 | .full = IPSET_FLAG(IPSET_OPT_IP) | |
183 | | IPSET_FLAG(IPSET_OPT_CIDR) | |
184 | | IPSET_FLAG(IPSET_OPT_IP2) | |
185 | | IPSET_FLAG(IPSET_OPT_CIDR2), | |
186 | .help = "IP[/CIDR],IP[/CIDR]", | |
187 | }, | |
51ffda2e | 188 | }, |
d71dd935 JK |
189 | .usage = "where depending on the INET family\n" |
190 | " IP is an IPv4 or IPv6 address (or hostname),\n" | |
191 | " CIDR is a valid IPv4 or IPv6 CIDR prefix.\n" | |
192 | " IP range is not supported with IPv6.", | |
51ffda2e JH |
193 | .description = "forceadd support", |
194 | }; | |
195 | ||
d71dd935 | 196 | /* skbinfo support */ |
d5835e4b AD |
197 | static struct ipset_type ipset_hash_netnet2 = { |
198 | .name = "hash:net,net", | |
199 | .alias = { "netnethash", NULL }, | |
200 | .revision = 2, | |
201 | .family = NFPROTO_IPSET_IPV46, | |
202 | .dimension = IPSET_DIM_TWO, | |
203 | .elem = { | |
204 | [IPSET_DIM_ONE - 1] = { | |
205 | .parse = ipset_parse_ip4_net6, | |
206 | .print = ipset_print_ip, | |
207 | .opt = IPSET_OPT_IP | |
208 | }, | |
209 | [IPSET_DIM_TWO - 1] = { | |
210 | .parse = ipset_parse_ip4_net6, | |
211 | .print = ipset_print_ip, | |
212 | .opt = IPSET_OPT_IP2 | |
213 | }, | |
214 | }, | |
d71dd935 JK |
215 | .cmd = { |
216 | [IPSET_CREATE] = { | |
217 | .args = { | |
218 | IPSET_ARG_FAMILY, | |
219 | /* Aliases */ | |
220 | IPSET_ARG_INET, | |
221 | IPSET_ARG_INET6, | |
222 | IPSET_ARG_HASHSIZE, | |
223 | IPSET_ARG_MAXELEM, | |
224 | IPSET_ARG_TIMEOUT, | |
225 | IPSET_ARG_COUNTERS, | |
226 | IPSET_ARG_COMMENT, | |
227 | IPSET_ARG_FORCEADD, | |
228 | IPSET_ARG_SKBINFO, | |
229 | IPSET_ARG_NONE, | |
230 | }, | |
231 | .need = 0, | |
232 | .full = 0, | |
233 | .help = "", | |
234 | }, | |
235 | [IPSET_ADD] = { | |
236 | .args = { | |
237 | IPSET_ARG_TIMEOUT, | |
238 | IPSET_ARG_NOMATCH, | |
239 | IPSET_ARG_PACKETS, | |
240 | IPSET_ARG_BYTES, | |
241 | IPSET_ARG_ADT_COMMENT, | |
242 | IPSET_ARG_SKBMARK, | |
243 | IPSET_ARG_SKBPRIO, | |
244 | IPSET_ARG_SKBQUEUE, | |
245 | IPSET_ARG_NONE, | |
246 | }, | |
247 | .need = IPSET_FLAG(IPSET_OPT_IP) | |
248 | | IPSET_FLAG(IPSET_OPT_IP2), | |
249 | .full = IPSET_FLAG(IPSET_OPT_IP) | |
250 | | IPSET_FLAG(IPSET_OPT_CIDR) | |
251 | | IPSET_FLAG(IPSET_OPT_IP_TO) | |
252 | | IPSET_FLAG(IPSET_OPT_IP2) | |
253 | | IPSET_FLAG(IPSET_OPT_CIDR2) | |
254 | | IPSET_FLAG(IPSET_OPT_IP2_TO), | |
255 | .help = "IP[/CIDR]|FROM-TO,IP[/CIDR]|FROM-TO", | |
256 | }, | |
257 | [IPSET_DEL] = { | |
258 | .args = { | |
259 | IPSET_ARG_NONE, | |
260 | }, | |
261 | .need = IPSET_FLAG(IPSET_OPT_IP) | |
262 | | IPSET_FLAG(IPSET_OPT_IP2), | |
263 | .full = IPSET_FLAG(IPSET_OPT_IP) | |
264 | | IPSET_FLAG(IPSET_OPT_CIDR) | |
265 | | IPSET_FLAG(IPSET_OPT_IP_TO) | |
266 | | IPSET_FLAG(IPSET_OPT_IP2) | |
267 | | IPSET_FLAG(IPSET_OPT_CIDR2) | |
268 | | IPSET_FLAG(IPSET_OPT_IP2_TO), | |
269 | .help = "IP[/CIDR]|FROM-TO,IP[/CIDR]|FROM-TO", | |
270 | }, | |
271 | [IPSET_TEST] = { | |
272 | .args = { | |
273 | IPSET_ARG_NOMATCH, | |
274 | IPSET_ARG_NONE, | |
275 | }, | |
276 | .need = IPSET_FLAG(IPSET_OPT_IP) | |
277 | | IPSET_FLAG(IPSET_OPT_IP2), | |
278 | .full = IPSET_FLAG(IPSET_OPT_IP) | |
279 | | IPSET_FLAG(IPSET_OPT_CIDR) | |
280 | | IPSET_FLAG(IPSET_OPT_IP2) | |
281 | | IPSET_FLAG(IPSET_OPT_CIDR2), | |
282 | .help = "IP[/CIDR],IP[/CIDR]", | |
283 | }, | |
d5835e4b | 284 | }, |
d71dd935 JK |
285 | .usage = "where depending on the INET family\n" |
286 | " IP is an IPv4 or IPv6 address (or hostname),\n" | |
287 | " CIDR is a valid IPv4 or IPv6 CIDR prefix.\n" | |
288 | " IP range is not supported with IPv6.", | |
d5835e4b AD |
289 | .description = "skbinfo support", |
290 | }; | |
291 | ||
de340a7f JK |
292 | /* bucketsize support */ |
293 | static struct ipset_type ipset_hash_netnet3 = { | |
294 | .name = "hash:net,net", | |
295 | .alias = { "netnethash", NULL }, | |
296 | .revision = 3, | |
297 | .family = NFPROTO_IPSET_IPV46, | |
298 | .dimension = IPSET_DIM_TWO, | |
299 | .elem = { | |
300 | [IPSET_DIM_ONE - 1] = { | |
301 | .parse = ipset_parse_ip4_net6, | |
302 | .print = ipset_print_ip, | |
303 | .opt = IPSET_OPT_IP | |
304 | }, | |
305 | [IPSET_DIM_TWO - 1] = { | |
306 | .parse = ipset_parse_ip4_net6, | |
307 | .print = ipset_print_ip, | |
308 | .opt = IPSET_OPT_IP2 | |
309 | }, | |
310 | }, | |
311 | .cmd = { | |
312 | [IPSET_CREATE] = { | |
313 | .args = { | |
314 | IPSET_ARG_FAMILY, | |
315 | /* Aliases */ | |
316 | IPSET_ARG_INET, | |
317 | IPSET_ARG_INET6, | |
318 | IPSET_ARG_HASHSIZE, | |
319 | IPSET_ARG_MAXELEM, | |
320 | IPSET_ARG_TIMEOUT, | |
321 | IPSET_ARG_COUNTERS, | |
322 | IPSET_ARG_COMMENT, | |
323 | IPSET_ARG_FORCEADD, | |
324 | IPSET_ARG_SKBINFO, | |
325 | IPSET_ARG_BUCKETSIZE, | |
280fe2d4 | 326 | IPSET_ARG_INITVAL, |
de340a7f JK |
327 | IPSET_ARG_NONE, |
328 | }, | |
329 | .need = 0, | |
330 | .full = 0, | |
331 | .help = "", | |
332 | }, | |
333 | [IPSET_ADD] = { | |
334 | .args = { | |
335 | IPSET_ARG_TIMEOUT, | |
336 | IPSET_ARG_NOMATCH, | |
337 | IPSET_ARG_PACKETS, | |
338 | IPSET_ARG_BYTES, | |
339 | IPSET_ARG_ADT_COMMENT, | |
340 | IPSET_ARG_SKBMARK, | |
341 | IPSET_ARG_SKBPRIO, | |
342 | IPSET_ARG_SKBQUEUE, | |
343 | IPSET_ARG_NONE, | |
344 | }, | |
345 | .need = IPSET_FLAG(IPSET_OPT_IP) | |
346 | | IPSET_FLAG(IPSET_OPT_IP2), | |
347 | .full = IPSET_FLAG(IPSET_OPT_IP) | |
348 | | IPSET_FLAG(IPSET_OPT_CIDR) | |
349 | | IPSET_FLAG(IPSET_OPT_IP_TO) | |
350 | | IPSET_FLAG(IPSET_OPT_IP2) | |
351 | | IPSET_FLAG(IPSET_OPT_CIDR2) | |
352 | | IPSET_FLAG(IPSET_OPT_IP2_TO), | |
353 | .help = "IP[/CIDR]|FROM-TO,IP[/CIDR]|FROM-TO", | |
354 | }, | |
355 | [IPSET_DEL] = { | |
356 | .args = { | |
357 | IPSET_ARG_NONE, | |
358 | }, | |
359 | .need = IPSET_FLAG(IPSET_OPT_IP) | |
360 | | IPSET_FLAG(IPSET_OPT_IP2), | |
361 | .full = IPSET_FLAG(IPSET_OPT_IP) | |
362 | | IPSET_FLAG(IPSET_OPT_CIDR) | |
363 | | IPSET_FLAG(IPSET_OPT_IP_TO) | |
364 | | IPSET_FLAG(IPSET_OPT_IP2) | |
365 | | IPSET_FLAG(IPSET_OPT_CIDR2) | |
366 | | IPSET_FLAG(IPSET_OPT_IP2_TO), | |
367 | .help = "IP[/CIDR]|FROM-TO,IP[/CIDR]|FROM-TO", | |
368 | }, | |
369 | [IPSET_TEST] = { | |
370 | .args = { | |
371 | IPSET_ARG_NOMATCH, | |
372 | IPSET_ARG_NONE, | |
373 | }, | |
374 | .need = IPSET_FLAG(IPSET_OPT_IP) | |
375 | | IPSET_FLAG(IPSET_OPT_IP2), | |
376 | .full = IPSET_FLAG(IPSET_OPT_IP) | |
377 | | IPSET_FLAG(IPSET_OPT_CIDR) | |
378 | | IPSET_FLAG(IPSET_OPT_IP2) | |
379 | | IPSET_FLAG(IPSET_OPT_CIDR2), | |
380 | .help = "IP[/CIDR],IP[/CIDR]", | |
381 | }, | |
382 | }, | |
383 | .usage = "where depending on the INET family\n" | |
384 | " IP is an IPv4 or IPv6 address (or hostname),\n" | |
385 | " CIDR is a valid IPv4 or IPv6 CIDR prefix.\n" | |
386 | " IP range is not supported with IPv6.", | |
280fe2d4 | 387 | .description = "bucketsize, initval support", |
de340a7f JK |
388 | }; |
389 | ||
b1b2073e VP |
390 | /* bitmask support */ |
391 | static struct ipset_type ipset_hash_netnet4 = { | |
392 | .name = "hash:net,net", | |
393 | .alias = { "netnethash", NULL }, | |
394 | .revision = 4, | |
395 | .family = NFPROTO_IPSET_IPV46, | |
396 | .dimension = IPSET_DIM_TWO, | |
397 | .elem = { | |
398 | [IPSET_DIM_ONE - 1] = { | |
399 | .parse = ipset_parse_ip4_net6, | |
400 | .print = ipset_print_ip, | |
401 | .opt = IPSET_OPT_IP | |
402 | }, | |
403 | [IPSET_DIM_TWO - 1] = { | |
404 | .parse = ipset_parse_ip4_net6, | |
405 | .print = ipset_print_ip, | |
406 | .opt = IPSET_OPT_IP2 | |
407 | }, | |
408 | }, | |
409 | .cmd = { | |
410 | [IPSET_CREATE] = { | |
411 | .args = { | |
412 | IPSET_ARG_FAMILY, | |
413 | /* Aliases */ | |
414 | IPSET_ARG_INET, | |
415 | IPSET_ARG_INET6, | |
416 | IPSET_ARG_HASHSIZE, | |
417 | IPSET_ARG_MAXELEM, | |
418 | IPSET_ARG_TIMEOUT, | |
419 | IPSET_ARG_COUNTERS, | |
420 | IPSET_ARG_COMMENT, | |
421 | IPSET_ARG_FORCEADD, | |
422 | IPSET_ARG_SKBINFO, | |
423 | IPSET_ARG_BUCKETSIZE, | |
424 | IPSET_ARG_INITVAL, | |
425 | IPSET_ARG_BITMASK, | |
426 | IPSET_ARG_NETMASK, | |
427 | IPSET_ARG_NONE, | |
428 | }, | |
429 | .need = 0, | |
430 | .full = 0, | |
431 | .help = "", | |
432 | }, | |
433 | [IPSET_ADD] = { | |
434 | .args = { | |
435 | IPSET_ARG_TIMEOUT, | |
436 | IPSET_ARG_NOMATCH, | |
437 | IPSET_ARG_PACKETS, | |
438 | IPSET_ARG_BYTES, | |
439 | IPSET_ARG_ADT_COMMENT, | |
440 | IPSET_ARG_SKBMARK, | |
441 | IPSET_ARG_SKBPRIO, | |
442 | IPSET_ARG_SKBQUEUE, | |
443 | IPSET_ARG_NONE, | |
444 | }, | |
445 | .need = IPSET_FLAG(IPSET_OPT_IP) | |
446 | | IPSET_FLAG(IPSET_OPT_IP2), | |
447 | .full = IPSET_FLAG(IPSET_OPT_IP) | |
448 | | IPSET_FLAG(IPSET_OPT_CIDR) | |
449 | | IPSET_FLAG(IPSET_OPT_IP_TO) | |
450 | | IPSET_FLAG(IPSET_OPT_IP2) | |
451 | | IPSET_FLAG(IPSET_OPT_CIDR2) | |
452 | | IPSET_FLAG(IPSET_OPT_IP2_TO), | |
453 | .help = "IP[/CIDR]|FROM-TO,IP[/CIDR]|FROM-TO", | |
454 | }, | |
455 | [IPSET_DEL] = { | |
456 | .args = { | |
457 | IPSET_ARG_NONE, | |
458 | }, | |
459 | .need = IPSET_FLAG(IPSET_OPT_IP) | |
460 | | IPSET_FLAG(IPSET_OPT_IP2), | |
461 | .full = IPSET_FLAG(IPSET_OPT_IP) | |
462 | | IPSET_FLAG(IPSET_OPT_CIDR) | |
463 | | IPSET_FLAG(IPSET_OPT_IP_TO) | |
464 | | IPSET_FLAG(IPSET_OPT_IP2) | |
465 | | IPSET_FLAG(IPSET_OPT_CIDR2) | |
466 | | IPSET_FLAG(IPSET_OPT_IP2_TO), | |
467 | .help = "IP[/CIDR]|FROM-TO,IP[/CIDR]|FROM-TO", | |
468 | }, | |
469 | [IPSET_TEST] = { | |
470 | .args = { | |
471 | IPSET_ARG_NOMATCH, | |
472 | IPSET_ARG_NONE, | |
473 | }, | |
474 | .need = IPSET_FLAG(IPSET_OPT_IP) | |
475 | | IPSET_FLAG(IPSET_OPT_IP2), | |
476 | .full = IPSET_FLAG(IPSET_OPT_IP) | |
477 | | IPSET_FLAG(IPSET_OPT_CIDR) | |
478 | | IPSET_FLAG(IPSET_OPT_IP2) | |
479 | | IPSET_FLAG(IPSET_OPT_CIDR2), | |
480 | .help = "IP[/CIDR],IP[/CIDR]", | |
481 | }, | |
482 | }, | |
483 | .usage = "where depending on the INET family\n" | |
484 | " IP is an IPv4 or IPv6 address (or hostname),\n" | |
485 | " CIDR is a valid IPv4 or IPv6 CIDR prefix.\n" | |
486 | " IP range is not supported with IPv6.", | |
487 | .description = "netmask and bitmask support", | |
488 | }; | |
489 | ||
ab7c1721 OS |
490 | void _init(void); |
491 | void _init(void) | |
492 | { | |
493 | ipset_type_add(&ipset_hash_netnet0); | |
51ffda2e | 494 | ipset_type_add(&ipset_hash_netnet1); |
d5835e4b | 495 | ipset_type_add(&ipset_hash_netnet2); |
de340a7f | 496 | ipset_type_add(&ipset_hash_netnet3); |
b1b2073e | 497 | ipset_type_add(&ipset_hash_netnet4); |
ab7c1721 | 498 | } |