diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-22 10:38:37 -0500 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-22 10:38:37 -0500 |
commit | fcc9d2e5a6c89d22b8b773a64fb4ad21ac318446 (patch) | |
tree | a57612d1888735a2ec7972891b68c1ac5ec8faea /include/net/netfilter | |
parent | 8dea78da5cee153b8af9c07a2745f6c55057fe12 (diff) |
Diffstat (limited to 'include/net/netfilter')
-rw-r--r-- | include/net/netfilter/nf_nat_protocol.h | 74 | ||||
-rw-r--r-- | include/net/netfilter/nf_nat_rule.h | 15 |
2 files changed, 89 insertions, 0 deletions
diff --git a/include/net/netfilter/nf_nat_protocol.h b/include/net/netfilter/nf_nat_protocol.h new file mode 100644 index 00000000000..93cc90d28e6 --- /dev/null +++ b/include/net/netfilter/nf_nat_protocol.h | |||
@@ -0,0 +1,74 @@ | |||
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 | |||
9 | struct 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. */ | ||
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); | ||
47 | |||
48 | /* Built-in protocols. */ | ||
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; | ||
53 | |||
54 | extern int init_protocols(void) __init; | ||
55 | extern void cleanup_protocols(void); | ||
56 | extern const struct nf_nat_protocol *find_nat_proto(u_int16_t protonum); | ||
57 | |||
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); | ||
62 | |||
63 | extern void nf_nat_proto_unique_tuple(struct nf_conntrack_tuple *tuple, | ||
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); | ||
68 | |||
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); | ||
73 | |||
74 | #endif /*_NF_NAT_PROTO_H*/ | ||
diff --git a/include/net/netfilter/nf_nat_rule.h b/include/net/netfilter/nf_nat_rule.h new file mode 100644 index 00000000000..2890bdc4cd9 --- /dev/null +++ b/include/net/netfilter/nf_nat_rule.h | |||
@@ -0,0 +1,15 @@ | |||
1 | #ifndef _NF_NAT_RULE_H | ||
2 | #define _NF_NAT_RULE_H | ||
3 | #include <net/netfilter/nf_conntrack.h> | ||
4 | #include <net/netfilter/nf_nat.h> | ||
5 | #include <linux/netfilter_ipv4/ip_tables.h> | ||
6 | |||
7 | extern int nf_nat_rule_init(void) __init; | ||
8 | extern void nf_nat_rule_cleanup(void); | ||
9 | extern int nf_nat_rule_find(struct sk_buff *skb, | ||
10 | unsigned int hooknum, | ||
11 | const struct net_device *in, | ||
12 | const struct net_device *out, | ||
13 | struct nf_conn *ct); | ||
14 | |||
15 | #endif /* _NF_NAT_RULE_H */ | ||