xt_set.h revision d40f1628c3717daebc437a398a285e371b5b6f7f
1#ifndef _XT_SET_H
2#define _XT_SET_H
3
4/* The protocol version */
5#define IPSET_PROTOCOL		5
6
7/* The max length of strings including NUL: set and type identifiers */
8#define IPSET_MAXNAMELEN	32
9
10/* Sets are identified by an index in kernel space. Tweak with ip_set_id_t
11 * and IPSET_INVALID_ID if you want to increase the max number of sets.
12 */
13typedef uint16_t ip_set_id_t;
14
15#define IPSET_INVALID_ID	65535
16
17enum ip_set_dim {
18	IPSET_DIM_ZERO = 0,
19	IPSET_DIM_ONE,
20	IPSET_DIM_TWO,
21	IPSET_DIM_THREE,
22	/* Max dimension in elements.
23	 * If changed, new revision of iptables match/target is required.
24	 */
25	IPSET_DIM_MAX = 6,
26};
27
28/* Option flags for kernel operations */
29enum ip_set_kopt {
30	IPSET_INV_MATCH = (1 << IPSET_DIM_ZERO),
31	IPSET_DIM_ONE_SRC = (1 << IPSET_DIM_ONE),
32	IPSET_DIM_TWO_SRC = (1 << IPSET_DIM_TWO),
33	IPSET_DIM_THREE_SRC = (1 << IPSET_DIM_THREE),
34};
35
36/* Interface to iptables/ip6tables */
37
38#define SO_IP_SET 		83
39
40union ip_set_name_index {
41	char name[IPSET_MAXNAMELEN];
42	ip_set_id_t index;
43};
44
45#define IP_SET_OP_GET_BYNAME	0x00000006	/* Get set index by name */
46struct ip_set_req_get_set {
47	unsigned op;
48	unsigned version;
49	union ip_set_name_index set;
50};
51
52#define IP_SET_OP_GET_BYINDEX	0x00000007	/* Get set name by index */
53/* Uses ip_set_req_get_set */
54
55#define IP_SET_OP_VERSION	0x00000100	/* Ask kernel version */
56struct ip_set_req_version {
57	unsigned op;
58	unsigned version;
59};
60
61/* Revision 0 interface: backward compatible with netfilter/iptables */
62
63/*
64 * Option flags for kernel operations (xt_set_info_v0)
65 */
66#define IPSET_SRC		0x01	/* Source match/add */
67#define IPSET_DST		0x02	/* Destination match/add */
68#define IPSET_MATCH_INV		0x04	/* Inverse matching */
69
70struct xt_set_info_v0 {
71	ip_set_id_t index;
72	union {
73		u_int32_t flags[IPSET_DIM_MAX + 1];
74		struct {
75			u_int32_t __flags[IPSET_DIM_MAX];
76			u_int8_t dim;
77			u_int8_t flags;
78		} compat;
79	} u;
80};
81
82/* match and target infos */
83struct xt_set_info_match_v0 {
84	struct xt_set_info_v0 match_set;
85};
86
87struct xt_set_info_target_v0 {
88	struct xt_set_info_v0 add_set;
89	struct xt_set_info_v0 del_set;
90};
91
92/* Revision 1: current interface to netfilter/iptables */
93
94struct xt_set_info {
95	ip_set_id_t index;
96	u_int8_t dim;
97	u_int8_t flags;
98};
99
100/* match and target infos */
101struct xt_set_info_match {
102	struct xt_set_info match_set;
103};
104
105struct xt_set_info_target {
106	struct xt_set_info add_set;
107	struct xt_set_info del_set;
108};
109
110#endif /*_XT_SET_H*/
111