Commit | Line | Data |
---|---|---|
c7232c99 PM |
1 | /* Header for use in defining a given protocol. */ |
2 | #ifndef _NF_NAT_L4PROTO_H | |
3 | #define _NF_NAT_L4PROTO_H | |
4 | #include <net/netfilter/nf_nat.h> | |
5 | #include <linux/netfilter/nfnetlink_conntrack.h> | |
6 | ||
7 | struct nf_nat_range; | |
8 | struct nf_nat_l3proto; | |
9 | ||
10 | struct nf_nat_l4proto { | |
11 | /* Protocol number. */ | |
12 | u8 l4proto; | |
13 | ||
14 | /* Translate a packet to the target according to manip type. | |
15 | * Return true if succeeded. | |
16 | */ | |
17 | bool (*manip_pkt)(struct sk_buff *skb, | |
18 | const struct nf_nat_l3proto *l3proto, | |
19 | unsigned int iphdroff, unsigned int hdroff, | |
20 | const struct nf_conntrack_tuple *tuple, | |
21 | enum nf_nat_manip_type maniptype); | |
22 | ||
23 | /* Is the manipable part of the tuple between min and max incl? */ | |
24 | bool (*in_range)(const struct nf_conntrack_tuple *tuple, | |
25 | enum nf_nat_manip_type maniptype, | |
26 | const union nf_conntrack_man_proto *min, | |
27 | const union nf_conntrack_man_proto *max); | |
28 | ||
29 | /* Alter the per-proto part of the tuple (depending on | |
30 | * maniptype), to give a unique tuple in the given range if | |
31 | * possible. Per-protocol part of tuple is initialized to the | |
32 | * incoming packet. | |
33 | */ | |
34 | void (*unique_tuple)(const struct nf_nat_l3proto *l3proto, | |
35 | struct nf_conntrack_tuple *tuple, | |
36 | const struct nf_nat_range *range, | |
37 | enum nf_nat_manip_type maniptype, | |
38 | const struct nf_conn *ct); | |
39 | ||
40 | int (*nlattr_to_range)(struct nlattr *tb[], | |
41 | struct nf_nat_range *range); | |
42 | }; | |
43 | ||
44 | /* Protocol registration. */ | |
4e77be46 JP |
45 | int nf_nat_l4proto_register(u8 l3proto, const struct nf_nat_l4proto *l4proto); |
46 | void nf_nat_l4proto_unregister(u8 l3proto, | |
47 | const struct nf_nat_l4proto *l4proto); | |
c7232c99 | 48 | |
4e77be46 | 49 | const struct nf_nat_l4proto *__nf_nat_l4proto_find(u8 l3proto, u8 l4proto); |
c7232c99 PM |
50 | |
51 | /* Built-in protocols. */ | |
52 | extern const struct nf_nat_l4proto nf_nat_l4proto_tcp; | |
53 | extern const struct nf_nat_l4proto nf_nat_l4proto_udp; | |
54 | extern const struct nf_nat_l4proto nf_nat_l4proto_icmp; | |
58a317f1 | 55 | extern const struct nf_nat_l4proto nf_nat_l4proto_icmpv6; |
c7232c99 PM |
56 | extern const struct nf_nat_l4proto nf_nat_l4proto_unknown; |
57 | ||
4e77be46 JP |
58 | bool nf_nat_l4proto_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); | |
c7232c99 | 62 | |
4e77be46 JP |
63 | void nf_nat_l4proto_unique_tuple(const struct nf_nat_l3proto *l3proto, |
64 | struct nf_conntrack_tuple *tuple, | |
65 | const struct nf_nat_range *range, | |
66 | enum nf_nat_manip_type maniptype, | |
67 | const struct nf_conn *ct, u16 *rover); | |
c7232c99 | 68 | |
4e77be46 JP |
69 | int nf_nat_l4proto_nlattr_to_range(struct nlattr *tb[], |
70 | struct nf_nat_range *range); | |
c7232c99 PM |
71 | |
72 | #endif /*_NF_NAT_L4PROTO_H*/ |