2026-06-10 Jerry Lundström

    Release 2.16.0

    This release updates funny classes/qtypes for the query classification
    indexer, updates pcap-threads to v4.2.0 and, thanks to Jens Finkhaeuser,
    fixes a 8 year old bug from a refactoring (sorry!).

    The query classification indexers funny class/qtype list has been updated
    to use the (semi-automatically updated) full list from IANA, which had
    not been updated for a while. So you'll see a lot less funny stuff now,
    no promises tho, it's DNS after all.

    With pcap-thread v4.2.0, DSC now supports reading link-type Linux cooked
    v2 (DLT_LINUX_SLL2) and has better handling when processing PCAPs.

    The priming query filter was incorrectly refactored to return true if it
    wasn't a priming query, this has been fixed so it once again return true
    for priming queries.

    Other changes are related to the migration to Codeberg, CI and
    documentation.

    28e6194 Copyright, known TLDs, IANA types
    b6670f3 Fix comparison; strcmp() is funny.
    9025a0a actions
    37dcd3c autoconf, funny qtypes, known TLDs
    c4c3cfd fix scan-build
    c9348b2 CI updates
    869b833 builds
    6fc068c Migrate to Codeberg
    66888e1 pcap-thread
    aed7568 proper fix gcov
    f7a8f40 fix gcov
    0f59561 pcap-thread v4.1.1
    387bef3 pcap-thread v4.1.0
    8fc8446 SPEC
    e1b79a9 SPEC
    1a324cd Mailing-list

2024-08-30 Jerry Lundström

    Release 2.15.2

    This releases fixes 3 issues detected by code analysis tools:
    - File not closed and memory not freed during error while loading known
      TLD file
    - https://github.com/DNS-OARC/dsc/security/code-scanning/22
      label buffer should be static
    - https://github.com/DNS-OARC/dsc/security/code-scanning/20
      unsigned difference expression

    855f037 CodeQL
    b00cb11 Stack
    c4d3634 Sonar
    26c3b9e Badges, fixes
    b4a9171 Workflow

2024-04-23 Jerry Lundström

    Release 2.15.1

    This release fixes client subnet indexer which overwrote the mask
    options during initialization so the conf option `client_v4_mask` and
    `client_v6_mask` was never used.

    Other changes:
    - Update documentation
    - Update builtin known TLDs based on PSL
    - Update copyright year

    d577a97 Copyright
    f71edff Known TLDs
    dedafdd Client mask
    8ef947c Doc

2023-08-09 Jerry Lundström

    Release 2.15.0

    This release fixes DNS parsing w.r.t. EDNS, implements better loop
    detection during name decompression and adds a lot of EDNS indexers
    and filters.

    Previously the DNS parser expected the additional records to come
    straight after the question section. Meaning that if the DNS packet
    had any answer or authority records, they would be parsed as additional
    records for the OPT record and EDNS information.

    Following new indexers has been added:
    - edns_cookie
    - edns_cookie_len
    - edns_cookie_client
    - edns_cookie_server
    - edns_ecs
    - edns_ecs_family
    - edns_ecs_source_prefix
    - edns_ecs_scope_prefix
    - edns_ecs_address
    - edns_ecs_subnet
    - edns_ede
    - edns_ede_code
    - edns_ede_textlen
    - edns_ede_text
    - edns_nsid
    - edns_nsid_len
    - edns_nsid_data
    - edns_nsid_text

    Following new filters has been added:
    - edns0-only
    - edns0-cookie-only
    - edns0-nsid-only
    - edns0-ede-only
    - edns0-ecs-only

    See man-page dsc.conf(5) for more information.

    Other fixes/additions:
    - Only parse entire DNS message if EDNS indexers are used
    - `dns_protocol`: Implement proper loop detection during decompression
    - `xmalloc`: Check return of `amalloc()` before using `memset()`/`memcpy()` because it's undefined behavior on null pointers

    8259f30 EDNS filters
    41f3b9a strtohex, nsid text
    a666c04 EDNS(0) Client Subnet
    b5164fe EDNS
    7cabfd9 EDNS0 parsing fixes and additional EDNS0 indexers.
    46b1797 memcpy/memset fixes
    8fd7b7a EDNS parsing
    cee2bf7 EDNS0 parsing, multi RR test
    a2c00c9 DNS compression loop detection
    9875a3e RR parsing

2023-06-15 Jerry Lundström

    Release 2.14.1

    Fixed a bug in TLD handling when using `tld_list`, it did not reset
    where it was in the QNAME when nothing was found and could therefor
    wrongly indicate something as a TLD.

    Also fixed a typo in the `dsc.conf` man-page.

    976589d GCOV
    c3afee4 TLD list, doc typo

2023-04-03 Jerry Lundström

    Release 2.14.0

    This release adds new configure option to control the file access to
    the output files, support for newer DNSTAP, improved DNSTAP message
    handling and updated Public Suffix List.

    - Fix #279: Add new conf options to control output file access:
      - `output_user`: set output file user ownership
      - `output_group`: set output file group ownership
      - `output_mod`: set output file mode bits
    - `dnstap`: Move DNSTAP essential attributes checks inside each type and customize them for that specific type
    - Update dnswire dependencies to v0.4.0
    - `encryption_index`: Add support for new DNSTAP DNS-over-QUIC socket protocol
    - Update builtin Public Suffix List (PSL)

    abfe245 DNSTAP
    da06317 Output file access
    af01a48 DOQ transport, PSL update

2023-02-10 Jerry Lundström

    Release 2.13.2

    Updated pcap-thread to v4.0.1:

    Fixed issue with `pcap_dispatch()` during non-threaded timed runs by
    checking packet timestamp and use `pcap_breakloop()` if the run
    should end.
    Based on reports, it looks like `pcap_dispatch()` won't stop
    processing if load is high enough even if documentation says "only
    one bufferful of packets is read at a time".

    Many thanks to Klaus Darilion @klaus3000 (NIC.AT) for the report
    and helping to track down the issue and test fixes!

    e7d92fe Fix COPR
    7ecf217 pcap-thread

