Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* |
| 2 | * 25-Jul-1998 Major changes to allow for ip chain table |
| 3 | * |
| 4 | * 3-Jan-2000 Named tables to allow packet selection for different uses. |
| 5 | */ |
| 6 | |
| 7 | /* |
| 8 | * Format of an IP firewall descriptor |
| 9 | * |
| 10 | * src, dst, src_mask, dst_mask are always stored in network byte order. |
| 11 | * flags are stored in host byte order (of course). |
| 12 | * Port numbers are stored in HOST byte order. |
| 13 | */ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 14 | #ifndef _IPTABLES_H |
| 15 | #define _IPTABLES_H |
| 16 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 17 | #include <linux/if.h> |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 18 | #include <linux/in.h> |
| 19 | #include <linux/ip.h> |
| 20 | #include <linux/skbuff.h> |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 21 | |
| 22 | #include <linux/init.h> |
David Howells | 17c0759 | 2012-10-09 09:48:59 +0100 | [diff] [blame] | 23 | #include <uapi/linux/netfilter_ipv4/ip_tables.h> |
| 24 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 25 | extern void ipt_init(void) __init; |
| 26 | |
Florian Westphal | a67dd26 | 2016-02-25 10:08:35 +0100 | [diff] [blame] | 27 | int ipt_register_table(struct net *net, const struct xt_table *table, |
| 28 | const struct ipt_replace *repl, |
| 29 | const struct nf_hook_ops *ops, struct xt_table **res); |
| 30 | void ipt_unregister_table(struct net *net, struct xt_table *table, |
| 31 | const struct nf_hook_ops *ops); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 32 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 33 | /* Standard entry. */ |
Eric Dumazet | d94d9fe | 2009-11-04 09:50:58 -0800 | [diff] [blame] | 34 | struct ipt_standard { |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 35 | struct ipt_entry entry; |
Jan Engelhardt | 87a2e70d | 2010-10-13 16:11:22 +0200 | [diff] [blame] | 36 | struct xt_standard_target target; |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 37 | }; |
| 38 | |
Eric Dumazet | d94d9fe | 2009-11-04 09:50:58 -0800 | [diff] [blame] | 39 | struct ipt_error { |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 40 | struct ipt_entry entry; |
Jan Engelhardt | 75f0a0f | 2010-10-13 16:37:45 +0200 | [diff] [blame] | 41 | struct xt_error_target target; |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 42 | }; |
| 43 | |
Patrick McHardy | 3c2ad46 | 2007-05-10 14:14:16 -0700 | [diff] [blame] | 44 | #define IPT_ENTRY_INIT(__size) \ |
| 45 | { \ |
| 46 | .target_offset = sizeof(struct ipt_entry), \ |
| 47 | .next_offset = (__size), \ |
| 48 | } |
| 49 | |
| 50 | #define IPT_STANDARD_INIT(__verdict) \ |
| 51 | { \ |
| 52 | .entry = IPT_ENTRY_INIT(sizeof(struct ipt_standard)), \ |
Jan Engelhardt | 243bf6e | 2010-10-13 16:28:00 +0200 | [diff] [blame] | 53 | .target = XT_TARGET_INIT(XT_STANDARD_TARGET, \ |
Patrick McHardy | 3c2ad46 | 2007-05-10 14:14:16 -0700 | [diff] [blame] | 54 | sizeof(struct xt_standard_target)), \ |
| 55 | .target.verdict = -(__verdict) - 1, \ |
| 56 | } |
| 57 | |
| 58 | #define IPT_ERROR_INIT \ |
| 59 | { \ |
| 60 | .entry = IPT_ENTRY_INIT(sizeof(struct ipt_error)), \ |
Jan Engelhardt | 243bf6e | 2010-10-13 16:28:00 +0200 | [diff] [blame] | 61 | .target = XT_TARGET_INIT(XT_ERROR_TARGET, \ |
Jan Engelhardt | 75f0a0f | 2010-10-13 16:37:45 +0200 | [diff] [blame] | 62 | sizeof(struct xt_error_target)), \ |
Patrick McHardy | 3c2ad46 | 2007-05-10 14:14:16 -0700 | [diff] [blame] | 63 | .target.errorname = "ERROR", \ |
| 64 | } |
| 65 | |
Jan Engelhardt | e3eaa99 | 2009-06-17 22:14:54 +0200 | [diff] [blame] | 66 | extern void *ipt_alloc_initial_table(const struct xt_table *); |
Herbert Xu | 3db05fe | 2007-10-15 00:53:15 -0700 | [diff] [blame] | 67 | extern unsigned int ipt_do_table(struct sk_buff *skb, |
David S. Miller | 1c491ba | 2015-04-03 20:56:08 -0400 | [diff] [blame] | 68 | const struct nf_hook_state *state, |
Jan Engelhardt | e60a13e | 2007-02-07 15:12:33 -0800 | [diff] [blame] | 69 | struct xt_table *table); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 70 | |
Dmitry Mishin | 2722971 | 2006-04-01 02:25:19 -0800 | [diff] [blame] | 71 | #ifdef CONFIG_COMPAT |
| 72 | #include <net/compat.h> |
| 73 | |
Eric Dumazet | d94d9fe | 2009-11-04 09:50:58 -0800 | [diff] [blame] | 74 | struct compat_ipt_entry { |
Dmitry Mishin | 2722971 | 2006-04-01 02:25:19 -0800 | [diff] [blame] | 75 | struct ipt_ip ip; |
| 76 | compat_uint_t nfcache; |
Ben Hutchings | 7ff30c4 | 2011-08-24 18:44:57 +0000 | [diff] [blame] | 77 | __u16 target_offset; |
| 78 | __u16 next_offset; |
Dmitry Mishin | 2722971 | 2006-04-01 02:25:19 -0800 | [diff] [blame] | 79 | compat_uint_t comefrom; |
| 80 | struct compat_xt_counters counters; |
| 81 | unsigned char elems[0]; |
| 82 | }; |
| 83 | |
Patrick McHardy | 73cd598 | 2007-12-17 21:47:32 -0800 | [diff] [blame] | 84 | /* Helper functions */ |
Jan Engelhardt | 87a2e70d | 2010-10-13 16:11:22 +0200 | [diff] [blame] | 85 | static inline struct xt_entry_target * |
Patrick McHardy | 73cd598 | 2007-12-17 21:47:32 -0800 | [diff] [blame] | 86 | compat_ipt_get_target(struct compat_ipt_entry *e) |
| 87 | { |
| 88 | return (void *)e + e->target_offset; |
| 89 | } |
| 90 | |
Dmitry Mishin | 2722971 | 2006-04-01 02:25:19 -0800 | [diff] [blame] | 91 | #endif /* CONFIG_COMPAT */ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 92 | #endif /* _IPTABLES_H */ |