mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-27 06:04:23 +08:00
ipv6: move tcp_ipv6_hash_secret and udp_ipv6_hash_secret to net_hotdata
Use a 32bit hole in "struct net_offload" to store the remaining 32bit secrets used by TCPv6 and UDPv6. Signed-off-by: Eric Dumazet <edumazet@google.com> Acked-by: Soheil Hassas Yeganeh <soheil@google.com> Reviewed-by: David Ahern <dsahern@kernel.org> Link: https://lore.kernel.org/r/20240306160031.874438-17-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
5af674bb90
commit
df51b84564
@ -39,7 +39,9 @@ struct net_hotdata {
|
|||||||
#define inet_ehash_secret net_hotdata.tcp_protocol.secret
|
#define inet_ehash_secret net_hotdata.tcp_protocol.secret
|
||||||
#define udp_ehash_secret net_hotdata.udp_protocol.secret
|
#define udp_ehash_secret net_hotdata.udp_protocol.secret
|
||||||
#define inet6_ehash_secret net_hotdata.tcpv6_protocol.secret
|
#define inet6_ehash_secret net_hotdata.tcpv6_protocol.secret
|
||||||
|
#define tcp_ipv6_hash_secret net_hotdata.tcpv6_offload.secret
|
||||||
#define udp6_ehash_secret net_hotdata.udpv6_protocol.secret
|
#define udp6_ehash_secret net_hotdata.udpv6_protocol.secret
|
||||||
|
#define udp_ipv6_hash_secret net_hotdata.udpv6_offload.secret
|
||||||
|
|
||||||
extern struct net_hotdata net_hotdata;
|
extern struct net_hotdata net_hotdata;
|
||||||
|
|
||||||
|
@ -70,6 +70,7 @@ struct inet6_protocol {
|
|||||||
struct net_offload {
|
struct net_offload {
|
||||||
struct offload_callbacks callbacks;
|
struct offload_callbacks callbacks;
|
||||||
unsigned int flags; /* Flags used by IPv6 for now */
|
unsigned int flags; /* Flags used by IPv6 for now */
|
||||||
|
u32 secret;
|
||||||
};
|
};
|
||||||
/* This should be set for any extension header which is compatible with GSO. */
|
/* This should be set for any extension header which is compatible with GSO. */
|
||||||
#define INET6_PROTO_GSO_EXTHDR 0x1
|
#define INET6_PROTO_GSO_EXTHDR 0x1
|
||||||
|
@ -26,15 +26,13 @@ u32 inet6_ehashfn(const struct net *net,
|
|||||||
const struct in6_addr *laddr, const u16 lport,
|
const struct in6_addr *laddr, const u16 lport,
|
||||||
const struct in6_addr *faddr, const __be16 fport)
|
const struct in6_addr *faddr, const __be16 fport)
|
||||||
{
|
{
|
||||||
static u32 ipv6_hash_secret __read_mostly;
|
|
||||||
|
|
||||||
u32 lhash, fhash;
|
u32 lhash, fhash;
|
||||||
|
|
||||||
net_get_random_once(&inet6_ehash_secret, sizeof(inet6_ehash_secret));
|
net_get_random_once(&inet6_ehash_secret, sizeof(inet6_ehash_secret));
|
||||||
net_get_random_once(&ipv6_hash_secret, sizeof(ipv6_hash_secret));
|
net_get_random_once(&tcp_ipv6_hash_secret, sizeof(tcp_ipv6_hash_secret));
|
||||||
|
|
||||||
lhash = (__force u32)laddr->s6_addr32[3];
|
lhash = (__force u32)laddr->s6_addr32[3];
|
||||||
fhash = __ipv6_addr_jhash(faddr, ipv6_hash_secret);
|
fhash = __ipv6_addr_jhash(faddr, tcp_ipv6_hash_secret);
|
||||||
|
|
||||||
return __inet6_ehashfn(lhash, lport, fhash, fport,
|
return __inet6_ehashfn(lhash, lport, fhash, fport,
|
||||||
inet6_ehash_secret + net_hash_mix(net));
|
inet6_ehash_secret + net_hash_mix(net));
|
||||||
|
@ -79,8 +79,6 @@ u32 udp6_ehashfn(const struct net *net,
|
|||||||
const struct in6_addr *faddr,
|
const struct in6_addr *faddr,
|
||||||
const __be16 fport)
|
const __be16 fport)
|
||||||
{
|
{
|
||||||
static u32 udp_ipv6_hash_secret __read_mostly;
|
|
||||||
|
|
||||||
u32 lhash, fhash;
|
u32 lhash, fhash;
|
||||||
|
|
||||||
net_get_random_once(&udp6_ehash_secret,
|
net_get_random_once(&udp6_ehash_secret,
|
||||||
|
Loading…
Reference in New Issue
Block a user