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