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