Authoritative DNS Server --
C Perl Perl6 DIGITAL Command Language M4 Ragel in Ruby Host Other
Pull request Compare This branch is 3 commits behind gdnsd:master.
Latest commit b08e3e9 Jun 27, 2016 @blblack hashing cleanup: static lookup2 everywhere
We have a central (static, inline-able) implementation of lookup2
that was re-used in various places, and also multiple separate
implementations (with slight interface variations) of the
more-simplistic DJB hash (xor variant).

This rids the code of all DJB hash variants, replacing them all
with short wrappers around gdnsd_lookup2() which are static and
inline-able.  lookup2 can be slightly slower but it's a much
better hash.  In almost call cases we'd prefer its robustness, and
in 2016 the minor CPU perf diff between the two is trivial.

Note: as a special case, gdnsd_dname_hash also retains its library
implementation, so that external plugins don't need a re-compile.
The hacks around gdnsd_dname_hash_static can be removed in a
future major-version bump.
Failed to load latest commit information.
acaux Require ragel for tarball builds (and related refactoring) Oct 27, 2014
docs any_tcp_only option (reflection mitigation) Jun 27, 2016
libgdmaps hashing cleanup: static lookup2 everywhere Jun 27, 2016
libgdnsd hashing cleanup: static lookup2 everywhere Jun 27, 2016
plugins Address feedback from blblack May 19, 2016
qa Revert "travis: trying out s/coveralls/codecov/" Dec 29, 2015
src hashing cleanup: static lookup2 everywhere Jun 27, 2016
sysd Add Documentation key to systemd unit file Mar 22, 2016
t any_tcp_only option (reflection mitigation) Jun 27, 2016
.gitignore add tarball sigs to gitignore Mar 23, 2016
.gitmodules libgdmaps tests: replace "check-download" w/ submodule, etc Nov 18, 2014
AUTHORS update AUTHORS from git history Jun 17, 2014
COPYING Initial import from svn trunk r1553 Feb 1, 2012
INSTALL bugfix for "make wikidocs" + non-recursive make Dec 30, 2014
NEWS NEWS update and version bump for 2.2.4 Apr 14, 2016 update coveralls badge URLs Dec 29, 2015 NEWS update and version bump for 2.2.4 Apr 14, 2016

Build Status Coverity Scan Build Status Coverage Status


gdnsd is an Authoritative-only DNS server. The initial g stands for Geographic, as gdnsd offers a plugin system for geographic (or other sorts of) balancing, redirection, and service-state-conscious failover. The plugin system can also do things like weighted address/cname records. If you don't care about these features you can ignore them :).

gdnsd is written in C using libev and pthreads with a focus on high performance, low latency service. It does not offer any form of caching or recursive service, and does not support DNSSEC. There's a strong focus on making the code efficient, lean, and resilient. The code has a decent regression testsuite with full branch coverage on the core packet parsing and generation code, and some scripted QA tools for e.g. valgrind validation, clang-analyzer, etc.

The geographically-aware features also support the emerging EDNS Client Subnet draft ( , ) for receiving more-precise network location information from intermediate shared caches.


Project site:

Release downloads:

The code is hosted at Github:

Bug reports:

Wikified docs:

Google Group for discussion:!forum/gdnsd

See the INSTALL file for details on prerequisites and build procedure for working from the source tree or a source tarball.

The documentation is included in the source tree in POD format and installed as manpages and textfiles on installation.


gdnsd is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

gdnsd is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with gdnsd. If not, see