2022-04-21 Jerry Lundström

    Release 2.13.1

    This patch release is mainly for build and packages where MaxMind DB
    library is preferred over the legacy GeoIP library.
    MaxMind has announced that the databases for GeoIP will be EOL May 2022
    and recommends switching to GeoIP2 databases.

    Also updated DSC's description, removing references to the now
    discontinued Presenter and pointing to dsc-datatool instead.

    d891e2c Package, description
    c23406c Optional GeoIP
    26dd506 GeoIP

2022-01-28 Jerry Lundström

    Release 2.13.0

    This release fixes a huge performance issue with hashing IPv6
    addresses, adds support for new DNSTAP messages types and protocols,
    and adds two new indexers.

    Thanks to a patch sent in by Ken Renard (@kdrenard) a rather huge
    performance issue related to hashing IPv6 addresses has been solved.
    Old code used a very incorrect assumption about addresses in general
    and while same way was used for IPv4, it didn't hit as hard as it did
    for IPv6.
    New code uses hashing functions on both address types and to quote
    the GitHub issue (by Ken):
    -"This performs about 5% better than what I did (51 sec versus 54 sec)
      for 5GB pcap file with nearly 50/50 split of IPv4 and IPv6 (3.7M/3.5M
      v4/v6 queries).
      Old inXaddr_hash() has been running for 75 minutes and is about 20%
      done. I say this is a winner!"

    Many thanks to Ken for pointing this out and supplying a patch!

    DSC now depends on dnswire v0.3.0 which includes new DNSTAP messages
    types and protocols that was recently added to DNSTAP's Protobuf
    definition.
    The new `UPDATE_QUERY` and `UPDATE_RESPONSE` messages types are
    now supported and are interpret as `AUTH_QUERY` and `AUTH_RESPONSE`.
    The new socket protocols for DOT, DOH and DNSCrypt are also supported
    and are interpret as TCP for indexers such as `ip_proto` and
    `transport`. To get stats on the encryption itself you can use the
    new indexer `encryption`.

    Two new indexers have been added:
    - `label_count`: Number of labels in the QNAME
    - `encryption`: Indicates whether the DNS message was carried over an
      encrypted connection or not, and if so over which. For example
      "unencrypted", "dot" (DNS-over-TLS), "doh" (DNS-over-HTTPS).

    Other changes:
    - `inX_addr`: Rework structure, separate IPv4 and IPv6 addresses
    - Fix some DNSTAP tests
    - `transport_index`: Fix typo in code documentation

    37df703 DNSTAP update, encryption indexer
    d27171f Label count indexer
    6932247 Adding labellen indexer which counts the number of labels in a DNS message
    68cc9c7 New IP hashing

2022-01-13 Jerry Lundström

    Release 2.12.0

    This release adds a new conf option `tld_list` to control what DSC
    considers are TLDs, and a script to convert the Public Suffix List to
    this format (see `man dsc-psl-convert` for more information).

    For example, using this option will allow DSC to gather statistics on
    domains like `co.uk` and `net.au` that would otherwise be counted as
    `uk` and `au`.

    The release also updates the man-pages, clarifying how to use multiple
    `interface` and other similar options. And removes the deprecated cron
    upload scripts.

    e779a87 Remove upload scripts
    2880f93 PSL TLD list
    ea04022 Update Copyright and known TLDs
    5cbc7a4 Output format
    b7e6c35 Doc
    e66dae4 dh_auto_test
    6a3e817 debhelper
    89d033f Bye Travis
    fa1c179 Mattermost

2020-10-20 Jerry Lundström

    Release 2.11.2

    This release fixes a bug in `asn_indexer` that didn't enabled the usage
    of MaxMindDB after successful initiation. Other changes include a typo
    fix in `configure` and a lot of coverage tests.

    395b11a Travis, configure
    ffea9ed Tests
    8b0bebd Tests
    09f8174 Config tests
    d1514d4 Coverage
    66b018c Coverage, ASN indexer

2020-08-18 Jerry Lundström

    Release 2.11.1

    This release fixes a 17-year old code cut&paste mistake in the
    classification indexer, until now it's been classifying funny query
    types based on the query class. This fix was sent in by Jim Hague
    (Sinodun), thanks Jim!

    Other changes are based on code analysis reports and setup for code
    coverage.

    8d4763c Correct funny-qtype classification.
    a1dd55e getline
    29bd143 Coverage
    685e504 SonarCloud
    f759515 Badges

2020-06-01 Jerry Lundström

    Release 2.11.0

    This release updates the built in known TLDs table and adds the optional
    configuration option `knowntlds_file` to, instead of using the built in
    table, load the data from a file.

    If compiled with only MaxMindDB support then ASN and Country indexer
    would complain (and exit) that no database has been specified.
    This release changes the behavior to match that of GeoIP support,
    making it possible to run without specifying a database.

    Other changes:
    - Fix compile warnings
    - COPR packaging fixes
    - `country_indexer`: Fixed typos in log messages (was copied from ASN)
    - Fix issues and false-positives reported by newer version of scan-build

    Commits:
    e937d1 COPR
    1382370 country, asn
    423a813 scanbuild
    2571b97 Compile warnings
    4f69447 Known TLDs

2020-05-07 Jerry Lundström

    Release 2.10.0

    This release adds new configuration options to `dnstap_unixsock` to
    control ownership and permissions for the DNSTAP socket file.

    Other fixes:
    - Unlink the DNSTAP socket file if an error during initialization occur
    - Do hard exit in forks to not run `atexit()` (which will unlink the
      DNSTAP socket file)

    Commits:
    9d1d49a fork
    733b286 DNSTAP socket

