ncache revision 40f53fa8d9c6a4fc38c0014495e7a42b08f52481
9bff67898d55cddfcec9ce30cc2b1bb6211ec691David LawrenceCopyright (C) 1999, 2000 Internet Software Consortium.
9bff67898d55cddfcec9ce30cc2b1bb6211ec691David LawrenceSee COPYRIGHT in the source root or http://www.isc.org/copyright for terms.
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halley
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence$Id: ncache,v 1.4 2000/08/01 01:18:12 tale Exp $
9c3531d72aeaad6c5f01efe6a1c82023e1379e4dDavid Lawrence
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob HalleyNegative Caching
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halley
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob HalleyThe non-DNSSEC case is pretty easy.
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halley
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halley foundname = soa name
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halley rdataset = soa
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halley node = NULL
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halley
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob HalleyDNSSEC complicates things a lot, because we have to return one or more NXT
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halleyrecords (if we have them) as proof. Another tricky bit here is that we may
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halleyhave an NXT record so we know the answer is NODATA, but we don't have the SOA
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halleyso we can't make a NODATA response that a non-DNSSEC-aware server could
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halleycache. Life would sure be easier if we knew if the client understood DNSSEC.
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob HalleyNot sure what to do in this case. Probably return delegation to force client
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halleyto ask authority.
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halley
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halley
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David LawrencePerhaps we should just create some kind of meta-rdata, the "negative cache
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halleyrdata type"?
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halley
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob HalleyOr maybe something like:
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halley
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halleydns_rdataset_ncachefirst()
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halleydns_rdataset_ncachenext()
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halleydns_rdataset_ncachecurrent()
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halley
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halleydns_db_ncachenew(db, type) /* type can be any */
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halleydns_db_ncachesoa(name, rdataset)
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halleydns_db_ncachenxt(name, rdataset)
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halleydns_db_ncacheadd(db, name, version)
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob Halley
73f4d29ef46f9bbcb104b3dd54393c702848a0abBob HalleyIck. I favor the former.