Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Format of an ARP firewall descriptor |
| 3 | * |
| 4 | * src, tgt, src_mask, tgt_mask, arpop, arpop_mask are always stored in |
| 5 | * network byte order. |
| 6 | * flags are stored in host byte order (of course). |
| 7 | */ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 8 | #ifndef _ARPTABLES_H |
| 9 | #define _ARPTABLES_H |
| 10 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 11 | #include <linux/if.h> |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 12 | #include <linux/in.h> |
| 13 | #include <linux/if_arp.h> |
| 14 | #include <linux/skbuff.h> |
David Howells | 8922082 | 2012-10-09 09:48:56 +0100 | [diff] [blame] | 15 | #include <uapi/linux/netfilter_arp/arp_tables.h> |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 16 | |
Patrick McHardy | 3c2ad46 | 2007-05-10 14:14:16 -0700 | [diff] [blame] | 17 | /* Standard entry. */ |
Eric Dumazet | d94d9fe | 2009-11-04 09:50:58 -0800 | [diff] [blame] | 18 | struct arpt_standard { |
Patrick McHardy | 3c2ad46 | 2007-05-10 14:14:16 -0700 | [diff] [blame] | 19 | struct arpt_entry entry; |
Jan Engelhardt | 87a2e70d | 2010-10-13 16:11:22 +0200 | [diff] [blame] | 20 | struct xt_standard_target target; |
Patrick McHardy | 3c2ad46 | 2007-05-10 14:14:16 -0700 | [diff] [blame] | 21 | }; |
| 22 | |
Eric Dumazet | d94d9fe | 2009-11-04 09:50:58 -0800 | [diff] [blame] | 23 | struct arpt_error { |
Patrick McHardy | 3c2ad46 | 2007-05-10 14:14:16 -0700 | [diff] [blame] | 24 | struct arpt_entry entry; |
Jan Engelhardt | 75f0a0f | 2010-10-13 16:37:45 +0200 | [diff] [blame] | 25 | struct xt_error_target target; |
Patrick McHardy | 3c2ad46 | 2007-05-10 14:14:16 -0700 | [diff] [blame] | 26 | }; |
| 27 | |
| 28 | #define ARPT_ENTRY_INIT(__size) \ |
| 29 | { \ |
| 30 | .target_offset = sizeof(struct arpt_entry), \ |
| 31 | .next_offset = (__size), \ |
| 32 | } |
| 33 | |
| 34 | #define ARPT_STANDARD_INIT(__verdict) \ |
| 35 | { \ |
| 36 | .entry = ARPT_ENTRY_INIT(sizeof(struct arpt_standard)), \ |
Jan Engelhardt | 243bf6e | 2010-10-13 16:28:00 +0200 | [diff] [blame] | 37 | .target = XT_TARGET_INIT(XT_STANDARD_TARGET, \ |
Jan Engelhardt | 87a2e70d | 2010-10-13 16:11:22 +0200 | [diff] [blame] | 38 | sizeof(struct xt_standard_target)), \ |
Patrick McHardy | 3c2ad46 | 2007-05-10 14:14:16 -0700 | [diff] [blame] | 39 | .target.verdict = -(__verdict) - 1, \ |
| 40 | } |
| 41 | |
| 42 | #define ARPT_ERROR_INIT \ |
| 43 | { \ |
| 44 | .entry = ARPT_ENTRY_INIT(sizeof(struct arpt_error)), \ |
Jan Engelhardt | 243bf6e | 2010-10-13 16:28:00 +0200 | [diff] [blame] | 45 | .target = XT_TARGET_INIT(XT_ERROR_TARGET, \ |
Jan Engelhardt | 75f0a0f | 2010-10-13 16:37:45 +0200 | [diff] [blame] | 46 | sizeof(struct xt_error_target)), \ |
Patrick McHardy | 3c2ad46 | 2007-05-10 14:14:16 -0700 | [diff] [blame] | 47 | .target.errorname = "ERROR", \ |
| 48 | } |
| 49 | |
Jan Engelhardt | e3eaa99 | 2009-06-17 22:14:54 +0200 | [diff] [blame] | 50 | extern void *arpt_alloc_initial_table(const struct xt_table *); |
Jan Engelhardt | 4abff07 | 2008-04-14 11:15:43 +0200 | [diff] [blame] | 51 | extern struct xt_table *arpt_register_table(struct net *net, |
Jan Engelhardt | 35aad0f | 2009-08-24 14:56:30 +0200 | [diff] [blame] | 52 | const struct xt_table *table, |
Jan Engelhardt | 4abff07 | 2008-04-14 11:15:43 +0200 | [diff] [blame] | 53 | const struct arpt_replace *repl); |
| 54 | extern void arpt_unregister_table(struct xt_table *table); |
Herbert Xu | 3db05fe | 2007-10-15 00:53:15 -0700 | [diff] [blame] | 55 | extern unsigned int arpt_do_table(struct sk_buff *skb, |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 56 | unsigned int hook, |
| 57 | const struct net_device *in, |
| 58 | const struct net_device *out, |
Jan Engelhardt | 4abff07 | 2008-04-14 11:15:43 +0200 | [diff] [blame] | 59 | struct xt_table *table); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 60 | |
Patrick McHardy | d6a2ba0 | 2007-12-17 22:26:54 -0800 | [diff] [blame] | 61 | #ifdef CONFIG_COMPAT |
| 62 | #include <net/compat.h> |
| 63 | |
Eric Dumazet | d94d9fe | 2009-11-04 09:50:58 -0800 | [diff] [blame] | 64 | struct compat_arpt_entry { |
Patrick McHardy | d6a2ba0 | 2007-12-17 22:26:54 -0800 | [diff] [blame] | 65 | struct arpt_arp arp; |
Ben Hutchings | 7ff30c4 | 2011-08-24 18:44:57 +0000 | [diff] [blame] | 66 | __u16 target_offset; |
| 67 | __u16 next_offset; |
Patrick McHardy | d6a2ba0 | 2007-12-17 22:26:54 -0800 | [diff] [blame] | 68 | compat_uint_t comefrom; |
| 69 | struct compat_xt_counters counters; |
| 70 | unsigned char elems[0]; |
| 71 | }; |
| 72 | |
Jan Engelhardt | 87a2e70d | 2010-10-13 16:11:22 +0200 | [diff] [blame] | 73 | static inline struct xt_entry_target * |
Patrick McHardy | d6a2ba0 | 2007-12-17 22:26:54 -0800 | [diff] [blame] | 74 | compat_arpt_get_target(struct compat_arpt_entry *e) |
| 75 | { |
| 76 | return (void *)e + e->target_offset; |
| 77 | } |
| 78 | |
Patrick McHardy | d6a2ba0 | 2007-12-17 22:26:54 -0800 | [diff] [blame] | 79 | #endif /* CONFIG_COMPAT */ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 80 | #endif /* _ARPTABLES_H */ |