Features
Performance
Opendnp3 is engineered to perform exceptionally well for large systems with hundreds or even thousands of concurrent sessions:
-
The protocol stack uses non-blocking I/O and runs on a thread-pool. This makes it extremely memory and CPU efficient at scale.
-
Zero-copy / zero-allocation parsing. When parsing an application layer message, the parser doesn't create a full object model representation of the message. This makes the processing of requests extremely fast and efficient.
Robustness & Security
The principal developers who work on opendnp3 have lead the charge in the industry in terms of security testing DNP3. You won't find a more reliable implementation of the protocol anywhere. Our commitment to a high-quality project is evident in what we do.
- An exhaustive unit test suite in excess of 80% coverage
- Fuzzing using the Aegis fuzzer and Google's OSS Fuzz
- Static analysis using tools like Coverity and cppcheck
We provide integrated TLS support that makes opendnp3 an ideal solution for integrating with real-time markets programs like PJM Jetstream.
Compliance
IEEE-1815 defines 4 subset levels (1-4) that consist of the objects and function codes that must be supported by the master and outstation. A device profile template that describes the supported objects and function codes can be found here.
Conformance tests only exist for subset levels 1 & 2. Opendnp3 is routinely tested for subset level 2 using 3rd party tools, but you can also configure the library to act as a simple level 1 device. The stack currently meets all the level 2 subset requirements with the notable except of support BROADCAST messages.
Subset Levels 1-4
| Level | Support | Missing Features |
|---|---|---|
| 1 | FULL | |
| 2 | FULL | |
| 3 | FULL | |
| 4 | PARTIAL | Analog dead-bands (group 34), device attributes (group 0), command events (groups 13 & 43) |
Subset Level 4+
| Feature | Support | Comment |
|---|---|---|
| Octet strings (group 110/11) | FULL | Empty strings not allowed |
| Virtual Terminal | NONE | |
| Secure Authentication | NONE | Use TLS. See this paper for more details |
| File Transfer | NONE | |
| Datasets | NONE |
If your integration requires some functionality not currently implemented, consider sponsoring the additions.