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
include hashing cleanup: static lookup2 everywhere Jun 27, 2016
libgdmaps hashing cleanup: static lookup2 everywhere Jun 27, 2016
m4 update ax_pthread.m4 from autoconf-archive Jun 27, 2016
plugins Address feedback from blblack May 19, 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
INSTALL INSTALL: prefer mmdb 1.2.0+ Apr 14, 2016 bugfix for "make wikidocs" + non-recursive make Dec 30, 2014
NEWS update coveralls badge URLs Dec 29, 2015

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