|
Packit Bot |
e97e7f |
/* Copyright 2007-2013 Jozsef Kadlecsik (kadlec@blackhole.kfki.hu)
|
|
Packit Bot |
e97e7f |
* Copyright 2013 Smoothwall Ltd. (vytas.dauksa@smoothwall.net)
|
|
Packit Bot |
e97e7f |
*
|
|
Packit Bot |
e97e7f |
* This program is free software; you can redistribute it and/or modify
|
|
Packit Bot |
e97e7f |
* it under the terms of the GNU General Public License version 2 as
|
|
Packit Bot |
e97e7f |
* published by the Free Software Foundation.
|
|
Packit Bot |
e97e7f |
*/
|
|
Packit Bot |
e97e7f |
#include <libipset/data.h> /* IPSET_OPT_* */
|
|
Packit Bot |
e97e7f |
#include <libipset/parse.h> /* parser functions */
|
|
Packit Bot |
e97e7f |
#include <libipset/print.h> /* printing functions */
|
|
Packit Bot |
e97e7f |
#include <libipset/types.h> /* prototypes */
|
|
Packit Bot |
e97e7f |
|
|
Packit Bot |
e97e7f |
/* Initial release */
|
|
Packit Bot |
e97e7f |
static struct ipset_type ipset_hash_ipmark0 = {
|
|
Packit Bot |
e97e7f |
.name = "hash:ip,mark",
|
|
Packit Bot |
e97e7f |
.alias = { "ipmarkhash", NULL },
|
|
Packit Bot |
e97e7f |
.revision = 0,
|
|
Packit Bot |
e97e7f |
.family = NFPROTO_IPSET_IPV46,
|
|
Packit Bot |
e97e7f |
.dimension = IPSET_DIM_TWO,
|
|
Packit Bot |
e97e7f |
.elem = {
|
|
Packit Bot |
e97e7f |
[IPSET_DIM_ONE - 1] = {
|
|
Packit Bot |
e97e7f |
.parse = ipset_parse_ip4_single6,
|
|
Packit Bot |
e97e7f |
.print = ipset_print_ip,
|
|
Packit Bot |
e97e7f |
.opt = IPSET_OPT_IP
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
[IPSET_DIM_TWO - 1] = {
|
|
Packit Bot |
e97e7f |
.parse = ipset_parse_mark,
|
|
Packit Bot |
e97e7f |
.print = ipset_print_mark,
|
|
Packit Bot |
e97e7f |
.opt = IPSET_OPT_MARK
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.cmd = {
|
|
Packit Bot |
e97e7f |
[IPSET_CREATE] = {
|
|
Packit Bot |
e97e7f |
.args = {
|
|
Packit Bot |
e97e7f |
IPSET_ARG_FAMILY,
|
|
Packit Bot |
e97e7f |
/* Aliases */
|
|
Packit Bot |
e97e7f |
IPSET_ARG_INET,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_INET6,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_MARKMASK,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_HASHSIZE,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_MAXELEM,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_TIMEOUT,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_COUNTERS,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_COMMENT,
|
|
Packit Bot |
e97e7f |
/* Ignored options: backward compatibilty */
|
|
Packit Bot |
e97e7f |
IPSET_ARG_PROBES,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_RESIZE,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_IGNORED_FROM,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_IGNORED_TO,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_IGNORED_NETWORK,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_NONE,
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.need = 0,
|
|
Packit Bot |
e97e7f |
.full = 0,
|
|
Packit Bot |
e97e7f |
.help = "",
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
[IPSET_ADD] = {
|
|
Packit Bot |
e97e7f |
.args = {
|
|
Packit Bot |
e97e7f |
IPSET_ARG_TIMEOUT,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_PACKETS,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_BYTES,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_ADT_COMMENT,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_NONE,
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.need = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.full = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_IP_TO)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.help = "IP,MARK",
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
[IPSET_DEL] = {
|
|
Packit Bot |
e97e7f |
.args = {
|
|
Packit Bot |
e97e7f |
IPSET_ARG_NONE,
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.need = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.full = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_IP_TO)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.help = "IP,MARK",
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
[IPSET_TEST] = {
|
|
Packit Bot |
e97e7f |
.args = {
|
|
Packit Bot |
e97e7f |
IPSET_ARG_NONE,
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.need = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.full = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_IP_TO)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.help = "IP,MARK",
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.usage = "where depending on the INET family\n"
|
|
Packit Bot |
e97e7f |
" IP is a valid IPv4 or IPv6 address (or hostname).\n"
|
|
Packit Bot |
e97e7f |
" Adding/deleting multiple elements in IP/CIDR or FROM-TO form\n"
|
|
Packit Bot |
e97e7f |
" is supported for IPv4.\n"
|
|
Packit Bot |
e97e7f |
" Adding/deleting single mark element\n"
|
|
Packit Bot |
e97e7f |
" is supported both for IPv4 and IPv6.",
|
|
Packit Bot |
e97e7f |
.description = "initial revision",
|
|
Packit Bot |
e97e7f |
};
|
|
Packit Bot |
e97e7f |
|
|
Packit Bot |
e97e7f |
/* Forceadd support */
|
|
Packit Bot |
e97e7f |
static struct ipset_type ipset_hash_ipmark1 = {
|
|
Packit Bot |
e97e7f |
.name = "hash:ip,mark",
|
|
Packit Bot |
e97e7f |
.alias = { "ipmarkhash", NULL },
|
|
Packit Bot |
e97e7f |
.revision = 1,
|
|
Packit Bot |
e97e7f |
.family = NFPROTO_IPSET_IPV46,
|
|
Packit Bot |
e97e7f |
.dimension = IPSET_DIM_TWO,
|
|
Packit Bot |
e97e7f |
.elem = {
|
|
Packit Bot |
e97e7f |
[IPSET_DIM_ONE - 1] = {
|
|
Packit Bot |
e97e7f |
.parse = ipset_parse_ip4_single6,
|
|
Packit Bot |
e97e7f |
.print = ipset_print_ip,
|
|
Packit Bot |
e97e7f |
.opt = IPSET_OPT_IP
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
[IPSET_DIM_TWO - 1] = {
|
|
Packit Bot |
e97e7f |
.parse = ipset_parse_mark,
|
|
Packit Bot |
e97e7f |
.print = ipset_print_mark,
|
|
Packit Bot |
e97e7f |
.opt = IPSET_OPT_MARK
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.cmd = {
|
|
Packit Bot |
e97e7f |
[IPSET_CREATE] = {
|
|
Packit Bot |
e97e7f |
.args = {
|
|
Packit Bot |
e97e7f |
IPSET_ARG_FAMILY,
|
|
Packit Bot |
e97e7f |
/* Aliases */
|
|
Packit Bot |
e97e7f |
IPSET_ARG_INET,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_INET6,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_MARKMASK,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_HASHSIZE,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_MAXELEM,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_TIMEOUT,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_COUNTERS,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_COMMENT,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_FORCEADD,
|
|
Packit Bot |
e97e7f |
/* Ignored options: backward compatibilty */
|
|
Packit Bot |
e97e7f |
IPSET_ARG_PROBES,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_RESIZE,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_IGNORED_FROM,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_IGNORED_TO,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_IGNORED_NETWORK,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_NONE,
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.need = 0,
|
|
Packit Bot |
e97e7f |
.full = 0,
|
|
Packit Bot |
e97e7f |
.help = "",
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
[IPSET_ADD] = {
|
|
Packit Bot |
e97e7f |
.args = {
|
|
Packit Bot |
e97e7f |
IPSET_ARG_TIMEOUT,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_PACKETS,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_BYTES,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_ADT_COMMENT,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_NONE,
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.need = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.full = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_IP_TO)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.help = "IP,MARK",
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
[IPSET_DEL] = {
|
|
Packit Bot |
e97e7f |
.args = {
|
|
Packit Bot |
e97e7f |
IPSET_ARG_NONE,
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.need = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.full = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_IP_TO)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.help = "IP,MARK",
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
[IPSET_TEST] = {
|
|
Packit Bot |
e97e7f |
.args = {
|
|
Packit Bot |
e97e7f |
IPSET_ARG_NONE,
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.need = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.full = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_IP_TO)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.help = "IP,MARK",
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.usage = "where depending on the INET family\n"
|
|
Packit Bot |
e97e7f |
" IP is a valid IPv4 or IPv6 address (or hostname).\n"
|
|
Packit Bot |
e97e7f |
" Adding/deleting multiple elements in IP/CIDR or FROM-TO form\n"
|
|
Packit Bot |
e97e7f |
" is supported for IPv4.\n"
|
|
Packit Bot |
e97e7f |
" Adding/deleting single mark element\n"
|
|
Packit Bot |
e97e7f |
" is supported both for IPv4 and IPv6.",
|
|
Packit Bot |
e97e7f |
.description = "forceadd support",
|
|
Packit Bot |
e97e7f |
};
|
|
Packit Bot |
e97e7f |
|
|
Packit Bot |
e97e7f |
/* skbinfo support */
|
|
Packit Bot |
e97e7f |
static struct ipset_type ipset_hash_ipmark2 = {
|
|
Packit Bot |
e97e7f |
.name = "hash:ip,mark",
|
|
Packit Bot |
e97e7f |
.alias = { "ipmarkhash", NULL },
|
|
Packit Bot |
e97e7f |
.revision = 2,
|
|
Packit Bot |
e97e7f |
.family = NFPROTO_IPSET_IPV46,
|
|
Packit Bot |
e97e7f |
.dimension = IPSET_DIM_TWO,
|
|
Packit Bot |
e97e7f |
.elem = {
|
|
Packit Bot |
e97e7f |
[IPSET_DIM_ONE - 1] = {
|
|
Packit Bot |
e97e7f |
.parse = ipset_parse_ip4_single6,
|
|
Packit Bot |
e97e7f |
.print = ipset_print_ip,
|
|
Packit Bot |
e97e7f |
.opt = IPSET_OPT_IP
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
[IPSET_DIM_TWO - 1] = {
|
|
Packit Bot |
e97e7f |
.parse = ipset_parse_mark,
|
|
Packit Bot |
e97e7f |
.print = ipset_print_mark,
|
|
Packit Bot |
e97e7f |
.opt = IPSET_OPT_MARK
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.cmd = {
|
|
Packit Bot |
e97e7f |
[IPSET_CREATE] = {
|
|
Packit Bot |
e97e7f |
.args = {
|
|
Packit Bot |
e97e7f |
IPSET_ARG_FAMILY,
|
|
Packit Bot |
e97e7f |
/* Aliases */
|
|
Packit Bot |
e97e7f |
IPSET_ARG_INET,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_INET6,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_MARKMASK,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_HASHSIZE,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_MAXELEM,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_TIMEOUT,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_COUNTERS,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_COMMENT,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_FORCEADD,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_SKBINFO,
|
|
Packit Bot |
e97e7f |
/* Ignored options: backward compatibilty */
|
|
Packit Bot |
e97e7f |
IPSET_ARG_PROBES,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_RESIZE,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_IGNORED_FROM,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_IGNORED_TO,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_IGNORED_NETWORK,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_NONE,
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.need = 0,
|
|
Packit Bot |
e97e7f |
.full = 0,
|
|
Packit Bot |
e97e7f |
.help = "",
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
[IPSET_ADD] = {
|
|
Packit Bot |
e97e7f |
.args = {
|
|
Packit Bot |
e97e7f |
IPSET_ARG_TIMEOUT,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_PACKETS,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_BYTES,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_ADT_COMMENT,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_SKBMARK,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_SKBPRIO,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_SKBQUEUE,
|
|
Packit Bot |
e97e7f |
IPSET_ARG_NONE,
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.need = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.full = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_IP_TO)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.help = "IP,MARK",
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
[IPSET_DEL] = {
|
|
Packit Bot |
e97e7f |
.args = {
|
|
Packit Bot |
e97e7f |
IPSET_ARG_NONE,
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.need = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.full = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_IP_TO)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.help = "IP,MARK",
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
[IPSET_TEST] = {
|
|
Packit Bot |
e97e7f |
.args = {
|
|
Packit Bot |
e97e7f |
IPSET_ARG_NONE,
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.need = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.full = IPSET_FLAG(IPSET_OPT_IP)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_IP_TO)
|
|
Packit Bot |
e97e7f |
| IPSET_FLAG(IPSET_OPT_MARK),
|
|
Packit Bot |
e97e7f |
.help = "IP,MARK",
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
},
|
|
Packit Bot |
e97e7f |
.usage = "where depending on the INET family\n"
|
|
Packit Bot |
e97e7f |
" IP is a valid IPv4 or IPv6 address (or hostname).\n"
|
|
Packit Bot |
e97e7f |
" Adding/deleting multiple elements in IP/CIDR or FROM-TO form\n"
|
|
Packit Bot |
e97e7f |
" is supported for IPv4.\n"
|
|
Packit Bot |
e97e7f |
" Adding/deleting single mark element\n"
|
|
Packit Bot |
e97e7f |
" is supported both for IPv4 and IPv6.",
|
|
Packit Bot |
e97e7f |
.description = "skbinfo support",
|
|
Packit Bot |
e97e7f |
};
|
|
Packit Bot |
e97e7f |
|
|
Packit Bot |
e97e7f |
void _init(void);
|
|
Packit Bot |
e97e7f |
void _init(void)
|
|
Packit Bot |
e97e7f |
{
|
|
Packit Bot |
e97e7f |
ipset_type_add(&ipset_hash_ipmark0);
|
|
Packit Bot |
e97e7f |
ipset_type_add(&ipset_hash_ipmark1);
|
|
Packit Bot |
e97e7f |
ipset_type_add(&ipset_hash_ipmark2);
|
|
Packit Bot |
e97e7f |
}
|