ip_tables.h
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015: #ifndef _IPTABLES_H
016: #define _IPTABLES_H
017:
018: #include <linux/types.h>
019:
020: #include <linux/netfilter_ipv4.h>
021:
022: #include <linux/netfilter/x_tables.h>
023:
024: #define IPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
025: #define IPT_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN
026: #define ipt_match xt_match
027: #define ipt_target xt_target
028: #define ipt_table xt_table
029: #define ipt_get_revision xt_get_revision
030: #define ipt_entry_match xt_entry_match
031: #define ipt_entry_target xt_entry_target
032: #define ipt_standard_target xt_standard_target
033: #define ipt_error_target xt_error_target
034: #define ipt_counters xt_counters
035: #define IPT_CONTINUE XT_CONTINUE
036: #define IPT_RETURN XT_RETURN
037:
038:
039: #include <linux/netfilter/xt_tcpudp.h>
040: #define ipt_udp xt_udp
041: #define ipt_tcp xt_tcp
042: #define IPT_TCP_INV_SRCPT XT_TCP_INV_SRCPT
043: #define IPT_TCP_INV_DSTPT XT_TCP_INV_DSTPT
044: #define IPT_TCP_INV_FLAGS XT_TCP_INV_FLAGS
045: #define IPT_TCP_INV_OPTION XT_TCP_INV_OPTION
046: #define IPT_TCP_INV_MASK XT_TCP_INV_MASK
047: #define IPT_UDP_INV_SRCPT XT_UDP_INV_SRCPT
048: #define IPT_UDP_INV_DSTPT XT_UDP_INV_DSTPT
049: #define IPT_UDP_INV_MASK XT_UDP_INV_MASK
050:
051:
052: #define ipt_counters_info xt_counters_info
053:
054: #define IPT_STANDARD_TARGET XT_STANDARD_TARGET
055:
056: #define IPT_ERROR_TARGET XT_ERROR_TARGET
057:
058:
059: #define IPT_MATCH_ITERATE(e, fn, args...) \
060: XT_MATCH_ITERATE(struct ipt_entry, e, fn, ## args)
061:
062:
063: #define IPT_ENTRY_ITERATE(entries, size, fn, args...) \
064: XT_ENTRY_ITERATE(struct ipt_entry, entries, size, fn, ## args)
065:
066:
067: struct ipt_ip {
068:
069: struct in_addr src, dst;
070:
071: struct in_addr smsk, dmsk;
072: char iniface[IFNAMSIZ], outiface[IFNAMSIZ];
073: unsigned char iniface_mask[IFNAMSIZ], outiface_mask[IFNAMSIZ];
074:
075:
076: __u16 proto;
077:
078:
079: __u8 flags;
080:
081: __u8 invflags;
082: };
083:
084:
085: #define IPT_F_FRAG 0x01
086: #define IPT_F_GOTO 0x02
087: #define IPT_F_MASK 0x03
088:
089:
090: #define IPT_INV_VIA_IN 0x01
091: #define IPT_INV_VIA_OUT 0x02
092: #define IPT_INV_TOS 0x04
093: #define IPT_INV_SRCIP 0x08
094: #define IPT_INV_DSTIP 0x10
095: #define IPT_INV_FRAG 0x20
096: #define IPT_INV_PROTO XT_INV_PROTO
097: #define IPT_INV_MASK 0x7F
098:
099:
100:
101:
102: struct ipt_entry {
103: struct ipt_ip ip;
104:
105:
106: unsigned int nfcache;
107:
108:
109: __u16 target_offset;
110:
111: __u16 next_offset;
112:
113:
114: unsigned int comefrom;
115:
116:
117: struct xt_counters counters;
118:
119:
120: unsigned char elems[0];
121: };
122:
123:
124:
125:
126:
127:
128:
129:
130: #define IPT_BASE_CTL 64
131:
132: #define IPT_SO_SET_REPLACE (IPT_BASE_CTL)
133: #define IPT_SO_SET_ADD_COUNTERS (IPT_BASE_CTL + 1)
134: #define IPT_SO_SET_MAX IPT_SO_SET_ADD_COUNTERS
135:
136: #define IPT_SO_GET_INFO (IPT_BASE_CTL)
137: #define IPT_SO_GET_ENTRIES (IPT_BASE_CTL + 1)
138: #define IPT_SO_GET_REVISION_MATCH (IPT_BASE_CTL + 2)
139: #define IPT_SO_GET_REVISION_TARGET (IPT_BASE_CTL + 3)
140: #define IPT_SO_GET_MAX IPT_SO_GET_REVISION_TARGET
141:
142:
143: struct ipt_icmp {
144: __u8 type;
145: __u8 code[2];
146: __u8 invflags;
147: };
148:
149:
150: #define IPT_ICMP_INV 0x01
151:
152:
153: struct ipt_getinfo {
154:
155: char name[XT_TABLE_MAXNAMELEN];
156:
157:
158:
159: unsigned int valid_hooks;
160:
161:
162: unsigned int hook_entry[NF_INET_NUMHOOKS];
163:
164:
165: unsigned int underflow[NF_INET_NUMHOOKS];
166:
167:
168: unsigned int num_entries;
169:
170:
171: unsigned int size;
172: };
173:
174:
175: struct ipt_replace {
176:
177: char name[XT_TABLE_MAXNAMELEN];
178:
179:
180:
181: unsigned int valid_hooks;
182:
183:
184: unsigned int num_entries;
185:
186:
187: unsigned int size;
188:
189:
190: unsigned int hook_entry[NF_INET_NUMHOOKS];
191:
192:
193: unsigned int underflow[NF_INET_NUMHOOKS];
194:
195:
196:
197: unsigned int num_counters;
198:
199: struct xt_counters *counters;
200:
201:
202: struct ipt_entry entries[0];
203: };
204:
205:
206: struct ipt_get_entries {
207:
208: char name[XT_TABLE_MAXNAMELEN];
209:
210:
211: unsigned int size;
212:
213:
214: struct ipt_entry entrytable[0];
215: };
216:
217:
218: static __inline__ struct xt_entry_target *
219: ipt_get_target(struct ipt_entry *e)
220: {
221: return (void *)e + e->target_offset;
222: }
223:
224:
225:
226:
227: #endif
228:
© Andrew Scott 2006 -
2025,
All Rights Reserved