Utilize Jenkins hash with random seed for source nodes storage.
This commit is contained in:
parent
e8574be32c
commit
22c914789e
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=240736
@ -1730,28 +1730,6 @@ extern int pf_state_insert(struct pfi_kif *,
|
|||||||
struct pf_state *);
|
struct pf_state *);
|
||||||
extern void pf_free_state(struct pf_state *);
|
extern void pf_free_state(struct pf_state *);
|
||||||
|
|
||||||
static __inline u_int
|
|
||||||
pf_hashsrc(struct pf_addr *addr, sa_family_t af)
|
|
||||||
{
|
|
||||||
u_int h;
|
|
||||||
|
|
||||||
#define ADDR_HASH(a) ((a) ^ ((a) >> 16))
|
|
||||||
|
|
||||||
switch (af) {
|
|
||||||
case AF_INET:
|
|
||||||
h = ADDR_HASH(addr->v4.s_addr);
|
|
||||||
break;
|
|
||||||
case AF_INET6:
|
|
||||||
h = ADDR_HASH(addr->v6.__u6_addr.__u6_addr32[3]);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
panic("%s: unknown address family %u", __func__, af);
|
|
||||||
}
|
|
||||||
#undef ADDR_HASH
|
|
||||||
|
|
||||||
return (h & V_pf_srchashmask);
|
|
||||||
}
|
|
||||||
|
|
||||||
static __inline void
|
static __inline void
|
||||||
pf_ref_state(struct pf_state *s)
|
pf_ref_state(struct pf_state *s)
|
||||||
{
|
{
|
||||||
|
@ -387,6 +387,27 @@ pf_hashkey(struct pf_state_key *sk)
|
|||||||
return (h & V_pf_hashmask);
|
return (h & V_pf_hashmask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __inline uint32_t
|
||||||
|
pf_hashsrc(struct pf_addr *addr, sa_family_t af)
|
||||||
|
{
|
||||||
|
uint32_t h;
|
||||||
|
|
||||||
|
switch (af) {
|
||||||
|
case AF_INET:
|
||||||
|
h = jenkins_hash32((uint32_t *)&addr->v4,
|
||||||
|
sizeof(addr->v4)/sizeof(uint32_t), V_pf_hashseed);
|
||||||
|
break;
|
||||||
|
case AF_INET6:
|
||||||
|
h = jenkins_hash32((uint32_t *)&addr->v6,
|
||||||
|
sizeof(addr->v6)/sizeof(uint32_t), V_pf_hashseed);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
panic("%s: unknown address family %u", __func__, af);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (h & V_pf_srchashmask);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef INET6
|
#ifdef INET6
|
||||||
void
|
void
|
||||||
pf_addrcpy(struct pf_addr *dst, struct pf_addr *src, sa_family_t af)
|
pf_addrcpy(struct pf_addr *dst, struct pf_addr *src, sa_family_t af)
|
||||||
|
Loading…
Reference in New Issue
Block a user