]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: xxhash: use the XXH3 functions to generate 64-bit hashes
authorDragan Dosen <ddosen@haproxy.com>
Tue, 22 Dec 2020 12:22:34 +0000 (13:22 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 23 Dec 2020 05:39:21 +0000 (06:39 +0100)
Replace the XXH64() function calls with the XXH3 variant function
XXH3_64bits_withSeed() where possible.

include/haproxy/compat.h
src/51d.c
src/pattern.c
src/ssl_sock.c

index 581141c1f18c2f272ed21ad1fbfab321e144b873..76cf350e44edec12de8b3c6328824e509c78bd2f 100644 (file)
@@ -254,6 +254,13 @@ typedef struct { } empty_t;
  */
 #define MAX_SEND_FD 253
 
+/* Make the new complex name for the xxhash function easier to remember
+ * and use.
+ */
+#ifndef XXH3
+#define XXH3(data, len, seed) XXH3_64bits_withSeed(data, len, seed)
+#endif
+
 #endif /* _HAPROXY_COMPAT_H */
 
 /*
index 31d7c3f592a873bc7369ab9da89fc2b50a97e6ad..fda0171853804e30159d1f8bb9654dcd8123abf4 100644 (file)
--- a/src/51d.c
+++ b/src/51d.c
@@ -305,9 +305,9 @@ unsigned long long _51d_req_hash(const struct arg *args, fiftyoneDegreesWorkset*
        int i;
        for(i = 0; i < ws->importantHeadersCount; i++) {
                hash ^= ws->importantHeaders[i].header->headerNameOffset;
-               hash ^= XXH64(ws->importantHeaders[i].headerValue,
-                             ws->importantHeaders[i].headerValueLength,
-                             seed);
+               hash ^= XXH3(ws->importantHeaders[i].headerValue,
+                            ws->importantHeaders[i].headerValueLength,
+                            seed);
        }
        return hash;
 }
@@ -517,7 +517,7 @@ static int _51d_conv(const struct arg *args, struct sample *smp, void *private)
                unsigned long long seed = _51d_lru_seed ^ (long)args;
 
                HA_SPIN_LOCK(OTHER_LOCK, &_51d_lru_lock);
-               lru = lru64_get(XXH64(smp->data.u.str.area, smp->data.u.str.data, seed),
+               lru = lru64_get(XXH3(smp->data.u.str.area, smp->data.u.str.data, seed),
                                _51d_lru_tree, (void*)args, 0);
                if (lru && lru->domain) {
                        _51d_retrieve_cache_entry(smp, lru);
index e62d0d05f8944c7e8893010c8d83e37b723009e2..7c260f3d020a0c4725a64837215d18f95aa948c9 100644 (file)
@@ -494,7 +494,7 @@ struct pattern *pat_match_str(struct sample *smp, struct pattern_expr *expr, int
        if (pat_lru_tree) {
                unsigned long long seed = pat_lru_seed ^ (long)expr;
 
-               lru = lru64_get(XXH64(smp->data.u.str.area, smp->data.u.str.data, seed),
+               lru = lru64_get(XXH3(smp->data.u.str.area, smp->data.u.str.data, seed),
                                pat_lru_tree, expr, expr->ref->revision);
                if (lru && lru->domain) {
                        ret = lru->data;
@@ -537,7 +537,7 @@ struct pattern *pat_match_bin(struct sample *smp, struct pattern_expr *expr, int
        if (pat_lru_tree) {
                unsigned long long seed = pat_lru_seed ^ (long)expr;
 
-               lru = lru64_get(XXH64(smp->data.u.str.area, smp->data.u.str.data, seed),
+               lru = lru64_get(XXH3(smp->data.u.str.area, smp->data.u.str.data, seed),
                                pat_lru_tree, expr, expr->ref->revision);
                if (lru && lru->domain) {
                        ret = lru->data;
@@ -606,7 +606,7 @@ struct pattern *pat_match_reg(struct sample *smp, struct pattern_expr *expr, int
        if (pat_lru_tree) {
                unsigned long long seed = pat_lru_seed ^ (long)expr;
 
-               lru = lru64_get(XXH64(smp->data.u.str.area, smp->data.u.str.data, seed),
+               lru = lru64_get(XXH3(smp->data.u.str.area, smp->data.u.str.data, seed),
                                pat_lru_tree, expr, expr->ref->revision);
                if (lru && lru->domain) {
                        ret = lru->data;
@@ -689,7 +689,7 @@ struct pattern *pat_match_beg(struct sample *smp, struct pattern_expr *expr, int
        if (pat_lru_tree) {
                unsigned long long seed = pat_lru_seed ^ (long)expr;
 
-               lru = lru64_get(XXH64(smp->data.u.str.area, smp->data.u.str.data, seed),
+               lru = lru64_get(XXH3(smp->data.u.str.area, smp->data.u.str.data, seed),
                                pat_lru_tree, expr, expr->ref->revision);
                if (lru && lru->domain) {
                        ret = lru->data;
@@ -733,7 +733,7 @@ struct pattern *pat_match_end(struct sample *smp, struct pattern_expr *expr, int
        if (pat_lru_tree) {
                unsigned long long seed = pat_lru_seed ^ (long)expr;
 
-               lru = lru64_get(XXH64(smp->data.u.str.area, smp->data.u.str.data, seed),
+               lru = lru64_get(XXH3(smp->data.u.str.area, smp->data.u.str.data, seed),
                                pat_lru_tree, expr, expr->ref->revision);
                if (lru && lru->domain) {
                        ret = lru->data;
@@ -781,7 +781,7 @@ struct pattern *pat_match_sub(struct sample *smp, struct pattern_expr *expr, int
        if (pat_lru_tree) {
                unsigned long long seed = pat_lru_seed ^ (long)expr;
 
-               lru = lru64_get(XXH64(smp->data.u.str.area, smp->data.u.str.data, seed),
+               lru = lru64_get(XXH3(smp->data.u.str.area, smp->data.u.str.data, seed),
                                pat_lru_tree, expr, expr->ref->revision);
                if (lru && lru->domain) {
                        ret = lru->data;
index 766f200fba05f65e8dfbbad2f32fe2349c095441..22144c34b830641195bf9768d89184f984e7089e 100644 (file)
@@ -6242,7 +6242,7 @@ int ssl_load_global_issuer_from_BIO(BIO *in, char *fp, char **err)
                memprintf(err, "unable to load issuers-chain %s : SubjectName not found.\n", fp);
                goto end;
        }
-       key = XXH64(ASN1_STRING_get0_data(skid), ASN1_STRING_length(skid), 0);
+       key = XXH3(ASN1_STRING_get0_data(skid), ASN1_STRING_length(skid), 0);
        for (node = eb64_lookup(&cert_issuer_tree, key); node; node = eb64_next(node)) {
                issuer = container_of(node, typeof(*issuer), node);
                if (!X509_NAME_cmp(name, X509_get_subject_name(sk_X509_value(issuer->chain, 0)))) {
@@ -6280,7 +6280,7 @@ int ssl_load_global_issuer_from_BIO(BIO *in, char *fp, char **err)
        if (akid && akid->keyid) {
                struct eb64_node *node;
                u64 hk;
-               hk = XXH64(ASN1_STRING_get0_data(akid->keyid), ASN1_STRING_length(akid->keyid), 0);
+               hk = XXH3(ASN1_STRING_get0_data(akid->keyid), ASN1_STRING_length(akid->keyid), 0);
                for (node = eb64_lookup(&cert_issuer_tree, hk); node; node = eb64_next(node)) {
                        struct issuer_chain *ti = container_of(node, typeof(*issuer), node);
                        if (X509_check_issued(sk_X509_value(ti->chain, 0), cert) == X509_V_OK) {