Connection with a meter using high security level (GMAC)

Project: 
gurux.dlms.c

I'm trying to connect a Siemens meter by GXDLMSDirector in a high-security level (using GMAC), but I'm not having any success. But I have success when I connect in the same meter using Siemens Tool (MPMS3000).

Only for information, I have accessed the meter using GXDLMSDIrector in none and low-security level.

The file attached shows both GXDLMSDirector and MPMS3000 configuration and trace messages.

Where is my mistake??

Thanks in advance

Evandro Padrão

Status: 
Closed (fixed)
Priority: 
Normal
Category: 
Support request
Component: 
Miscellaneous
Reporter: 
Evandro Padrao ...
Created: 
Tue, 03/12/2019 - 18:29
Updated: 
Mon, 03/18/2019 - 15:13

Comments

Kurumi's picture

Hi,

There are few differences. Try to change Security from "Encryption" to "AuthenticationEncryption".

This meter is sending client and meter address in wrong order. Can you ask meter manufacturer to fix it.

Try to change client address to 1. Physical server to 10 and logical to 1.

BR,
Mikko

Evandro Padrao Carvalho de Aguiar's picture

I changed from "Encryption" to "AuthenticationEncryption" and continues not working.

In accord with address order, I believe that has some misunderstood because of the order is correct as shown below in SNRM message:

Siemens trace:
Building Link Layer Connection ...
[11:03:58 445] S: 7E A0 23 00 02 00 21 03 93 99 F6 81 80 14 05 02 04 00 06 02 04 00 07 04 00
00 00 01 08 04 00 00 00 07 44 86 7E

GXDLMSDirector trace:
11:23:40 Send SNRM request.
TX: 7E A0 08 02 21 03 93 86 C1 7E

The differences are the destination number of bytes and in GXDLMSDirector doesn't negotiate the buffer size.

All tests were executed with client address 1 and physical server 0x10 and logical server 1.

Kurumi's picture

Hi,

Change this in GXDLMSDirector. Select "Advanced" tab. Change "Max payload size in transmit" and "Max payload size in receive" to 1024.

Change "Server Address Size" to 4.

BR,
Mikko

Evandro Padrao Carvalho de Aguiar's picture

Mikko,

the method GenerateAarq is waiting for encryptedData as a third parameter, but the method calling in CGXDLMSClient::AARQRequest is always sending a NULL value in this parameter, as shown below:

int CGXAPDU::GenerateAarq(
CGXDLMSSettings& settings,
CGXCipher* cipher,
CGXByteBuffer* encryptedData,
CGXByteBuffer& data)

CGXDLMSClient::AARQRequest
if ((ret = CGXAPDU::GenerateAarq(m_Settings, m_Settings.GetCipher(), NULL, buff)) != 0)

Is it correct??

Thanks in advance for the support,

Evandro Padrão

Kurumi's picture

Hi,

Yes, this is correct. This is old functionality that is removed. It's left for the class method and it's removed in the future.

BR,
Mikko

Kurumi's picture

Status: Active » Closed (fixed)