dnp3 / opendnp3

DNP3 (IEEE-1815) protocol stack. Modern C++ with bindings for .NET and Java.
https://dnp3.github.io
Apache License 2.0
300 stars 231 forks source link

"Unknown qualifier 27" error in DNP3Master #429

Closed akyuznurettin closed 3 years ago

akyuznurettin commented 3 years ago

I have a problem about gathering unsolicited data from Outstation to Master by using opendnp3 library (library is used for creating DNP3 Master) if the index is more than 255. As you know in the case of DNP3 Outstation having unsolicited data to send to the master station. In this data, there is header information. As indicated below, Object header's structure has Group, VAR, Qualifier and Range.

qualifier

As you know, Qualifier Field is one byte(8 bits) and it has index size and qualifier code. If the index is less than 255 there is no problem. For example, index is 42, so index mode is 1 and qualifier is 17. Unsolicited Response is shown in the Wireshark output success

Unfortunately, if the index is more than 255, I take an error "Unknown qualifier 27", since qualifier is 27 For example, index is 500, so index mode is 2 and qualifier is 27. Unsolicited Response is shown in the Wireshark output error

Could it be a bug in the library? We think that the library expect that qualifier is 28 if the index mode is 2 but every DNP3 Outstation libraries do not send 8 for the qualifier code.

I hope that I can explain my problem.

emgre commented 3 years ago

OpenDNP3 does not support qualifier code 0x27. It is a valid qualifier, but uncommon because it mixes an 8-bit count with 16-bit indices. The usual qualifier for 16-bit indices is 0x28, even if you don't have many points.

There is a list of preferred qualifier codes in the standard, section 4.2.2.7.3.5, and qualifier 0x27 is not part of this table. Therefore, it is not required to be implemented to claim a subset level compliance. There are a few more details about it in section 14.2.3 (and Table 14-1).

Your outstation might (and perhaps should?, although I can't point where it says so in the standard) support sending data using only the preferred qualifiers defined in the standard. You would need to check with your vendor.

We don't plan to add support for this as OpenDNP3 is feature freezed. We will only be doing bug fixes on OpenDNP3.