1 #ifndef _NF_NAT_L3PROTO_H
2 #define _NF_NAT_L3PROTO_H
3 
4 struct nf_nat_l4proto;
5 struct nf_nat_l3proto {
6 	u8	l3proto;
7 
8 	bool	(*in_range)(const struct nf_conntrack_tuple *t,
9 			    const struct nf_nat_range *range);
10 
11 	u32 	(*secure_port)(const struct nf_conntrack_tuple *t, __be16);
12 
13 	bool	(*manip_pkt)(struct sk_buff *skb,
14 			     unsigned int iphdroff,
15 			     const struct nf_nat_l4proto *l4proto,
16 			     const struct nf_conntrack_tuple *target,
17 			     enum nf_nat_manip_type maniptype);
18 
19 	void	(*csum_update)(struct sk_buff *skb, unsigned int iphdroff,
20 			       __sum16 *check,
21 			       const struct nf_conntrack_tuple *t,
22 			       enum nf_nat_manip_type maniptype);
23 
24 	void	(*csum_recalc)(struct sk_buff *skb, u8 proto,
25 			       void *data, __sum16 *check,
26 			       int datalen, int oldlen);
27 
28 	void	(*decode_session)(struct sk_buff *skb,
29 				  const struct nf_conn *ct,
30 				  enum ip_conntrack_dir dir,
31 				  unsigned long statusbit,
32 				  struct flowi *fl);
33 
34 	int	(*nlattr_to_range)(struct nlattr *tb[],
35 				   struct nf_nat_range *range);
36 };
37 
38 int nf_nat_l3proto_register(const struct nf_nat_l3proto *);
39 void nf_nat_l3proto_unregister(const struct nf_nat_l3proto *);
40 const struct nf_nat_l3proto *__nf_nat_l3proto_find(u8 l3proto);
41 
42 int nf_nat_icmp_reply_translation(struct sk_buff *skb, struct nf_conn *ct,
43 				  enum ip_conntrack_info ctinfo,
44 				  unsigned int hooknum);
45 
46 unsigned int nf_nat_ipv4_in(void *priv, struct sk_buff *skb,
47 			    const struct nf_hook_state *state,
48 			    unsigned int (*do_chain)(void *priv,
49 						     struct sk_buff *skb,
50 						     const struct nf_hook_state *state,
51 						     struct nf_conn *ct));
52 
53 unsigned int nf_nat_ipv4_out(void *priv, struct sk_buff *skb,
54 			     const struct nf_hook_state *state,
55 			     unsigned int (*do_chain)(void *priv,
56 						      struct sk_buff *skb,
57 						      const struct nf_hook_state *state,
58 						      struct nf_conn *ct));
59 
60 unsigned int nf_nat_ipv4_local_fn(void *priv,
61 				  struct sk_buff *skb,
62 				  const struct nf_hook_state *state,
63 				  unsigned int (*do_chain)(void *priv,
64 							   struct sk_buff *skb,
65 							   const struct nf_hook_state *state,
66 							   struct nf_conn *ct));
67 
68 unsigned int nf_nat_ipv4_fn(void *priv, struct sk_buff *skb,
69 			    const struct nf_hook_state *state,
70 			    unsigned int (*do_chain)(void *priv,
71 						     struct sk_buff *skb,
72 						     const struct nf_hook_state *state,
73 						     struct nf_conn *ct));
74 
75 int nf_nat_icmpv6_reply_translation(struct sk_buff *skb, struct nf_conn *ct,
76 				    enum ip_conntrack_info ctinfo,
77 				    unsigned int hooknum, unsigned int hdrlen);
78 
79 unsigned int nf_nat_ipv6_in(void *priv, struct sk_buff *skb,
80 			    const struct nf_hook_state *state,
81 			    unsigned int (*do_chain)(void *priv,
82 						     struct sk_buff *skb,
83 						     const struct nf_hook_state *state,
84 						     struct nf_conn *ct));
85 
86 unsigned int nf_nat_ipv6_out(void *priv, struct sk_buff *skb,
87 			     const struct nf_hook_state *state,
88 			     unsigned int (*do_chain)(void *priv,
89 						      struct sk_buff *skb,
90 						      const struct nf_hook_state *state,
91 						      struct nf_conn *ct));
92 
93 unsigned int nf_nat_ipv6_local_fn(void *priv,
94 				  struct sk_buff *skb,
95 				  const struct nf_hook_state *state,
96 				  unsigned int (*do_chain)(void *priv,
97 							   struct sk_buff *skb,
98 							   const struct nf_hook_state *state,
99 							   struct nf_conn *ct));
100 
101 unsigned int nf_nat_ipv6_fn(void *priv, struct sk_buff *skb,
102 			    const struct nf_hook_state *state,
103 			    unsigned int (*do_chain)(void *priv,
104 						     struct sk_buff *skb,
105 						     const struct nf_hook_state *state,
106 						     struct nf_conn *ct));
107 
108 #endif /* _NF_NAT_L3PROTO_H */
109