dnp3c

Open source DNP3 conformance testing, automated in CI.

dnp3c runs the outstation tests of the DNP Users Group's IED Certification Procedure unattended, on every commit, and produces a report anyone can read. The same tests run from the command line for testing at the bench. It's our community conformance project, licensed under the GPL.

Source Code Download Read the Announcement
dnp3c running section 8.5 (Class Data) against an outstation

Conformance in CI

Many conformance tests need something done to the device outside of DNP3, like cycling its power or generating events. Implement one interface that performs those steps on your device, and every test that applies to it runs unattended, from start to finish. dnp3c is built for:

  • DNP3 library maintainers, open source or commercial, testing every change
  • Device vendors preparing for a Conformance Test Review
  • Utilities and integrators checking the devices they buy

Built for CI

A headless library on Maven Central that runs anywhere Java 17 does: a CI runner, a container, or a build server.

Command Line

The same tests at the bench. Steps dnp3c can't perform over DNP3 are prompted for, and everything else runs on its own.

Open Evidence

Every run writes an HTML report, a log for every test, and a pcap of each test's traffic that Wireshark decodes as DNP3.

Certification ProcedureSubset LevelsTCPUDPSerial
3.1 rev 1 (2022)1, 2, 3
2.7 (2016)2
A test's log: each frame in hex, decoded at every layer

Results Anyone Can Read

The report is a web page that opens in any browser. Each result links to a log of every step: every frame sent and received, in hex, decoded at every layer and timestamped, along with every check and its outcome.

Share the report with customers, publish it with a release, or take it to a Conformance Test Review. Nobody needs a license, or our tool, to check the results.

A Community Project

The test logic is public, so anyone can see exactly how dnp3c reads each test in the certification procedure, and argue with it. Where the procedure contradicts itself, the README lists the contradiction and how it's resolved.

Open an Issue

GPL-3.0

Run dnp3c by hand or in your own CI without publishing any of your code. If you distribute dnp3c, or a test harness built on it, the GPL requires you to pass on the source with it.

Get Involved

Report a test that reads the procedure differently than you do, contribute a fix, or use dnp3c to prototype draft tests for the next revision of the certification procedure against real devices.

Learn More About DNP3

Browse some of our posts about DNP3 and conformance.

dnp3c: Open Source DNP3 Conformance Testing

dnp3c: Open Source DNP3 Conformance Testing

We’ve released dnp3c, the DNP3 conformance test harness we’ve used internally for over a decade, as open source under the GPL. It runs the DNP Users Group’s IED Certification Procedure against an outstation, either by hand or completely unattended in CI.

Read More
The Case Against DNP3 SAv6 and AMP

The Case Against DNP3 SAv6 and AMP

DNP3’s new security protocol reinvents what TLS already provides, and it will be implemented by vendor teams that have historically struggled to safely parse basic DNP3 messages. Use TLS. It’s proven, audited, and your developers don’t need to be cryptographers.

Read More
Protocol Scalability

Protocol Scalability

Building systems that scale is becoming critically important as the power grid undergoes a rapid transformation to meet the challenge of renewables and climate change. Software architecture is crucial to scaling communications solutions for emerging applications like distributed energy resources (DERs).

This blog post discusses how software architecture affects the scalability of communication protocols and provides performance data for our protocol offerings.

Read More