[bind10-dev] in memory NSEC3 support design and tasks

JINMEI Tatuya / 神明達哉 jinmei at isc.org
Wed Jan 18 09:10:43 UTC 2012


As we discussed in f2f last week, we shifted our development focus to
NSEC3 support in in-memory data source.  I've re-read RFC5155 and
looked at the BIND 9 (and partially NSD) implementation to identify
and break down tasks for this (currently tracked in #1562).

I've basically completed this meta task, and created a bunch of
broken-down tickets in the next sprint proposed queue.

Overall I followed what BIND 9 does with a couple of non trivial
adjustments for BIND 10.  The main points are:

- NSEC3 RRs will be stored in a separate tree than other RRs.  Thanks
  to this NSEC3 support will be actually easier than NSEC support in
  some sense; most of the code logic will be in the query handling
  part and can be shared with the database-based data sources.

- To help identify the closest provable enclosure of a name, I propose
  the basic find() method return an empty NSEC3 RRset (an NSEC without
  any RDATA) with the owner name of the found closest name when it
  returns NXDOMAIN.  This is an addition to BIND 9, and is similar to
  what NSD does.  We don't necessarily have to do this for the correct
  behavior, but it shouldn't be difficult because find() should know
  the closest name while detecting NXDOMAIN, and it will be helpful
  when we want to optimize NSEC3 processing further.

- To retrieve NSEC3 RRs for a given name I propose adding a new
  (separate) method "findNSEC3" to the zone finder class.  BIND 9 uses
  the generic find() function, and we could do the same, but since
  NSEC3 is very special (essentially belong to a different space of
  the zone, there should be no concept of delegation in that space, no
  glue, no wildcard, etc), using the generic version didn't seem to me
  to make much sense.  By separating the interface we can also add
  more smartness for the dedicated purpose.  In the proposed
  interface, this method is also responsible to identify the closest
  provable enclosure.  More details of this method are given in
  https://bind10.isc.org/ticket/1431

With these items, the actual protocol processing is basically
straightforward.  I've created tickets for each relevant subsection of
RFC5155:

7.2.2.  Name Error https://bind10.isc.org/ticket/1580
7.2.3.  No Data, not DS https://bind10.isc.org/ticket/1581
7.2.4.  No Data, DS https://bind10.isc.org/ticket/1582
7.2.5.  Wildcard No Data https://bind10.isc.org/ticket/1583
7.2.6.  Wildcard Answer https://bind10.isc.org/ticket/1584
7.2.7.  Unsigned Subzones https://bind10.isc.org/ticket/1585

I'm not necessarily claiming these are what we should definitely do by
creating actual tickets with specifics of how to do it.  These are a
base for discussions and suggestions (although we need to start
development quite soon anyway).  So please feel free to make
comments/objections/suggestions on the overall design and/or how to
break down the tasks.

---
JINMEI, Tatuya



More information about the bind10-dev mailing list