Skip to content

Latest commit

 

History

History
79 lines (68 loc) · 2.69 KB

technical-notes.mdwn

File metadata and controls

79 lines (68 loc) · 2.69 KB

validns technical notes

Data structures considerations

  • the whole parsed zone must be loaded into memory
  • some validations work on individual records
  • thus, whole zone traversal is needed
  • some validations work on records sorted in a particular way
    • the "canonical order" described here http://tools.ietf.org/html/rfc4034#section-6.1
    • thus, this traversal should be in this canonical order
    • Judy is a good way to quickly find and iterate over string-indexed data
    • but it uses normal lexicographic sort order
    • is it possible to map the names in such a way that the result, sorted lexicographically, will correspond to the canonical order?
    • if we agree that labels cannot contain chr(0)
      • this, strictly speaking, is possible
      • but we ignore that this can be seen in practice
    • and, if we agree that labels cannot contain chr(1)
      • same as above - possible, but it's not within "IN" class
    • then we can reverse the name and use chr(1) as the label separator
    • we could just use chr(0) as the label separator, but then we cannot use normal C-style strings, so the code will be somewhat more complex
  • some validations apply to given names
  • need quick retrieval of all records with a given name
  • some validations require complete RR sets
  • need quick retrieval of all records in a given RR set

Memory requirements and execution speed

Naturally, memory usage is much higher on 64-bit platforms. For a 4 million records zone, it eats around 700 MB on a 64-bit platform, and only around 400 MB on a 32-bit platform.

It also looks that 32-bit version is somewhat faster than 64-bit one, although I did not do a strict comparison - the tested machines were not the same.

TODO

The todo list is not complete by its nature.

  • proper manual page
  • a test for every error message
  • zone validations specified in RFC 1035
  • multiple verboseness levels (-v option repeated)
  • include file support
    • -I option
  • embedding lua for flexible validations
    • "policy validations"
    • -p policy-file option
    • -r policy-rule option (maybe?)
  • better platform support
    • stpcpy() might not be everywhere

DONE

The done list is not complete.

  • (./) usage() function
  • (./) options support (getopt)
  • (./) $TTL support
  • (./) $ORIGIN support
    • (./) -z option for initial ORIGIN
  • (./) master file support (RFC 1035, section 5)
    • (./) see whether there were changes to it
  • -v option for verbose
  • (./) -q option for extra quiet
  • (./) -f option (die on first error)
  • (./) -s option - produce validation summary/statistics
  • (./) nice CPAN module for external programs output testing?
    • (./) looks like Test::Command::Simple is what I want
  • (./) wire RDATA format
  • (./) NSEC3 parsing