log_quota(dns_adbentry_t *entry, const char *fmt, ...) ISC_FORMAT_PRINTF(2, 3);
/*
- * MUST NOT overlap DNS_ADBFIND_* flags!
+ * Private flag(s) for adbfind objects. These are used internally and
+ * are not meant to be seen or used by the caller; however, we use the
+ * same flags field as for DNS_ADBFIND_xxx flags, so we must be careful
+ * that there is no overlap between these values and those. To make it
+ * easier, we will number these starting from the most significant bit
+ * instead of the least significant.
*/
-#define FIND_EVENT_SENT 0x40000000
-#define FIND_EVENT_FREED 0x80000000
+enum {
+ FIND_EVENT_SENT = 1 << 31,
+ FIND_EVENT_FREED = 1 << 30,
+};
#define FIND_EVENTSENT(h) (((h)->flags & FIND_EVENT_SENT) != 0)
#define FIND_EVENTFREED(h) (((h)->flags & FIND_EVENT_FREED) != 0)
-#define NAME_NEEDS_POKE 0x80000000
-#define NAME_IS_DEAD 0x40000000
-#define NAME_HINT_OK DNS_ADBFIND_HINTOK
-#define NAME_GLUE_OK DNS_ADBFIND_GLUEOK
-#define NAME_STARTATZONE DNS_ADBFIND_STARTATZONE
+/*
+ * Private flag(s) for adbname objects.
+ */
+enum {
+ NAME_IS_DEAD = 1 << 31,
+ NAME_NEEDS_POKE = 1 << 30,
+};
#define NAME_DEAD(n) (((n)->flags & NAME_IS_DEAD) != 0)
#define NAME_NEEDSPOKE(n) (((n)->flags & NAME_NEEDS_POKE) != 0)
-#define NAME_GLUEOK(n) (((n)->flags & NAME_GLUE_OK) != 0)
-#define NAME_HINTOK(n) (((n)->flags & NAME_HINT_OK) != 0)
+#define NAME_GLUEOK(n) (((n)->flags & DNS_ADBFIND_GLUEOK) != 0)
+#define NAME_HINTOK(n) (((n)->flags & DNS_ADBFIND_HINTOK) != 0)
/*
- * Private flag(s) for entries.
- * MUST NOT overlap FCTX_ADDRINFO_xxx and DNS_FETCHOPT_NOEDNS0.
+ * Private flag(s) for adbentry objects. Note that these will also
+ * be used for addrinfo flags, and in resolver.c we'll use the same
+ * field for FCTX_ADDRINFO_xxx flags to store information about remote
+ * servers, so we must be careful that there is no overlap between
+ * these values and those. To make it easier, we will number these
+ * starting from the most significant bit instead of the least
+ * significant.
*/
-#define ENTRY_IS_DEAD 0x00400000
+enum {
+ ENTRY_IS_DEAD = 1 << 31,
+};
/*
* To the name, address classes are all that really exist. If it has a
#define GLUE_OK(nf, o) (!NAME_GLUEOK(nf) || (((o)&DNS_ADBFIND_GLUEOK) != 0))
#define HINT_OK(nf, o) (!NAME_HINTOK(nf) || (((o)&DNS_ADBFIND_HINTOK) != 0))
#define GLUEHINT_OK(nf, o) (GLUE_OK(nf, o) || HINT_OK(nf, o))
-#define STARTATZONE_MATCHES(nf, o) \
- (((nf)->flags & NAME_STARTATZONE) == ((o)&DNS_ADBFIND_STARTATZONE))
+#define STARTATZONE_MATCHES(nf, o) \
+ (((nf)->flags & DNS_ADBFIND_STARTATZONE) == \
+ ((o)&DNS_ADBFIND_STARTATZONE))
#define ENTER_LEVEL ISC_LOG_DEBUG(50)
#define EXIT_LEVEL ENTER_LEVEL
adbname = new_adbname(adb, name);
link_name(adb, bucket, adbname);
if (FIND_HINTOK(find)) {
- adbname->flags |= NAME_HINT_OK;
+ adbname->flags |= DNS_ADBFIND_HINTOK;
}
if (FIND_GLUEOK(find)) {
- adbname->flags |= NAME_GLUE_OK;
+ adbname->flags |= DNS_ADBFIND_GLUEOK;
}
if (FIND_STARTATZONE(find)) {
- adbname->flags |= NAME_STARTATZONE;
+ adbname->flags |= DNS_ADBFIND_STARTATZONE;
}
} else {
/* Move this name forward in the LRU list */
* We need to specify whether to search static-stub zones (if
* configured) depending on whether this is a "start at zone" lookup,
* i.e., whether it's a "bailiwick" glue. If it's bailiwick (in which
- * case NAME_STARTATZONE is set) we need to stop the search at any
- * matching static-stub zone without looking into the cache to honor
+ * case DNS_ADBFIND_STARTATZONE is set) we need to stop the search at
+ * any matching static-stub zone without looking into the cache to honor
* the configuration on which server we should send queries to.
*/
- result = dns_view_find(adb->view, &adbname->name, rdtype, now,
- NAME_GLUEOK(adbname) ? DNS_DBFIND_GLUEOK : 0,
- NAME_HINTOK(adbname),
- ((adbname->flags & NAME_STARTATZONE) != 0), NULL,
- NULL, fname, &rdataset, NULL);
+ result =
+ dns_view_find(adb->view, &adbname->name, rdtype, now,
+ NAME_GLUEOK(adbname) ? DNS_DBFIND_GLUEOK : 0,
+ NAME_HINTOK(adbname),
+ ((adbname->flags & DNS_ADBFIND_STARTATZONE) != 0),
+ NULL, NULL, fname, &rdataset, NULL);
/* XXXVIX this switch statement is too sparse to gen a jump table. */
switch (result) {
/*
* Options that modify how a 'fetch' is done.
*/
-#define DNS_FETCHOPT_TCP 0x00000001 /*%< Use TCP. */
-#define DNS_FETCHOPT_UNSHARED 0x00000002 /*%< See below. */
-#define DNS_FETCHOPT_RECURSIVE 0x00000004 /*%< Set RD? */
-#define DNS_FETCHOPT_NOEDNS0 0x00000008 /*%< Do not use EDNS. */
-#define DNS_FETCHOPT_FORWARDONLY 0x00000010 /*%< Only use forwarders. */
-#define DNS_FETCHOPT_NOVALIDATE 0x00000020 /*%< Disable validation. */
-#define DNS_FETCHOPT_OBSOLETE1 0x00000040 /*%< Obsolete */
-#define DNS_FETCHOPT_WANTNSID 0x00000080 /*%< Request NSID */
-#define DNS_FETCHOPT_PREFETCH 0x00000100 /*%< Do prefetch */
-#define DNS_FETCHOPT_NOCDFLAG 0x00000200 /*%< Don't set CD flag. */
-#define DNS_FETCHOPT_NONTA 0x00000400 /*%< Ignore NTA table. */
-/* RESERVED ECS 0x00000000 */
-/* RESERVED ECS 0x00001000 */
-/* RESERVED ECS 0x00002000 */
-/* RESERVED TCPCLIENT 0x00004000 */
-#define DNS_FETCHOPT_NOCACHED 0x00008000 /*%< Force cache update. */
-#define DNS_FETCHOPT_QMINIMIZE 0x00010000 /*%< Use qname minimization. */
-#define DNS_FETCHOPT_NOFOLLOW \
- 0x00020000 /*%< Don't retrieve the NS RRset from the child zone when a \
- * delegation is returned in response to a NS query. */
-#define DNS_FETCHOPT_QMIN_STRICT \
- 0x00040000 /*%< Do not work around servers that return errors on \
- * non-empty terminals. */
-#define DNS_FETCHOPT_QMIN_SKIP_IP6A \
- 0x00080000 /*%< Skip some labels when doing qname minimization on \
- * ip6.arpa. */
-#define DNS_FETCHOPT_NOFORWARD \
- 0x00100000 /*%< Do not use forwarders if possible. */
-
-/* UNUSED 0x00200000 */
-/* Reserved in use by adb.c 0x00400000 */
-#define DNS_FETCHOPT_EDNSVERSIONSET 0x00800000
-#define DNS_FETCHOPT_EDNSVERSIONMASK 0xff000000
-#define DNS_FETCHOPT_EDNSVERSIONSHIFT 24
-#define DNS_FETCHOPT_TRYSTALE_ONTIMEOUT 0x01000000
+enum {
+ DNS_FETCHOPT_TCP = 1 << 0, /*%< Use TCP. */
+ DNS_FETCHOPT_UNSHARED = 1 << 1, /*%< See below. */
+ DNS_FETCHOPT_RECURSIVE = 1 << 2, /*%< Set RD? */
+ DNS_FETCHOPT_NOEDNS0 = 1 << 3, /*%< Do not use EDNS. */
+ DNS_FETCHOPT_FORWARDONLY = 1 << 4, /*%< Only use forwarders. */
+ DNS_FETCHOPT_NOVALIDATE = 1 << 5, /*%< Disable validation. */
+ DNS_FETCHOPT_WANTNSID = 1 << 6, /*%< Request NSID */
+ DNS_FETCHOPT_PREFETCH = 1 << 7, /*%< Do prefetch */
+ DNS_FETCHOPT_NOCDFLAG = 1 << 8, /*%< Don't set CD flag. */
+ DNS_FETCHOPT_NONTA = 1 << 9, /*%< Ignore NTA table. */
+ DNS_FETCHOPT_NOCACHED = 1 << 10, /*%< Force cache update. */
+ DNS_FETCHOPT_QMINIMIZE = 1 << 11, /*%< Use qname minimization. */
+ DNS_FETCHOPT_NOFOLLOW = 1 << 12, /*%< Don't retrieve the NS RRset
+ * from the child zone when a
+ * delegation is returned in
+ * response to a NS query. */
+ DNS_FETCHOPT_QMIN_STRICT = 1 << 13, /*%< Do not work around servers
+ * that return errors on
+ * non-empty terminals. */
+ DNS_FETCHOPT_QMIN_SKIP_IP6A = 1 << 14, /*%< Skip some labels when
+ * doing qname minimization
+ * on ip6.arpa. */
+ DNS_FETCHOPT_NOFORWARD = 1 << 15, /*%< Do not use forwarders if
+ * possible. */
+ DNS_FETCHOPT_TRYSTALE_ONTIMEOUT = 1 << 16,
+
+ /*% EDNS version bits: */
+ DNS_FETCHOPT_EDNSVERSIONSET = 1 << 23,
+ DNS_FETCHOPT_EDNSVERSIONSHIFT = 24,
+ DNS_FETCHOPT_EDNSVERSIONMASK = 0xff000000,
+};
/*
* Upper bounds of class of query RTT (ms). Corresponds to
#define VALID_RESOLVER(res) ISC_MAGIC_VALID(res, RES_MAGIC)
/*%
- * Private addrinfo flags. These must not conflict with DNS_FETCHOPT_NOEDNS0
- * (0x008) which we also use as an addrinfo flag.
+ * Private addrinfo flags.
*/
-#define FCTX_ADDRINFO_MARK 0x00001
-#define FCTX_ADDRINFO_FORWARDER 0x01000
-#define FCTX_ADDRINFO_EDNSOK 0x04000
-#define FCTX_ADDRINFO_NOCOOKIE 0x08000
-#define FCTX_ADDRINFO_BADCOOKIE 0x10000
-#define FCTX_ADDRINFO_DUALSTACK 0x20000
+enum {
+ FCTX_ADDRINFO_MARK = 1 << 0,
+ FCTX_ADDRINFO_FORWARDER = 1 << 1,
+ FCTX_ADDRINFO_EDNSOK = 1 << 2,
+ FCTX_ADDRINFO_NOCOOKIE = 1 << 3,
+ FCTX_ADDRINFO_BADCOOKIE = 1 << 4,
+ FCTX_ADDRINFO_DUALSTACK = 1 << 5,
+ FCTX_ADDRINFO_NOEDNS0 = 1 << 6,
+};
#define UNMARKED(a) (((a)->flags & FCTX_ADDRINFO_MARK) == 0)
#define ISFORWARDER(a) (((a)->flags & FCTX_ADDRINFO_FORWARDER) != 0)
* The ADB does not know about servers with "edns no". Check
* this, and then inform the ADB for future use.
*/
- if ((query->addrinfo->flags & DNS_FETCHOPT_NOEDNS0) == 0 &&
+ if ((query->addrinfo->flags & FCTX_ADDRINFO_NOEDNS0) == 0 &&
peer != NULL &&
dns_peer_getsupportedns(peer, &useedns) == ISC_R_SUCCESS &&
!useedns)
{
query->options |= DNS_FETCHOPT_NOEDNS0;
dns_adb_changeflags(fctx->adb, query->addrinfo,
- DNS_FETCHOPT_NOEDNS0, DNS_FETCHOPT_NOEDNS0);
+ FCTX_ADDRINFO_NOEDNS0,
+ FCTX_ADDRINFO_NOEDNS0);
}
/* Sync NOEDNS0 flag in addrinfo->flags and options now. */
- if ((query->addrinfo->flags & DNS_FETCHOPT_NOEDNS0) != 0) {
+ if ((query->addrinfo->flags & FCTX_ADDRINFO_NOEDNS0) != 0) {
query->options |= DNS_FETCHOPT_NOEDNS0;
}
* the remote server doesn't like it.
*/
if ((query->options & DNS_FETCHOPT_NOEDNS0) == 0) {
- if ((query->addrinfo->flags & DNS_FETCHOPT_NOEDNS0) == 0) {
+ if ((query->addrinfo->flags & FCTX_ADDRINFO_NOEDNS0) == 0) {
uint16_t peerudpsize = 0;
unsigned int version = DNS_EDNS_VERSION;
unsigned int flags = query->addrinfo->flags;
DNS_LOGMODULE_RESOLVER, ISC_LOG_DEBUG(3),
fctx->res->mctx);
dns_adb_changeflags(fctx->adb, query->addrinfo,
- DNS_FETCHOPT_NOEDNS0, DNS_FETCHOPT_NOEDNS0);
+ FCTX_ADDRINFO_NOEDNS0,
+ FCTX_ADDRINFO_NOEDNS0);
} else if (rctx->opt == NULL &&
(query->rmessage->flags & DNS_MESSAGEFLAG_TC) == 0 &&
!EDNSOK(query->addrinfo) &&
DNS_LOGMODULE_RESOLVER, ISC_LOG_DEBUG(3),
fctx->res->mctx);
dns_adb_changeflags(fctx->adb, query->addrinfo,
- DNS_FETCHOPT_NOEDNS0, DNS_FETCHOPT_NOEDNS0);
+ FCTX_ADDRINFO_NOEDNS0,
+ FCTX_ADDRINFO_NOEDNS0);
}
/*