x_tables.h revision de3d12f48ac1869fc9f9cb442b2d692b027d8a14
1e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger#ifndef _X_TABLES_H
2e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger#define _X_TABLES_H
3e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
4e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger#define XT_FUNCTION_MAXNAMELEN 30
5e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger#define XT_TABLE_MAXNAMELEN 32
6e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
7e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemmingerstruct xt_entry_match
8e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger{
9e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	union {
10e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger		struct {
11e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger			u_int16_t match_size;
12e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
13e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger			/* Used by userspace */
14e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger			char name[XT_FUNCTION_MAXNAMELEN-1];
15e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
16e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger			u_int8_t revision;
17e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger		} user;
18e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger		struct {
19e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger			u_int16_t match_size;
20e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
21e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger			/* Used inside the kernel */
22e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger			struct xt_match *match;
23e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger		} kernel;
24e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
25e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger		/* Total length */
26e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger		u_int16_t match_size;
27e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	} u;
28e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
29e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	unsigned char data[0];
30e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger};
31e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
32e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemmingerstruct xt_entry_target
33e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger{
34e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	union {
35e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger		struct {
36e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger			u_int16_t target_size;
37e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
38e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger			/* Used by userspace */
39e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger			char name[XT_FUNCTION_MAXNAMELEN-1];
40e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
41e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger			u_int8_t revision;
42e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger		} user;
43e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger		struct {
44e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger			u_int16_t target_size;
45e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
46e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger			/* Used inside the kernel */
47e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger			struct xt_target *target;
48e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger		} kernel;
49e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
50e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger		/* Total length */
51e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger		u_int16_t target_size;
52e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	} u;
53e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
54e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	unsigned char data[0];
55e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger};
56e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
57de3d12f48ac1869fc9f9cb442b2d692b027d8a14Stephen Hemminger#define XT_TARGET_INIT(__name, __size)					       \
58de3d12f48ac1869fc9f9cb442b2d692b027d8a14Stephen Hemminger{									       \
59de3d12f48ac1869fc9f9cb442b2d692b027d8a14Stephen Hemminger	.target.u.user = {						       \
60de3d12f48ac1869fc9f9cb442b2d692b027d8a14Stephen Hemminger		.target_size	= XT_ALIGN(__size),			       \
61de3d12f48ac1869fc9f9cb442b2d692b027d8a14Stephen Hemminger		.name		= __name,				       \
62de3d12f48ac1869fc9f9cb442b2d692b027d8a14Stephen Hemminger	},								       \
63de3d12f48ac1869fc9f9cb442b2d692b027d8a14Stephen Hemminger}
64de3d12f48ac1869fc9f9cb442b2d692b027d8a14Stephen Hemminger
65e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemmingerstruct xt_standard_target
66e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger{
67e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	struct xt_entry_target target;
68e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	int verdict;
69e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger};
70e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
71e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger/* The argument to IPT_SO_GET_REVISION_*.  Returns highest revision
72e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger * kernel supports, if >= revision. */
73e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemmingerstruct xt_get_revision
74e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger{
75e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	char name[XT_FUNCTION_MAXNAMELEN-1];
76e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
77e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	u_int8_t revision;
78e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger};
79e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
80e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger/* CONTINUE verdict for targets */
81e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger#define XT_CONTINUE 0xFFFFFFFF
82e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
83e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger/* For standard target */
84e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger#define XT_RETURN (-NF_REPEAT - 1)
85e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
86e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger/* this is a dummy structure to find out the alignment requirement for a struct
87e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger * containing all the fundamental data types that are used in ipt_entry,
88e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger * ip6t_entry and arpt_entry.  This sucks, and it is a hack.  It will be my
89e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger * personal pleasure to remove it -HW
90e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger */
91e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemmingerstruct _xt_align
92e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger{
93e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	u_int8_t u8;
94e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	u_int16_t u16;
95e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	u_int32_t u32;
96e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	u_int64_t u64;
97e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger};
98e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
99e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger#define XT_ALIGN(s) (((s) + (__alignof__(struct _xt_align)-1)) 	\
100e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger			& ~(__alignof__(struct _xt_align)-1))
101e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
102e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger/* Standard return verdict, or do jump. */
103e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger#define XT_STANDARD_TARGET ""
104e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger/* Error verdict. */
105e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger#define XT_ERROR_TARGET "ERROR"
106e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
107e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger#define SET_COUNTER(c,b,p) do { (c).bcnt = (b); (c).pcnt = (p); } while(0)
108e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger#define ADD_COUNTER(c,b,p) do { (c).bcnt += (b); (c).pcnt += (p); } while(0)
109e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
110e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemmingerstruct xt_counters
111e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger{
112e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	u_int64_t pcnt, bcnt;			/* Packet and byte counters */
113e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger};
114e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
115e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger/* The argument to IPT_SO_ADD_COUNTERS. */
116e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemmingerstruct xt_counters_info
117e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger{
118e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	/* Which table. */
119e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	char name[XT_TABLE_MAXNAMELEN];
120e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
121e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	unsigned int num_counters;
122e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
123e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	/* The counters (actually `number' of these). */
124e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger	struct xt_counters counters[0];
125e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger};
126e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
127e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger#define XT_INV_PROTO		0x40	/* Invert the sense of PROTO. */
128e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
129e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger
130e309c5fa6adf7c48074a08126721838ad4ea2749Stephen Hemminger#endif /* _X_TABLES_H */
131