Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _NET_SECURE_SEQ
3#define _NET_SECURE_SEQ
4
5#include <linux/types.h>
6
7struct net;
8extern struct net init_net;
9
10union tcp_seq_and_ts_off {
11 struct {
12 u32 seq;
13 u32 ts_off;
14 };
15 u64 hash64;
16};
17
18u64 secure_ipv4_port_ephemeral(__be32 saddr, __be32 daddr, __be16 dport);
19u64 secure_ipv6_port_ephemeral(const __be32 *saddr, const __be32 *daddr,
20 __be16 dport);
21union tcp_seq_and_ts_off
22secure_tcp_seq_and_ts_off(const struct net *net, __be32 saddr, __be32 daddr,
23 __be16 sport, __be16 dport);
24
25static 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
36union tcp_seq_and_ts_off
37secure_tcpv6_seq_and_ts_off(const struct net *net, const __be32 *saddr,
38 const __be32 *daddr,
39 __be16 sport, __be16 dport);
40
41static 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 */