Use the new isc_sockaddr_hash_ex() to fix QID table hashing

The QID table hashing used a custom merging of the sockaddr, port and id
into a single hashvalue.  Normalize the QID table hashing function to
use isc_hash32 API for all the values.
This commit is contained in:
Ondřej Surý 2023-09-18 10:02:37 +02:00
parent 3230c8e369
commit 4cf4cc484d
No known key found for this signature in database
GPG key ID: 2820F37E873DEA41

View file

@ -373,12 +373,15 @@ setup_socket(dns_dispatch_t *disp, dns_dispentry_t *resp,
static uint32_t
qid_hash(const dns_dispentry_t *dispentry) {
/*
* TODO(OS): Add incremental isc_sockaddr_hash() function and then use
* isc_hash32 API
*/
uint32_t hashval = isc_sockaddr_hash(&dispentry->peer, true);
return (hashval ^ (((uint32_t)dispentry->id << 16) | dispentry->port));
isc_hash32_t hash;
isc_hash32_init(&hash);
isc_sockaddr_hash_ex(&hash, &dispentry->peer, true);
isc_hash32_hash(&hash, &dispentry->id, sizeof(dispentry->id), true);
isc_hash32_hash(&hash, &dispentry->port, sizeof(dispentry->port), true);
return (isc_hash32_finalize(&hash));
}
static int