From eba76df247eae9838ffcf817c0c218e4a98eaccf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Tue, 12 Aug 2025 12:21:56 +0200 Subject: [PATCH] Move the slabheader attribute helpers to private header The slabheader.c, qpzone.c and qpcache.c had couple of shared macros that were copied and paste between the units. Move these common attributes access macros into private header, so these can be shared among the three compilation units. --- lib/dns/qpcache.c | 32 +--------------------- lib/dns/qpzone.c | 17 +----------- lib/dns/rdataslab.c | 19 +++---------- lib/dns/rdataslab_p.h | 59 +++++++++++++++++++++++++++++++++++++++++ tests/dns/qpzone_test.c | 6 ++--- 5 files changed, 67 insertions(+), 66 deletions(-) create mode 100644 lib/dns/rdataslab_p.h diff --git a/lib/dns/qpcache.c b/lib/dns/qpcache.c index 9d02239a24..c5de17203a 100644 --- a/lib/dns/qpcache.c +++ b/lib/dns/qpcache.c @@ -59,6 +59,7 @@ #include "db_p.h" #include "qpcache_p.h" +#include "rdataslab_p.h" #ifndef DNS_QPCACHE_LOG_STATS_LEVEL #define DNS_QPCACHE_LOG_STATS_LEVEL 3 @@ -71,37 +72,6 @@ goto failure; \ } while (0) -#define EXISTS(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_NONEXISTENT) == 0) -#define NXDOMAIN(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_NXDOMAIN) != 0) -#define STALE(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_STALE) != 0) -#define STALE_WINDOW(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_STALE_WINDOW) != 0) -#define OPTOUT(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_OPTOUT) != 0) -#define NEGATIVE(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_NEGATIVE) != 0) -#define PREFETCH(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_PREFETCH) != 0) -#define ZEROTTL(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_ZEROTTL) != 0) -#define ANCIENT(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_ANCIENT) != 0) -#define STATCOUNT(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_STATCOUNT) != 0) - #define STALE_TTL(header, qpdb) \ (NXDOMAIN(header) ? 0 : qpdb->common.serve_stale_ttl) diff --git a/lib/dns/qpzone.c b/lib/dns/qpzone.c index 65f6c211b6..76eb96c9d5 100644 --- a/lib/dns/qpzone.c +++ b/lib/dns/qpzone.c @@ -62,6 +62,7 @@ #include "db_p.h" #include "qpzone_p.h" +#include "rdataslab_p.h" #define CHECK(op) \ do { \ @@ -70,22 +71,6 @@ goto failure; \ } while (0) -#define EXISTS(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_NONEXISTENT) == 0) -#define IGNORE(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_IGNORE) != 0) -#define RESIGN(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_RESIGN) != 0) -#define OPTOUT(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_OPTOUT) != 0) -#define STATCOUNT(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_STATCOUNT) != 0) - #define HEADERNODE(h) ((qpznode_t *)((h)->node)) #define QPDB_ATTR_LOADED 0x01 diff --git a/lib/dns/rdataslab.c b/lib/dns/rdataslab.c index f5d4cb2454..82e810c3ef 100644 --- a/lib/dns/rdataslab.c +++ b/lib/dns/rdataslab.c @@ -30,18 +30,7 @@ #include #include -#define CASESET(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_CASESET) != 0) -#define CASEFULLYLOWER(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_CASEFULLYLOWER) != 0) -#define NONEXISTENT(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_NONEXISTENT) != 0) -#define NEGATIVE(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_NEGATIVE) != 0) +#include "rdataslab_p.h" /* * The rdataslab structure allows iteration to occur in both load order @@ -915,10 +904,10 @@ dns_slabheader_destroy(dns_slabheader_t **headerp) { isc_mem_t *mctx = header->node->mctx; dns_db_deletedata(header->node, header); - if (NONEXISTENT(header)) { - size = sizeof(*header); - } else { + if (EXISTS(header)) { size = dns_rdataslab_size(header); + } else { + size = sizeof(*header); } isc_mem_put(mctx, header, size); diff --git a/lib/dns/rdataslab_p.h b/lib/dns/rdataslab_p.h new file mode 100644 index 0000000000..e3b4fbb573 --- /dev/null +++ b/lib/dns/rdataslab_p.h @@ -0,0 +1,59 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +#pragma once + +#include + +#define ANCIENT(header) \ + ((atomic_load_acquire(&(header)->attributes) & \ + DNS_SLABHEADERATTR_ANCIENT) != 0) +#define CASEFULLYLOWER(header) \ + ((atomic_load_acquire(&(header)->attributes) & \ + DNS_SLABHEADERATTR_CASEFULLYLOWER) != 0) +#define CASESET(header) \ + ((atomic_load_acquire(&(header)->attributes) & \ + DNS_SLABHEADERATTR_CASESET) != 0) +#define EXISTS(header) \ + ((atomic_load_acquire(&(header)->attributes) & \ + DNS_SLABHEADERATTR_NONEXISTENT) == 0) +#define IGNORE(header) \ + ((atomic_load_acquire(&(header)->attributes) & \ + DNS_SLABHEADERATTR_IGNORE) != 0) +#define NEGATIVE(header) \ + ((atomic_load_acquire(&(header)->attributes) & \ + DNS_SLABHEADERATTR_NEGATIVE) != 0) +#define NXDOMAIN(header) \ + ((atomic_load_acquire(&(header)->attributes) & \ + DNS_SLABHEADERATTR_NXDOMAIN) != 0) +#define OPTOUT(header) \ + ((atomic_load_acquire(&(header)->attributes) & \ + DNS_SLABHEADERATTR_OPTOUT) != 0) +#define PREFETCH(header) \ + ((atomic_load_acquire(&(header)->attributes) & \ + DNS_SLABHEADERATTR_PREFETCH) != 0) +#define RESIGN(header) \ + ((atomic_load_acquire(&(header)->attributes) & \ + DNS_SLABHEADERATTR_RESIGN) != 0) +#define STALE(header) \ + ((atomic_load_acquire(&(header)->attributes) & \ + DNS_SLABHEADERATTR_STALE) != 0) +#define STALE_WINDOW(header) \ + ((atomic_load_acquire(&(header)->attributes) & \ + DNS_SLABHEADERATTR_STALE_WINDOW) != 0) +#define STATCOUNT(header) \ + ((atomic_load_acquire(&(header)->attributes) & \ + DNS_SLABHEADERATTR_STATCOUNT) != 0) +#define ZEROTTL(header) \ + ((atomic_load_acquire(&(header)->attributes) & \ + DNS_SLABHEADERATTR_ZEROTTL) != 0) diff --git a/tests/dns/qpzone_test.c b/tests/dns/qpzone_test.c index 73cd7514a1..ad3d5b972a 100644 --- a/tests/dns/qpzone_test.c +++ b/tests/dns/qpzone_test.c @@ -34,6 +34,8 @@ #include #define KEEP_BEFORE +#include "rdataslab_p.h" + /* Include the main file */ #pragma GCC diagnostic push @@ -45,10 +47,6 @@ #undef CHECK #include -#define CASESET(header) \ - ((atomic_load_acquire(&(header)->attributes) & \ - DNS_SLABHEADERATTR_CASESET) != 0) - const char *ownercase_vectors[12][2] = { { "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",