Lines Matching defs:db
1 /* $NetBSD: db.c,v 1.12 2025/01/26 16:25:22 christos Exp $ */
38 #include <dns/db.h>
126 call_updatenotify(dns_db_t *db);
171 dns__db_destroy(dns_db_t *db) {
172 (db->methods->destroy)(db);
182 dns_db_iscache(dns_db_t *db) {
184 * Does 'db' have cache semantics?
187 REQUIRE(DNS_DB_VALID(db));
189 if ((db->attributes & DNS_DBATTR_CACHE) != 0) {
197 dns_db_iszone(dns_db_t *db) {
199 * Does 'db' have zone semantics?
202 REQUIRE(DNS_DB_VALID(db));
204 if ((db->attributes & (DNS_DBATTR_CACHE | DNS_DBATTR_STUB)) == 0) {
212 dns_db_isstub(dns_db_t *db) {
214 * Does 'db' have stub semantics?
217 REQUIRE(DNS_DB_VALID(db));
219 if ((db->attributes & DNS_DBATTR_STUB) != 0) {
227 dns_db_issecure(dns_db_t *db) {
229 * Is 'db' secure?
232 REQUIRE(DNS_DB_VALID(db));
233 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
235 if (db->methods->issecure != NULL) {
236 return (db->methods->issecure)(db);
242 dns_db_ispersistent(dns_db_t *db) {
244 * Is 'db' persistent?
247 REQUIRE(DNS_DB_VALID(db));
249 if (db->methods->beginload == NULL) {
258 dns_db_origin(dns_db_t *db) {
263 REQUIRE(DNS_DB_VALID(db));
265 return &db->origin;
269 dns_db_class(dns_db_t *db) {
274 REQUIRE(DNS_DB_VALID(db));
276 return db->rdclass;
280 dns_db_beginload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
282 * Begin loading 'db'.
285 REQUIRE(DNS_DB_VALID(db));
288 if (db->methods->beginload != NULL) {
289 return (db->methods->beginload)(db, callbacks);
295 dns_db_endload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
297 * Finish loading 'db'.
300 REQUIRE(DNS_DB_VALID(db));
309 call_updatenotify(db);
311 if (db->methods->endload != NULL) {
312 return (db->methods->endload)(db, callbacks);
319 dns_db_load(dns_db_t *db, const char *filename, dns_masterformat_t format,
325 * Load master file 'filename' into 'db'.
328 REQUIRE(DNS_DB_VALID(db));
330 if ((db->attributes & DNS_DBATTR_CACHE) != 0) {
335 result = dns_db_beginload(db, &callbacks);
339 result = dns_master_loadfile(filename, &db->origin, &db->origin,
340 db->rdclass, options, 0, &callbacks, NULL,
341 NULL, db->mctx, format, 0);
342 eresult = dns_db_endload(db, &callbacks);
362 dns_db_currentversion(dns_db_t *db, dns_dbversion_t **versionp) {
367 REQUIRE(DNS_DB_VALID(db));
368 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
371 (db->methods->currentversion)(db, versionp);
375 dns_db_newversion(dns_db_t *db, dns_dbversion_t **versionp) {
380 REQUIRE(DNS_DB_VALID(db));
381 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
384 if (db->methods->newversion != NULL) {
385 return (db->methods->newversion)(db, versionp);
391 dns_db_attachversion(dns_db_t *db, dns_dbversion_t *source,
397 REQUIRE(DNS_DB_VALID(db));
398 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
402 (db->methods->attachversion)(db, source, targetp);
408 dns__db_closeversion(dns_db_t *db, dns_dbversion_t **versionp,
414 REQUIRE(DNS_DB_VALID(db));
415 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
418 (db->methods->closeversion)(db, versionp, commit DNS__DB_FLARG_PASS);
421 call_updatenotify(db);
432 dns__db_findnode(dns_db_t *db, const dns_name_t *name, bool create,
438 REQUIRE(DNS_DB_VALID(db));
441 if (db->methods->findnode != NULL) {
442 return (db->methods->findnode)(db, name, create,
445 return (db->methods->findnodeext)(db, name, create, NULL, NULL,
451 dns__db_findnodeext(dns_db_t *db, const dns_name_t *name, bool create,
460 REQUIRE(DNS_DB_VALID(db));
463 if (db->methods->findnodeext != NULL) {
464 return (db->methods->findnodeext)(db, name, create, methods,
468 return (db->methods->findnode)(db, name, create,
474 dns__db_findnsec3node(dns_db_t *db, const dns_name_t *name, bool create,
480 REQUIRE(DNS_DB_VALID(db));
483 return (db->methods->findnsec3node)(db, name, create,
488 dns__db_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
495 * of 'db'.
498 REQUIRE(DNS_DB_VALID(db));
508 if (db->methods->find != NULL) {
509 return (db->methods->find)(db, name, version, type, options,
513 return (db->methods->findext)(
514 db, name, version, type, options, now, nodep, foundname,
520 dns__db_findext(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
528 * of 'db', passing in 'arg'.
531 REQUIRE(DNS_DB_VALID(db));
541 if (db->methods->findext != NULL) {
542 return (db->methods->findext)(db, name, version, type, options,
547 return (db->methods->find)(db, name, version, type, options,
554 dns__db_findzonecut(dns_db_t *db, const dns_name_t *name, unsigned int options,
560 * Find the deepest known zonecut which encloses 'name' in 'db'.
565 REQUIRE(DNS_DB_VALID(db));
566 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
573 if (db->methods->findzonecut != NULL) {
574 return (db->methods->findzonecut)(
575 db, name, options, now, nodep, foundname, dcname,
582 dns__db_attachnode(dns_db_t *db, dns_dbnode_t *source,
588 REQUIRE(DNS_DB_VALID(db));
592 (db->methods->attachnode)(db, source, targetp DNS__DB_FLARG_PASS);
596 dns__db_detachnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) {
601 REQUIRE(DNS_DB_VALID(db));
604 (db->methods->detachnode)(db, nodep DNS__DB_FLARG_PASS);
610 dns_db_transfernode(dns_db_t *db, dns_dbnode_t **sourcep,
612 REQUIRE(DNS_DB_VALID(db));
625 dns_db_createiterator(dns_db_t *db, unsigned int flags,
628 * Create an iterator for version 'version' of 'db'.
631 REQUIRE(DNS_DB_VALID(db));
636 if (db->methods->createiterator != NULL) {
637 return db->methods->createiterator(db, flags, iteratorp);
647 dns__db_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
651 REQUIRE(DNS_DB_VALID(db));
661 return (db->methods->findrdataset)(db, node, version, type, covers, now,
667 dns__db_allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
672 * 'node' in version 'version' of 'db'.
675 REQUIRE(DNS_DB_VALID(db));
678 return (db->methods->allrdatasets)(db, node, version, options, now,
683 dns__db_addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
688 * Add 'rdataset' to 'node' in version 'version' of 'db'.
691 REQUIRE(DNS_DB_VALID(db));
693 REQUIRE(((db->attributes & DNS_DBATTR_CACHE) == 0 && version != NULL) ||
694 ((db->attributes & DNS_DBATTR_CACHE) != 0 && version == NULL &&
700 REQUIRE(rdataset->rdclass == db->rdclass);
705 if (db->methods->addrdataset != NULL) {
706 return (db->methods->addrdataset)(
707 db, node, version, now, rdataset, options,
714 dns__db_subtractrdataset(dns_db_t *db, dns_dbnode_t *node,
720 * 'db'.
723 REQUIRE(DNS_DB_VALID(db));
725 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0 && version != NULL);
728 REQUIRE(rdataset->rdclass == db->rdclass);
733 if (db->methods->subtractrdataset != NULL) {
734 return (db->methods->subtractrdataset)(
735 db, node, version, rdataset, options,
742 dns__db_deleterdataset(dns_db_t *db, dns_dbnode_t *node,
747 * version version 'version' of 'db'.
750 REQUIRE(DNS_DB_VALID(db));
752 REQUIRE(((db->attributes & DNS_DBATTR_CACHE) == 0 && version != NULL) ||
753 ((db->attributes & DNS_DBATTR_CACHE) != 0 && version == NULL));
755 if (db->methods->deleterdataset != NULL) {
756 return (db->methods->deleterdataset)(db, node, version, type,
763 dns_db_getsoaserial(dns_db_t *db, dns_dbversion_t *ver, uint32_t *serialp) {
770 REQUIRE(dns_db_iszone(db) || dns_db_isstub(db));
772 result = dns_db_findnode(db, dns_db_origin(db), false, &node);
778 result = dns_db_findrdataset(db, node, ver, dns_rdatatype_soa, 0,
804 dns_db_detachnode(db, &node);
809 dns_db_nodecount(dns_db_t *db, dns_dbtree_t tree) {
810 REQUIRE(DNS_DB_VALID(db));
812 if (db->methods->nodecount != NULL) {
813 return (db->methods->nodecount)(db, tree);
819 dns_db_hashsize(dns_db_t *db) {
820 REQUIRE(DNS_DB_VALID(db));
822 if (db->methods->hashsize == NULL) {
826 return (db->methods->hashsize)(db);
830 dns_db_setloop(dns_db_t *db, isc_loop_t *loop) {
831 REQUIRE(DNS_DB_VALID(db));
833 if (db->methods->setloop != NULL) {
834 (db->methods->setloop)(db, loop);
888 dns__db_getoriginnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) {
889 REQUIRE(DNS_DB_VALID(db));
890 REQUIRE(dns_db_iszone(db));
893 if (db->methods->getoriginnode != NULL) {
894 return (db->methods->getoriginnode)(db,
902 dns_db_getrrsetstats(dns_db_t *db) {
903 REQUIRE(DNS_DB_VALID(db));
905 if (db->methods->getrrsetstats != NULL) {
906 return (db->methods->getrrsetstats)(db);
913 dns_db_setcachestats(dns_db_t *db, isc_stats_t *stats) {
914 REQUIRE(DNS_DB_VALID(db));
916 if (db->methods->setcachestats != NULL) {
917 return (db->methods->setcachestats)(db, stats);
924 dns_db_getnsec3parameters(dns_db_t *db, dns_dbversion_t *version,
928 REQUIRE(DNS_DB_VALID(db));
929 REQUIRE(dns_db_iszone(db));
931 if (db->methods->getnsec3parameters != NULL) {
932 return (db->methods->getnsec3parameters)(db, version, hash,
941 dns_db_getsize(dns_db_t *db, dns_dbversion_t *version, uint64_t *records,
943 REQUIRE(DNS_DB_VALID(db));
944 REQUIRE(dns_db_iszone(db));
946 if (db->methods->getsize != NULL) {
947 return (db->methods->getsize)(db, version, records, bytes);
954 dns_db_setsigningtime(dns_db_t *db, dns_rdataset_t *rdataset,
956 if (db->methods->setsigningtime != NULL) {
957 return (db->methods->setsigningtime)(db, rdataset, resign);
963 dns_db_getsigningtime(dns_db_t *db, isc_stdtime_t *resign, dns_name_t *name,
965 if (db->methods->getsigningtime != NULL) {
966 return (db->methods->getsigningtime)(db, resign, name,
973 call_updatenotify(dns_db_t *db) {
976 rcu_dereference(db->update_listeners);
983 listener->onupdate(db, listener->onupdate_arg);
1011 dns_db_updatenotify_register(dns_db_t *db, dns_dbupdate_callback_t fn,
1013 REQUIRE(db != NULL);
1019 dns_dbonupdatelistener_t *listener = isc_mem_get(db->mctx,
1023 isc_mem_attach(db->mctx, &listener->mctx);
1027 rcu_dereference(db->update_listeners);
1040 dns_db_updatenotify_unregister(dns_db_t *db, dns_dbupdate_callback_t fn,
1042 REQUIRE(db != NULL);
1051 rcu_dereference(db->update_listeners);
1066 dns_db_setservestalettl(dns_db_t *db, dns_ttl_t ttl) {
1067 REQUIRE(DNS_DB_VALID(db));
1068 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
1070 if (db->methods->setservestalettl != NULL) {
1071 return (db->methods->setservestalettl)(db, ttl);
1077 dns_db_getservestalettl(dns_db_t *db, dns_ttl_t *ttl) {
1078 REQUIRE(DNS_DB_VALID(db));
1079 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
1081 if (db->methods->getservestalettl != NULL) {
1082 return (db->methods->getservestalettl)(db, ttl);
1088 dns_db_setservestalerefresh(dns_db_t *db, uint32_t interval) {
1089 REQUIRE(DNS_DB_VALID(db));
1090 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
1092 if (db->methods->setservestalerefresh != NULL) {
1093 return (db->methods->setservestalerefresh)(db, interval);
1099 dns_db_getservestalerefresh(dns_db_t *db, uint32_t *interval) {
1100 REQUIRE(DNS_DB_VALID(db));
1101 REQUIRE((db->attributes & DNS_DBATTR_CACHE) != 0);
1103 if (db->methods->getservestalerefresh != NULL) {
1104 return (db->methods->getservestalerefresh)(db, interval);
1110 dns_db_setgluecachestats(dns_db_t *db, isc_stats_t *stats) {
1111 REQUIRE(dns_db_iszone(db));
1114 if (db->methods->setgluecachestats != NULL) {
1115 return (db->methods->setgluecachestats)(db, stats);
1122 dns_db_addglue(dns_db_t *db, dns_dbversion_t *version, dns_rdataset_t *rdataset,
1124 REQUIRE(DNS_DB_VALID(db));
1125 REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
1130 if (db->methods->addglue != NULL) {
1131 (db->methods->addglue)(db, version, rdataset, msg);
1140 dns_db_locknode(dns_db_t *db, dns_dbnode_t *node, isc_rwlocktype_t type) {
1141 if (db->methods->locknode != NULL) {
1142 (db->methods->locknode)(db, node, type);
1147 dns_db_unlocknode(dns_db_t *db, dns_dbnode_t *node, isc_rwlocktype_t type) {
1148 if (db->methods->unlocknode != NULL) {
1149 (db->methods->unlocknode)(db, node, type);
1154 dns_db_expiredata(dns_db_t *db, dns_dbnode_t *node, void *data) {
1155 if (db->methods->expiredata != NULL) {
1156 (db->methods->expiredata)(db, node, data);
1161 dns_db_deletedata(dns_db_t *db, dns_dbnode_t *node, void *data) {
1162 if (db->methods->deletedata != NULL) {
1163 (db->methods->deletedata)(db, node, data);
1168 dns_db_nodefullname(dns_db_t *db, dns_dbnode_t *node, dns_name_t *name) {
1169 REQUIRE(db != NULL);
1173 if (db->methods->nodefullname != NULL) {
1174 return (db->methods->nodefullname)(db, node, name);
1180 dns_db_setmaxrrperset(dns_db_t *db, uint32_t value) {
1181 REQUIRE(DNS_DB_VALID(db));
1183 if (db->methods->setmaxrrperset != NULL) {
1184 (db->methods->setmaxrrperset)(db, value);
1189 dns_db_setmaxtypepername(dns_db_t *db, uint32_t value) {
1190 REQUIRE(DNS_DB_VALID(db));
1192 if (db->methods->setmaxtypepername != NULL) {
1193 (db->methods->setmaxtypepername)(db, value);
1198 dns__db_logtoomanyrecords(dns_db_t *db, const dns_name_t *name,
1207 dns_name_format(&db->origin, originbuf, sizeof(originbuf));
1209 dns_rdataclass_format(db->rdclass, clsbuf, sizeof(clsbuf));
1216 (db->attributes & DNS_DBATTR_CACHE) != 0 ? "cache" : "zone",