140d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy#ifndef _NF_NAT_H
240d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy#define _NF_NAT_H
340d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy#include <linux/netfilter_ipv4.h>
4978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt#include <net/netfilter/nf_conntrack_tuple.h>
540d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy
640d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy#define NF_NAT_MAPPING_TYPE_MAX_NAMELEN 16
740d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy
840d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardyenum nf_nat_manip_type
940d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy{
1040d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy	IP_NAT_MANIP_SRC,
1140d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy	IP_NAT_MANIP_DST
1240d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy};
1340d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy
1440d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy/* SRC manip occurs POST_ROUTING or LOCAL_IN */
15978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt#define HOOK2MANIP(hooknum) ((hooknum) != NF_INET_POST_ROUTING && \
16978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt			     (hooknum) != NF_INET_LOCAL_IN)
1740d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy
1840d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy#define IP_NAT_RANGE_MAP_IPS 1
1940d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy#define IP_NAT_RANGE_PROTO_SPECIFIED 2
2040d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy#define IP_NAT_RANGE_PROTO_RANDOM 4
21467fa9fe70f08342a50b859ddd431c848a956679Patrick McHardy#define IP_NAT_RANGE_PERSISTENT 8
2240d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy
23978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt/* NAT sequence number modifications */
24978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardtstruct nf_nat_seq {
25978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt	/* position of the last TCP sequence number modification (if any) */
26978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt	u_int32_t correction_pos;
27978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt
28978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt	/* sequence number offset before and after last modification */
29978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt	int16_t offset_before, offset_after;
30978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt};
31978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt
3240d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy/* Single range specification. */
3340d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardystruct nf_nat_range
3440d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy{
3540d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy	/* Set to OR of flags above. */
3640d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy	unsigned int flags;
3740d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy
3840d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy	/* Inclusive: network order. */
3940d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy	__be32 min_ip, max_ip;
4040d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy
4140d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy	/* Inclusive: network order */
4240d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy	union nf_conntrack_man_proto min, max;
4340d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy};
4440d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy
4540d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy/* For backwards compat: don't use in modern code. */
4640d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardystruct nf_nat_multi_range_compat
4740d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy{
4840d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy	unsigned int rangesize; /* Must be 1. */
4940d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy
5040d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy	/* hangs off end. */
5140d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy	struct nf_nat_range range[1];
5240d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy};
5340d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy
54978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt#define nf_nat_multi_range nf_nat_multi_range_compat
5540d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy#endif
56