2020-04-02 Jerry Lundström

    Release 2.9.1

    This release fixes a few bugs, removes a lot of the debug messages
    about DNSTAP and removes GeoIP from openSUSE/SLE packages as it has
    been deprecated on those platforms.

    Changes:
    - `daemon`: Fix bug with listening for SIGINT when in foreground mode
    - `dnstap`:
      - Fix #217: Unlink UNIX socket on exit if successfully initiated
      - Fix startup bug, `exit()` if unable to initialize
      - Fix #220:
        - Remove/hide a lot of debug messages and the printing of the DNSTAP message
        - Clarify a lot of the info and error messages
        - Prefix all DNSTAP related messages with `DNSTAP: `
    - Fix compile warnings and include headers when GeoIP is missing
    - `asn_indexer`: Fix bug, said unknown IPv4 when it was IPv6

    Commits:
    08bad5b DNSTAP debug
    1232264 LGTM
    589ea7a GeoIP, asn indexer
    4fea0d2 sigint, DNSTAP UNIX socket, DNSTAP init

2020-03-20 Jerry Lundström

    Release 2.9.0

    This release adds support for receiving DNS messages over DNSTAP along
    with documentation updates and eliminated compiler warnings.

    To enable DNSTAP support, install dependencies (check `README.md`) and
    run configure with `--enable-dnstap`.

    New configuration options:
    - `dnstap_file`: specify input from DNSTAP file
    - `dnstap_unixsock`: specify DNSTAP input from UNIX socket
    - `dnstap_tcp`: specify DNSTAP input from TCP connections (dsc listens)
    - `dnstap_udp`: specify DNSTAP input from UDP connections (dsc listens)
    - `dnstap_network`: specify network information in place of missing DNSTAP attributes

    Other changes:
    - Add documentation about extra configure options that might be needed for FreeBSD/OpenBSD
    - Fix compile warnings on FreeBSD 11.2
    - Fix compile warning `snprintf()` truncation
    - Packaging updates

    Commits:
    60e6950 DNSTAP
    af0417b README
    1f1b489 COPR, spec
    435e136 Package
    3f24feb FreeBSD 11 compatibility
    563b986 Funding

2019-04-23 Jerry Lundström

    Release 2.8.1

    Added all missing config options for the response time indexer:
    - `response_time_mode`
    - `response_time_bucket_size`
    - `response_time_max_queries`
    - `response_time_full_mode`
    - `response_time_max_seconds`
    - `response_time_max_sec_mode`

    Commits:
    36f0280 Response time config

2019-02-11 Jerry Lundström

    Release 2.8.0

    This release brings an new indexer `response_time` (funded by NIC.AT!),
    support for MaxMind DB (GeoIP2) and an option to set the DNS port.

    The new indexer `response_time` can track queries and report the time
    it took to receive the response in buckets of microseconds or in
    logarithmic scales (see `response_time_mode`). It will also report
    timeouts, missing queries (received a response but have never seen the
    query), dropped queries (due to memory limitations) and internal errors.

    Here is an example output of log10 mode:

    <array name="response_time" dimensions="2" start_time="1478727151"
        stop_time="1478727180">
      <dimension number="1" type="All"/>
      <dimension number="2" type="ResponseTime"/>
      <data>
        <All val="ALL">
          <ResponseTime val="100000-1000000" count="77"/>
          <ResponseTime val="10000-100000" count="42"/>
          <ResponseTime val="1000-10000" count="3"/>
          <ResponseTime val="missing_queries" count="1"/>
        </All>
      </data>
    </array>

    New configuration options:
    - `asn_indexer_backend`: Control what backend to use for the ASN indexer
    - `country_indexer_backend`: Control what backend to use for the
      country indexer
    - `maxminddb_asn`: Specify database for ASN lookups using MaxMind DB
    - `maxminddb_country`: Specify database for country lookups using
      MaxMind DB
    - `dns_port`: Control the DNS port
    - `response_time_mode`: Set the output mode of the response time indexer
    - `response_time_bucket_size`: The size of bucket (microseconds)
    - Following options exists to control internal aspects of `response_time`
      indexer, see man-page for more information:
      - `response_time_max_queries`
      - `response_time_full_mode`
      - `response_time_max_seconds`
      - `response_time_max_sec_mode`

    Fixes:
    - Add LGTM and fix alerts
    - Update `pcap_layers` with fixes for `scan-build` warnings
    - Fix port in debug output of DNS message, was showing server port
      on responses

    Commits:
    f38a655 License
    48cd44e Man-page, interface any, response time
    8b9345f LGTM Alert
    e57a013 DNS port
    38aa018 Response time statistics
    7a60d53 Cleanup
    5c45ce2 Copyright
    0dc8a3c MaxMind DB (GeoIP2)
    473387b LGTM, README, packages, scan-build

2018-08-14 Jerry Lundström

    Release 2.7.0

    Add support for Linux "cooked" capture encapsulation (`DLT_LINUX_SLL`).

    Fixes:
    - `grok_question()`: Remove usage of `strcpy()`
    - `pcap_tcp_handler()`: Use `snprintf()`
    - `printable_dnsname()`: Use `snprintf()`
    - Fix CID 104450, 186871

    Commits:
    41d59ac man-page HTML
    476d6ed pcap_layers, CID
    747131b Configure options
    43c9ad0 DLT_LINUX_SLL
    8a48667 Support the linux cooked sll frame
    bd4a94f Fix CID 104450

2017-08-21 Jerry Lundström

    Release 2.6.1

    Compatibility fixes for FreeBSD 11.1+ which is now packing `struct ip`.

    Commits:
    c0cd375 Handle compile warnings and FreeBSD's packing of structs
    c528ccb Code formatting and moved external code to own directory

