In PubSub use cases with dynamically changing message layouts or Event based DataSetMessages, the number and ordering of DataSetMessages within different NetworkMessages can change arbitrarily. The header layouts described in this section are intended for use cases with dynamic DataSets and ad-hoc identification of DataSetMessages.
With the header layout described in this section, the NetworkMessage header only identifies the Publisher and the contained DataSetMessages. In contrast to the fixed layout, more header fields are enabled in the DataSetMessage header with this header layout but the GroupHeader is deactivated.
The header layout URI for the dynamic layout as specified in A.2.2.4, A.2.2.5, A.2.2.6 and A.2.2.7 is
http://opcfoundation.org/UA/PubSub-Layouts/UADP-Dynamic
A UADP NetworkMessage header shall consist of the following fields according to this header layout:
Additional restrictions:
- The datatype for the PublisherId shall be UInt64
Note: For the PublisherId the DataType UInt64 was selected because it allows a simple way for a Publisher to generate unique PublisherIds by using the local MAC address (48 Bit) as part of the PublisherId.
The NetworkMessage header layout is shown in Figure A.7.
Figure A.7 – UADP NetworkMessage header layout
Table A.7 shows the configuration for the NetworkMessage header.
Table A.7 – UADP NetworkMessage header layout
Name |
Type |
Restrictions |
UADPVersion |
Bit[0-3] |
The version shall be 1 |
UADPFlags |
Bit[4-7] |
Bit 4: PublisherId enabled = 1 Bit 5: GroupHeader enabled = 0 Bit 6: PayloadHeader enabled = 1 Bit 7: ExtendedFlags1 enabled = 1 |
ExtendedFlags1 |
Byte |
Bit range 0-2: PublisherId Type 011 The PublisherId is of DataType UInt64 Bit 3: DataSetClassId enabled = 0 Bit 4: SecurityHeader enabled = 0 Bit 5: Timestamp enabled = 0 Bit 6: PicoSeconds enabled = 0 Bit 7: ExtendedFlags2 enabled = 0 |
PublisherId |
UInt64 |
Configured value for the PubSubConnection. The datatype shall be UInt64. |
PayloadHeader |
Byte[*] |
Defined by Table 159. |
Table A.8 defines the values for the configuration parameters representing this layout.
Table A.8 – Values for configuration parameters
Parameter |
Value |
UadpNetworkMessageContentMask |
0x00000041
This value results of the following options: Bit 0: PublisherId enabled = 1 Bit 6: PayloadHeader enabled = 1 |
When a PubSubConnection is created by using the Method AddConnection() the element PublisherId contained in the argument PubSubConnectionDataType shall be of the DataType UInt64.
UADP messages may be signed to ensure integrity. In this case a security header and a signature have to be added to the message. See clause 7.2.4.4.3 for a complete description of the signing mechanism.
This header layout is basically the same as the header layout defined in A.2.2.4 but with additional security level ‘Signing but no encryption’. The NetworkMessage header layout with signing is shown in Figure A.8.
Figure A.8 – UADP NetworkMessage header layout with integrity (signing)
Table A.9 shows the configuration for the NetworkMessage header with signing. The table contains only the added or modified rows from Table A.7.
Table A.9 – UADP NetworkMessage header layout with integrity (signing)
Name |
Type |
Restrictions |
ExtendedFlags1 |
Byte |
Bit 4: SecurityHeader enabled = 1 |
SecurityHeader |
|
|
SecurityFlags |
Byte |
Bit 0: NetworkMessage Signed enabled = 1 Bit 1: NetworkMessage Encryption enabled = 0 Bit 2: SecurityFooter enabled = 0 Bit 3: Force key reset enabled = 0 Bit range 4-7: Reserved |
SecurityTokenId |
IntegerId |
The ID of the security token that identifies the security key in a SecurityGroup. |
NonceLength |
Byte |
The length of the Nonce used to initialize the encryption algorithm. |
MessageNonce |
Byte[NonceLength] |
A number used exactly once for a given security key. |
UADP messages may be signed and encrypted. In this case the SecurityHeader and the Signature have to be added to the message. See clause 7.2.4.4.3 for a complete description of the security mechanisms.
This header layout is basically the same as the header layout defined in A.2.2.4 but with additional security level ‘Signing and encryption’. The NetworkMessage header layout with signing and encryption is shown in Figure A.9.
Figure A.9 – UADP NetworkMessage header layout with integrity and confident
Table A.10 shows the configuration for the NetworkMessage header with signing and encryption. The table contains only the added or modified rows from Table A.7.
Table A.10 – UADP NetworkMessage header layout with integrity and confidentiality
Name |
Type |
Restrictions |
ExtendedFlags1 |
Byte |
Bit 4: SecurityHeader enabled = 1 |
SecurityHeader |
|
|
SecurityFlags |
Byte |
Bit 0: NetworkMessage Signed enabled = 1 Bit 1: NetworkMessage Encryption enabled = 1 Bit 2: SecurityFooter enabled = 0 Bit 3: Force key reset enabled = 0 Bit range 4-7: Reserved |
SecurityTokenId |
IntegerId |
The ID of the security token that identifies the security key in a SecurityGroup. |
NonceLength |
Byte |
The length of the Nonce used to initialize the encryption algorithm. |
MessageNonce |
Byte[NonceLength] |
A number used exactly once for a given security key. |
A UADP DataSetMessage header shall consist of the following fields according to this header layout:
Additional remarks:
- Fields can use any encoding
- All types of DataSetMessages (Data Key Frame, Data Delta Frame, Event, etc.) are supported
The DataSetMessage header layout is shown in Figure A.10
Figure A.10 – UADP DataSetMessage header layout
Table A.11 shows the configuration for the DataSetMessage header.
Table A.11 – UADP DataSetMessage header layout
Name |
Type |
Description |
DataSetFlags1 |
Byte |
Bit 0: Indicates whether this DataSetMessage is valid Bit range 1-2: Field Encoding <anything>Bit 3: DataSetMessageSequenceNumber enabled = 1 Bit 4: Status enabled = 1 Bit 5: ConfigurationVersionMajorVersion enabled = 0 Bit 6: ConfigurationVersionMinorVersion enabled = 1 Bit 7: DataSetFlags2 enabled = 1 |
DataSetFlags2 |
Byte |
Bit range 0-3: UADP DataSetMessage type <anything> Bit 4: Timestamp enabled = 1 Bit 5: PicoSeconds enabled = 0 (not included in the DataSetMessage header) |
DataSetMessageSequenceNumber |
UInt16 |
Defined by Table 161. |
Timestamp |
UtcTime |
Defined by Table 161. |
StatusCode |
UInt16 |
Defined by Table 161. |
MinorVersion |
VersionTime |
Defined by Table 161. |
Table A.12 defines the values for the configuration parameters representing this layout.
Table A.12 – Values for configuration parameters
Parameter |
Value |
UadpDataSetMessageContentMask |
0x00000035
This value results of the following options: Bit 0: Timestamp enabled = 1 Bit 2: Status enabled = 1 Bit 4: MinorVersion enabled = 1 Bit 5: SequenceNumber enabled = 1 |
DataSetFieldContentMask |
<anything> |
Figure A.11 shows an example for a UADP NetworkMessage with dynamic layout. As defined in A.2.2.3 and A.2.2.7 only the layout of the NetworkMessage header and the DataSetMessage header is fixed. The number, the type, the length, and the order of DataSetMessages can vary from one NetworkMessage to the next.
Figure A.11 – Example for dynamic message layout without security