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 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 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