summaryrefslogtreecommitdiffstats
path: root/rpm/dnsperf.spec
blob: 601dda01b3ac5a1c3efb6fda683e3abf11fd7019 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
Name:           dnsperf
Version:        2.5.0
Release:        1%{?dist}
Summary:        DNS Performance Testing Tool
Group:          Productivity/Networking/DNS/Utilities

License:        Apache-2.0
URL:            https://www.dns-oarc.net/tools/dnsperf
# Source needs to be generated by dist-tools/create-source-packages, see
# https://github.com/jelu/dist-tools
Source0:        https://www.dns-oarc.net/files/dnsperf/%{name}-%{version}.tar.gz?/%{name}_%{version}.orig.tar.gz

BuildRequires:  autoconf
BuildRequires:  automake
BuildRequires:  libtool
BuildRequires:  openssl-devel
BuildRequires:  pkgconfig
BuildRequires:  ldns-devel
BuildRequires:  ck-devel

%description
dnsperf and resperf are free tools developed by Nominum/Akamai (2006-2018)
and DNS-OARC (since 2019) that make it simple to gather accurate latency and
throughput metrics for Domain Name Service (DNS). These tools are easy-to-use
and simulate typical Internet, so network operators can benchmark their naming
and addressing infrastructure and plan for upgrades. The latest version of
the dnsperf and resperf can be used with test files that include IPv6
queries.

dnsperf "self-paces" the DNS query load to simulate network conditions.

New features in dnsperf improve the precision of latency measurements and
allow for per packet per-query latency reporting is possible. dnsperf is
now multithreaded, multiple dnsperf clients can be supported in multicore
systems (each client requires two cores). The output of dnsperf has also
been improved so it is more concise and useful. Latency data can be used to
make detailed graphs, so it is simple for network operators to take advantage
of the data.


%package -n resperf
Summary:        DNS Resolution Performance Testing Tool
Group:          Productivity/Networking/DNS/Utilities


%description -n resperf
dnsperf and resperf are free tools developed by Nominum/Akamai (2006-2018)
and DNS-OARC (since 2019) that make it simple to gather accurate latency and
throughput metrics for Domain Name Service (DNS). These tools are easy-to-use
and simulate typical Internet, so network operators can benchmark their naming
and addressing infrastructure and plan for upgrades. The latest version of
the dnsperf and resperf can be used with test files that include IPv6
queries.

resperf systematically increases the query rate and monitors the response
rate to simulate caching DNS services.


%prep
%setup -q -n %{name}_%{version}


%build
sh autogen.sh
%configure "--with-extra-cflags=-I /usr/include/bind"
make %{?_smp_mflags}


%check
make test


%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT


%clean
rm -rf $RPM_BUILD_ROOT


