hickory-dns/ARCHITECTURE.md
Benjamin Fry 408d0baca0
Prepare 0.24 release with branding change to Hickory DNS (#2054)
* update all READMEs with notices about the name change

* update changelog for 0.24

* bump crate versions to 0.24

* update version notice information

* update readmes to back reference trust-dns

* rename all crates to hickory counterparts

* replace all Trust-DNS references in code and comments with Hickory DNS

* rename all Trust-DNS references to Hickory DNS in non-code

* rename all trust-dns-resolver references to hickory-resolver

* rename all trust-dns-client references to hickory-client

* rename all trust-dns-proto references to hickory-proto

* rename all trust-dns-server references to hickory-server

* rename all trust-dns-compatibility references to hickory-compatability

* rename all trust-dns-integration references to hickory-integration

* rename all trust-dns-util references to hickory-util

* Update MIT licenses to reference Hickory DNS

* update all trust-dns references to hickory-dns

* update all bluejekyll github references to hickorydns org

* Update name in Changelog

* make sure hickory-dns logs during tests

* add changelogs for recent main additions

* fix references to trust-dns and hickory in architecture

* update a few trust-dns references in READMEs

* fixup some dangling trust_dns references

* replace fka with formerly in change log

* replace all hickoydns org references to hickory-dns

* replace all http links with https

* update logos

* update hickorydns to hickory-dns for all other org references

* fix Notices of Trust-DNS to Hickory in each Readme
2023-10-13 18:39:28 -07:00

3.0 KiB
Raw Permalink Blame History

Architecture of Hickory DNS

The Hickory DNS libraries are built from the ground up to be asynchronous. This project grew from first using non-blocking IO interfaces (before Futures 0.1 or async/await had landed in Rust). There are some artifacts of this history sporadically left around the project. Please feel free to submit PRs that clean up areas that still have hand-written Futures based state-machines. Additionally, much of the project was written by @bluejekyll while he learned the Rust languagethis means that there may be patterns or missing common implementations in places where he didn't know better. Feel free to clean that up if you feel open to submitting a PR.

Layout

Most of the project is in the form of crates. The crates are all individually published to crates.io.

The project has these high-level crates (to be used as dependencies in other projects):

  • hickory-resolver - implements a stub-resolver with support for CNAME chasing and other things, abstract over runtimes (Tokio supported by default)
  • async-std-resolver - an abstraction of hickory-resolver using the async-std runtime
  • hickory-client - a bare-bones client crate, most useful for dynamic DNS updates
  • hickory-server - implements support for hosted Authorities of various types
  • tokio-resolver - (under consideration, currently Tokio support is directly in hickory-resolver)

Low-level crates supporting the above high-level crates:

  • hickory-proto - the lowest level crate, implements the basics of DNS

Binaries:

  • hickory-dns - server binary, hickory-dns, for hosting authorities, zones, and/or setting up a forwarder
  • hickory-util - helpful utilities, e.g. resolve for a CLI resolver, as well as some DNSSEC utilities

Old and Outdated crates:

TBD

More on general patterns used in each library