xref: /linux/include/net/secure_seq.h (revision abacaf559950eec0d99d37ff6b92049409af5943)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _NET_SECURE_SEQ
3 #define _NET_SECURE_SEQ
4 
5 #include <linux/types.h>
6 
7 struct net;
8 extern struct net init_net;
9 
10 union tcp_seq_and_ts_off {
11 	struct {
12 		u32 seq;
13 		u32 ts_off;
14 	};
15 	u64 hash64;
16 };
17 
18 u64 secure_ipv4_port_ephemeral(__be32 saddr, __be32 daddr, __be16 dport);
19 u64 secure_ipv6_port_ephemeral(const __be32 *saddr, const __be32 *daddr,
20 			       __be16 dport);
21 union tcp_seq_and_ts_off
22 secure_tcp_seq_and_ts_off(const struct net *net, __be32 saddr, __be32 daddr,
23 			  __be16 sport, __be16 dport);
24 
secure_tcp_seq(__be32 saddr,__be32 daddr,__be16 sport,__be16 dport)25 static inline u32 secure_tcp_seq(__be32 saddr, __be32 daddr,
26 				 __be16 sport, __be16 dport)
27 {
28 	union tcp_seq_and_ts_off ts;
29 
30 	ts = secure_tcp_seq_and_ts_off(&init_net, saddr, daddr,
31 				       sport, dport);
32 
33 	return ts.seq;
34 }
35 
36 union tcp_seq_and_ts_off
37 secure_tcpv6_seq_and_ts_off(const struct net *net, const __be32 *saddr,
38 			    const __be32 *daddr,
39 			    __be16 sport, __be16 dport);
40 
secure_tcpv6_seq(const __be32 * saddr,const __be32 * daddr,__be16 sport,__be16 dport)41 static inline u32 secure_tcpv6_seq(const __be32 *saddr, const __be32 *daddr,
42 				   __be16 sport, __be16 dport)
43 {
44 	union tcp_seq_and_ts_off ts;
45 
46 	ts = secure_tcpv6_seq_and_ts_off(&init_net, saddr, daddr,
47 					 sport, dport);
48 
49 	return ts.seq;
50 }
51 #endif /* _NET_SECURE_SEQ */
52