2017-07-11 Jerry Lundström

    Release 2.6.0

    Two new DNS filters and configuration for client subnet netmask has been
    added thanks to pull request submission from Manabu Sonoda (@mimuret), see
    `man 5 dsc.conf` for more details.

    New DNS filters:
    - `servfail-only`: Count only SERVFAIL responses
    - `authentic-data-only`: Count only DNS messages with the AD bit is set

    New configuration:
    - `client_v4_mask`: Set the IPv4 MASK for client_subnet INDEXERS
    - `client_v6_mask`: Set the IPv6 MASK for client_subnet INDEXERS

    Fixes:
    - Set `_DEFAULT_SOURCE`, was giving compile warnings on some platforms
    - Update `pcap-thread` to v2.1.3 for compatibility fixes
    - Fix bug where extra `"` would be OK in configuration
    - Eat all white-space between tokens in configuration
    - Minor documentation corrections

    Commits:
    8a20421 Config parse quote/whitespace bug
    4eb91d8 PR review and corrections
    1dcdbc1 add supports statistics for DNSSEC validation resolver - SERVFAIL
            DNS message filter - AD bit DNS message filter - set custom mask
            for ClientSubnet
    7c4ce7e Update pcap-thread to v2.1.3
    f5d152c Corrected date
    04f137d Prepare SPEC for OSB/COPR
    402c242 Config header is generated by autotools

2017-03-29 Jerry Lundström

    Release 2.5.1

    Various compatibility issues and a possible runtime bug, related to
    pcap-thread, fixed.

    Commits:

    5ed03e3 Compat for OS X
    8605759 Fix compiler warnings
    5fbad26 Update pcap-thread to v2.1.2
    47ed110 Update pcap-thread to v2.1.1

2017-03-02 Jerry Lundström

    Release 2.5.0

    Resolved memory leaks within the IP fragment reassembly code that was
    reported by Klaus Darilion (NIC.AT) and added config option to control
    some parts of the fragment handling.

    Fixes:
    - Add `pcap_layers_clear_fragments()` to remove old fragments after
      `MAX_FRAG_IDLE` (60 seconds)
    - Use correct alloc/free functions for dataset hash
    - Fix spacing in dsc.conf(5) man-page

    New config option:
    - `drop_ip_fragments` will disable IP fragmentation reassembling and
      drop any IP packet that is a fragment (even the first)

    Commits:

    eaee6c0 Drop IP fragments
    3ebb687 Issue #146: Fix leak in fragment handling
    9a5e377 Use correct alloc/free
    35f663c Fix #107: add const

2017-01-27 Jerry Lundström

    Release 2.4.0

    Since there have been a few major issues with the threaded capturing code
    it is now default disabled and have to be enabled with a configure option
    to use: `./configure --enable-threads ...`

    A lot of work has been done to ensure stability and correct capturing,
    as of now `dsc` is continuously running on the testing platforms with
    simulated traffic and tests are performance every 5-15 minutes:

      https://dev.dns-oarc.net/jenkins/view/dsctest/

    With the rewrite of the config parser to C it was missed that Hapy allowed
    CR/LF within the values of the options.  Changing the C parser to allow
    it is a bit of work and having CR/LF within the value may lead to other
    issues so it is now documented that CR/LF are not allowed in config option
    values.

    Fixes:
    - The `-T` flag was just controlling pcap-thread usage of threads, it now
      controls all usage of threads including how signals are caught.
    - Fix program name, was incorrectly set so it would be reported as `/dsc`.
    - Use thread safe functions (_r).
    - Handle very long config lines by not having a static buffer, instead
      let `getline()` allocate as needed.
    - Use new activation in pcap-thread to activate the capturing of pcaps
      after the initial interval sync have been done during start-up.
    - Use factions of second for start-up interval sync and interval wait.
    - Fix memory leaks if config options was specified more then once.
    - Use new absolute timed run in pcap-thread to more exactly end capturing
      at the interval.
    - Fix config parsing, was checking for tab when should look for line feed.
    - Exit correctly during pcap-thread run to honor `dump_reports_on_exit`.
    - Use 100ms as default pcap-thread timeout, was 1s before but the old code
      used 250ms.
    - Various enhancements to logging of errors.

    New config options/features:
    - `pcap_buffer_size` can be used to increase the capture buffer within
      pcap-thread/libpcap, this can help mitigate dropped packets by the
      kernel during interval breaks.
    - `no_wait_interval` will skip the interval sync that happens during
      start-up and start capturing directly, the end of the interval will
      still be the modulus of the interval.
    - `pcap_thread_timeout` can be used to change the internal timeout use
      in pcap-thread to wait for packets (default 100ms).
    - Log non-fatal errors from pcap-thread w.r.t. setting the filter which
      can indicate that the filter is running in userland because lack of
      support or that it is too large for the kernel.

    Special thanks to:
    - Anand Buddhdev, RIPE NCC
    - Klaus Darilion, NIC.AT
    - Vincent Charrade, Nameshield

    Commits:

    ee59572 Fix #111, fix #116: Update pcap-thread to v2.0.0, remove debug
            code
    64befef Update copyright year
    40a1fb4 Fix #139: Use 100ms as default pcap-thread timeout
    2a07185 Fix #137: Graceful exit on signal during run
    f1b3ec3 Issue #116: Try and make select issue more clear
    950ea96 Fix #133: Return from `Pcap_run()` on signal/errors
    667cc91 Issue #116: Add config option pcap_thread_timeout
    3c9e073 Notice if non-fatal errors was detected during activation
    4ea8f54 Fix #108: Document that CR/LF are not allowed within configuration
            line
    9fda332 Check for LF and not tab
    15a1dc0 Use pcap-thread timed run to interface
    1e98f8b Fix potential memory leaks if config options specified more then
            once
    a9b38e9 Add missing LF and indicate what config option was wrong if
            possible
    f8a2821 Use fractions of seconds for both start up interval sync and
            timed run, always adjust for inter-run processing delay
    f47069a Fix #121: Update to pcap-thread latest develop
    fc13d73 Issue #116: Feature for not waiting on the interval sync
    c832337 Fix #122: Update pcap-thread to v1.2.3 for fix in timed run
    4739111 Add `pcap_buffer_size` config option
    7d9bf90 Update pcap-thread to v1.2.2
    ef43335 Make threads optional and default disabled
    c2399cf getline() returns error on eof, don't report error if we are
    5c671e6 Clarify config error message and report `getline()` error
    8bd6a67 Fix #114: Handle very long lines
    47b1e1a Use _r thread safe functions when possible
    0f5d883 Update daemon.c
    f18e3ea Update doc, -T now disables all usage of threads
    57aacbe Honor the -T flag when installing signal handlers

