1#ifndef _IP_NAT_HELPER_H
2#define _IP_NAT_HELPER_H
3/* NAT protocol helper routines. */
4
5#include <linux/netfilter_ipv4/ip_conntrack.h>
6
7struct sk_buff;
8
9/* Flags */
10/* NAT helper must be called on every packet (for TCP) */
11#define IP_NAT_HELPER_F_ALWAYS		0x01
12/* Standalone NAT helper, without a conntrack part */
13#define IP_NAT_HELPER_F_STANDALONE	0x02
14
15struct ip_nat_helper
16{
17	struct list_head list;		/* Internal use */
18
19	const char *name;		/* name of the module */
20	unsigned char flags;		/* Flags (see above) */
21	struct module *me;		/* pointer to self */
22
23	/* Mask of things we will help: vs. tuple from server */
24	struct ip_conntrack_tuple tuple;
25	struct ip_conntrack_tuple mask;
26
27	/* Helper function: returns verdict */
28	unsigned int (*help)(struct ip_conntrack *ct,
29			     struct ip_conntrack_expect *exp,
30			     struct ip_nat_info *info,
31			     enum ip_conntrack_info ctinfo,
32			     unsigned int hooknum,
33			     struct sk_buff **pskb);
34
35	/* Returns verdict and sets up NAT for this connection */
36	unsigned int (*expect)(struct sk_buff **pskb,
37			       unsigned int hooknum,
38			       struct ip_conntrack *ct,
39			       struct ip_nat_info *info);
40};
41
42extern struct list_head helpers;
43
44extern int ip_nat_helper_register(struct ip_nat_helper *me);
45extern void ip_nat_helper_unregister(struct ip_nat_helper *me);
46extern int ip_nat_mangle_tcp_packet(struct sk_buff **skb,
47				struct ip_conntrack *ct,
48				enum ip_conntrack_info ctinfo,
49				unsigned int match_offset,
50				unsigned int match_len,
51				char *rep_buffer,
52				unsigned int rep_len);
53extern int ip_nat_mangle_udp_packet(struct sk_buff **skb,
54				struct ip_conntrack *ct,
55				enum ip_conntrack_info ctinfo,
56				unsigned int match_offset,
57				unsigned int match_len,
58				char *rep_buffer,
59				unsigned int rep_len);
60extern int ip_nat_seq_adjust(struct sk_buff *skb,
61				struct ip_conntrack *ct,
62				enum ip_conntrack_info ctinfo);
63extern void ip_nat_delete_sack(struct sk_buff *skb);
64#endif
65