| /* SPDX-License-Identifier: GPL-2.0 */ | |
| #ifndef _NET_SECURE_SEQ | |
| #define _NET_SECURE_SEQ | |
| #include <linux/types.h> | |
| struct net; | |
| extern struct net init_net; | |
| union tcp_seq_and_ts_off { | |
| struct { | |
| u32 seq; | |
| u32 ts_off; | |
| }; | |
| u64 hash64; | |
| }; | |
| u64 secure_ipv4_port_ephemeral(__be32 saddr, __be32 daddr, __be16 dport); | |
| u64 secure_ipv6_port_ephemeral(const __be32 *saddr, const __be32 *daddr, | |
| __be16 dport); | |
| union tcp_seq_and_ts_off | |
| secure_tcp_seq_and_ts_off(const struct net *net, __be32 saddr, __be32 daddr, | |
| __be16 sport, __be16 dport); | |
| static inline u32 secure_tcp_seq(__be32 saddr, __be32 daddr, | |
| __be16 sport, __be16 dport) | |
| { | |
| union tcp_seq_and_ts_off ts; | |
| ts = secure_tcp_seq_and_ts_off(&init_net, saddr, daddr, | |
| sport, dport); | |
| return ts.seq; | |
| } | |
| union tcp_seq_and_ts_off | |
| secure_tcpv6_seq_and_ts_off(const struct net *net, const __be32 *saddr, | |
| const __be32 *daddr, | |
| __be16 sport, __be16 dport); | |
| static inline u32 secure_tcpv6_seq(const __be32 *saddr, const __be32 *daddr, | |
| __be16 sport, __be16 dport) | |
| { | |
| union tcp_seq_and_ts_off ts; | |
| ts = secure_tcpv6_seq_and_ts_off(&init_net, saddr, daddr, | |
| sport, dport); | |
| return ts.seq; | |
| } | |
| #endif /* _NET_SECURE_SEQ */ |