• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/include/net/netfilter/
1/* Header for use in defining a given protocol. */
2#ifndef _NF_NAT_PROTOCOL_H
3#define _NF_NAT_PROTOCOL_H
4#include <net/netfilter/nf_nat.h>
5#include <linux/netfilter/nfnetlink_conntrack.h>
6
7struct nf_nat_range;
8
9struct nf_nat_protocol {
10	/* Protocol number. */
11	unsigned int protonum;
12
13	struct module *me;
14
15	/* Translate a packet to the target according to manip type.
16	   Return true if succeeded. */
17	bool (*manip_pkt)(struct sk_buff *skb,
18			  unsigned int iphdroff,
19			  const struct nf_conntrack_tuple *tuple,
20			  enum nf_nat_manip_type maniptype);
21
22	/* Is the manipable part of the tuple between min and max incl? */
23	bool (*in_range)(const struct nf_conntrack_tuple *tuple,
24			 enum nf_nat_manip_type maniptype,
25			 const union nf_conntrack_man_proto *min,
26			 const union nf_conntrack_man_proto *max);
27
28	/* Alter the per-proto part of the tuple (depending on
29	   maniptype), to give a unique tuple in the given range if
30	   possible.  Per-protocol part of tuple is initialized to the
31	   incoming packet. */
32	void (*unique_tuple)(struct nf_conntrack_tuple *tuple,
33			     const struct nf_nat_range *range,
34			     enum nf_nat_manip_type maniptype,
35			     const struct nf_conn *ct);
36
37	int (*range_to_nlattr)(struct sk_buff *skb,
38			       const struct nf_nat_range *range);
39
40	int (*nlattr_to_range)(struct nlattr *tb[],
41			       struct nf_nat_range *range);
42};
43
44/* Protocol registration. */
45extern int nf_nat_protocol_register(const struct nf_nat_protocol *proto);
46extern void nf_nat_protocol_unregister(const struct nf_nat_protocol *proto);
47
48extern const struct nf_nat_protocol *nf_nat_proto_find_get(u_int8_t protocol);
49extern void nf_nat_proto_put(const struct nf_nat_protocol *proto);
50
51/* Built-in protocols. */
52extern const struct nf_nat_protocol nf_nat_protocol_tcp;
53extern const struct nf_nat_protocol nf_nat_protocol_udp;
54extern const struct nf_nat_protocol nf_nat_protocol_icmp;
55extern const struct nf_nat_protocol nf_nat_unknown_protocol;
56
57extern int init_protocols(void) __init;
58extern void cleanup_protocols(void);
59extern const struct nf_nat_protocol *find_nat_proto(u_int16_t protonum);
60
61extern bool nf_nat_proto_in_range(const struct nf_conntrack_tuple *tuple,
62				  enum nf_nat_manip_type maniptype,
63				  const union nf_conntrack_man_proto *min,
64				  const union nf_conntrack_man_proto *max);
65
66extern void nf_nat_proto_unique_tuple(struct nf_conntrack_tuple *tuple,
67				      const struct nf_nat_range *range,
68				      enum nf_nat_manip_type maniptype,
69				      const struct nf_conn *ct,
70				      u_int16_t *rover);
71
72extern int nf_nat_proto_range_to_nlattr(struct sk_buff *skb,
73					const struct nf_nat_range *range);
74extern int nf_nat_proto_nlattr_to_range(struct nlattr *tb[],
75					struct nf_nat_range *range);
76
77#endif /*_NF_NAT_PROTO_H*/
78