secure_seq.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _NET_SECURE_SEQ
  3. #define _NET_SECURE_SEQ
  4. #include <linux/types.h>
  5. struct net;
  6. extern struct net init_net;
  7. union tcp_seq_and_ts_off {
  8. struct {
  9. u32 seq;
  10. u32 ts_off;
  11. };
  12. u64 hash64;
  13. };
  14. u64 secure_ipv4_port_ephemeral(__be32 saddr, __be32 daddr, __be16 dport);
  15. u64 secure_ipv6_port_ephemeral(const __be32 *saddr, const __be32 *daddr,
  16. __be16 dport);
  17. union tcp_seq_and_ts_off
  18. secure_tcp_seq_and_ts_off(const struct net *net, __be32 saddr, __be32 daddr,
  19. __be16 sport, __be16 dport);
  20. static inline u32 secure_tcp_seq(__be32 saddr, __be32 daddr,
  21. __be16 sport, __be16 dport)
  22. {
  23. union tcp_seq_and_ts_off ts;
  24. ts = secure_tcp_seq_and_ts_off(&init_net, saddr, daddr,
  25. sport, dport);
  26. return ts.seq;
  27. }
  28. union tcp_seq_and_ts_off
  29. secure_tcpv6_seq_and_ts_off(const struct net *net, const __be32 *saddr,
  30. const __be32 *daddr,
  31. __be16 sport, __be16 dport);
  32. static inline u32 secure_tcpv6_seq(const __be32 *saddr, const __be32 *daddr,
  33. __be16 sport, __be16 dport)
  34. {
  35. union tcp_seq_and_ts_off ts;
  36. ts = secure_tcpv6_seq_and_ts_off(&init_net, saddr, daddr,
  37. sport, dport);
  38. return ts.seq;
  39. }
  40. #endif /* _NET_SECURE_SEQ */