130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _XT_SET_H
230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _XT_SET_H
330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h>
530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/netfilter/ipset/ip_set.h>
630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Revision 0 interface: backward compatible with netfilter/iptables */
830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Option flags for kernel operations (xt_set_info_v0)
1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPSET_SRC		0x01	/* Source match/add */
1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPSET_DST		0x02	/* Destination match/add */
1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPSET_MATCH_INV		0x04	/* Inverse matching */
1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xt_set_info_v0 {
1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ip_set_id_t index;
1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	union {
1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		__u32 flags[IPSET_DIM_MAX + 1];
2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct {
2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u32 __flags[IPSET_DIM_MAX];
2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u8 dim;
2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u8 flags;
2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		} compat;
2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	} u;
2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* match and target infos */
2930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xt_set_info_match_v0 {
3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xt_set_info_v0 match_set;
3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xt_set_info_target_v0 {
3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xt_set_info_v0 add_set;
3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xt_set_info_v0 del_set;
3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Revision 1  match and target */
3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xt_set_info {
4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ip_set_id_t index;
4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 dim;
4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 flags;
4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* match and target infos */
4730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xt_set_info_match_v1 {
4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xt_set_info match_set;
4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
5130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xt_set_info_target_v1 {
5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xt_set_info add_set;
5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xt_set_info del_set;
5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Revision 2 target */
5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
5830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xt_set_info_target_v2 {
5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xt_set_info add_set;
6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xt_set_info del_set;
6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 flags;
6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 timeout;
6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Revision 3 match */
6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
6730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xt_set_info_match_v3 {
6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xt_set_info match_set;
6912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	struct ip_set_counter_match0 packets;
7012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	struct ip_set_counter_match0 bytes;
7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 flags;
7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
747c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris/* Revision 3 target */
757c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris
767c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferrisstruct xt_set_info_target_v3 {
777c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris	struct xt_set_info add_set;
787c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris	struct xt_set_info del_set;
797c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris	struct xt_set_info map_set;
807c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris	__u32 flags;
817c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris	__u32 timeout;
827c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris};
837c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris
8412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris/* Revision 4 match */
8512e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris
8612e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferrisstruct xt_set_info_match_v4 {
8712e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	struct xt_set_info match_set;
8812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	struct ip_set_counter_match packets;
8912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	struct ip_set_counter_match bytes;
9012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	__u32 flags;
9112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris};
9212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris
9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /*_XT_SET_H*/
94