%files
%defattr(-,root,root)
%{_bindir}/dnsperf
%{_datadir}/doc/*
%{_mandir}/man1/dnsperf.*


%files -n resperf
%defattr(-,root,root)
%{_bindir}/resperf
%{_bindir}/resperf-report
%{_mandir}/man1/resperf.*


%changelog
* Fri Mar 12 2021 Jerry Lundström <lundstrom.jerry@gmail.com> 2.5.0-1
- Release 2.5.0
  * This release adds re-connection support for TCP and DoT protocol,
    new options to `resperf` and fixes a few bugs.
  * `dnsperf` and `resperf` will now try to re-connect when they lose a TCP
    or DoT connection, and with that comes a few new statistics metrics.
    For `dnsperf`, if a connection oriented protocol is used, it will now
    show the total number of re-connections made and the connection latency.
    For `resperf` it also shows the total number of re-connections made and
    the gnuplot data now contains the total number of connections made and
    the connection latency for each interval.
    Beside re-connection support, improvements have been made when it comes
    to tracking socket readiness while connections are established which
    should generate less warnings about "socket not ready".
  * New `resperf` options:
    - `-R`: Reopen the datafile if it runs out of data before the testing
      is completed. This allows for long running tests on very small and
      simple query datafile.
    - `-F <fall_behind>`: Sets the maximum number of queries that can fall
      behind being sent. `resperf` will stop when this many queries should
      have been sent and it can be relative easy to hit if `-m <max_qps>`
      is set too high.
      The default is 1000 and setting it to zero (0) disables the check.
  * Bugfixes:
    - Fixed port handling for host/network format when setting client side
      port with `-x`
    - Fix support for quoted characters, `\000` and `\.`, in domain names,
      this was lost when removing BIND's internal development libraries
    - Fix issue in `dnsperf`, it would loop forever if no connection could
      be established
    - Fix potential buffer overrun in `resperf` when using response id
      for `queries[]`
    - DoT: Fix bug when sending from buffer
  * Other changes:
    - Always use `IPV6_V6ONLY` socket option for IPv6
    - Add man-page on `-W` option added in v2.4.0
    - Reformat man-pages
    - `resperf`:
      - Try and process more request each run to hopefully not hit max
        outstanding so easy when high QPS
      - Add default value to `-C` so it shows in help
  * Commits:
    9308361 man-page format
    0e52fb4 man-page, opts, tuneups
    e36211d stats
    d9b9ba3 Response qid to index
    2b2c37e fixes, reconnection
    acd31e5 dname quote
    de8f049 net
* Tue Feb 23 2021 Jerry Lundström <lundstrom.jerry@gmail.com> 2.4.2-1
- Release 2.4.2
  * This release fixes a few issues with reading of the datafile which
    could lead to "ran out of data" errors.
  * The problem was that reading from the datafile was done before finding
    a socket to send it on, or socket readyness, and that lead to progressing
    the queries without really doing anything.
    Another issues that's been fixed was that if the read lines perfectly
    aligned with the buffer, it would be treated like EOF and caused an exit.
  * Commits:
    9937287 resperf TLS
    6736956 datafile
    55faec6 ran out of data
* Tue Feb 09 2021 Jerry Lundström <lundstrom.jerry@gmail.com> 2.4.1-1
- Release 2.4.1
  * This release fixes an issue with the socket readiness function that
    could cause a buffer overflow (`-T 10 -c 2000`) due to `select()` being
    limited to check 1023 sockets. `poll()` is now used which has no limit.
  * There has also been a few fixes to the contrib script `queryparse` that
    has to do with python v2 and v3 compatibility and better exception
    handling.
  * Commits:
    24e5bee poll
    7dceca7 Handle only common exceptions
    5603294 Fix error on python3
    48fa517 TSIG
* Wed Dec 09 2020 Jerry Lundström <lundstrom.jerry@gmail.com> 2.4.0-1
- Release 2.4.0
  * This release removes the dependency on BIND's internal development
    libraries! This make building and packaging a lot easier and less
    troublesome in the future.
  * This software now depends only on OpenSSL (for TSIG feature) with an
    optional depend on LDNS (for dynamic updates feature).
  * New option:
    - Transport mode option `-m`/`-M` now recognizes `dot` alongside `tls`
      for encrypted DNS
    - Added `-W` for outputting warnings and errors to stdout
  * Other changes / bugfixes:
    - Fix potential memory leak of query descriptions when using verbose
    - Only use TLS v1.2 and above for DoT/TLS
    - Add a lot of tests
    - Add coverage testing
  * Commits:
    d17743b datafile
    434bbf2 Checks, coverage, log, test IPv6
    9fb305f Coverage
    123ebf1 DOT, TLS version, Sonarcloud
    26df0bd BIND dependency
    ee660e7 Sonarcloud
    c9ea0ab base64
    4e9be82 TSIG
    4275045 EDNS, https
    7c3f51c BIND dependency
    6e1be5d ISC dependencies
    e36f19d Buffer
    485cdd2 ISC mem, tests
    663dc24 Namespace clash
    2c44987 dynamic updates, edns, headers
    5d109b2 Disable HMAC
    79cae93 datafile, query desc
    663d814 net
    c867de6 isc_result_t
    651ee5d opt
    7d30804 isc_result_t
    58ad313 ISC linked list
    7b4da6d Info
    8079ebc Tests
    e3fb685 Tests
    2bb603a Tests
    297b23b Test
    c4e244b Test
    1caac35 Makefile
    e9f2aaa Coverage
    27af853 Fix typo in configure.ac
    521faa6 Badges
    8fa2ec4 LGTM
    75c89e5 COPR
* Fri May 15 2020 Jerry Lundström <lundstrom.jerry@gmail.com> 2.3.4-1
- Release 2.3.4
  * This release adds a workaround, thanks to patch from Petr Menšík, for
    building on systems with BIND 9.16. Also improves error handling by
    using thread-safe `strerror_r()` instead of `strerror()`.
  * Commits:
    88c3ef4 strerror
    1917f67 openSUSE Tumbleweed
    fd39641 AS_VAR_APPEND
    aeeef74 bind 9.16
    07732cd BIND, libcrypto, clang format
    08146e3 Add crypto library to checks
    e4307c2 Add checks to pass with BIND 9.16
    3f9aed3 Prepare check for bind 9.11/9.16 return types
* Wed May 06 2020 Jerry Lundström <lundstrom.jerry@gmail.com> 2.3.3-1
- Release 2.3.3
  * This release changes the behavior of `dnsperf` and `resperf` when it
    comes to TCP and TLS connections, and updates package building using
    COPR (thanks to patch from Petr Menšík (Red Hat)).
  * Connection reset or close are now treated as "try again" so that the
    run is finished and not aborted. As SIGPIPE might be received on usage
    of closed connections it's now blocked in `dnsperf` and handled as
    a fatal action in `resperf`.
  * Commits:
    62885ad SIGPIPE
    106c50e connection
    3ef0899 README
    61a3b1c COPR
    35efa27 COPR
    46b37a1 COPR
    5c126ae COPR
    1c51b76 Provide full URL in spec
    2a4dd0e Allow recreation of source archive
    931d6cc Do not require root for archive creation
* Fri Aug 23 2019 Jerry Lundström <lundstrom.jerry@gmail.com> 2.3.2-1
- Release 2.3.2
  * This release fixes a buffer overflow when using TSIG and algorithms
    with digests larger then SHA256, reported by Mukund Sivaraman. Also
    fix build dependencies for `sqrt()`.
  * Commits:
    e54aa58 Digest
    bca5d8d sqrt
    d9eaa5b Package
* Wed Jul 24 2019 Jerry Lundström <lundstrom.jerry@gmail.com> 2.3.1-1
- Release 2.3.1
  * After a report and additional confirming results the use of `poll()` in
    the network receive code for TCP and TLS has been removed. This `poll()`
    initially gave better results while testing in a docker container on
    it's loopback interface but when on physical networks it reduced
    performance to 1/12th, so it had to go.
  * Thanks to Brian Wellington (Akamai/Nominum) for the initial report and
    testing, and to Jan Hák (CZ.NIC) for testing and confirming the results.
  * Bugfix:
    - Fix check for having more DNS messages in the receive buffer for TCP
      and TLS
  * Commits:
    670db9c TCP/TLS receive
    b8925b2 recvbuf have more
* Wed Jul 17 2019 Jerry Lundström <lundstrom.jerry@gmail.com> 2.3.0-1
- Release 2.3.0
  * This release adds support for DNS over TCP and TLS which can be selected
    by using the mode option for `dnsperf` and `resperf`. The default server
    port used is now determined by the transport mode, udp/tcp port 53 and
    tls port 853.
  * Note that the mode option is different between the program because it was
    already taken for `resperf`.
  * `dnsperf` changes:
    - Add `-m` for setting transport mode, `udp` (default), `tcp` or `tls`
    - Add verbose messages about network readiness and congestion
  * `resperf` changes:
    - Add `-M` for setting transport mode, `udp` (default), `tcp` or `tls`
    - Add `-v` for verbose mode to report about network readiness and
      congestion
  * Commits:
    ffa49cf LGTM, SonarCloud
    4cd5441 TLS
    35624d1 TCP send, socket ready loop
    fbf76aa TCP support
    5988b06 Funding
* Mon Jan 28 2019 Jerry Lundström <lundstrom.jerry@gmail.com> 2.2.1-1
- Release 2.2.1
  * The commit pulled from a fork that used `inttypes.h`, instead of ISC
    internal types, missed to remove the old conversion specifier.
    This was reported and fixed by Vladimír Čunát.
  * Commits:
    9534ce1 remove visible "u" characters after numbers
* Mon Dec 03 2018 Jerry Lundström <lundstrom.jerry@gmail.com> 2.2.0-1
- Release 2.2.0
  * First release by DNS-OARC with a rework of the code to use autotools,
    semantic versioning 2.0 and bugfixes pulled from other's forks.
  * Bugfixes:
    - Fix infinite loop in argument parsing
    - Fix min/max latency summing for multithreaded runs
    - Fix calculation of per_thread socket counts
    - Fixes to queryparse
      - Mark correctly end of file
      - Support python3
      - Stop looping on end of file undefinitely
    - Fix compilation issues and work around missing `dns_fixedname_initname()`
    - Clang `scan-build` fixes
  * Other changes:
    - add "configure --with-bind" option
    - Handle bind library changes to HMAC (see #22) and other differences
      between versions
    - Workaround issue on FreeBSD (see #23)
    - Use `snprintf()` and OpenBSD's `strlcat()`
    - Add/update build dependencies for Debia, Ubuntu, CentOS, FreeBSD
      and OpenBSD
  * Commits:
    ae9bc91 Clang format
    b9bb085 CI, buildbot
    b84e41b Autotools, README, changelog
    a2e1732 License
    9dcb661 Remove $Id markers, Principal Author and Reviewed tags from the
            full source tree
    0677bf0 Use dns_fixedname_initname() where possible
    d8d4696 [master] add "configure --with-bind" option to dnsperf
    b71a280 Add deb based distros dependencies
    439c614 Replace custom isc_boolean_t with C standard bool type
    407ae7c Replace custom isc_u?intNN_t types with C99 u?intNN_t types
    c27afd4 Replace ISC_PRINT_QUADFORMAT with inttypes.h format constants
    6fdb2f7 Fix queryparse
    4909b78 README
    2782d50 README.md: Rectify link to software
    e31ddf4 fix calculation of per_thread socket counts
    3bd7fb4 Fix min/max latency summing for multithreaded runs
    2207e27 Fix infinite loop in argument parsing.
    3bfe97a Include the github URL; remove the bug reports section.
    0cee04a Add note about bug reports.
    62c4b32 add .gitignore
    c45f0be Initial import.
    149172b Initial commit