/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _NET_SECURE_SEQ #define _NET_SECURE_SEQ #include 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 */