]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
tunnel nit: for price_scale_factor use multiplication, not division
authorVladimír Čunát <vladimir.cunat@nic.cz>
Tue, 23 Sep 2025 09:10:50 +0000 (11:10 +0200)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Thu, 9 Oct 2025 09:04:34 +0000 (11:04 +0200)
We were multiplying by 2^16 and dividing by 25,
so directly multiplying by round(65536/25) will be almost the same.
Note that (integer) division can be very expensive in some CPUs.

modules/dns_tunnel_filter/dns_tunnel_filter.c

index a52825513b01b86c69bf54e74ad0599602b5cfbc..1fb08a3fc92e561c352280a248a407f03183b6be 100644 (file)
@@ -10,7 +10,7 @@
 #include "lib/utils.h"
 #include "lib/resolve.h"
 
-#define DNAME_SCALE_FACTOR 25
+enum { DNAME_SCALE_MULT = 2622 };
 
 #define VERBOSE_LOG(...) kr_log_debug(TUNNEL, " | " __VA_ARGS__)
 
@@ -137,7 +137,7 @@ static int produce(kr_layer_t *ctx, knot_pkt_t *pkt)
                return ctx->state;
 
        const uint32_t time_now = kr_now();
-       uint32_t price_scale_factor = (knot_dname_size(req->current_query->sname) << 16)/ DNAME_SCALE_FACTOR;
+       uint32_t price_scale_factor = knot_dname_size(req->current_query->sname) * DNAME_SCALE_MULT;
 
        // classify
        _Alignas(16) uint8_t key[16] = {0, };