2016-12-22 Jerry Lundström

    Release 2.3.0

    Rare lockup has been fixed that could happen if a signal was received
    in the wrong thread at the wrong time due to `pcap_thread_stop()`
    canceling and waiting on threads to join again. The handling of signals
    have been improved for threaded and non-threaded operations.

    A couple of bugfixes, one to fix loading of GeoIP ASN database and
    another to use the lowest 32 bits of an IP address (being v4 or v6)
    in the IP hash making it a bit more efficient for v6 addresses.

    New functionality for the configure option `local_address`, you can now
    specify a network mask (see `man 5 dsc.conf` for syntax).

    Commits:

    e286298 Fix CID 158968 Bad bit shift operation
    c15db43 Update to pcap-thread v1.2.1
    1ac06ac Move stopping process to not require a packet
    597dd34 Handle signals better with and without pthreads
    bcf99e8 Add RPM spec and ACLOCAL_AMFLAGS to build on CentOS 6
    667fe69 fixed load geoIP ASN database from config-file
    e1304d4 Fix #97: Add optional mask to `local_address` so you can
            specify networks
    5dae7dd Fix #96: Hash the lowest 32 bits of IP addresses

2016-10-15 Jerry Lundström

    Release 2.2.1

    Two bugfixes with one being critical (caused segfault, sorry for that)
    - `pcap-thread` had an issue that threads where not closed on exit
      of `pcap_thread_run()`, this only created many threads in my testing
      environment but reports came in that it segfaulted.
    - When started `dsc` (not in debug mode) it will wait to align with
      the time, that did not get update with the configurable interval
      change.

    Commits:

    6e3654b Fix #90: Update pcap-thread to v1.1.2 to fix a segfault issue
    c9350a3 Fix #92: Honor configured interval when aligning
    acaf617 minor typo

