2017-11-01 15:07:57 +01:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0 */
|
2011-08-03 20:50:44 -07:00
|
|
|
#ifndef _NET_SECURE_SEQ
|
|
|
|
|
#define _NET_SECURE_SEQ
|
|
|
|
|
|
|
|
|
|
#include <linux/types.h>
|
|
|
|
|
|
2022-07-20 16:57:58 -07:00
|
|
|
struct net;
|
2026-03-02 20:55:27 +00:00
|
|
|
extern struct net init_net;
|
|
|
|
|
|
|
|
|
|
union tcp_seq_and_ts_off {
|
|
|
|
|
struct {
|
|
|
|
|
u32 seq;
|
|
|
|
|
u32 ts_off;
|
|
|
|
|
};
|
|
|
|
|
u64 hash64;
|
|
|
|
|
};
|
2022-07-20 16:57:58 -07:00
|
|
|
|
2022-05-02 10:46:08 +02:00
|
|
|
u64 secure_ipv4_port_ephemeral(__be32 saddr, __be32 daddr, __be16 dport);
|
|
|
|
|
u64 secure_ipv6_port_ephemeral(const __be32 *saddr, const __be32 *daddr,
|
2013-09-22 10:32:25 -07:00
|
|
|
__be16 dport);
|
2026-03-02 20:55:27 +00:00
|
|
|
union tcp_seq_and_ts_off
|
|
|
|
|
secure_tcp_seq_and_ts_off(const struct net *net, __be32 saddr, __be32 daddr,
|
|
|
|
|
__be16 sport, __be16 dport);
|
2011-08-03 20:50:44 -07:00
|
|
|
|
2026-03-02 20:55:27 +00:00
|
|
|
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;
|
|
|
|
|
}
|
2011-08-03 20:50:44 -07:00
|
|
|
#endif /* _NET_SECURE_SEQ */
|