12cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/*
22cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer * 25-Jul-1998 Major changes to allow for ip chain table
32cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer *
42cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer * 3-Jan-2000 Named tables to allow packet selection for different uses.
52cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer */
62cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
72cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/*
82cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer * 	Format of an IP6 firewall descriptor
92cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer *
102cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer * 	src, dst, src_mask, dst_mask are always stored in network byte order.
112cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer * 	flags are stored in host byte order (of course).
122cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer * 	Port numbers are stored in HOST byte order.
132cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer */
142cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
152cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#ifndef _IP6_TABLES_H
162cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define _IP6_TABLES_H
172cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
18978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt#include <linux/types.h>
19978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt
202cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#include <linux/netfilter_ipv6.h>
212cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
222cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#include <linux/netfilter/x_tables.h>
232cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
242cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
252cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN
262cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
272cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define ip6t_match xt_match
282cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define ip6t_target xt_target
292cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define ip6t_table xt_table
302cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define ip6t_get_revision xt_get_revision
312cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
322cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* Yes, Virginia, you have to zero the padding. */
332cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouerstruct ip6t_ip6 {
342cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Source and destination IP6 addr */
352cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	struct in6_addr src, dst;
362cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Mask for src and dest IP6 addr */
372cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	struct in6_addr smsk, dmsk;
382cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	char iniface[IFNAMSIZ], outiface[IFNAMSIZ];
392cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	unsigned char iniface_mask[IFNAMSIZ], outiface_mask[IFNAMSIZ];
402cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
412cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Upper protocol number
422cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	 * - The allowed value is 0 (any) or protocol number of last parsable
432cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	 *   header, which is 50 (ESP), 59 (No Next Header), 135 (MH), or
442cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	 *   the non IPv6 extension headers.
452cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	 * - The protocol numbers of IPv6 extension headers except of ESP and
462cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	 *   MH do not match any packets.
472cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	 * - You also need to set IP6T_FLAGS_PROTO to "flags" to check protocol.
482cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	 */
492cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	u_int16_t proto;
502cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* TOS to match iff flags & IP6T_F_TOS */
512cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	u_int8_t tos;
522cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
532cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Flags word */
542cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	u_int8_t flags;
552cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Inverse flags */
562cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	u_int8_t invflags;
572cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer};
582cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
592cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define ip6t_entry_match xt_entry_match
602cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define ip6t_entry_target xt_entry_target
612cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define ip6t_standard_target xt_standard_target
622cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
632cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define ip6t_counters	xt_counters
642cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
652cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* Values for "flag" field in struct ip6t_ip6 (general ip6 structure). */
662cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_F_PROTO		0x01	/* Set if rule cares about upper
672cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer					   protocols */
682cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_F_TOS		0x02	/* Match the TOS. */
692cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_F_GOTO		0x04	/* Set if jump is a goto */
702cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_F_MASK		0x07	/* All possible flag bits mask. */
712cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
722cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* Values for "inv" field in struct ip6t_ip6. */
732cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_INV_VIA_IN		0x01	/* Invert the sense of IN IFACE. */
742cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_INV_VIA_OUT		0x02	/* Invert the sense of OUT IFACE */
752cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_INV_TOS		0x04	/* Invert the sense of TOS. */
762cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_INV_SRCIP		0x08	/* Invert the sense of SRC IP. */
772cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_INV_DSTIP		0x10	/* Invert the sense of DST OP. */
782cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_INV_FRAG		0x20	/* Invert the sense of FRAG. */
792cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_INV_PROTO		XT_INV_PROTO
802cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_INV_MASK		0x7F	/* All possible flag bits mask. */
812cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
822cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* This structure defines each of the firewall rules.  Consists of 3
832cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer   parts which are 1) general IP header stuff 2) match specific
842cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer   stuff 3) the target to perform if the rule matches */
85350661a6eb089f3e54e67e022db9e16ea280499fJan Engelhardtstruct ip6t_entry {
862cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	struct ip6t_ip6 ipv6;
872cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
882cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Mark with fields that we care about. */
892cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	unsigned int nfcache;
902cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
912cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Size of ipt_entry + matches */
922cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	u_int16_t target_offset;
932cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Size of ipt_entry + matches + target */
942cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	u_int16_t next_offset;
952cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
962cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Back pointer */
972cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	unsigned int comefrom;
982cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
992cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Packet and byte counters. */
1002cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	struct xt_counters counters;
1012cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1022cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* The matches (if any), then the target. */
1032cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	unsigned char elems[0];
1042cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer};
1052cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1062cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* Standard entry */
107350661a6eb089f3e54e67e022db9e16ea280499fJan Engelhardtstruct ip6t_standard {
1082cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	struct ip6t_entry entry;
1092cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	struct ip6t_standard_target target;
1102cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer};
1112cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
112350661a6eb089f3e54e67e022db9e16ea280499fJan Engelhardtstruct ip6t_error_target {
1132cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	struct ip6t_entry_target target;
1142cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	char errorname[IP6T_FUNCTION_MAXNAMELEN];
1152cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer};
1162cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
117350661a6eb089f3e54e67e022db9e16ea280499fJan Engelhardtstruct ip6t_error {
1182cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	struct ip6t_entry entry;
1192cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	struct ip6t_error_target target;
1202cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer};
1212cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1222cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_ENTRY_INIT(__size)						       \
1232cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer{									       \
1242cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	.target_offset	= sizeof(struct ip6t_entry),			       \
1252cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	.next_offset	= (__size),					       \
1262cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer}
1272cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1282cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_STANDARD_INIT(__verdict)					       \
1292cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer{									       \
1302cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	.entry		= IP6T_ENTRY_INIT(sizeof(struct ip6t_standard)),       \
1312cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	.target		= XT_TARGET_INIT(IP6T_STANDARD_TARGET,		       \
1322cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer					 sizeof(struct ip6t_standard_target)), \
1332cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	.target.verdict	= -(__verdict) - 1,				       \
1342cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer}
1352cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1362cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_ERROR_INIT							       \
1372cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer{									       \
1382cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	.entry		= IP6T_ENTRY_INIT(sizeof(struct ip6t_error)),	       \
1392cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	.target		= XT_TARGET_INIT(IP6T_ERROR_TARGET,		       \
1402cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer					 sizeof(struct ip6t_error_target)),    \
1412cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	.target.errorname = "ERROR",					       \
1422cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer}
1432cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1442cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/*
1452cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer * New IP firewall options for [gs]etsockopt at the RAW IP level.
1462cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer * Unlike BSD Linux inherits IP options so you don't have to use
1472cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer * a raw socket for this. Instead we check rights in the calls.
1482cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer *
1492cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer * ATTENTION: check linux/in6.h before adding new number here.
1502cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer */
1512cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_BASE_CTL			64
1522cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1532cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_SO_SET_REPLACE		(IP6T_BASE_CTL)
1542cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_SO_SET_ADD_COUNTERS	(IP6T_BASE_CTL + 1)
1552cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_SO_SET_MAX			IP6T_SO_SET_ADD_COUNTERS
1562cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1572cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_SO_GET_INFO		(IP6T_BASE_CTL)
1582cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_SO_GET_ENTRIES		(IP6T_BASE_CTL + 1)
1592cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_SO_GET_REVISION_MATCH	(IP6T_BASE_CTL + 4)
1602cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_SO_GET_REVISION_TARGET	(IP6T_BASE_CTL + 5)
1612cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_SO_GET_MAX			IP6T_SO_GET_REVISION_TARGET
1622cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1632cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* CONTINUE verdict for targets */
1642cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_CONTINUE XT_CONTINUE
1652cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1662cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* For standard target */
1672cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_RETURN XT_RETURN
1682cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1692cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* TCP/UDP matching stuff */
1702cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#include <linux/netfilter/xt_tcpudp.h>
1712cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1722cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define ip6t_tcp xt_tcp
1732cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define ip6t_udp xt_udp
1742cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1752cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* Values for "inv" field in struct ipt_tcp. */
1762cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_TCP_INV_SRCPT	XT_TCP_INV_SRCPT
1772cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_TCP_INV_DSTPT	XT_TCP_INV_DSTPT
1782cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_TCP_INV_FLAGS	XT_TCP_INV_FLAGS
1792cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_TCP_INV_OPTION	XT_TCP_INV_OPTION
1802cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_TCP_INV_MASK	XT_TCP_INV_MASK
1812cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1822cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* Values for "invflags" field in struct ipt_udp. */
1832cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_UDP_INV_SRCPT	XT_UDP_INV_SRCPT
1842cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_UDP_INV_DSTPT	XT_UDP_INV_DSTPT
1852cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_UDP_INV_MASK	XT_UDP_INV_MASK
1862cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1872cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* ICMP matching stuff */
188350661a6eb089f3e54e67e022db9e16ea280499fJan Engelhardtstruct ip6t_icmp {
1892cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	u_int8_t type;				/* type to match */
1902cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	u_int8_t code[2];			/* range of code */
1912cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	u_int8_t invflags;			/* Inverse flags */
1922cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer};
1932cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1942cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* Values for "inv" field for struct ipt_icmp. */
1952cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_ICMP_INV	0x01	/* Invert the sense of type/code test */
1962cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
1972cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* The argument to IP6T_SO_GET_INFO */
198350661a6eb089f3e54e67e022db9e16ea280499fJan Engelhardtstruct ip6t_getinfo {
1992cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Which table: caller fills this in. */
2002cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	char name[IP6T_TABLE_MAXNAMELEN];
2012cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2022cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Kernel fills these in. */
2032cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Which hook entry points are valid: bitmask */
2042cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	unsigned int valid_hooks;
2052cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2062cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Hook entry points: one per netfilter hook. */
207ca7cd666949b68bf41a32de38ee38e332e89863bJan Engelhardt	unsigned int hook_entry[NF_INET_NUMHOOKS];
2082cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2092cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Underflow points. */
210ca7cd666949b68bf41a32de38ee38e332e89863bJan Engelhardt	unsigned int underflow[NF_INET_NUMHOOKS];
2112cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2122cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Number of entries */
2132cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	unsigned int num_entries;
2142cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2152cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Size of entries. */
2162cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	unsigned int size;
2172cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer};
2182cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2192cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* The argument to IP6T_SO_SET_REPLACE. */
220350661a6eb089f3e54e67e022db9e16ea280499fJan Engelhardtstruct ip6t_replace {
2212cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Which table. */
2222cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	char name[IP6T_TABLE_MAXNAMELEN];
2232cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2242cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Which hook entry points are valid: bitmask.  You can't
2252cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer           change this. */
2262cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	unsigned int valid_hooks;
2272cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2282cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Number of entries */
2292cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	unsigned int num_entries;
2302cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2312cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Total size of new entries */
2322cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	unsigned int size;
2332cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2342cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Hook entry points. */
235ca7cd666949b68bf41a32de38ee38e332e89863bJan Engelhardt	unsigned int hook_entry[NF_INET_NUMHOOKS];
2362cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2372cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Underflow points. */
238ca7cd666949b68bf41a32de38ee38e332e89863bJan Engelhardt	unsigned int underflow[NF_INET_NUMHOOKS];
2392cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2402cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Information about old entries: */
2412cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Number of counters (must be equal to current number of entries). */
2422cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	unsigned int num_counters;
2432cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* The old entries' counters. */
244ca7cd666949b68bf41a32de38ee38e332e89863bJan Engelhardt	struct xt_counters *counters;
2452cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2462cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* The entries (hang off end: not really an array). */
2472cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	struct ip6t_entry entries[0];
2482cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer};
2492cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2502cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* The argument to IP6T_SO_ADD_COUNTERS. */
2512cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define ip6t_counters_info xt_counters_info
2522cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2532cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* The argument to IP6T_SO_GET_ENTRIES. */
254350661a6eb089f3e54e67e022db9e16ea280499fJan Engelhardtstruct ip6t_get_entries {
2552cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* Which table: user fills this in. */
2562cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	char name[IP6T_TABLE_MAXNAMELEN];
2572cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2582cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* User fills this in: total entry size. */
2592cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	unsigned int size;
2602cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2612cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	/* The entries. */
2622cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	struct ip6t_entry entrytable[0];
2632cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer};
2642cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2652cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* Standard return verdict, or do jump. */
2662cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_STANDARD_TARGET XT_STANDARD_TARGET
2672cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* Error verdict. */
2682cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#define IP6T_ERROR_TARGET XT_ERROR_TARGET
2692cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2702cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* Helper functions */
2712cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouerstatic __inline__ struct ip6t_entry_target *
2722cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouerip6t_get_target(struct ip6t_entry *e)
2732cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer{
2742cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer	return (void *)e + e->target_offset;
2752cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer}
2762cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2772cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* fn returns 0 to continue iteration */
278ca7cd666949b68bf41a32de38ee38e332e89863bJan Engelhardt#define IP6T_MATCH_ITERATE(e, fn, args...) \
279ca7cd666949b68bf41a32de38ee38e332e89863bJan Engelhardt	XT_MATCH_ITERATE(struct ip6t_entry, e, fn, ## args)
2802cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2812cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/* fn returns 0 to continue iteration */
282ca7cd666949b68bf41a32de38ee38e332e89863bJan Engelhardt#define IP6T_ENTRY_ITERATE(entries, size, fn, args...) \
283ca7cd666949b68bf41a32de38ee38e332e89863bJan Engelhardt	XT_ENTRY_ITERATE(struct ip6t_entry, entries, size, fn, ## args)
2842cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2852cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer/*
2862cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer *	Main firewall chains definitions and global var's definitions.
2872cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer */
2882cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer
2892cfa903a2882a5d7819c697870af9ae3ab106386Jesper Brouer#endif /* _IP6_TABLES_H */
290