1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
25b1158e9SJozsef Kadlecsik #ifndef _NF_NAT_HELPER_H
35b1158e9SJozsef Kadlecsik #define _NF_NAT_HELPER_H
45b1158e9SJozsef Kadlecsik /* NAT protocol helper routines. */
55b1158e9SJozsef Kadlecsik 
6a1b2f04eSJeremy Sowden #include <linux/skbuff.h>
75b1158e9SJozsef Kadlecsik #include <net/netfilter/nf_conntrack.h>
8a1b2f04eSJeremy Sowden #include <net/netfilter/nf_conntrack_expect.h>
95b1158e9SJozsef Kadlecsik 
105b1158e9SJozsef Kadlecsik /* These return true or false. */
11cba81cc4SGao Feng bool __nf_nat_mangle_tcp_packet(struct sk_buff *skb, struct nf_conn *ct,
125b1158e9SJozsef Kadlecsik 				enum ip_conntrack_info ctinfo,
134e77be46SJoe Perches 				unsigned int protoff, unsigned int match_offset,
144e77be46SJoe Perches 				unsigned int match_len, const char *rep_buffer,
15010c0b9fSPatrick McHardy 				unsigned int rep_len, bool adjust);
16010c0b9fSPatrick McHardy 
nf_nat_mangle_tcp_packet(struct sk_buff * skb,struct nf_conn * ct,enum ip_conntrack_info ctinfo,unsigned int protoff,unsigned int match_offset,unsigned int match_len,const char * rep_buffer,unsigned int rep_len)17cba81cc4SGao Feng static inline bool nf_nat_mangle_tcp_packet(struct sk_buff *skb,
18010c0b9fSPatrick McHardy 					    struct nf_conn *ct,
19010c0b9fSPatrick McHardy 					    enum ip_conntrack_info ctinfo,
20051966c0SPatrick McHardy 					    unsigned int protoff,
21010c0b9fSPatrick McHardy 					    unsigned int match_offset,
22010c0b9fSPatrick McHardy 					    unsigned int match_len,
23010c0b9fSPatrick McHardy 					    const char *rep_buffer,
24010c0b9fSPatrick McHardy 					    unsigned int rep_len)
25010c0b9fSPatrick McHardy {
26051966c0SPatrick McHardy 	return __nf_nat_mangle_tcp_packet(skb, ct, ctinfo, protoff,
27010c0b9fSPatrick McHardy 					  match_offset, match_len,
28010c0b9fSPatrick McHardy 					  rep_buffer, rep_len, true);
29010c0b9fSPatrick McHardy }
30010c0b9fSPatrick McHardy 
31cba81cc4SGao Feng bool nf_nat_mangle_udp_packet(struct sk_buff *skb, struct nf_conn *ct,
325b1158e9SJozsef Kadlecsik 			      enum ip_conntrack_info ctinfo,
334e77be46SJoe Perches 			      unsigned int protoff, unsigned int match_offset,
344e77be46SJoe Perches 			      unsigned int match_len, const char *rep_buffer,
355b1158e9SJozsef Kadlecsik 			      unsigned int rep_len);
36010c0b9fSPatrick McHardy 
375b1158e9SJozsef Kadlecsik /* Setup NAT on this expected conntrack so it follows master, but goes
385b1158e9SJozsef Kadlecsik  * to port ct->master->saved_proto. */
394e77be46SJoe Perches void nf_nat_follow_master(struct nf_conn *ct, struct nf_conntrack_expect *this);
40f9dd09c7SJozsef Kadlecsik 
41*c92c2717SFlorian Westphal u16 nf_nat_exp_find_port(struct nf_conntrack_expect *exp, u16 port);
425b1158e9SJozsef Kadlecsik #endif
43