2016-10-10 Jerry Lundström

    Release 2.2.0

    Some big changes in this release are the removal of the C++ configure
    parser library Hapy and the addition of pcap-thread to (hopefully)
    handle capturing packet in a correct and efficiant way.

    With that addition of pcap-thread comes new runtime options:
    - `-m` sets monitor mode on interfaces
    - `-i` sets immediate mode on interfaces
    - `-T` disable the usage of threads in pcap thread

    Bugfixes:
    - d95190a fixes a small memory leak in `Pcap_init()` and a possible
      bug where `-p` might never been used because of not being declared
      external.
    - 55e1056 added check for `netinet/ip_compat.h` for use in
      `src/pcap_layers/pcap_layers.c`.

    Commits:

    0a1ce91 Fix coverity issues
    5a1d410 Delete useless line (related to mayasd#84)
    443db3e Check if the file was previously linked but not yet unlinked
            (Tim CLERC.IM)
    02a7621 Fix #82: Oops, `pcap_thread_set_filter()` had changed during
            development and missed this
    2a8aa29 Move definition of token struct inside and changed name to not
            conflict on FreeBSD
    43da964 Fix #9: Implement conf parser in C and remove dependency of
            Hapy and C++
    9f46f0d Update pcap thread to version 1.1.1
    d95190a Use pcap thread, new options `-miT` and possible bugfix for
            `-p` and a small memory leak fix
    55e1056 Fix #77: Check for netinet/ip_compat
    4e120f9 Fix travis script, only expand dir.

2016-06-28 Jerry Lundström

    Release 2.1.1

    Bugfixes:
    - 22688c1 Fix pcap/select last_ts
      In some cases `select` will return the fd set as if there are packets
      to read but there aren't. That would case the last timestamp to not
      advance and the `Pcap_run` loop to never finish.
      This fix add a check on packets captured and sets last timestamp if
      none where caught.

    Commits:

    d115b3f Correct configuration, missing `;`.
    22688c1 Fix pcap/select last_ts
    b6d3dd8 Fix package dependencies.
    c8979c4 Add debian/ubuntu package files

2016-06-09 Jerry Lundström

    Release 2.1.0

    This release brings a couple of new features, the ability to change
    the interval for which DSC writes out the statistics files and a new
    indexer for AS numbers.
    There was also an issue detected in Ubuntu 16.04 when reading pcap files
    would result in doubling the statistics if running in daemon mode.
    Looking at the strace it might be a issue with the kernel, libc, pcap or
    a combination that results in the open file handle to reset and essentially
    read all the data twice.

    Credits:
    - Klaus Darilion NIC.AT for interval changes and AS number indexer.

    Commits:

    8ab8632 Rewrote ASN indexer to remove the need for malloc/free. Removed
            the need to malloc ipstr. Use same unknown tags as country
            indexer.
    89d4984 add ASN index: maps src-IP to AS number using GeoIP ASNum DB
    8d5c6bf Fix #14: Remove ncap
    c0f00e7 Add test for statistics_interval
    cf9ede2 Add checks and documentation for statistics_interval
    93eeecd new config option 'statistics_interval' (defaults to 60s)
    a28f5d4 Fix #62: Do not go into daemon mode if reading offline files
    2bc1abb Add information about puppet module

2016-06-01 Jerry Lundström

    Release 2.0.0

    This release brings a major update to the DSC software with the separation
    of the Collector and the Presenter, this repository will only include
    the Collector from now on.

    Please read UPGRADE.md for information on upgrading from previous version.

    Major changes / additions are:
    - Use of Automake and rework of the Makefiles
    - Conform to FHS 3.0
    - Man-pages (man dsc, man dsc.conf)
    - Continuous Integration testing using Travis-CI
    - Compatibility testing on Debian, CentOS, FreeBSD and OpenBSD
    - Use of Coverity Scan to find defects
    - JSON output format, see output_format in dsc.conf(5).
    - IPv6 support in country indexer and libgeoip is now runtime
      configurable, see geoip_v4_dat / geoip_v6_dat in dsc.conf(5).
    - Signal handling and optional write reports on exit, see
      dump_reports_on_exit in dsc.conf(5).
    - Upload scripts are deprecated

    Credits:
    - Klaus Darilion NIC.AT for GeoIP IPv6 patch.
    - Michael Braunoeder NIC.AT for NXDOMAIN filter patch.
    - L-root for overflow bugfix IP fragments.
    - McStork for JSON output patch.

    Changes since release candidate:

    1be5148 Fix #57: Flush the pid file to write it out and add test for
            pid file
    0f79aa0 Use Semantic Versioning 2.0.0 semver.org

2016-05-10 Jerry Lundström

    Release 2.0.0-rc.1

    69ef9b4 Add -v to display version
    7e5b403 Fix defects
    0f64128 Add badges
    f795ed3 Old automake needs AM_PROG_CC_C_O
    27ae870 Fix #4: Remove old indexers, update indexers and filters
            documentation, update authors.
    d873411 Fix #38: Use locking to ensure we do not overwrite PID file
    800fe83 Fix #35: GeoIP configurable. Fix debug and syslog in country
            indexer. Add documentation and config example.
    a1dcdf1 Avoid the checks for newer .dat files, this may have performance
            impacts.
    bb9a059 Add IPv6 support to country indexer and add some failure handling
    03e16a8 Include config.h as this defines HAVE_LIBGEOIP. Thus, the geoip
            code was not used yet.
    7808d2e New dsyslog/dsyslogf/dfprint macro. Change fprintf to dfprintf.
    fe47288 Fix #34: Create man-pages.
    7a9b3c3 Fix #33: Handle most signals, new config option to dump reports
            on exit.
    4753eda Add a filter to track NXDOMAIN responses
    1565952 Add info about DSP
    05ef699 Fix make test in dist.
    68bdc9b No default interface in conf example
    2be98be Correct libexec directory. Install etc files in subdirectory.
    319ac4e Only build dist. Build in a build directory.
    96e0e73 Fix #16: conform to FHS. Automake tweaks.
    bbcca74 Fix #23: Add missing changes for master branch
    197ad52 No need to install autoconf/automake in Travis
    eb95ee1 Add license to cron scripts
    4f62420 Fix/add make dist and try it in Travis
    ac4c634 Reconstruct repository to move out presenter. Update licenses.
            Use pcap_layers as a git submodule. Use automake/autoconf.
    89c7f4c Import patched pcap_layers.c code with buffer overflow bugfix
    2787db2 Only wait a certain number of times for the files to appear
    b5d911d Add the first test, simple run and compare gold files
    32fd807 Fix #13: Document ability to read packets from pcap files
    eee217e Rework some of the Makefiles based on some of the patches found in
            the Debian packages
    7a2a67e Fix #12: Add hash for dataset names and check for duplicates
    ed1eba9 Add base64 for certain non-printable characters in JSON output and
            remove extra new-line
    580d543 Add output_format and JSON structure description to documentation
    d2d1ed2 Fix #3: Reworked JSON output format implementation
    2e2f90f Give option for additional output JSON/Extended JSON
    a23b6af Ignore generated files
    f4214f3 Add Travis CI. Remove old TODAY/tar commands. Add ifndef/def to
            all .h files. Fix issue with arpa/nameser_compat.h on OpenBSD by
            checking for the header file and only including it if it exists.
            Rename configure.scan to configure.ac and change contact info and
            version. Update configure using autoconf 2.69 on Ubuntu 14.04 LTS.
            Set CC/CPP/CXX/CXXFLAGS in Makefile found by configure.

2016-01-11 Duane Wessels

    added dfprintf() macro to improve code readability and avoid
    multi-line if (debug_lvl) fprintf(...) statements.

2016-01-11 Duane Wessels

    Commenting out ancount and nscount to silence compiler warnings
    about unused variables.

2016-01-11 Duane Wessels

    Patch from John Heidemann relating to TCP reassembly
    - fix for multiple DNS messages per TCP connection that span
      multiple segments
    - some editorial code changes (== to >=)
    - additional debugging statements

2016-01-11 Duane Wessels

    Minor fix: debugging statement wasn't protected with debug_flag
    check. (thanks John H).

2015-12-23 Duane Wessels

    add prototype for dns_message_handle()

2015-12-23 Duane Wessels

    Experimental feature to drop "received responses" and "sent queries"
    since DSC is generally used to monitor authoritative servers that,
    under normal operation, never receive responses nor send queries.
    Currently protected with #ifdefs.

2015-12-15 Duane Wessels

    Oops, forgot to set dns_message->server_ip_addr for new server_addr
    indexer

2015-11-23 Duane Wessels

    removing one level of the "dsc/dsc" top directory

2015-11-11 aqadeer

    In pcap.c pcap_setnonblock doesn't accept captured files anymore and
    must need a device from where it could do live capture.  For offline
    files to work, a simple check is added to by-pass this porblem.

2015-11-05 Duane Wessels

    Added a 'server' indexer.  This records the server (query destination)
    IP address.

2015-11-05 Duane Wessels

    Renamed "client_ipv4" to "client_ip" because it supports v4 and v6

2015-11-04 Duane Wessels

    Update copy of pcap_layers.c from https://github.com/wessels/pcap_layers

2015-11-04 Duane Wessels

    avoid "void *" pointer arithmetic (Yoshitaka Aharen)

2015-10-09 Duane Wessels

    bugfix: handle receiving TCP dns length prefix out of order.

    A user reported that when a TCP segment containing only the DNS message
    length is received *after* the message it references (i.e., out-of-order),
    then DSC goes into a 100% CPU loop.  Confirmed that the code doesn't work
    correctly when dnslen comes out-of-order, but I wasn't able to easily
    reproduce the 100% CPU bug.

    The fix is to add a "dnslen_bytes_seen_mask" variable that tracks which
    of the two dnslen bytes we've seen.  Once both bytes have been seen,
    then we can proceed to reassembling the message buffer.

2015-10-09 Duane Wessels

    cosmetic: rename ipv4 to ip4 to be consistent with ip6

2015-10-09 Duane Wessels

    Regarding recent change to add pcap_layers library, forgot to add it
    to Makefile.in (vs Makefile) before committing.

2015-10-09 Duane Wessels

    Integrated https://github.com/wessels/pcap_layers with DSC collector.
    The DSC code now includes a copy of the pcap_layers library, which does
    a better job of extracting the layers of a pcap packet.  In particular,
    it does IP fragmentation reassembly, which is important for DSC and
    RSSAC-002. At this time the DSC code still does TCP reassembly, however.

    Removed USE_IPV6 ifdefs.  IPV6 support is now always compiled.

2015-10-08 Duane Wessels

    Removing "DMC *dns_message_callback" because there is only one that
    would ever be used. The callback layer of indirection makes the code
    a little confusing, and also this change is in preparation for bringing
    in a third-party pcap layer handling library which will work slightly
    differently.

2015-10-08 Duane Wessels

    The "ip_message" code has not been in use since a commit back in 2012.
    But the code lingered, until now.

2015-02-25 Duane Wessels

    User reported a concern with the way dsc-xml-extractor.pl called
    the operating system 'mv' command.  It has been replaced with Perl's
    File::Copy::mv().

2013-03-19 Duane Wessels

    Fixed a bug in TCP reassembly when the DNS length field was
    split between two segments.

2012-08-27 Sebastian Castro

    Added 'tc_bit' indexer and dataset to track the frequency
    of responses having the TC bit set.  Useful with DNSSEC
    signed zones.

2012-02-29 Duane Wessels

    Added 'qr_aa_bits' dataset and graph.  It shows the distribution
    of QR/AA values in received messages and may be helpful in
    detecting reflector attacks targeting your name server.

2010-11-29 Duane Wessels

    The dnssec_qtype and dns_ip_version plots were not working due
    the presence of 'dataset' attributes in their definitions.  Also
    fixed the chaos plot.

2010-11-04 Duane Wessels

    Added NSEC3 record type to the extractor.

2010-09-14 Duane Wessels

    A fix to put pcap interfaces into non-blocking mode, which is
    important when reading from multiple interfaces.

2010-08-13 Alexander Mayrhofer

    Added "country_index" to the collector which is an index based
    on country as returned by the GeoIP library.  configure attempts
    to learn if you have GeoIP installed.

2010-08-13 Peter Koch

    Some minor fixes to the collector that allow it to read from
    pcap files on disk, rather than live packets from an interface.

2010-06-02 Henrik Kramsh?j

    Improvements for OpenBSD compatibility

2010-05-01 Duane Wessels

    Added NSEC3 to DNSSEC query types

2010-02-22 Duane Wessels

     Collector bug fixed: USE_IPV6=1 was not passed to .c
     files, which resulted in different-sized data structurs
     and crashes on CentOS.

2009-12-10 Duane Wessels

    Added "priming_queries" and "priming_responses" datasets in
    preparation for root zone signing.

2009-11-11 Duane Wessels

    On the presenter some of the "accum" graphs stopped working
    due to recent rewrites.  These should now be working again.

2009-10-12 Duane Wessels

    The presenter debugging is now configurable via dsc-grapher.cfg.

2009-08-14 Duane Wessels

    In the presenter, there have been some significant changes to
    the perl modules so that they can be used in command line
    (ie non-CGI) utilities, both for creating graphs and for
    reading data.  Most of these changes are purely internal.
    However, you may need to update your dsc-grapher.pl CGI
    program to be like presenter/grapher/dsc-grapher.pl.sample
    in the source distribution.

2009-04-15 Duane Wessels

    In the presenter's refile-and-grok.sh script, note that in
    some environtments it is useful to skip NODEs that don't
    have an incoming directory because they might have been
    "grokked" elsewhere and then rsync'd to you.

2009-02-27 Duane Wessels

    In the collector it is now necessary to include <stdlib.h>
    and <stdio.h>.   Not sure why it wasn't necessary before.
    Perhaps due to 2009-01-26 Hapy library upgrade.

2009-02-19 Duane Wessels

    In the collector, fixed some 64-bit free disk space calculations
    with casting.

2009-01-26 Duane Wessels

    Upgraded to more recent version of Hapy parsing library.

2008-12-31 Duane Wessels

    In the collector, changed the value of pcap_open_live() because
    we always try to read from all interfaces after select() returns.
    If we have multiple interfaces and one of them is quiet, and
    the timeout is too large, we'll drop packets on the other
    interface while waiting for the first to time out.

    Also added a pseudo-dataset that reports on pcap packets captured
    and dropped.


2008-12-02 Duane Wessels

    Grapher now preserves the order of the server list given in
    dsc-grapher.cfg.

2008-11-22 Duane Wessels

    Added some collector indexers and datasets for 2nd and 3rd level
    domains.

2008-10-02 Duane Wessels

    Made the 'no extractor for $dataset' error message non-fatal.
    Now, the unknown dataset will just be skipped and the remaining
    ones will be processed.

2008-09-30 Duane Wessels

    In the presenter, account for the possibility that the collector's
    clock is not in sync.

2008-09-18 Elmar Knipp

    Found bug in upload script where a $PROG.out prevents removal
    of a $YYYYMMDD directory.

2008-09-16 Duane Wessels

    New presenter feature: Node Merging.  Now the DSC grapher can
    automatically "merge" multiple nodes so that they appear as
    one.  For example instead of this dsc-grapher.cfg line:

        server S N1a N1b

    you can merge nodes "a" and "b" with this line:

	server S N1=N1a,N1b

    This feature is also useful for just renaming a node if you
    want it to be displayed as a different name than the directory
    where its files are.

2008-09-15 Duane Wessels

    On the collector, changed the sample config and upload scripts
    to use /usr/local/dsc/run as the default run_dir (was formerly
    /usr/local/dsc/var/run/).

2008-08-21 Duane Wessels

    Added an EDNS bufsiz indexer so we can collect buffer sizes
    advertised by clients.

2008-08-12 Duane Wessels

    Attempt to improve portability (on Solaris) by checking for
    libresolv, libnsl, and libsocket.  Also check for statvfs() vs
    statvs() in configure.

2008-07-29 Duane Wessels

    Updates to collector/cron/upload-rsync.sh so that it behaves
    better with new date-based directories on both collector and
    presenter.

2008-06-27 Duane Wessels

    Added a source port range dataset (for about-to-be-announced
    vulnerability that can be mititgated by improving source port
    randomness).

2008-04-22 Duane Wessels

    Added ./configure script for presenter/dsc code.

2008-04-22 Duane Wessels

    Added support for capturing NCAP data streams.

2008-01-09 Duane Wessels

    Changed the location of the presenter's ".dat" files.  Previously
    there were stored in a directory such as 20080109/qtype/qtype.dat
    and now they will be moved one directory up and stored as
    20080109/qtype.dat.

    The source distribution includes a script found at
    presenter/grapher/update-dat-file-locations.sh that will traverse
    the /usr/local/dsc/data directory and move all the .dat files
    one level up.

    When upgrading to this version of DSC you should first stop the
    refile-and-grok.sh cron job, install the DSC software, and then
    run the update-dat-file-locations.sh script (after reading it).

2008-01-09 Duane Wessels

    Data passed from collector to presenter is now contained in a
    single XML file, rather than one XML file per dataset.  This
    should significantly reduce filesystem pressure (i.e., 20x fewer
    files to be stored and sent) on both sides.

2008-01-07 Duane Wessels

    The collector now stores to-be-uploaded XML files in
    date-named subdirectories.  This reduces filesystem pressure
    in the event that the collector cannot communicate with the
    presenter for an extended period of time.

    To accomodate this change, the upload-prep.sh script has been
    replaced with a Perl version, named upload-prep.pl.  After
    installing DSC you should change your cron job to use the new
    script.

2008-01-04 Ken Keys

    Previously, a child was forked for each collection interval.
    Memory allocated for collected data was freed by simply exiting
    the child.  But this left no way to preserve any data across
    intervals.

    Now, interval collectors do not fork.  To avoid the tedious,
    slow, and error-prone nature of normal malloc-and-free memory
    management, we instead store non-persistent data in memory
    allocated from an "arena", which can be freed quickly and safely.
    We don't need to free individual allocations, but we do need
    to reset some pointers to allocated memory.

    TCP resets are now properly handled and TCP state is freed
    if a connection has been idle for too long.

2008-01-04 Duane Wessels

    The collector configuration (dsc.conf) has a new 'minfree_bytes'
    directive.  If the amount of free disk space on dsc's partition
    falls below this limit, dsc will not write any XML files -- that
    data will be lost.

    The default value is 5 MB.

2007-12-14 Alexander Gall

    Added a 'dns_ip_version' indexer so that we can track DNS messages
    sent over v4 and v6.

2007-12-04 Duane Wessels

    Fixed a collector bug when listening on multiple interfaces of
    different datalink types (e.g., eth0 and lo).

2007-11-26 Duane Wessels

    Added a 'hide_nodes' feature to dsc-grapher.cfg.  If 'hide_nodes'
    is given, then the navigation menu will not display the nodes
    underneath a server.  Note, however, that knowledgeable users
    could still view individual node data by manually if they know
    the names by specifying it in the URL query terms.

2007-10-09 Duane Wessels

    Changed the presenter to not use "data URIs" by default.  Now
    Internet Explorer users should be happier.

2007/06/14 Duane Wessels

    Added -f command line option to keep 'dsc' collector as a foreground
    process.

2007-06-11 Duane Wessels

    dsc-xml-extractor.pl now looks for incoming XML files in
    "incoming/YYYY-MM-DD" directories.

2007-06-07 Duane Wessels

    New TCP code did not compile cleanly on Linux.  Added some
    #ifdefs and macros for Linux compatibility on TCP headers.

2007-05-15 Ken Keys, Duane Wessels

    TCP support
    New 'transport' indexer for DNS messages.  Indicates whether message
    arrived over UDP or TCP.

2007-04-04 Duane Wessels

    IPv6 support
    New 'ip_version' indexer.  Indicates whether DNS message arrived
    via IPv4 or IPv6.
