Development Update #2103

DNS-OARC
4 min readApr 1, 2021

Here are some DNS-OARC development highlights from the past couple of months. These updates are usually bi-monthly and previous ones are available on our Medium blog.

dnsperf

As I mentioned in my previous blog post, the DNS-over-HTTPS project for dnsperf continued and the next phase was to re-factor the engine and add re-connection support. This would essentially split it into two, one for stateless communications (UDP) and one for connection oriented communications (TCP, DoT, DoH).

The idea was to have one thread processing the datafile, generate queries and processing responses. Another thread was going to use libuv for the communication and to send information between the threads I was going to use Concurrent Kit’s rings.

While doing this work I ran into a whole lot of strange problems, that I saw could easily eat up all the allotted time for this phase without actually getting anywhere. So I had to make a decision, and I decided to go back to the old code and try to re-factor it so that re-connection support could be added and to prepare it for DNS-over-HTTPS.

This chosen approach was successful, and with version v2.5.0 both dnsperf and resperf now have a more modular engine and re-connection support for TCP and DoT!

In addition to this change, there have been four additional releases with fixes and new features. A few notables are that “ran out of data” errors should now be fixed, support for quoted characters (\000 and \.) in domain names and TYPEnnn/ANY QTYPEs has been re-added, and resperf has a new option (-R) to reopen the datafile if it runs out of data before the testing is completed.

For full changelog of all releases, please see: https://github.com/DNS-OARC/dnsperf/releases

The next phase in the project will be to add DNS-over-HTTPS support to dnsperf and resperf, this is scheduled to begin in May and be finished by end of August.

dumdumd

This is a little hack I wrote some time ago when I needed to do some testing and just needed something to answer UDP/TCP. In recent times it’s been extended to reflect what it received and to have TLS support.

https://github.com/DNS-OARC/dumdumd

When working on the re-connection code for dnsperf I also added two types of forced disconnect for TCP and TLS. The -C option will make it so it closes the connection after receiving the first message, and after reflecting it if that is enabled. The -D nnn will do random disconnect when receiving, based on the given percentage. So for example, -D 50 will drop about half of all connections.

This has helped immensely when making sure that the re-connecting code in dnsperf works as it should during a less then optimal network situation.

DSC Grafana update

Got a report that the example graphs for DSC Grafana were showing incorrect numbers for PPS/QPS. After some poking around in our own test instance, it indeed showed that the numbers were off.

Now I don’t know if it’s always been like this or if something has happened over time with all the new releases of Grafana and InfluxDB. Bear in mind that the graphs and queries were made during the early years of Grafana and when InfluxDB was still in beta, and they haven’t really changed since then.

Please Note!

The setup and graphs described in the Wiki are meant as a example of what can be done. It’s important to understand and learn how DSC’s datasets work, how they are exported to InfluxDB and how graphs in Grafana works.

Grafana is an amazing tool, and you will greatly benefit in customizing your own graphs for your own purpose and needs.

The example graphs that show PPS/QPS has been updated and the numbers should be correct now. They have been changed to display field(value) sum() math( / ($_interval_ms / 1000) ) which now also should work correctly when selecting a different Time Resolution of the graph.

For details on how to setup your own test instance, please see this Wiki: https://github.com/DNS-OARC/dsc-datatool/wiki/Setting-up-a-test-Grafana

Other releases

dnsjit v1.1.0 was released on 3rd Feb and includes a bugfix for lib.getopt, a new module for Base64 URLs and a lot of updates to output.dnssim which is the heart of DNS shotgun (by CZ.NIC).

dnscap v2.0.0 was released on 12th Feb (with v2.0.1 on 11th Mar), this major release contains three backward incompatible changes, two new command line options and a completely restructured man-page.
You can find all the details on what’s been changed in the changelogs.

OARC35

It’s a little over a month left until OARC35 kicks off!

This time we are running the conference in the Asia Pacific region… without the hassle of travel!

https://www.dns-oarc.net/oarc35

Be sure to check out the agenda when it’s published and come join us, there is plenty of room on the couch in the living room of DNS!

Cheers,
Jerry

--

--

DNS-OARC

Domain Name System Operations Analysis and Research Center