]>
Commit | Line | Data |
---|---|---|
5b1158e9 JK |
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 | ||
7 | struct nf_nat_range; | |
8 | ||
fd2c3ef7 | 9 | struct nf_nat_protocol { |
5b1158e9 JK |
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. */ | |
f2ea825f JE |
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); | |
5b1158e9 JK |
21 | |
22 | /* Is the manipable part of the tuple between min and max incl? */ | |
f2ea825f JE |
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); | |
5b1158e9 JK |
27 | |
28 | /* Alter the per-proto part of the tuple (depending on | |
29 | maniptype), to give a unique tuple in the given range if | |
f43dc98b CG |
30 | possible. Per-protocol part of tuple is initialized to the |
31 | incoming packet. */ | |
32 | void (*unique_tuple)(struct nf_conntrack_tuple *tuple, | |
f2ea825f JE |
33 | const struct nf_nat_range *range, |
34 | enum nf_nat_manip_type maniptype, | |
35 | const struct nf_conn *ct); | |
5b1158e9 | 36 | |
fdf70832 | 37 | int (*range_to_nlattr)(struct sk_buff *skb, |
5b1158e9 JK |
38 | const struct nf_nat_range *range); |
39 | ||
fdf70832 | 40 | int (*nlattr_to_range)(struct nlattr *tb[], |
5b1158e9 JK |
41 | struct nf_nat_range *range); |
42 | }; | |
43 | ||
44 | /* Protocol registration. */ | |
2b628a08 PM |
45 | extern int nf_nat_protocol_register(const struct nf_nat_protocol *proto); |
46 | extern void nf_nat_protocol_unregister(const struct nf_nat_protocol *proto); | |
5b1158e9 | 47 | |
5b1158e9 | 48 | /* Built-in protocols. */ |
2b628a08 PM |
49 | extern const struct nf_nat_protocol nf_nat_protocol_tcp; |
50 | extern const struct nf_nat_protocol nf_nat_protocol_udp; | |
51 | extern const struct nf_nat_protocol nf_nat_protocol_icmp; | |
52 | extern const struct nf_nat_protocol nf_nat_unknown_protocol; | |
5b1158e9 JK |
53 | |
54 | extern int init_protocols(void) __init; | |
55 | extern void cleanup_protocols(void); | |
2b628a08 | 56 | extern const struct nf_nat_protocol *find_nat_proto(u_int16_t protonum); |
5b1158e9 | 57 | |
f2ea825f JE |
58 | extern bool nf_nat_proto_in_range(const struct nf_conntrack_tuple *tuple, |
59 | enum nf_nat_manip_type maniptype, | |
60 | const union nf_conntrack_man_proto *min, | |
61 | const union nf_conntrack_man_proto *max); | |
937e0dfd | 62 | |
f43dc98b | 63 | extern void nf_nat_proto_unique_tuple(struct nf_conntrack_tuple *tuple, |
f2ea825f JE |
64 | const struct nf_nat_range *range, |
65 | enum nf_nat_manip_type maniptype, | |
66 | const struct nf_conn *ct, | |
67 | u_int16_t *rover); | |
937e0dfd | 68 | |
535b57c7 PM |
69 | extern int nf_nat_proto_range_to_nlattr(struct sk_buff *skb, |
70 | const struct nf_nat_range *range); | |
71 | extern int nf_nat_proto_nlattr_to_range(struct nlattr *tb[], | |
72 | struct nf_nat_range *range); | |
5b1158e9 JK |
73 | |
74 | #endif /*_NF_NAT_PROTO_H*/ |