You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2023/06/05 19:17:26 UTC

[plc4x] 04/04: chore(plc4j/profinet): Created a new version of the Profinet driver that uses a much simpler approach.

This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch chore/profinet-phase-3
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 64ef2075c92edeb2b4e8fef9706a7b172c270c9c
Author: Christofer Dutz <cd...@apache.org>
AuthorDate: Mon Jun 5 21:16:49 2023 +0200

    chore(plc4j/profinet): Created a new version of the Profinet driver that uses a much simpler approach.
---
 plc4go/internal/ads/mock_SymbolicPlcQuery_test.go  |    2 +-
 plc4go/internal/bacnetip/mock_BacNetPlcTag_test.go |    2 +-
 .../bacnetip/mock_OneShotTaskRequirements_test.go  |    2 +-
 plc4go/internal/bacnetip/mock_PDUOption_test.go    |    2 +-
 .../mock_RecurringTaskRequirements_test.go         |    2 +-
 .../mock_SSMProcessingRequirements_test.go         |    2 +-
 .../bacnetip/mock_SSMSAPRequirements_test.go       |    2 +-
 .../mock_WhoIsIAmServicesRequirements_test.go      |    2 +-
 .../mock__ApplicationServiceElement_test.go        |    2 +-
 plc4go/internal/bacnetip/mock__BIPSAP_test.go      |    2 +-
 plc4go/internal/bacnetip/mock__Client_test.go      |    2 +-
 plc4go/internal/bacnetip/mock__IOCB_test.go        |    2 +-
 .../internal/bacnetip/mock__IOController_test.go   |    2 +-
 .../internal/bacnetip/mock__IOQController_test.go  |    2 +-
 plc4go/internal/bacnetip/mock__PDU_test.go         |    2 +-
 plc4go/internal/bacnetip/mock__Server_test.go      |    2 +-
 .../bacnetip/mock__ServiceAccessPoint_test.go      |    2 +-
 .../bacnetip/mock__TaskRequirements_test.go        |    2 +-
 plc4go/internal/bacnetip/mock_option_test.go       |    2 +-
 plc4go/internal/cbus/mock_CALGetStatusTag_test.go  |    2 +-
 plc4go/internal/cbus/mock_CALIdentifyTag_test.go   |    2 +-
 plc4go/internal/cbus/mock_CALRecallTag_test.go     |    2 +-
 plc4go/internal/cbus/mock_CalTag_test.go           |    2 +-
 .../cbus/mock_CommandAndArgumentsCount_test.go     |    2 +-
 plc4go/internal/cbus/mock_MMIMonitorTag_test.go    |    2 +-
 .../internal/cbus/mock_RequestTransaction_test.go  |    2 +-
 plc4go/internal/cbus/mock_SALMonitorTag_test.go    |    2 +-
 plc4go/internal/cbus/mock_SALTag_test.go           |    2 +-
 plc4go/internal/cbus/mock_StatusTag_test.go        |    2 +-
 plc4go/internal/cbus/mock_Tag_test.go              |    2 +-
 plc4go/internal/cbus/mock_UnitInfoQuery_test.go    |    2 +-
 plc4go/internal/cbus/mock_addressProvider_test.go  |    2 +-
 plc4go/internal/eip/mock_EIPPlcTag_test.go         |    2 +-
 plc4go/internal/knxnetip/mock_DeviceTag_test.go    |    2 +-
 .../internal/knxnetip/mock_GroupAddressTag_test.go |    2 +-
 plc4go/internal/knxnetip/mock_Tag_test.go          |    2 +-
 plc4go/internal/s7/mock_PlcTag_test.go             |    2 +-
 plc4go/internal/simulated/mock_Tag_test.go         |    2 +-
 .../mock_PlcConnectionCacheCloseResult_test.go     |    2 +-
 .../pkg/api/cache/mock_PlcConnectionCache_test.go  |    2 +-
 .../cache/mock_WithConnectionCacheOption_test.go   |    2 +-
 plc4go/pkg/api/cache/mock_connectionEvent_test.go  |    2 +-
 .../pkg/api/cache/mock_connectionListener_test.go  |    2 +-
 .../pkg/api/cache/mock_tracedPlcConnection_test.go |    2 +-
 .../pkg/api/mock_PlcConnectionCloseResult_test.go  |    2 +-
 .../api/mock_PlcConnectionConnectResult_test.go    |    2 +-
 .../pkg/api/mock_PlcConnectionPingResult_test.go   |    2 +-
 plc4go/pkg/api/mock_PlcConnection_test.go          |    2 +-
 plc4go/pkg/api/mock_PlcDriverManager_test.go       |    2 +-
 plc4go/pkg/api/mock_PlcDriver_test.go              |    2 +-
 plc4go/pkg/api/mock_Transport_test.go              |    2 +-
 plc4go/pkg/api/mock_WithDiscoveryOption_test.go    |    2 +-
 plc4go/pkg/api/model/mock_ArrayInfo_test.go        |    2 +-
 plc4go/pkg/api/model/mock_PlcBrowseItem_test.go    |    2 +-
 .../api/model/mock_PlcBrowseRequestBuilder_test.go |    2 +-
 .../api/model/mock_PlcBrowseRequestResult_test.go  |    2 +-
 plc4go/pkg/api/model/mock_PlcBrowseRequest_test.go |    2 +-
 .../pkg/api/model/mock_PlcBrowseResponse_test.go   |    2 +-
 .../api/model/mock_PlcConnectionMetadata_test.go   |    2 +-
 .../api/model/mock_PlcConsumerRegistration_test.go |    2 +-
 plc4go/pkg/api/model/mock_PlcDiscoveryItem_test.go |    2 +-
 plc4go/pkg/api/model/mock_PlcMessage_test.go       |    2 +-
 plc4go/pkg/api/model/mock_PlcQuery_test.go         |    2 +-
 .../api/model/mock_PlcReadRequestBuilder_test.go   |    2 +-
 .../api/model/mock_PlcReadRequestResult_test.go    |    2 +-
 plc4go/pkg/api/model/mock_PlcReadRequest_test.go   |    2 +-
 plc4go/pkg/api/model/mock_PlcReadResponse_test.go  |    2 +-
 plc4go/pkg/api/model/mock_PlcRequest_test.go       |    2 +-
 plc4go/pkg/api/model/mock_PlcResponse_test.go      |    2 +-
 .../mock_PlcSubscriptionEventConsumer_test.go      |    2 +-
 .../api/model/mock_PlcSubscriptionEvent_test.go    |    2 +-
 .../api/model/mock_PlcSubscriptionHandle_test.go   |    2 +-
 .../mock_PlcSubscriptionRequestBuilder_test.go     |    2 +-
 .../mock_PlcSubscriptionRequestResult_test.go      |    2 +-
 .../api/model/mock_PlcSubscriptionRequest_test.go  |    2 +-
 .../api/model/mock_PlcSubscriptionResponse_test.go |    2 +-
 plc4go/pkg/api/model/mock_PlcTag_test.go           |    2 +-
 .../mock_PlcUnsubscriptionRequestBuilder_test.go   |    2 +-
 .../mock_PlcUnsubscriptionRequestResult_test.go    |    2 +-
 .../model/mock_PlcUnsubscriptionRequest_test.go    |    2 +-
 .../model/mock_PlcUnsubscriptionResponse_test.go   |    2 +-
 .../api/model/mock_PlcWriteRequestBuilder_test.go  |    2 +-
 .../api/model/mock_PlcWriteRequestResult_test.go   |    2 +-
 plc4go/pkg/api/model/mock_PlcWriteRequest_test.go  |    2 +-
 plc4go/pkg/api/model/mock_PlcWriteResponse_test.go |    2 +-
 plc4go/pkg/api/values/mock_PlcValue_test.go        |    2 +-
 plc4go/pkg/api/values/mock_RawPlcValue_test.go     |    2 +-
 .../knxnetip/readwrite/model/KnxManufacturer.go    |   74 +-
 .../mock_DefaultBrowserRequirements_test.go        |    2 +-
 plc4go/spi/default/mock_DefaultBrowser_test.go     |    2 +-
 .../default/mock_DefaultCodecRequirements_test.go  |    2 +-
 plc4go/spi/default/mock_DefaultCodec_test.go       |    2 +-
 .../mock_DefaultConnectionRequirements_test.go     |    2 +-
 plc4go/spi/default/mock_DefaultConnection_test.go  |    2 +-
 .../default/mock_DefaultDriverRequirements_test.go |    2 +-
 plc4go/spi/default/mock_DefaultDriver_test.go      |    2 +-
 .../mock_DefaultPlcConnectionCloseResult_test.go   |    2 +-
 .../mock_DefaultPlcConnectionConnectResult_test.go |    2 +-
 .../mock_DefaultPlcConnectionPingResult_test.go    |    2 +-
 plc4go/spi/default/mock_MessageCodec_test.go       |    2 +-
 plc4go/spi/default/mock_Message_test.go            |    2 +-
 .../mock_PlcConnectionConnectResult_test.go        |    2 +-
 plc4go/spi/default/mock_PlcConnection_test.go      |    2 +-
 plc4go/spi/default/mock_PlcQuery_test.go           |    2 +-
 plc4go/spi/default/mock_PlcTagHandler_test.go      |    2 +-
 plc4go/spi/default/mock_TransportInstance_test.go  |    2 +-
 .../interceptors/mock_PlcReadRequestResult_test.go |    2 +-
 .../spi/interceptors/mock_PlcReadRequest_test.go   |    2 +-
 .../spi/interceptors/mock_PlcReadResponse_test.go  |    2 +-
 .../mock_PlcWriteRequestResult_test.go             |    2 +-
 .../spi/interceptors/mock_PlcWriteRequest_test.go  |    2 +-
 .../spi/interceptors/mock_PlcWriteResponse_test.go |    2 +-
 .../mock_ReadRequestInterceptorExposer_test.go     |    2 +-
 .../mock_ReadRequestInterceptor_test.go            |    2 +-
 plc4go/spi/interceptors/mock_ReaderExposer_test.go |    2 +-
 .../interceptors/mock_RequestInterceptor_test.go   |    2 +-
 .../mock_WriteRequestInterceptorExposer_test.go    |    2 +-
 .../mock_WriteRequestInterceptor_test.go           |    2 +-
 plc4go/spi/interceptors/mock_WriterExposer_test.go |    2 +-
 .../interceptors/mock_readRequestFactory_test.go   |    2 +-
 .../interceptors/mock_readResponseFactory_test.go  |    2 +-
 .../interceptors/mock_writeRequestFactory_test.go  |    2 +-
 .../interceptors/mock_writeResponseFactory_test.go |    2 +-
 plc4go/spi/mock_AcceptsMessage_test.go             |    2 +-
 plc4go/spi/mock_CompletableFuture_test.go          |    2 +-
 plc4go/spi/mock_CompletionFuture_test.go           |    2 +-
 plc4go/spi/mock_Expectation_test.go                |    2 +-
 plc4go/spi/mock_HandleError_test.go                |    2 +-
 plc4go/spi/mock_HandleMessage_test.go              |    2 +-
 plc4go/spi/mock_HandlerExposer_test.go             |    2 +-
 plc4go/spi/mock_MessageCodec_test.go               |    2 +-
 plc4go/spi/mock_Message_test.go                    |    2 +-
 plc4go/spi/mock_PlcBrowser_test.go                 |    2 +-
 plc4go/spi/mock_PlcDiscoverer_test.go              |    2 +-
 plc4go/spi/mock_PlcReader_test.go                  |    2 +-
 plc4go/spi/mock_PlcSubscriber_test.go              |    2 +-
 plc4go/spi/mock_PlcTagHandler_test.go              |    2 +-
 plc4go/spi/mock_PlcValueHandler_test.go            |    2 +-
 plc4go/spi/mock_PlcWriter_test.go                  |    2 +-
 plc4go/spi/mock_TracerProvider_test.go             |    2 +-
 plc4go/spi/mock_TransportAware_test.go             |    2 +-
 plc4go/spi/mock_TransportInstanceExposer_test.go   |    2 +-
 ...DefaultPlcSubscriptionEventRequirements_test.go |    2 +-
 plc4go/spi/model/mock_PlcBrowseItem_test.go        |    2 +-
 plc4go/spi/model/mock_PlcBrowser_test.go           |    2 +-
 plc4go/spi/model/mock_PlcQuery_test.go             |    2 +-
 plc4go/spi/model/mock_PlcReader_test.go            |    2 +-
 plc4go/spi/model/mock_PlcSubscriber_test.go        |    2 +-
 plc4go/spi/model/mock_PlcTagHandler_test.go        |    2 +-
 plc4go/spi/model/mock_PlcTag_test.go               |    2 +-
 plc4go/spi/model/mock_PlcValueHandler_test.go      |    2 +-
 plc4go/spi/model/mock_PlcWriter_test.go            |    2 +-
 .../spi/model/mock_ReadRequestInterceptor_test.go  |    2 +-
 .../spi/model/mock_WriteRequestInterceptor_test.go |    2 +-
 .../options/mock_DiscoveryOptionDeviceName_test.go |    2 +-
 .../mock_DiscoveryOptionLocalAddress_test.go       |    2 +-
 .../mock_DiscoveryOptionProtocolSpecific_test.go   |    2 +-
 .../options/mock_DiscoveryOptionProtocol_test.go   |    2 +-
 .../mock_DiscoveryOptionRemoteAddress_test.go      |    2 +-
 .../options/mock_DiscoveryOptionTransport_test.go  |    2 +-
 .../spi/options/mock_WithDiscoveryOption_test.go   |    2 +-
 plc4go/spi/options/mock_WithOption_test.go         |    2 +-
 plc4go/spi/pool/mock_CompletionFuture_test.go      |    2 +-
 plc4go/spi/pool/mock_Executor_test.go              |    2 +-
 plc4go/spi/pool/mock_Runnable_test.go              |    2 +-
 .../mock_ConnectionConnectAwaiter_test.go          |    2 +-
 plc4go/spi/testutils/mock_Parser_test.go           |    2 +-
 .../testutils/mock_TestTransportInstance_test.go   |    2 +-
 plc4go/spi/testutils/mock_WithOption_test.go       |    2 +-
 .../spi/testutils/mock_WithTestCaseOption_test.go  |    2 +-
 plc4go/spi/testutils/mock_XmlParser_test.go        |    2 +-
 .../spi/transactions/mock_CompletionFuture_test.go |    2 +-
 .../mock_RequestTransactionManager_test.go         |    2 +-
 .../mock_RequestTransactionRunnable_test.go        |    2 +-
 .../transactions/mock_RequestTransaction_test.go   |    2 +-
 ...ltBufferedTransportInstanceRequirements_test.go |    2 +-
 .../mock_DefaultBufferedTransportInstance_test.go  |    2 +-
 .../spi/transports/mock_TransportInstance_test.go  |    2 +-
 plc4go/spi/transports/mock_Transport_test.go       |    2 +-
 plc4go/spi/transports/utils/mock_Option_test.go    |    2 +-
 plc4go/spi/utils/mock_AsciiBoxWriter_test.go       |    2 +-
 plc4go/spi/utils/mock_AsciiBoxer_test.go           |    2 +-
 plc4go/spi/utils/mock_ErrorIdentify_test.go        |    2 +-
 plc4go/spi/utils/mock_LengthAware_test.go          |    2 +-
 plc4go/spi/utils/mock_PlcValue_test.go             |    2 +-
 plc4go/spi/utils/mock_PositionAware_test.go        |    2 +-
 plc4go/spi/utils/mock_ReadBufferByteBased_test.go  |    2 +-
 plc4go/spi/utils/mock_ReadBuffer_test.go           |    2 +-
 plc4go/spi/utils/mock_Serializable_test.go         |    2 +-
 plc4go/spi/utils/mock_WithReaderArgs_test.go       |    2 +-
 plc4go/spi/utils/mock_WithReaderWriterArgs_test.go |    2 +-
 plc4go/spi/utils/mock_WithWriterArgs_test.go       |    2 +-
 plc4go/spi/utils/mock_WriteBufferBoxBased_test.go  |    2 +-
 plc4go/spi/utils/mock_WriteBufferByteBased_test.go |    2 +-
 plc4go/spi/utils/mock_WriteBufferJsonBased_test.go |    2 +-
 plc4go/spi/utils/mock_WriteBufferXmlBased_test.go  |    2 +-
 plc4go/spi/utils/mock_WriteBuffer_test.go          |    2 +-
 plc4go/spi/values/mock_ArrayInfo_test.go           |    2 +-
 plc4go/spi/values/mock_PlcTag_test.go              |    2 +-
 .../values/mock_WriteBufferPlcValueBased_test.go   |    2 +-
 .../internal/common/mock_FilteredPackage_test.go   |    2 +-
 .../java/knxnetip/readwrite/KnxManufacturer.java   |   10 +-
 plc4j/drivers/pom.xml                              |    1 +
 plc4j/drivers/profinet-ng/README.md                |   40 +
 plc4j/drivers/profinet-ng/pom.xml                  |  220 ++++
 .../profinet/readwrite/CharacterEncoding.java}     |   38 +-
 .../plc4x/java/profinet/readwrite/CheckPeers.java} |  226 ++--
 .../plc4x/java/profinet/readwrite/DataItem.java    | 1139 ++++++++++++++++++++
 .../profinet/readwrite/DceRpc_ActivityUuid.java    |  175 +++
 .../profinet/readwrite/DceRpc_InterfaceUuid.java   |  279 +++++
 .../DceRpc_InterfaceUuid_ControllerInterface.java  |  124 +++
 .../DceRpc_InterfaceUuid_DeviceInterface.java      |  123 +++
 .../DceRpc_InterfaceUuid_ParameterInterface.java   |  124 +++
 .../DceRpc_InterfaceUuid_SupervisorInterface.java  |  124 +++
 .../java/profinet/readwrite/DceRpc_ObjectUuid.java |  268 +++++
 .../java/profinet/readwrite/DceRpc_Operation.java} |   34 +-
 .../java/profinet/readwrite/DceRpc_Packet.java     |  967 +++++++++++++++++
 .../profinet/readwrite/DceRpc_PacketType.java}     |   47 +-
 .../plc4x/java/profinet/readwrite/EndOfLldp.java   |  120 +++
 .../java/profinet/readwrite/Ethernet_Frame.java    |  183 ++++
 .../profinet/readwrite/Ethernet_FramePayload.java  |  154 +++
 .../readwrite/Ethernet_FramePayload_IPv4.java      |  518 +++++++++
 .../readwrite/Ethernet_FramePayload_LLDP.java      |  144 +++
 .../readwrite/Ethernet_FramePayload_PnDcp.java     |  145 +++
 .../Ethernet_FramePayload_VirtualLan.java          |  213 ++++
 .../profinet/readwrite/FloatingPointEncoding.java} |   40 +-
 .../profinet/readwrite/IODReadRequestHeader.java}  |  119 +-
 .../profinet/readwrite/IODReadResponseHeader.java} |  145 +--
 .../profinet/readwrite/IODWriteRequestHeader.java  |   19 +-
 .../profinet/readwrite/IODWriteResponseHeader.java |    2 +-
 .../java/profinet/readwrite/IntegerEncoding.java}  |   38 +-
 .../plc4x/java/profinet/readwrite/IpAddress.java   |  128 +++
 .../plc4x/java/profinet/readwrite/LldpUnit.java    |  184 ++++
 .../plc4x/java/profinet/readwrite/Lldp_Pdu.java    |  146 +++
 .../plc4x/java/profinet/readwrite/MacAddress.java  |  129 +++
 .../readwrite/ManagementAddressSubType.java}       |   38 +-
 .../MultipleInterfaceModeNameOfDevice.java}        |   38 +-
 .../profinet/readwrite/PDInterfaceAdjust.java}     |  238 ++--
 .../java/profinet/readwrite/PDPortDataCheck.java}  |  230 ++--
 .../java/profinet/readwrite/PascalString.java      |  161 +++
 .../readwrite/PascalString16BitLength.java         |  161 +++
 .../java/profinet/readwrite/PcDcp_GetSet_Pdu.java  |  342 ++++++
 .../profinet/readwrite/PcDcp_Pdu_DelayReq.java     |  388 +++++++
 .../plc4x/java/profinet/readwrite/PnDcp_Block.java |  295 +++++
 .../profinet/readwrite/PnDcp_BlockOptions.java}    |   42 +-
 .../readwrite/PnDcp_Block_ALLSelector.java         |  124 +++
 .../PnDcp_Block_ControlOptionFactoryReset.java     |  126 +++
 .../PnDcp_Block_ControlOptionResetToFactory.java   |  126 +++
 .../PnDcp_Block_ControlOptionResponse.java         |  126 +++
 .../readwrite/PnDcp_Block_ControlOptionSignal.java |  126 +++
 .../readwrite/PnDcp_Block_ControlOptionStart.java  |  126 +++
 .../readwrite/PnDcp_Block_ControlOptionStop.java   |  126 +++
 .../PnDcp_Block_DeviceInitiativeOption.java        |  126 +++
 .../PnDcp_Block_DevicePropertiesAliasName.java     |  214 ++++
 .../PnDcp_Block_DevicePropertiesDeviceId.java      |  204 ++++
 ...PnDcp_Block_DevicePropertiesDeviceInstance.java |  207 ++++
 .../PnDcp_Block_DevicePropertiesDeviceOptions.java |  192 ++++
 .../PnDcp_Block_DevicePropertiesDeviceRole.java    |  291 +++++
 .../PnDcp_Block_DevicePropertiesDeviceVendor.java  |  214 ++++
 .../PnDcp_Block_DevicePropertiesNameOfStation.java |  214 ++++
 .../PnDcp_Block_DevicePropertiesOemDeviceId.java   |  126 +++
 ...nDcp_Block_DevicePropertiesStandardGateway.java |  127 +++
 .../PnDcp_Block_DhcpOptionClassIdentifier.java     |  126 +++
 ...PnDcp_Block_DhcpOptionDhcpClientIdentifier.java |  127 +++
 ...p_Block_DhcpOptionFullyQualifiedDomainName.java |  128 +++
 .../readwrite/PnDcp_Block_DhcpOptionHostName.java  |  126 +++
 ...PnDcp_Block_DhcpOptionParameterRequestList.java |  127 +++
 .../PnDcp_Block_DhcpOptionServerIdentifier.java    |  126 +++
 .../PnDcp_Block_DhcpOptionUuidBasedClient.java     |  126 +++
 ..._Block_DhcpOptionVendorSpecificInformation.java |  129 +++
 .../readwrite/PnDcp_Block_FullIpSuite.java         |  124 +++
 .../readwrite/PnDcp_Block_IpMacAddress.java        |  175 +++
 .../readwrite/PnDcp_Block_IpParameter.java         |  349 ++++++
 .../java/profinet/readwrite/PnDcp_FrameId.java}    |   47 +-
 .../plc4x/java/profinet/readwrite/PnDcp_Pdu.java   |  184 ++++
 .../profinet/readwrite/PnDcp_Pdu_AlarmLow.java     |  413 +++++++
 .../profinet/readwrite/PnDcp_Pdu_IdentifyReq.java  |  336 ++++++
 .../profinet/readwrite/PnDcp_Pdu_IdentifyRes.java  |  336 ++++++
 .../readwrite/PnDcp_Pdu_IdentifyRes_Payload.java   |  254 +++++
 .../readwrite/PnDcp_Pdu_RealTimeCyclic.java        |  436 ++++++++
 .../java/profinet/readwrite/PnDcp_ServiceId.java}  |   40 +-
 .../java/profinet/readwrite/PnDcp_ServiceType.java |  197 ++++
 .../readwrite/PnDcp_SupportedDeviceOption.java     |  164 +++
 .../profinet/readwrite/PnIoCM_Block_Request.java}  |   38 +-
 .../readwrite/PnIoCM_Block_ResponseConnect.java}   |   39 +-
 .../java/profinet/readwrite/PnIoCm_AddInfo.java}   |   41 +-
 .../profinet/readwrite/PnIoCm_AlarmCrType.java}    |   29 +-
 .../java/profinet/readwrite/PnIoCm_ArInfo.java}    |   41 +-
 .../java/profinet/readwrite/PnIoCm_ArType.java}    |   29 +-
 .../java/profinet/readwrite/PnIoCm_Block.java      |   31 +-
 .../java/profinet/readwrite/PnIoCm_BlockType.java  |  138 +++
 .../readwrite/PnIoCm_Block_AlarmCrReq.java         |  530 +++++++++
 .../readwrite/PnIoCm_Block_AlarmCrRes.java}        |  229 ++--
 .../profinet/readwrite/PnIoCm_Block_ArReq.java     |  793 ++++++++++++++
 .../profinet/readwrite/PnIoCm_Block_ArRes.java}    |  188 ++--
 .../profinet/readwrite/PnIoCm_Block_ArServer.java} |  227 +---
 .../PnIoCm_Block_ExpectedSubmoduleReq.java}        |  225 +---
 .../profinet/readwrite/PnIoCm_Block_IAndM0.java    |  532 +++++++++
 .../profinet/readwrite/PnIoCm_Block_IAndM1.java}   |  223 +---
 .../profinet/readwrite/PnIoCm_Block_IAndM2.java    |  221 ++++
 .../profinet/readwrite/PnIoCm_Block_IAndM3.java    |  220 ++++
 .../profinet/readwrite/PnIoCm_Block_IAndM4.java    |  220 ++++
 .../profinet/readwrite/PnIoCm_Block_IoCrReq.java   |  881 +++++++++++++++
 .../profinet/readwrite/PnIoCm_Block_IoCrRes.java}  |  224 ++--
 .../readwrite/PnIoCm_Block_ModuleDiff.java}        |  230 +---
 .../readwrite/PnIoCm_CompanionArType.java}         |   37 +-
 .../readwrite/PnIoCm_Control_Request.java}         |   40 +-
 .../readwrite/PnIoCm_Control_ResponseConnect.java} |   40 +-
 .../readwrite/PnIoCm_DataUnitDataObject.java       |  180 ++++
 .../profinet/readwrite/PnIoCm_DataUnitIoCs.java    |  199 ++++
 .../readwrite/PnIoCm_DescriptionType.java}         |   29 +-
 .../PnIoCm_ExpectedSubmoduleBlockReqApi.java       |  260 +++++
 .../java/profinet/readwrite/PnIoCm_IdentInfo.java} |   41 +-
 .../profinet/readwrite/PnIoCm_IoCrBlockReqApi.java |  231 ++++
 .../java/profinet/readwrite/PnIoCm_IoCrType.java}  |   30 +-
 .../plc4x/java/profinet/readwrite/PnIoCm_IoCs.java |  182 ++++
 .../profinet/readwrite/PnIoCm_IoDataObject.java    |  183 ++++
 .../readwrite/PnIoCm_ModuleDiffBlockApi.java       |  182 ++++
 .../PnIoCm_ModuleDiffBlockApi_Module.java          |  241 +++++
 .../PnIoCm_ModuleDiffBlockApi_Submodule.java       |  387 +++++++
 .../profinet/readwrite/PnIoCm_ModuleState.java}    |   29 +-
 .../java/profinet/readwrite/PnIoCm_Packet.java     |  167 +++
 .../profinet/readwrite/PnIoCm_Packet_Fault.java    |  140 +++
 .../profinet/readwrite/PnIoCm_Packet_NoCall.java   |  122 +++
 .../profinet/readwrite/PnIoCm_Packet_Ping.java     |  121 +++
 .../java/profinet/readwrite/PnIoCm_Packet_Rej.java |  140 +++
 .../java/profinet/readwrite/PnIoCm_Packet_Req.java |  225 ++++
 .../java/profinet/readwrite/PnIoCm_Packet_Res.java |  309 ++++++
 .../profinet/readwrite/PnIoCm_Packet_Working.java  |  122 +++
 .../java/profinet/readwrite/PnIoCm_RtClass.java}   |   41 +-
 .../java/profinet/readwrite/PnIoCm_State.java}     |   41 +-
 .../java/profinet/readwrite/PnIoCm_Submodule.java  |  348 ++++++
 .../profinet/readwrite/PnIoCm_SubmoduleType.java}  |   40 +-
 .../PnIoCm_Submodule_InputAndOutputData.java       |  378 +++++++
 .../readwrite/PnIoCm_Submodule_InputData.java      |  262 +++++
 .../PnIoCm_Submodule_NoInputNoOutputData.java      |  237 ++++
 .../readwrite/PnIoCm_Submodule_OutputData.java     |  262 +++++
 .../readwrite/PnIo_CyclicServiceDataUnit.java      |  148 +++
 .../java/profinet/readwrite/ProfinetDataType.java  |  138 +++
 .../profinet/readwrite/ProfinetDeviceState.java}   |   44 +-
 .../java/profinet/readwrite/TlvChassisId.java      |  160 +++
 .../java/profinet/readwrite/TlvIEEESubType.java}   |   38 +-
 .../readwrite/TlvIeee8023MacPhyConfigStatus.java   |  189 ++++
 .../readwrite/TlvIeee8023MaxFrameSize.java         |  141 +++
 .../profinet/readwrite/TlvManagementAddress.java   |  261 +++++
 .../profinet/readwrite/TlvOrgSpecificIeee8023.java |  145 +++
 .../readwrite/TlvOrgSpecificIeee8023Unit.java      |  156 +++
 .../profinet/readwrite/TlvOrgSpecificProfibus.java |  145 +++
 .../readwrite/TlvOrgSpecificProfibusUnit.java      |  165 +++
 .../readwrite/TlvOrganizationSpecific.java         |  151 +++
 .../readwrite/TlvOrganizationSpecificUnit.java     |  150 +++
 .../profinet/readwrite/TlvPortDescription.java     |  139 +++
 .../plc4x/java/profinet/readwrite/TlvPortId.java   |  159 +++
 .../profinet/readwrite/TlvProfibusSubType.java}    |   40 +-
 .../readwrite/TlvProfibusSubTypeChassisMac.java    |  145 +++
 .../readwrite/TlvProfibusSubTypeMeasuredDelay.java |  234 ++++
 .../readwrite/TlvProfibusSubTypeMrpPortStatus.java |  164 +++
 .../readwrite/TlvProfibusSubTypePortStatus.java    |  249 +++++
 .../profinet/readwrite/TlvSystemCapabilities.java  |  524 +++++++++
 .../profinet/readwrite/TlvSystemDescription.java   |  139 +++
 .../java/profinet/readwrite/TlvSystemName.java     |  139 +++
 .../java/profinet/readwrite/TlvTimeToLive.java     |  139 +++
 .../plc4x/java/profinet/readwrite/TlvType.java}    |   46 +-
 .../plc4x/java/profinet/readwrite/UserData.java    |  155 +++
 .../apache/plc4x/java/profinet/readwrite/Uuid.java |  128 +++
 .../profinet/readwrite/VirtualLanPriority.java     |   88 ++
 .../apache/plc4x/java/profinet/ProfinetDriver.java |  164 +++
 .../java/profinet/channel/ProfinetChannel.java     |  250 +++++
 .../profinet/config/ProfinetConfiguration.java     |  111 ++
 .../profinet/context/ProfinetDriverContext.java    |  175 +++
 .../profinet/discovery/ProfinetDiscoverer.java     |  251 +++++
 .../profinet/gsdml/ProfinetApplicationProcess.java |   66 ++
 .../gsdml/ProfinetApplicationRelations.java}       |   24 +-
 .../java/profinet/gsdml/ProfinetBitDataItem.java}  |   25 +-
 .../profinet/gsdml/ProfinetCertificationInfo.java} |   39 +-
 .../java/profinet/gsdml/ProfinetDataItem.java}     |   43 +-
 .../gsdml/ProfinetDeviceAccessPointItem.java       |  188 ++++
 .../profinet/gsdml/ProfinetDeviceFunction.java}    |   17 +-
 .../profinet/gsdml/ProfinetDeviceIdentity.java}    |   41 +-
 .../java/profinet/gsdml/ProfinetDeviceItem.java}   |   23 +-
 .../profinet/gsdml/ProfinetErrorCode2Value.java}   |   19 +-
 .../profinet/gsdml/ProfinetExternalTextList.java   |    5 +-
 .../plc4x/java/profinet/gsdml/ProfinetFamily.java} |   24 +-
 .../java/profinet/gsdml/ProfinetGraphicItem.java}  |   24 +-
 .../java/profinet/gsdml/ProfinetGraphics.java}     |   17 +-
 .../profinet/gsdml/ProfinetGraphicsItemRef.java}   |   24 +-
 .../java/profinet/gsdml/ProfinetIOConfigData.java} |   24 +-
 .../profinet/gsdml/ProfinetISO15745Profile.java}   |   26 +-
 .../profinet/gsdml/ProfinetISO15745Reference.java} |   33 +-
 .../gsdml/ProfinetInterfaceSubmoduleItem.java      |  100 ++
 .../plc4x/java/profinet/gsdml/ProfinetIoData.java} |   37 +-
 .../java/profinet/gsdml/ProfinetIoDataInput.java   |    5 +-
 .../java/profinet/gsdml/ProfinetIoDataOutput.java  |    5 +-
 .../profinet/gsdml/ProfinetLogBookEntryItem.java}  |   26 +-
 .../java/profinet/gsdml/ProfinetModuleInfo.java}   |   54 +-
 .../java/profinet/gsdml/ProfinetModuleItem.java    |    5 +-
 .../profinet/gsdml/ProfinetModuleItemRef.java}     |   24 +-
 .../gsdml/ProfinetParameterRecordDataItem.java     |    4 +-
 .../profinet/gsdml/ProfinetPortSubmoduleItem.java} |   54 +-
 .../profinet/gsdml/ProfinetPrimaryLanguage.java}   |   15 +-
 .../java/profinet/gsdml/ProfinetProfileBody.java}  |   33 +-
 .../java/profinet/gsdml/ProfinetProfileHeader.java |   71 ++
 .../plc4x/java/profinet/gsdml/ProfinetRef.java     |   78 ++
 .../gsdml/ProfinetSystemDefinedSubmoduleList.java  |    3 +-
 .../plc4x/java/profinet/gsdml/ProfinetTextId.java} |   17 +-
 .../java/profinet/gsdml/ProfinetTextIdValue.java}  |   24 +-
 .../profinet/gsdml/ProfinetTimingProperties.java}  |   24 +-
 .../plc4x/java/profinet/gsdml/ProfinetValue.java}  |   17 +-
 .../gsdml/ProfinetVirtualSubmoduleItem.java        |    4 +-
 .../java/profinet/packets/PnDcpPacketFactory.java  |   97 ++
 .../profinet/protocol/ProfinetProtocolLogic.java   |  287 +++++
 .../profinet/readwrite/utils/StaticHelper.java     |    6 +
 .../plc4x/java/profinet/tag/ProfinetTag.java       |   72 ++
 .../java/profinet/tag/ProfinetTagHandler.java}     |   26 +-
 .../services/org.apache.plc4x.java.api.PlcDriver   |   19 +
 .../profinet/ManualProfinetIoDiscoveryTest.java    |    5 +-
 .../plc4x/java/profinet/ManualProfinetIoTest.java} |   21 +-
 .../profinet/gsdml/ProfinetGSDMLParseTest.java     |   59 +
 .../profinet-ng/src/test/resources/gsdml.xml       |  257 +++++
 .../src/test/resources/logback-test.xml            |   36 +
 ...equestHeader.java => IODReadRequestHeader.java} |  119 +-
 ...questHeader.java => IODReadResponseHeader.java} |  145 +--
 .../profinet/readwrite/IODWriteRequestHeader.java  |   19 +-
 .../profinet/readwrite/IODWriteResponseHeader.java |    2 +-
 .../profinet/readwrite/PnIoCM_Block_Request.java   |    2 +-
 ...onse.java => PnIoCM_Block_ResponseConnect.java} |   39 +-
 .../java/profinet/readwrite/PnIoCm_Block.java      |   31 +-
 .../java/profinet/readwrite/PnIoCm_BlockType.java  |   81 +-
 .../profinet/readwrite/PnIoCm_Block_IAndM0.java    |  532 +++++++++
 ...ntrol_Request.java => PnIoCm_Block_IAndM1.java} |  223 +---
 .../profinet/readwrite/PnIoCm_Block_IAndM2.java    |  221 ++++
 .../profinet/readwrite/PnIoCm_Block_IAndM3.java    |  220 ++++
 .../profinet/readwrite/PnIoCm_Block_IAndM4.java    |  220 ++++
 .../profinet/readwrite/PnIoCm_Control_Request.java |    2 +-
 ...se.java => PnIoCm_Control_ResponseConnect.java} |   40 +-
 .../profinet/context/ProfinetDeviceContext.java    |    2 +-
 .../LocalNetworkDevice.java}                       |   38 +-
 .../plc4x/java/profinet/device/ProfinetDevice.java |    8 +-
 .../profinet/gsdml/ProfinetExternalTextList.java   |    1 -
 .../java/profinet/gsdml/ProfinetIoDataInput.java   |    1 -
 .../java/profinet/gsdml/ProfinetIoDataOutput.java  |    1 -
 .../java/profinet/gsdml/ProfinetModuleItem.java    |    3 +-
 .../gsdml/ProfinetParameterRecordDataItem.java     |    2 -
 .../gsdml/ProfinetSystemDefinedSubmoduleList.java  |    1 -
 .../gsdml/ProfinetVirtualSubmoduleItem.java        |    2 -
 .../profinet/messages/DiscoveryMessageFactory.java |   63 ++
 .../profinet/protocol/ProfinetProtocolLogic.java   |    4 +-
 .../profinet/readwrite/utils/StaticHelper.java     |    7 +
 .../profinet/ManualProfinetIoDiscoveryTest.java    |    5 +-
 .../plc4x/java/profinet/ManualProfinetIoTest.java  |    6 +
 plc4j/transports/raw-socket/pom.xml                |    4 +
 .../transport/rawsocket/RawSocketTransport.java    |   34 +-
 .../utils/rawsockets/netty/RawSocketChannel.java   |   12 +-
 .../netty/address/RawSocketAddress.java}           |   23 +-
 .../utils/rawsockets/netty/utils/ArpUtils.java     |   25 +-
 .../utils/rawsockets/netty/ManualArpTest.java}     |   26 +-
 .../main/resources/protocols/profinet/pnio.mspec   |  223 +++-
 457 files changed, 32835 insertions(+), 3382 deletions(-)

diff --git a/plc4go/internal/ads/mock_SymbolicPlcQuery_test.go b/plc4go/internal/ads/mock_SymbolicPlcQuery_test.go
index e90c7d83c6..888be16184 100644
--- a/plc4go/internal/ads/mock_SymbolicPlcQuery_test.go
+++ b/plc4go/internal/ads/mock_SymbolicPlcQuery_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package ads
 
diff --git a/plc4go/internal/bacnetip/mock_BacNetPlcTag_test.go b/plc4go/internal/bacnetip/mock_BacNetPlcTag_test.go
index 1f710ab5b8..f9efebb986 100644
--- a/plc4go/internal/bacnetip/mock_BacNetPlcTag_test.go
+++ b/plc4go/internal/bacnetip/mock_BacNetPlcTag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock_OneShotTaskRequirements_test.go b/plc4go/internal/bacnetip/mock_OneShotTaskRequirements_test.go
index 5fc6a06f18..96f5b75ab1 100644
--- a/plc4go/internal/bacnetip/mock_OneShotTaskRequirements_test.go
+++ b/plc4go/internal/bacnetip/mock_OneShotTaskRequirements_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock_PDUOption_test.go b/plc4go/internal/bacnetip/mock_PDUOption_test.go
index b378c6406f..3a1c357163 100644
--- a/plc4go/internal/bacnetip/mock_PDUOption_test.go
+++ b/plc4go/internal/bacnetip/mock_PDUOption_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock_RecurringTaskRequirements_test.go b/plc4go/internal/bacnetip/mock_RecurringTaskRequirements_test.go
index a28cb71cc6..48882c2f07 100644
--- a/plc4go/internal/bacnetip/mock_RecurringTaskRequirements_test.go
+++ b/plc4go/internal/bacnetip/mock_RecurringTaskRequirements_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock_SSMProcessingRequirements_test.go b/plc4go/internal/bacnetip/mock_SSMProcessingRequirements_test.go
index ed2a43214c..903e2811ec 100644
--- a/plc4go/internal/bacnetip/mock_SSMProcessingRequirements_test.go
+++ b/plc4go/internal/bacnetip/mock_SSMProcessingRequirements_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock_SSMSAPRequirements_test.go b/plc4go/internal/bacnetip/mock_SSMSAPRequirements_test.go
index f7903c7cd0..155f1c8e64 100644
--- a/plc4go/internal/bacnetip/mock_SSMSAPRequirements_test.go
+++ b/plc4go/internal/bacnetip/mock_SSMSAPRequirements_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock_WhoIsIAmServicesRequirements_test.go b/plc4go/internal/bacnetip/mock_WhoIsIAmServicesRequirements_test.go
index e2474ec1b2..6258ad09b5 100644
--- a/plc4go/internal/bacnetip/mock_WhoIsIAmServicesRequirements_test.go
+++ b/plc4go/internal/bacnetip/mock_WhoIsIAmServicesRequirements_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock__ApplicationServiceElement_test.go b/plc4go/internal/bacnetip/mock__ApplicationServiceElement_test.go
index f0ea420d44..0abc820a38 100644
--- a/plc4go/internal/bacnetip/mock__ApplicationServiceElement_test.go
+++ b/plc4go/internal/bacnetip/mock__ApplicationServiceElement_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock__BIPSAP_test.go b/plc4go/internal/bacnetip/mock__BIPSAP_test.go
index 7c34f5cc67..559f429071 100644
--- a/plc4go/internal/bacnetip/mock__BIPSAP_test.go
+++ b/plc4go/internal/bacnetip/mock__BIPSAP_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock__Client_test.go b/plc4go/internal/bacnetip/mock__Client_test.go
index f36e979900..f774261b30 100644
--- a/plc4go/internal/bacnetip/mock__Client_test.go
+++ b/plc4go/internal/bacnetip/mock__Client_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock__IOCB_test.go b/plc4go/internal/bacnetip/mock__IOCB_test.go
index b803bcf5bf..0ba26c5039 100644
--- a/plc4go/internal/bacnetip/mock__IOCB_test.go
+++ b/plc4go/internal/bacnetip/mock__IOCB_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock__IOController_test.go b/plc4go/internal/bacnetip/mock__IOController_test.go
index a03f0d73ed..da56184662 100644
--- a/plc4go/internal/bacnetip/mock__IOController_test.go
+++ b/plc4go/internal/bacnetip/mock__IOController_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock__IOQController_test.go b/plc4go/internal/bacnetip/mock__IOQController_test.go
index eb4579bed0..2d647bfea3 100644
--- a/plc4go/internal/bacnetip/mock__IOQController_test.go
+++ b/plc4go/internal/bacnetip/mock__IOQController_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock__PDU_test.go b/plc4go/internal/bacnetip/mock__PDU_test.go
index a07f3e5576..65c1770c26 100644
--- a/plc4go/internal/bacnetip/mock__PDU_test.go
+++ b/plc4go/internal/bacnetip/mock__PDU_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock__Server_test.go b/plc4go/internal/bacnetip/mock__Server_test.go
index 4eb9080ab0..7dbf648228 100644
--- a/plc4go/internal/bacnetip/mock__Server_test.go
+++ b/plc4go/internal/bacnetip/mock__Server_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock__ServiceAccessPoint_test.go b/plc4go/internal/bacnetip/mock__ServiceAccessPoint_test.go
index 9756148d55..508229af71 100644
--- a/plc4go/internal/bacnetip/mock__ServiceAccessPoint_test.go
+++ b/plc4go/internal/bacnetip/mock__ServiceAccessPoint_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock__TaskRequirements_test.go b/plc4go/internal/bacnetip/mock__TaskRequirements_test.go
index 077477a882..8b6b995313 100644
--- a/plc4go/internal/bacnetip/mock__TaskRequirements_test.go
+++ b/plc4go/internal/bacnetip/mock__TaskRequirements_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/bacnetip/mock_option_test.go b/plc4go/internal/bacnetip/mock_option_test.go
index 47ad547832..86984fa7b6 100644
--- a/plc4go/internal/bacnetip/mock_option_test.go
+++ b/plc4go/internal/bacnetip/mock_option_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package bacnetip
 
diff --git a/plc4go/internal/cbus/mock_CALGetStatusTag_test.go b/plc4go/internal/cbus/mock_CALGetStatusTag_test.go
index 3bdcbbf636..dffc435a78 100644
--- a/plc4go/internal/cbus/mock_CALGetStatusTag_test.go
+++ b/plc4go/internal/cbus/mock_CALGetStatusTag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cbus
 
diff --git a/plc4go/internal/cbus/mock_CALIdentifyTag_test.go b/plc4go/internal/cbus/mock_CALIdentifyTag_test.go
index 3a6b30adf0..21fb575b05 100644
--- a/plc4go/internal/cbus/mock_CALIdentifyTag_test.go
+++ b/plc4go/internal/cbus/mock_CALIdentifyTag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cbus
 
diff --git a/plc4go/internal/cbus/mock_CALRecallTag_test.go b/plc4go/internal/cbus/mock_CALRecallTag_test.go
index d3b6b23c50..79c7f9d4e8 100644
--- a/plc4go/internal/cbus/mock_CALRecallTag_test.go
+++ b/plc4go/internal/cbus/mock_CALRecallTag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cbus
 
diff --git a/plc4go/internal/cbus/mock_CalTag_test.go b/plc4go/internal/cbus/mock_CalTag_test.go
index efb077ec98..2335bad7da 100644
--- a/plc4go/internal/cbus/mock_CalTag_test.go
+++ b/plc4go/internal/cbus/mock_CalTag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cbus
 
diff --git a/plc4go/internal/cbus/mock_CommandAndArgumentsCount_test.go b/plc4go/internal/cbus/mock_CommandAndArgumentsCount_test.go
index b6d9a9def3..c49e0d5271 100644
--- a/plc4go/internal/cbus/mock_CommandAndArgumentsCount_test.go
+++ b/plc4go/internal/cbus/mock_CommandAndArgumentsCount_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cbus
 
diff --git a/plc4go/internal/cbus/mock_MMIMonitorTag_test.go b/plc4go/internal/cbus/mock_MMIMonitorTag_test.go
index 9facbc441c..779be4cc13 100644
--- a/plc4go/internal/cbus/mock_MMIMonitorTag_test.go
+++ b/plc4go/internal/cbus/mock_MMIMonitorTag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cbus
 
diff --git a/plc4go/internal/cbus/mock_RequestTransaction_test.go b/plc4go/internal/cbus/mock_RequestTransaction_test.go
index ae6861665b..73438b8004 100644
--- a/plc4go/internal/cbus/mock_RequestTransaction_test.go
+++ b/plc4go/internal/cbus/mock_RequestTransaction_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cbus
 
diff --git a/plc4go/internal/cbus/mock_SALMonitorTag_test.go b/plc4go/internal/cbus/mock_SALMonitorTag_test.go
index 75e24321fe..e1ecef9a56 100644
--- a/plc4go/internal/cbus/mock_SALMonitorTag_test.go
+++ b/plc4go/internal/cbus/mock_SALMonitorTag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cbus
 
diff --git a/plc4go/internal/cbus/mock_SALTag_test.go b/plc4go/internal/cbus/mock_SALTag_test.go
index 33454423c2..c24f054d05 100644
--- a/plc4go/internal/cbus/mock_SALTag_test.go
+++ b/plc4go/internal/cbus/mock_SALTag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cbus
 
diff --git a/plc4go/internal/cbus/mock_StatusTag_test.go b/plc4go/internal/cbus/mock_StatusTag_test.go
index e7370a4349..7571dd2ef6 100644
--- a/plc4go/internal/cbus/mock_StatusTag_test.go
+++ b/plc4go/internal/cbus/mock_StatusTag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cbus
 
diff --git a/plc4go/internal/cbus/mock_Tag_test.go b/plc4go/internal/cbus/mock_Tag_test.go
index d33092ca80..266c3f6402 100644
--- a/plc4go/internal/cbus/mock_Tag_test.go
+++ b/plc4go/internal/cbus/mock_Tag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cbus
 
diff --git a/plc4go/internal/cbus/mock_UnitInfoQuery_test.go b/plc4go/internal/cbus/mock_UnitInfoQuery_test.go
index 00569f9c2e..397f642b81 100644
--- a/plc4go/internal/cbus/mock_UnitInfoQuery_test.go
+++ b/plc4go/internal/cbus/mock_UnitInfoQuery_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cbus
 
diff --git a/plc4go/internal/cbus/mock_addressProvider_test.go b/plc4go/internal/cbus/mock_addressProvider_test.go
index c99f37a2b2..c258ff1852 100644
--- a/plc4go/internal/cbus/mock_addressProvider_test.go
+++ b/plc4go/internal/cbus/mock_addressProvider_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cbus
 
diff --git a/plc4go/internal/eip/mock_EIPPlcTag_test.go b/plc4go/internal/eip/mock_EIPPlcTag_test.go
index b2aa214a69..28a92726fd 100644
--- a/plc4go/internal/eip/mock_EIPPlcTag_test.go
+++ b/plc4go/internal/eip/mock_EIPPlcTag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package eip
 
diff --git a/plc4go/internal/knxnetip/mock_DeviceTag_test.go b/plc4go/internal/knxnetip/mock_DeviceTag_test.go
index 5cf4ef7f97..a022253a2f 100644
--- a/plc4go/internal/knxnetip/mock_DeviceTag_test.go
+++ b/plc4go/internal/knxnetip/mock_DeviceTag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package knxnetip
 
diff --git a/plc4go/internal/knxnetip/mock_GroupAddressTag_test.go b/plc4go/internal/knxnetip/mock_GroupAddressTag_test.go
index ad2a7bd814..18832a900a 100644
--- a/plc4go/internal/knxnetip/mock_GroupAddressTag_test.go
+++ b/plc4go/internal/knxnetip/mock_GroupAddressTag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package knxnetip
 
diff --git a/plc4go/internal/knxnetip/mock_Tag_test.go b/plc4go/internal/knxnetip/mock_Tag_test.go
index 66dc697692..62f57d85f8 100644
--- a/plc4go/internal/knxnetip/mock_Tag_test.go
+++ b/plc4go/internal/knxnetip/mock_Tag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package knxnetip
 
diff --git a/plc4go/internal/s7/mock_PlcTag_test.go b/plc4go/internal/s7/mock_PlcTag_test.go
index 65b1dd9cdb..50b290b2dc 100644
--- a/plc4go/internal/s7/mock_PlcTag_test.go
+++ b/plc4go/internal/s7/mock_PlcTag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package s7
 
diff --git a/plc4go/internal/simulated/mock_Tag_test.go b/plc4go/internal/simulated/mock_Tag_test.go
index 670883ac36..0e0e84551f 100644
--- a/plc4go/internal/simulated/mock_Tag_test.go
+++ b/plc4go/internal/simulated/mock_Tag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package simulated
 
diff --git a/plc4go/pkg/api/cache/mock_PlcConnectionCacheCloseResult_test.go b/plc4go/pkg/api/cache/mock_PlcConnectionCacheCloseResult_test.go
index 06f9ce78c1..67012e0852 100644
--- a/plc4go/pkg/api/cache/mock_PlcConnectionCacheCloseResult_test.go
+++ b/plc4go/pkg/api/cache/mock_PlcConnectionCacheCloseResult_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cache
 
diff --git a/plc4go/pkg/api/cache/mock_PlcConnectionCache_test.go b/plc4go/pkg/api/cache/mock_PlcConnectionCache_test.go
index 73ab1d63ff..cd3df7c534 100644
--- a/plc4go/pkg/api/cache/mock_PlcConnectionCache_test.go
+++ b/plc4go/pkg/api/cache/mock_PlcConnectionCache_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cache
 
diff --git a/plc4go/pkg/api/cache/mock_WithConnectionCacheOption_test.go b/plc4go/pkg/api/cache/mock_WithConnectionCacheOption_test.go
index 4afba77af6..12e61fe73e 100644
--- a/plc4go/pkg/api/cache/mock_WithConnectionCacheOption_test.go
+++ b/plc4go/pkg/api/cache/mock_WithConnectionCacheOption_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cache
 
diff --git a/plc4go/pkg/api/cache/mock_connectionEvent_test.go b/plc4go/pkg/api/cache/mock_connectionEvent_test.go
index 243e941a9e..8363fbd285 100644
--- a/plc4go/pkg/api/cache/mock_connectionEvent_test.go
+++ b/plc4go/pkg/api/cache/mock_connectionEvent_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cache
 
diff --git a/plc4go/pkg/api/cache/mock_connectionListener_test.go b/plc4go/pkg/api/cache/mock_connectionListener_test.go
index 669a24ab61..9250a8ac88 100644
--- a/plc4go/pkg/api/cache/mock_connectionListener_test.go
+++ b/plc4go/pkg/api/cache/mock_connectionListener_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cache
 
diff --git a/plc4go/pkg/api/cache/mock_tracedPlcConnection_test.go b/plc4go/pkg/api/cache/mock_tracedPlcConnection_test.go
index 2efa3c7de8..8efc5c4444 100644
--- a/plc4go/pkg/api/cache/mock_tracedPlcConnection_test.go
+++ b/plc4go/pkg/api/cache/mock_tracedPlcConnection_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package cache
 
diff --git a/plc4go/pkg/api/mock_PlcConnectionCloseResult_test.go b/plc4go/pkg/api/mock_PlcConnectionCloseResult_test.go
index 05ca25a6cb..514b88c2f5 100644
--- a/plc4go/pkg/api/mock_PlcConnectionCloseResult_test.go
+++ b/plc4go/pkg/api/mock_PlcConnectionCloseResult_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package plc4go
 
diff --git a/plc4go/pkg/api/mock_PlcConnectionConnectResult_test.go b/plc4go/pkg/api/mock_PlcConnectionConnectResult_test.go
index 77d8e0c631..10f332c34e 100644
--- a/plc4go/pkg/api/mock_PlcConnectionConnectResult_test.go
+++ b/plc4go/pkg/api/mock_PlcConnectionConnectResult_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package plc4go
 
diff --git a/plc4go/pkg/api/mock_PlcConnectionPingResult_test.go b/plc4go/pkg/api/mock_PlcConnectionPingResult_test.go
index eff8afcb87..b007042552 100644
--- a/plc4go/pkg/api/mock_PlcConnectionPingResult_test.go
+++ b/plc4go/pkg/api/mock_PlcConnectionPingResult_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package plc4go
 
diff --git a/plc4go/pkg/api/mock_PlcConnection_test.go b/plc4go/pkg/api/mock_PlcConnection_test.go
index 6ca2f229a2..bc6c233faa 100644
--- a/plc4go/pkg/api/mock_PlcConnection_test.go
+++ b/plc4go/pkg/api/mock_PlcConnection_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package plc4go
 
diff --git a/plc4go/pkg/api/mock_PlcDriverManager_test.go b/plc4go/pkg/api/mock_PlcDriverManager_test.go
index 24b2696bed..f7461359a6 100644
--- a/plc4go/pkg/api/mock_PlcDriverManager_test.go
+++ b/plc4go/pkg/api/mock_PlcDriverManager_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package plc4go
 
diff --git a/plc4go/pkg/api/mock_PlcDriver_test.go b/plc4go/pkg/api/mock_PlcDriver_test.go
index fb2f548262..ac35a1cb20 100644
--- a/plc4go/pkg/api/mock_PlcDriver_test.go
+++ b/plc4go/pkg/api/mock_PlcDriver_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package plc4go
 
diff --git a/plc4go/pkg/api/mock_Transport_test.go b/plc4go/pkg/api/mock_Transport_test.go
index c42f59e91f..58f5f29e9f 100644
--- a/plc4go/pkg/api/mock_Transport_test.go
+++ b/plc4go/pkg/api/mock_Transport_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package plc4go
 
diff --git a/plc4go/pkg/api/mock_WithDiscoveryOption_test.go b/plc4go/pkg/api/mock_WithDiscoveryOption_test.go
index a81584ec53..183ce11c3d 100644
--- a/plc4go/pkg/api/mock_WithDiscoveryOption_test.go
+++ b/plc4go/pkg/api/mock_WithDiscoveryOption_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package plc4go
 
diff --git a/plc4go/pkg/api/model/mock_ArrayInfo_test.go b/plc4go/pkg/api/model/mock_ArrayInfo_test.go
index a35cc8aca5..847a586529 100644
--- a/plc4go/pkg/api/model/mock_ArrayInfo_test.go
+++ b/plc4go/pkg/api/model/mock_ArrayInfo_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcBrowseItem_test.go b/plc4go/pkg/api/model/mock_PlcBrowseItem_test.go
index 78b9fb7861..9918587460 100644
--- a/plc4go/pkg/api/model/mock_PlcBrowseItem_test.go
+++ b/plc4go/pkg/api/model/mock_PlcBrowseItem_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcBrowseRequestBuilder_test.go b/plc4go/pkg/api/model/mock_PlcBrowseRequestBuilder_test.go
index bf1823f838..cdd2420bdf 100644
--- a/plc4go/pkg/api/model/mock_PlcBrowseRequestBuilder_test.go
+++ b/plc4go/pkg/api/model/mock_PlcBrowseRequestBuilder_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcBrowseRequestResult_test.go b/plc4go/pkg/api/model/mock_PlcBrowseRequestResult_test.go
index 5c8fed1ed9..7469e47ee5 100644
--- a/plc4go/pkg/api/model/mock_PlcBrowseRequestResult_test.go
+++ b/plc4go/pkg/api/model/mock_PlcBrowseRequestResult_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcBrowseRequest_test.go b/plc4go/pkg/api/model/mock_PlcBrowseRequest_test.go
index 7f2b12bfb0..d0b59613cc 100644
--- a/plc4go/pkg/api/model/mock_PlcBrowseRequest_test.go
+++ b/plc4go/pkg/api/model/mock_PlcBrowseRequest_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcBrowseResponse_test.go b/plc4go/pkg/api/model/mock_PlcBrowseResponse_test.go
index dacd031dfe..89801bbc77 100644
--- a/plc4go/pkg/api/model/mock_PlcBrowseResponse_test.go
+++ b/plc4go/pkg/api/model/mock_PlcBrowseResponse_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcConnectionMetadata_test.go b/plc4go/pkg/api/model/mock_PlcConnectionMetadata_test.go
index c4771acb7d..04721545ab 100644
--- a/plc4go/pkg/api/model/mock_PlcConnectionMetadata_test.go
+++ b/plc4go/pkg/api/model/mock_PlcConnectionMetadata_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcConsumerRegistration_test.go b/plc4go/pkg/api/model/mock_PlcConsumerRegistration_test.go
index bb027f2295..62f3e32d45 100644
--- a/plc4go/pkg/api/model/mock_PlcConsumerRegistration_test.go
+++ b/plc4go/pkg/api/model/mock_PlcConsumerRegistration_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcDiscoveryItem_test.go b/plc4go/pkg/api/model/mock_PlcDiscoveryItem_test.go
index 0033320a5f..5e37956c6c 100644
--- a/plc4go/pkg/api/model/mock_PlcDiscoveryItem_test.go
+++ b/plc4go/pkg/api/model/mock_PlcDiscoveryItem_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcMessage_test.go b/plc4go/pkg/api/model/mock_PlcMessage_test.go
index dc58a48b65..b9e5edec75 100644
--- a/plc4go/pkg/api/model/mock_PlcMessage_test.go
+++ b/plc4go/pkg/api/model/mock_PlcMessage_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcQuery_test.go b/plc4go/pkg/api/model/mock_PlcQuery_test.go
index 827dce1818..c877a2ff3b 100644
--- a/plc4go/pkg/api/model/mock_PlcQuery_test.go
+++ b/plc4go/pkg/api/model/mock_PlcQuery_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcReadRequestBuilder_test.go b/plc4go/pkg/api/model/mock_PlcReadRequestBuilder_test.go
index c787abc7b9..1162f8e7df 100644
--- a/plc4go/pkg/api/model/mock_PlcReadRequestBuilder_test.go
+++ b/plc4go/pkg/api/model/mock_PlcReadRequestBuilder_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcReadRequestResult_test.go b/plc4go/pkg/api/model/mock_PlcReadRequestResult_test.go
index 50a62044ad..348182b9d0 100644
--- a/plc4go/pkg/api/model/mock_PlcReadRequestResult_test.go
+++ b/plc4go/pkg/api/model/mock_PlcReadRequestResult_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcReadRequest_test.go b/plc4go/pkg/api/model/mock_PlcReadRequest_test.go
index 1b10438f56..3df2de3758 100644
--- a/plc4go/pkg/api/model/mock_PlcReadRequest_test.go
+++ b/plc4go/pkg/api/model/mock_PlcReadRequest_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcReadResponse_test.go b/plc4go/pkg/api/model/mock_PlcReadResponse_test.go
index d87c7e42ec..9e8a8b418d 100644
--- a/plc4go/pkg/api/model/mock_PlcReadResponse_test.go
+++ b/plc4go/pkg/api/model/mock_PlcReadResponse_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcRequest_test.go b/plc4go/pkg/api/model/mock_PlcRequest_test.go
index 7e1f351cb7..265538b660 100644
--- a/plc4go/pkg/api/model/mock_PlcRequest_test.go
+++ b/plc4go/pkg/api/model/mock_PlcRequest_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcResponse_test.go b/plc4go/pkg/api/model/mock_PlcResponse_test.go
index 349dc574d8..73d58f1c38 100644
--- a/plc4go/pkg/api/model/mock_PlcResponse_test.go
+++ b/plc4go/pkg/api/model/mock_PlcResponse_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcSubscriptionEventConsumer_test.go b/plc4go/pkg/api/model/mock_PlcSubscriptionEventConsumer_test.go
index bf07a999fb..cf5a97f3dc 100644
--- a/plc4go/pkg/api/model/mock_PlcSubscriptionEventConsumer_test.go
+++ b/plc4go/pkg/api/model/mock_PlcSubscriptionEventConsumer_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcSubscriptionEvent_test.go b/plc4go/pkg/api/model/mock_PlcSubscriptionEvent_test.go
index 78b49fccad..0dfb4bdd26 100644
--- a/plc4go/pkg/api/model/mock_PlcSubscriptionEvent_test.go
+++ b/plc4go/pkg/api/model/mock_PlcSubscriptionEvent_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcSubscriptionHandle_test.go b/plc4go/pkg/api/model/mock_PlcSubscriptionHandle_test.go
index 903355c8b4..7093f9e0a8 100644
--- a/plc4go/pkg/api/model/mock_PlcSubscriptionHandle_test.go
+++ b/plc4go/pkg/api/model/mock_PlcSubscriptionHandle_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcSubscriptionRequestBuilder_test.go b/plc4go/pkg/api/model/mock_PlcSubscriptionRequestBuilder_test.go
index 6691b24338..f38bbbcfa5 100644
--- a/plc4go/pkg/api/model/mock_PlcSubscriptionRequestBuilder_test.go
+++ b/plc4go/pkg/api/model/mock_PlcSubscriptionRequestBuilder_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcSubscriptionRequestResult_test.go b/plc4go/pkg/api/model/mock_PlcSubscriptionRequestResult_test.go
index 85fa5d0caa..eede0b2ad8 100644
--- a/plc4go/pkg/api/model/mock_PlcSubscriptionRequestResult_test.go
+++ b/plc4go/pkg/api/model/mock_PlcSubscriptionRequestResult_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcSubscriptionRequest_test.go b/plc4go/pkg/api/model/mock_PlcSubscriptionRequest_test.go
index 45d52aa4c3..391fb9fff2 100644
--- a/plc4go/pkg/api/model/mock_PlcSubscriptionRequest_test.go
+++ b/plc4go/pkg/api/model/mock_PlcSubscriptionRequest_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcSubscriptionResponse_test.go b/plc4go/pkg/api/model/mock_PlcSubscriptionResponse_test.go
index fcca38a5a4..b4441c869b 100644
--- a/plc4go/pkg/api/model/mock_PlcSubscriptionResponse_test.go
+++ b/plc4go/pkg/api/model/mock_PlcSubscriptionResponse_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcTag_test.go b/plc4go/pkg/api/model/mock_PlcTag_test.go
index ef30d9ad2f..b522ad88b4 100644
--- a/plc4go/pkg/api/model/mock_PlcTag_test.go
+++ b/plc4go/pkg/api/model/mock_PlcTag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcUnsubscriptionRequestBuilder_test.go b/plc4go/pkg/api/model/mock_PlcUnsubscriptionRequestBuilder_test.go
index 3304da3ffe..1665578dde 100644
--- a/plc4go/pkg/api/model/mock_PlcUnsubscriptionRequestBuilder_test.go
+++ b/plc4go/pkg/api/model/mock_PlcUnsubscriptionRequestBuilder_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcUnsubscriptionRequestResult_test.go b/plc4go/pkg/api/model/mock_PlcUnsubscriptionRequestResult_test.go
index 0aae0795d3..c3d70bbd83 100644
--- a/plc4go/pkg/api/model/mock_PlcUnsubscriptionRequestResult_test.go
+++ b/plc4go/pkg/api/model/mock_PlcUnsubscriptionRequestResult_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcUnsubscriptionRequest_test.go b/plc4go/pkg/api/model/mock_PlcUnsubscriptionRequest_test.go
index a6287ed283..7e0513a3f4 100644
--- a/plc4go/pkg/api/model/mock_PlcUnsubscriptionRequest_test.go
+++ b/plc4go/pkg/api/model/mock_PlcUnsubscriptionRequest_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcUnsubscriptionResponse_test.go b/plc4go/pkg/api/model/mock_PlcUnsubscriptionResponse_test.go
index 943e543af0..f407fa8e8d 100644
--- a/plc4go/pkg/api/model/mock_PlcUnsubscriptionResponse_test.go
+++ b/plc4go/pkg/api/model/mock_PlcUnsubscriptionResponse_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcWriteRequestBuilder_test.go b/plc4go/pkg/api/model/mock_PlcWriteRequestBuilder_test.go
index b4d7a5ab64..5e007fa1e1 100644
--- a/plc4go/pkg/api/model/mock_PlcWriteRequestBuilder_test.go
+++ b/plc4go/pkg/api/model/mock_PlcWriteRequestBuilder_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcWriteRequestResult_test.go b/plc4go/pkg/api/model/mock_PlcWriteRequestResult_test.go
index 50b00f1aea..42c935f161 100644
--- a/plc4go/pkg/api/model/mock_PlcWriteRequestResult_test.go
+++ b/plc4go/pkg/api/model/mock_PlcWriteRequestResult_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcWriteRequest_test.go b/plc4go/pkg/api/model/mock_PlcWriteRequest_test.go
index f256a8af38..834b2e7faa 100644
--- a/plc4go/pkg/api/model/mock_PlcWriteRequest_test.go
+++ b/plc4go/pkg/api/model/mock_PlcWriteRequest_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/model/mock_PlcWriteResponse_test.go b/plc4go/pkg/api/model/mock_PlcWriteResponse_test.go
index f915ad5546..ed6c49249b 100644
--- a/plc4go/pkg/api/model/mock_PlcWriteResponse_test.go
+++ b/plc4go/pkg/api/model/mock_PlcWriteResponse_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/pkg/api/values/mock_PlcValue_test.go b/plc4go/pkg/api/values/mock_PlcValue_test.go
index 4dc4cd30fa..5fdf1b4b21 100644
--- a/plc4go/pkg/api/values/mock_PlcValue_test.go
+++ b/plc4go/pkg/api/values/mock_PlcValue_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package values
 
diff --git a/plc4go/pkg/api/values/mock_RawPlcValue_test.go b/plc4go/pkg/api/values/mock_RawPlcValue_test.go
index a5cba89fa4..69b4edfb6d 100644
--- a/plc4go/pkg/api/values/mock_RawPlcValue_test.go
+++ b/plc4go/pkg/api/values/mock_RawPlcValue_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package values
 
diff --git a/plc4go/protocols/knxnetip/readwrite/model/KnxManufacturer.go b/plc4go/protocols/knxnetip/readwrite/model/KnxManufacturer.go
index bb3544cf7a..a8507df789 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/KnxManufacturer.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/KnxManufacturer.go
@@ -670,8 +670,12 @@ const (
 	KnxManufacturer_M_LENGEN                                             KnxManufacturer = 627
 	KnxManufacturer_M_SHENZHEN_EXC_LED_TECHNOLOGY_CO__LTD                KnxManufacturer = 628
 	KnxManufacturer_M_VIBROXX_FZCO                                       KnxManufacturer = 629
-	KnxManufacturer_M_ABB___RESERVED                                     KnxManufacturer = 630
-	KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED                    KnxManufacturer = 631
+	KnxManufacturer_M_SUZHOU_HONGYUN_INTELLIGENT_TECHNOLOGYCO___LTD      KnxManufacturer = 630
+	KnxManufacturer_M_PASSIV_ENERGIE_GMBH                                KnxManufacturer = 631
+	KnxManufacturer_M_PAYNE_TECHNOLOGIES_LTD                             KnxManufacturer = 632
+	KnxManufacturer_M_GUANGDONG_YOZEWIT_INTELLIGENT_TECHNOLOGY_CO__LTD_  KnxManufacturer = 633
+	KnxManufacturer_M_ABB___RESERVED                                     KnxManufacturer = 634
+	KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED                    KnxManufacturer = 635
 )
 
 var KnxManufacturerValues []KnxManufacturer
@@ -1309,6 +1313,10 @@ func init() {
 		KnxManufacturer_M_LENGEN,
 		KnxManufacturer_M_SHENZHEN_EXC_LED_TECHNOLOGY_CO__LTD,
 		KnxManufacturer_M_VIBROXX_FZCO,
+		KnxManufacturer_M_SUZHOU_HONGYUN_INTELLIGENT_TECHNOLOGYCO___LTD,
+		KnxManufacturer_M_PASSIV_ENERGIE_GMBH,
+		KnxManufacturer_M_PAYNE_TECHNOLOGIES_LTD,
+		KnxManufacturer_M_GUANGDONG_YOZEWIT_INTELLIGENT_TECHNOLOGY_CO__LTD_,
 		KnxManufacturer_M_ABB___RESERVED,
 		KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED,
 	}
@@ -3682,10 +3690,26 @@ func (e KnxManufacturer) Number() uint16 {
 		}
 	case 630:
 		{ /* '630' */
-			return 43954
+			return 687
 		}
 	case 631:
 		{ /* '631' */
+			return 688
+		}
+	case 632:
+		{ /* '632' */
+			return 689
+		}
+	case 633:
+		{ /* '633' */
+			return 690
+		}
+	case 634:
+		{ /* '634' */
+			return 43954
+		}
+	case 635:
+		{ /* '635' */
 			return 43959
 		}
 	case 64:
@@ -6228,10 +6252,26 @@ func (e KnxManufacturer) Name() string {
 		}
 	case 630:
 		{ /* '630' */
-			return "ABB - reserved"
+			return "Suzhou Hongyun Intelligent TechnologyCo., Ltd"
 		}
 	case 631:
 		{ /* '631' */
+			return "Passiv Energie GmbH"
+		}
+	case 632:
+		{ /* '632' */
+			return "Payne Technologies Ltd"
+		}
+	case 633:
+		{ /* '633' */
+			return "Guangdong Yozewit Intelligent Technology Co.,Ltd."
+		}
+	case 634:
+		{ /* '634' */
+			return "ABB - reserved"
+		}
+	case 635:
+		{ /* '635' */
 			return "Busch-Jaeger Elektro - reserved"
 		}
 	case 64:
@@ -7590,8 +7630,16 @@ func KnxManufacturerByValue(value uint16) (enum KnxManufacturer, ok bool) {
 	case 63:
 		return KnxManufacturer_M_WHD_WILHELM_HUBER_Plus_SOEHNE, true
 	case 630:
-		return KnxManufacturer_M_ABB___RESERVED, true
+		return KnxManufacturer_M_SUZHOU_HONGYUN_INTELLIGENT_TECHNOLOGYCO___LTD, true
 	case 631:
+		return KnxManufacturer_M_PASSIV_ENERGIE_GMBH, true
+	case 632:
+		return KnxManufacturer_M_PAYNE_TECHNOLOGIES_LTD, true
+	case 633:
+		return KnxManufacturer_M_GUANGDONG_YOZEWIT_INTELLIGENT_TECHNOLOGY_CO__LTD_, true
+	case 634:
+		return KnxManufacturer_M_ABB___RESERVED, true
+	case 635:
 		return KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED, true
 	case 64:
 		return KnxManufacturer_M_BISCHOFF_ELEKTRONIK, true
@@ -8859,6 +8907,14 @@ func KnxManufacturerByName(value string) (enum KnxManufacturer, ok bool) {
 		return KnxManufacturer_M_VIBROXX_FZCO, true
 	case "M_WHD_WILHELM_HUBER_Plus_SOEHNE":
 		return KnxManufacturer_M_WHD_WILHELM_HUBER_Plus_SOEHNE, true
+	case "M_SUZHOU_HONGYUN_INTELLIGENT_TECHNOLOGYCO___LTD":
+		return KnxManufacturer_M_SUZHOU_HONGYUN_INTELLIGENT_TECHNOLOGYCO___LTD, true
+	case "M_PASSIV_ENERGIE_GMBH":
+		return KnxManufacturer_M_PASSIV_ENERGIE_GMBH, true
+	case "M_PAYNE_TECHNOLOGIES_LTD":
+		return KnxManufacturer_M_PAYNE_TECHNOLOGIES_LTD, true
+	case "M_GUANGDONG_YOZEWIT_INTELLIGENT_TECHNOLOGY_CO__LTD_":
+		return KnxManufacturer_M_GUANGDONG_YOZEWIT_INTELLIGENT_TECHNOLOGY_CO__LTD_, true
 	case "M_ABB___RESERVED":
 		return KnxManufacturer_M_ABB___RESERVED, true
 	case "M_BUSCH_JAEGER_ELEKTRO___RESERVED":
@@ -10186,6 +10242,14 @@ func (e KnxManufacturer) PLC4XEnumName() string {
 		return "M_VIBROXX_FZCO"
 	case KnxManufacturer_M_WHD_WILHELM_HUBER_Plus_SOEHNE:
 		return "M_WHD_WILHELM_HUBER_Plus_SOEHNE"
+	case KnxManufacturer_M_SUZHOU_HONGYUN_INTELLIGENT_TECHNOLOGYCO___LTD:
+		return "M_SUZHOU_HONGYUN_INTELLIGENT_TECHNOLOGYCO___LTD"
+	case KnxManufacturer_M_PASSIV_ENERGIE_GMBH:
+		return "M_PASSIV_ENERGIE_GMBH"
+	case KnxManufacturer_M_PAYNE_TECHNOLOGIES_LTD:
+		return "M_PAYNE_TECHNOLOGIES_LTD"
+	case KnxManufacturer_M_GUANGDONG_YOZEWIT_INTELLIGENT_TECHNOLOGY_CO__LTD_:
+		return "M_GUANGDONG_YOZEWIT_INTELLIGENT_TECHNOLOGY_CO__LTD_"
 	case KnxManufacturer_M_ABB___RESERVED:
 		return "M_ABB___RESERVED"
 	case KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED:
diff --git a/plc4go/spi/default/mock_DefaultBrowserRequirements_test.go b/plc4go/spi/default/mock_DefaultBrowserRequirements_test.go
index 53213b5f7d..aa33a98eac 100644
--- a/plc4go/spi/default/mock_DefaultBrowserRequirements_test.go
+++ b/plc4go/spi/default/mock_DefaultBrowserRequirements_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_DefaultBrowser_test.go b/plc4go/spi/default/mock_DefaultBrowser_test.go
index f83e657934..2b49d2b347 100644
--- a/plc4go/spi/default/mock_DefaultBrowser_test.go
+++ b/plc4go/spi/default/mock_DefaultBrowser_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_DefaultCodecRequirements_test.go b/plc4go/spi/default/mock_DefaultCodecRequirements_test.go
index 8430a32d2b..e892f95d9f 100644
--- a/plc4go/spi/default/mock_DefaultCodecRequirements_test.go
+++ b/plc4go/spi/default/mock_DefaultCodecRequirements_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_DefaultCodec_test.go b/plc4go/spi/default/mock_DefaultCodec_test.go
index 668b1b7372..c6257a225f 100644
--- a/plc4go/spi/default/mock_DefaultCodec_test.go
+++ b/plc4go/spi/default/mock_DefaultCodec_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_DefaultConnectionRequirements_test.go b/plc4go/spi/default/mock_DefaultConnectionRequirements_test.go
index b1a5687c2d..497e2123f9 100644
--- a/plc4go/spi/default/mock_DefaultConnectionRequirements_test.go
+++ b/plc4go/spi/default/mock_DefaultConnectionRequirements_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_DefaultConnection_test.go b/plc4go/spi/default/mock_DefaultConnection_test.go
index 20e7c8cdf0..394f31d7de 100644
--- a/plc4go/spi/default/mock_DefaultConnection_test.go
+++ b/plc4go/spi/default/mock_DefaultConnection_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_DefaultDriverRequirements_test.go b/plc4go/spi/default/mock_DefaultDriverRequirements_test.go
index 9c12bf0aee..bfa251737a 100644
--- a/plc4go/spi/default/mock_DefaultDriverRequirements_test.go
+++ b/plc4go/spi/default/mock_DefaultDriverRequirements_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_DefaultDriver_test.go b/plc4go/spi/default/mock_DefaultDriver_test.go
index f3fcadec19..339aef3bb0 100644
--- a/plc4go/spi/default/mock_DefaultDriver_test.go
+++ b/plc4go/spi/default/mock_DefaultDriver_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_DefaultPlcConnectionCloseResult_test.go b/plc4go/spi/default/mock_DefaultPlcConnectionCloseResult_test.go
index 4d39f0dc21..e2dd1903e7 100644
--- a/plc4go/spi/default/mock_DefaultPlcConnectionCloseResult_test.go
+++ b/plc4go/spi/default/mock_DefaultPlcConnectionCloseResult_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_DefaultPlcConnectionConnectResult_test.go b/plc4go/spi/default/mock_DefaultPlcConnectionConnectResult_test.go
index ea04167623..030d8771bd 100644
--- a/plc4go/spi/default/mock_DefaultPlcConnectionConnectResult_test.go
+++ b/plc4go/spi/default/mock_DefaultPlcConnectionConnectResult_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_DefaultPlcConnectionPingResult_test.go b/plc4go/spi/default/mock_DefaultPlcConnectionPingResult_test.go
index e0a239376b..6a77c7c058 100644
--- a/plc4go/spi/default/mock_DefaultPlcConnectionPingResult_test.go
+++ b/plc4go/spi/default/mock_DefaultPlcConnectionPingResult_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_MessageCodec_test.go b/plc4go/spi/default/mock_MessageCodec_test.go
index 989734907b..645da87b75 100644
--- a/plc4go/spi/default/mock_MessageCodec_test.go
+++ b/plc4go/spi/default/mock_MessageCodec_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_Message_test.go b/plc4go/spi/default/mock_Message_test.go
index 9433f27d7a..730d149a50 100644
--- a/plc4go/spi/default/mock_Message_test.go
+++ b/plc4go/spi/default/mock_Message_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_PlcConnectionConnectResult_test.go b/plc4go/spi/default/mock_PlcConnectionConnectResult_test.go
index 14f7a6893f..c3c2da2905 100644
--- a/plc4go/spi/default/mock_PlcConnectionConnectResult_test.go
+++ b/plc4go/spi/default/mock_PlcConnectionConnectResult_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_PlcConnection_test.go b/plc4go/spi/default/mock_PlcConnection_test.go
index 36a1141e61..4bb3de5e92 100644
--- a/plc4go/spi/default/mock_PlcConnection_test.go
+++ b/plc4go/spi/default/mock_PlcConnection_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_PlcQuery_test.go b/plc4go/spi/default/mock_PlcQuery_test.go
index a30311d245..2cd89db924 100644
--- a/plc4go/spi/default/mock_PlcQuery_test.go
+++ b/plc4go/spi/default/mock_PlcQuery_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_PlcTagHandler_test.go b/plc4go/spi/default/mock_PlcTagHandler_test.go
index 2eef15bda1..acf5b553a6 100644
--- a/plc4go/spi/default/mock_PlcTagHandler_test.go
+++ b/plc4go/spi/default/mock_PlcTagHandler_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/default/mock_TransportInstance_test.go b/plc4go/spi/default/mock_TransportInstance_test.go
index 2cbb95faa5..2fed629a28 100644
--- a/plc4go/spi/default/mock_TransportInstance_test.go
+++ b/plc4go/spi/default/mock_TransportInstance_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package _default
 
diff --git a/plc4go/spi/interceptors/mock_PlcReadRequestResult_test.go b/plc4go/spi/interceptors/mock_PlcReadRequestResult_test.go
index bdfe0367fe..708756d51f 100644
--- a/plc4go/spi/interceptors/mock_PlcReadRequestResult_test.go
+++ b/plc4go/spi/interceptors/mock_PlcReadRequestResult_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/interceptors/mock_PlcReadRequest_test.go b/plc4go/spi/interceptors/mock_PlcReadRequest_test.go
index f3c37e918f..08a51f96db 100644
--- a/plc4go/spi/interceptors/mock_PlcReadRequest_test.go
+++ b/plc4go/spi/interceptors/mock_PlcReadRequest_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/interceptors/mock_PlcReadResponse_test.go b/plc4go/spi/interceptors/mock_PlcReadResponse_test.go
index feede3886b..6cf6eb0ee9 100644
--- a/plc4go/spi/interceptors/mock_PlcReadResponse_test.go
+++ b/plc4go/spi/interceptors/mock_PlcReadResponse_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/interceptors/mock_PlcWriteRequestResult_test.go b/plc4go/spi/interceptors/mock_PlcWriteRequestResult_test.go
index 4b4af61536..7c6c2e5bab 100644
--- a/plc4go/spi/interceptors/mock_PlcWriteRequestResult_test.go
+++ b/plc4go/spi/interceptors/mock_PlcWriteRequestResult_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/interceptors/mock_PlcWriteRequest_test.go b/plc4go/spi/interceptors/mock_PlcWriteRequest_test.go
index 323f448331..0e07a13f6c 100644
--- a/plc4go/spi/interceptors/mock_PlcWriteRequest_test.go
+++ b/plc4go/spi/interceptors/mock_PlcWriteRequest_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/interceptors/mock_PlcWriteResponse_test.go b/plc4go/spi/interceptors/mock_PlcWriteResponse_test.go
index 518021269c..eb3211e4b1 100644
--- a/plc4go/spi/interceptors/mock_PlcWriteResponse_test.go
+++ b/plc4go/spi/interceptors/mock_PlcWriteResponse_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/interceptors/mock_ReadRequestInterceptorExposer_test.go b/plc4go/spi/interceptors/mock_ReadRequestInterceptorExposer_test.go
index a8446abfe6..4a314339ca 100644
--- a/plc4go/spi/interceptors/mock_ReadRequestInterceptorExposer_test.go
+++ b/plc4go/spi/interceptors/mock_ReadRequestInterceptorExposer_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/interceptors/mock_ReadRequestInterceptor_test.go b/plc4go/spi/interceptors/mock_ReadRequestInterceptor_test.go
index 9d73196fd7..01e1c42f06 100644
--- a/plc4go/spi/interceptors/mock_ReadRequestInterceptor_test.go
+++ b/plc4go/spi/interceptors/mock_ReadRequestInterceptor_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/interceptors/mock_ReaderExposer_test.go b/plc4go/spi/interceptors/mock_ReaderExposer_test.go
index be306adf0a..bf7dd367cd 100644
--- a/plc4go/spi/interceptors/mock_ReaderExposer_test.go
+++ b/plc4go/spi/interceptors/mock_ReaderExposer_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/interceptors/mock_RequestInterceptor_test.go b/plc4go/spi/interceptors/mock_RequestInterceptor_test.go
index c6f1ac0288..45fc3c69de 100644
--- a/plc4go/spi/interceptors/mock_RequestInterceptor_test.go
+++ b/plc4go/spi/interceptors/mock_RequestInterceptor_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/interceptors/mock_WriteRequestInterceptorExposer_test.go b/plc4go/spi/interceptors/mock_WriteRequestInterceptorExposer_test.go
index 13df5fd3f8..18136637e6 100644
--- a/plc4go/spi/interceptors/mock_WriteRequestInterceptorExposer_test.go
+++ b/plc4go/spi/interceptors/mock_WriteRequestInterceptorExposer_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/interceptors/mock_WriteRequestInterceptor_test.go b/plc4go/spi/interceptors/mock_WriteRequestInterceptor_test.go
index 9108c5f05a..05fdb9ce23 100644
--- a/plc4go/spi/interceptors/mock_WriteRequestInterceptor_test.go
+++ b/plc4go/spi/interceptors/mock_WriteRequestInterceptor_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/interceptors/mock_WriterExposer_test.go b/plc4go/spi/interceptors/mock_WriterExposer_test.go
index 2f787c8781..933372e739 100644
--- a/plc4go/spi/interceptors/mock_WriterExposer_test.go
+++ b/plc4go/spi/interceptors/mock_WriterExposer_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/interceptors/mock_readRequestFactory_test.go b/plc4go/spi/interceptors/mock_readRequestFactory_test.go
index 558f2ca5f8..a6c90ec434 100644
--- a/plc4go/spi/interceptors/mock_readRequestFactory_test.go
+++ b/plc4go/spi/interceptors/mock_readRequestFactory_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/interceptors/mock_readResponseFactory_test.go b/plc4go/spi/interceptors/mock_readResponseFactory_test.go
index a4c830fd61..b2db8db459 100644
--- a/plc4go/spi/interceptors/mock_readResponseFactory_test.go
+++ b/plc4go/spi/interceptors/mock_readResponseFactory_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/interceptors/mock_writeRequestFactory_test.go b/plc4go/spi/interceptors/mock_writeRequestFactory_test.go
index e4fa88a6fd..2b2e55f1d2 100644
--- a/plc4go/spi/interceptors/mock_writeRequestFactory_test.go
+++ b/plc4go/spi/interceptors/mock_writeRequestFactory_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/interceptors/mock_writeResponseFactory_test.go b/plc4go/spi/interceptors/mock_writeResponseFactory_test.go
index d590c1c90f..b4c135b06f 100644
--- a/plc4go/spi/interceptors/mock_writeResponseFactory_test.go
+++ b/plc4go/spi/interceptors/mock_writeResponseFactory_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package interceptors
 
diff --git a/plc4go/spi/mock_AcceptsMessage_test.go b/plc4go/spi/mock_AcceptsMessage_test.go
index 0f453aa0a5..2b4e4b51af 100644
--- a/plc4go/spi/mock_AcceptsMessage_test.go
+++ b/plc4go/spi/mock_AcceptsMessage_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_CompletableFuture_test.go b/plc4go/spi/mock_CompletableFuture_test.go
index c3e86676c0..cbb988a294 100644
--- a/plc4go/spi/mock_CompletableFuture_test.go
+++ b/plc4go/spi/mock_CompletableFuture_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_CompletionFuture_test.go b/plc4go/spi/mock_CompletionFuture_test.go
index d4251fdad7..2df2140f28 100644
--- a/plc4go/spi/mock_CompletionFuture_test.go
+++ b/plc4go/spi/mock_CompletionFuture_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_Expectation_test.go b/plc4go/spi/mock_Expectation_test.go
index 6d48cc3288..759fd9decb 100644
--- a/plc4go/spi/mock_Expectation_test.go
+++ b/plc4go/spi/mock_Expectation_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_HandleError_test.go b/plc4go/spi/mock_HandleError_test.go
index 885df8d84f..fe51fdc185 100644
--- a/plc4go/spi/mock_HandleError_test.go
+++ b/plc4go/spi/mock_HandleError_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_HandleMessage_test.go b/plc4go/spi/mock_HandleMessage_test.go
index 97c54f1300..d566d6879b 100644
--- a/plc4go/spi/mock_HandleMessage_test.go
+++ b/plc4go/spi/mock_HandleMessage_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_HandlerExposer_test.go b/plc4go/spi/mock_HandlerExposer_test.go
index 4d0d2cc16c..529fbb96de 100644
--- a/plc4go/spi/mock_HandlerExposer_test.go
+++ b/plc4go/spi/mock_HandlerExposer_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_MessageCodec_test.go b/plc4go/spi/mock_MessageCodec_test.go
index 5fbf7be6c7..dea0aac89e 100644
--- a/plc4go/spi/mock_MessageCodec_test.go
+++ b/plc4go/spi/mock_MessageCodec_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_Message_test.go b/plc4go/spi/mock_Message_test.go
index c0a50fbc62..9b4bf747d4 100644
--- a/plc4go/spi/mock_Message_test.go
+++ b/plc4go/spi/mock_Message_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_PlcBrowser_test.go b/plc4go/spi/mock_PlcBrowser_test.go
index 87db9633bb..a6fbe1730c 100644
--- a/plc4go/spi/mock_PlcBrowser_test.go
+++ b/plc4go/spi/mock_PlcBrowser_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_PlcDiscoverer_test.go b/plc4go/spi/mock_PlcDiscoverer_test.go
index 028f599a51..2604d304be 100644
--- a/plc4go/spi/mock_PlcDiscoverer_test.go
+++ b/plc4go/spi/mock_PlcDiscoverer_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_PlcReader_test.go b/plc4go/spi/mock_PlcReader_test.go
index d0e95bc309..c1b10b6057 100644
--- a/plc4go/spi/mock_PlcReader_test.go
+++ b/plc4go/spi/mock_PlcReader_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_PlcSubscriber_test.go b/plc4go/spi/mock_PlcSubscriber_test.go
index 4f29710e57..3453be20d2 100644
--- a/plc4go/spi/mock_PlcSubscriber_test.go
+++ b/plc4go/spi/mock_PlcSubscriber_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_PlcTagHandler_test.go b/plc4go/spi/mock_PlcTagHandler_test.go
index 3894e86775..a52d137748 100644
--- a/plc4go/spi/mock_PlcTagHandler_test.go
+++ b/plc4go/spi/mock_PlcTagHandler_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_PlcValueHandler_test.go b/plc4go/spi/mock_PlcValueHandler_test.go
index 600cdd3c30..4c207df942 100644
--- a/plc4go/spi/mock_PlcValueHandler_test.go
+++ b/plc4go/spi/mock_PlcValueHandler_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_PlcWriter_test.go b/plc4go/spi/mock_PlcWriter_test.go
index 9104edaec0..40cd7d146c 100644
--- a/plc4go/spi/mock_PlcWriter_test.go
+++ b/plc4go/spi/mock_PlcWriter_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_TracerProvider_test.go b/plc4go/spi/mock_TracerProvider_test.go
index 1c98e5c1cd..f42e977fa1 100644
--- a/plc4go/spi/mock_TracerProvider_test.go
+++ b/plc4go/spi/mock_TracerProvider_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_TransportAware_test.go b/plc4go/spi/mock_TransportAware_test.go
index d0c3f33d17..4fb18dab11 100644
--- a/plc4go/spi/mock_TransportAware_test.go
+++ b/plc4go/spi/mock_TransportAware_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/mock_TransportInstanceExposer_test.go b/plc4go/spi/mock_TransportInstanceExposer_test.go
index 5356415a82..34b5ffc1e7 100644
--- a/plc4go/spi/mock_TransportInstanceExposer_test.go
+++ b/plc4go/spi/mock_TransportInstanceExposer_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package spi
 
diff --git a/plc4go/spi/model/mock_DefaultPlcSubscriptionEventRequirements_test.go b/plc4go/spi/model/mock_DefaultPlcSubscriptionEventRequirements_test.go
index f93af70b28..45aa15fec7 100644
--- a/plc4go/spi/model/mock_DefaultPlcSubscriptionEventRequirements_test.go
+++ b/plc4go/spi/model/mock_DefaultPlcSubscriptionEventRequirements_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/spi/model/mock_PlcBrowseItem_test.go b/plc4go/spi/model/mock_PlcBrowseItem_test.go
index 770ea6d869..4d8c04b928 100644
--- a/plc4go/spi/model/mock_PlcBrowseItem_test.go
+++ b/plc4go/spi/model/mock_PlcBrowseItem_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/spi/model/mock_PlcBrowser_test.go b/plc4go/spi/model/mock_PlcBrowser_test.go
index 5f078de4eb..4cc202dde7 100644
--- a/plc4go/spi/model/mock_PlcBrowser_test.go
+++ b/plc4go/spi/model/mock_PlcBrowser_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/spi/model/mock_PlcQuery_test.go b/plc4go/spi/model/mock_PlcQuery_test.go
index 827dce1818..c877a2ff3b 100644
--- a/plc4go/spi/model/mock_PlcQuery_test.go
+++ b/plc4go/spi/model/mock_PlcQuery_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/spi/model/mock_PlcReader_test.go b/plc4go/spi/model/mock_PlcReader_test.go
index a2c3923544..2e30705b10 100644
--- a/plc4go/spi/model/mock_PlcReader_test.go
+++ b/plc4go/spi/model/mock_PlcReader_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/spi/model/mock_PlcSubscriber_test.go b/plc4go/spi/model/mock_PlcSubscriber_test.go
index c8f1bd6518..2c1258ca14 100644
--- a/plc4go/spi/model/mock_PlcSubscriber_test.go
+++ b/plc4go/spi/model/mock_PlcSubscriber_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/spi/model/mock_PlcTagHandler_test.go b/plc4go/spi/model/mock_PlcTagHandler_test.go
index 0b4c3c209f..79db9b0607 100644
--- a/plc4go/spi/model/mock_PlcTagHandler_test.go
+++ b/plc4go/spi/model/mock_PlcTagHandler_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/spi/model/mock_PlcTag_test.go b/plc4go/spi/model/mock_PlcTag_test.go
index 6a3d65de3b..bfdc836862 100644
--- a/plc4go/spi/model/mock_PlcTag_test.go
+++ b/plc4go/spi/model/mock_PlcTag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/spi/model/mock_PlcValueHandler_test.go b/plc4go/spi/model/mock_PlcValueHandler_test.go
index 0b66b9b2ba..b88ff275e3 100644
--- a/plc4go/spi/model/mock_PlcValueHandler_test.go
+++ b/plc4go/spi/model/mock_PlcValueHandler_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/spi/model/mock_PlcWriter_test.go b/plc4go/spi/model/mock_PlcWriter_test.go
index 3b989a863c..ec4c010501 100644
--- a/plc4go/spi/model/mock_PlcWriter_test.go
+++ b/plc4go/spi/model/mock_PlcWriter_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/spi/model/mock_ReadRequestInterceptor_test.go b/plc4go/spi/model/mock_ReadRequestInterceptor_test.go
index 0ba50ea6c3..db8508bace 100644
--- a/plc4go/spi/model/mock_ReadRequestInterceptor_test.go
+++ b/plc4go/spi/model/mock_ReadRequestInterceptor_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/spi/model/mock_WriteRequestInterceptor_test.go b/plc4go/spi/model/mock_WriteRequestInterceptor_test.go
index 887de896ca..fc0696c088 100644
--- a/plc4go/spi/model/mock_WriteRequestInterceptor_test.go
+++ b/plc4go/spi/model/mock_WriteRequestInterceptor_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package model
 
diff --git a/plc4go/spi/options/mock_DiscoveryOptionDeviceName_test.go b/plc4go/spi/options/mock_DiscoveryOptionDeviceName_test.go
index 26283078e3..f10d5c6e49 100644
--- a/plc4go/spi/options/mock_DiscoveryOptionDeviceName_test.go
+++ b/plc4go/spi/options/mock_DiscoveryOptionDeviceName_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package options
 
diff --git a/plc4go/spi/options/mock_DiscoveryOptionLocalAddress_test.go b/plc4go/spi/options/mock_DiscoveryOptionLocalAddress_test.go
index a61cf94309..993a886f90 100644
--- a/plc4go/spi/options/mock_DiscoveryOptionLocalAddress_test.go
+++ b/plc4go/spi/options/mock_DiscoveryOptionLocalAddress_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package options
 
diff --git a/plc4go/spi/options/mock_DiscoveryOptionProtocolSpecific_test.go b/plc4go/spi/options/mock_DiscoveryOptionProtocolSpecific_test.go
index cedaefbaaa..da4dc943b3 100644
--- a/plc4go/spi/options/mock_DiscoveryOptionProtocolSpecific_test.go
+++ b/plc4go/spi/options/mock_DiscoveryOptionProtocolSpecific_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package options
 
diff --git a/plc4go/spi/options/mock_DiscoveryOptionProtocol_test.go b/plc4go/spi/options/mock_DiscoveryOptionProtocol_test.go
index e76e4771cd..c7e0146b6f 100644
--- a/plc4go/spi/options/mock_DiscoveryOptionProtocol_test.go
+++ b/plc4go/spi/options/mock_DiscoveryOptionProtocol_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package options
 
diff --git a/plc4go/spi/options/mock_DiscoveryOptionRemoteAddress_test.go b/plc4go/spi/options/mock_DiscoveryOptionRemoteAddress_test.go
index 510727e4cf..a3c6a48602 100644
--- a/plc4go/spi/options/mock_DiscoveryOptionRemoteAddress_test.go
+++ b/plc4go/spi/options/mock_DiscoveryOptionRemoteAddress_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package options
 
diff --git a/plc4go/spi/options/mock_DiscoveryOptionTransport_test.go b/plc4go/spi/options/mock_DiscoveryOptionTransport_test.go
index ac2fc78497..86c7ad0ffc 100644
--- a/plc4go/spi/options/mock_DiscoveryOptionTransport_test.go
+++ b/plc4go/spi/options/mock_DiscoveryOptionTransport_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package options
 
diff --git a/plc4go/spi/options/mock_WithDiscoveryOption_test.go b/plc4go/spi/options/mock_WithDiscoveryOption_test.go
index 79b260c102..d97ca21b51 100644
--- a/plc4go/spi/options/mock_WithDiscoveryOption_test.go
+++ b/plc4go/spi/options/mock_WithDiscoveryOption_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package options
 
diff --git a/plc4go/spi/options/mock_WithOption_test.go b/plc4go/spi/options/mock_WithOption_test.go
index 9124293d38..96375f4d71 100644
--- a/plc4go/spi/options/mock_WithOption_test.go
+++ b/plc4go/spi/options/mock_WithOption_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package options
 
diff --git a/plc4go/spi/pool/mock_CompletionFuture_test.go b/plc4go/spi/pool/mock_CompletionFuture_test.go
index f395023e6f..940de57e8d 100644
--- a/plc4go/spi/pool/mock_CompletionFuture_test.go
+++ b/plc4go/spi/pool/mock_CompletionFuture_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package pool
 
diff --git a/plc4go/spi/pool/mock_Executor_test.go b/plc4go/spi/pool/mock_Executor_test.go
index f7a92e3e80..9fbe47d25e 100644
--- a/plc4go/spi/pool/mock_Executor_test.go
+++ b/plc4go/spi/pool/mock_Executor_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package pool
 
diff --git a/plc4go/spi/pool/mock_Runnable_test.go b/plc4go/spi/pool/mock_Runnable_test.go
index a55e5e962a..01fdd254b0 100644
--- a/plc4go/spi/pool/mock_Runnable_test.go
+++ b/plc4go/spi/pool/mock_Runnable_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package pool
 
diff --git a/plc4go/spi/testutils/mock_ConnectionConnectAwaiter_test.go b/plc4go/spi/testutils/mock_ConnectionConnectAwaiter_test.go
index 1deaab9a17..0aa77dc299 100644
--- a/plc4go/spi/testutils/mock_ConnectionConnectAwaiter_test.go
+++ b/plc4go/spi/testutils/mock_ConnectionConnectAwaiter_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package testutils
 
diff --git a/plc4go/spi/testutils/mock_Parser_test.go b/plc4go/spi/testutils/mock_Parser_test.go
index 1d7ad3d214..02a064e652 100644
--- a/plc4go/spi/testutils/mock_Parser_test.go
+++ b/plc4go/spi/testutils/mock_Parser_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package testutils
 
diff --git a/plc4go/spi/testutils/mock_TestTransportInstance_test.go b/plc4go/spi/testutils/mock_TestTransportInstance_test.go
index bd218fd869..2e49e6f55f 100644
--- a/plc4go/spi/testutils/mock_TestTransportInstance_test.go
+++ b/plc4go/spi/testutils/mock_TestTransportInstance_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package testutils
 
diff --git a/plc4go/spi/testutils/mock_WithOption_test.go b/plc4go/spi/testutils/mock_WithOption_test.go
index 42f69559eb..a4c12463e2 100644
--- a/plc4go/spi/testutils/mock_WithOption_test.go
+++ b/plc4go/spi/testutils/mock_WithOption_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package testutils
 
diff --git a/plc4go/spi/testutils/mock_WithTestCaseOption_test.go b/plc4go/spi/testutils/mock_WithTestCaseOption_test.go
index 9672bfbd22..50ea43f4e7 100644
--- a/plc4go/spi/testutils/mock_WithTestCaseOption_test.go
+++ b/plc4go/spi/testutils/mock_WithTestCaseOption_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package testutils
 
diff --git a/plc4go/spi/testutils/mock_XmlParser_test.go b/plc4go/spi/testutils/mock_XmlParser_test.go
index 3515066bc0..dac7538393 100644
--- a/plc4go/spi/testutils/mock_XmlParser_test.go
+++ b/plc4go/spi/testutils/mock_XmlParser_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package testutils
 
diff --git a/plc4go/spi/transactions/mock_CompletionFuture_test.go b/plc4go/spi/transactions/mock_CompletionFuture_test.go
index ec72fc9d8a..3bd0c10e78 100644
--- a/plc4go/spi/transactions/mock_CompletionFuture_test.go
+++ b/plc4go/spi/transactions/mock_CompletionFuture_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package transactions
 
diff --git a/plc4go/spi/transactions/mock_RequestTransactionManager_test.go b/plc4go/spi/transactions/mock_RequestTransactionManager_test.go
index 2b030692bc..6eba828830 100644
--- a/plc4go/spi/transactions/mock_RequestTransactionManager_test.go
+++ b/plc4go/spi/transactions/mock_RequestTransactionManager_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package transactions
 
diff --git a/plc4go/spi/transactions/mock_RequestTransactionRunnable_test.go b/plc4go/spi/transactions/mock_RequestTransactionRunnable_test.go
index e80caf3a71..277fd43056 100644
--- a/plc4go/spi/transactions/mock_RequestTransactionRunnable_test.go
+++ b/plc4go/spi/transactions/mock_RequestTransactionRunnable_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package transactions
 
diff --git a/plc4go/spi/transactions/mock_RequestTransaction_test.go b/plc4go/spi/transactions/mock_RequestTransaction_test.go
index 2c8e24ec20..b2bc3085ae 100644
--- a/plc4go/spi/transactions/mock_RequestTransaction_test.go
+++ b/plc4go/spi/transactions/mock_RequestTransaction_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package transactions
 
diff --git a/plc4go/spi/transports/mock_DefaultBufferedTransportInstanceRequirements_test.go b/plc4go/spi/transports/mock_DefaultBufferedTransportInstanceRequirements_test.go
index 732bdb1ef2..defb4c3ac1 100644
--- a/plc4go/spi/transports/mock_DefaultBufferedTransportInstanceRequirements_test.go
+++ b/plc4go/spi/transports/mock_DefaultBufferedTransportInstanceRequirements_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package transports
 
diff --git a/plc4go/spi/transports/mock_DefaultBufferedTransportInstance_test.go b/plc4go/spi/transports/mock_DefaultBufferedTransportInstance_test.go
index 7e3e607052..69234da2d5 100644
--- a/plc4go/spi/transports/mock_DefaultBufferedTransportInstance_test.go
+++ b/plc4go/spi/transports/mock_DefaultBufferedTransportInstance_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package transports
 
diff --git a/plc4go/spi/transports/mock_TransportInstance_test.go b/plc4go/spi/transports/mock_TransportInstance_test.go
index bf280748da..c65b4b5f4c 100644
--- a/plc4go/spi/transports/mock_TransportInstance_test.go
+++ b/plc4go/spi/transports/mock_TransportInstance_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package transports
 
diff --git a/plc4go/spi/transports/mock_Transport_test.go b/plc4go/spi/transports/mock_Transport_test.go
index 0fe7e0a258..1a1b28c3fe 100644
--- a/plc4go/spi/transports/mock_Transport_test.go
+++ b/plc4go/spi/transports/mock_Transport_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package transports
 
diff --git a/plc4go/spi/transports/utils/mock_Option_test.go b/plc4go/spi/transports/utils/mock_Option_test.go
index 9d3b875a32..71cb15aab4 100644
--- a/plc4go/spi/transports/utils/mock_Option_test.go
+++ b/plc4go/spi/transports/utils/mock_Option_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_AsciiBoxWriter_test.go b/plc4go/spi/utils/mock_AsciiBoxWriter_test.go
index 61c0663a6a..57fd8bed53 100644
--- a/plc4go/spi/utils/mock_AsciiBoxWriter_test.go
+++ b/plc4go/spi/utils/mock_AsciiBoxWriter_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_AsciiBoxer_test.go b/plc4go/spi/utils/mock_AsciiBoxer_test.go
index de77d3dda3..d80a0df16c 100644
--- a/plc4go/spi/utils/mock_AsciiBoxer_test.go
+++ b/plc4go/spi/utils/mock_AsciiBoxer_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_ErrorIdentify_test.go b/plc4go/spi/utils/mock_ErrorIdentify_test.go
index ad77d2584b..b6ec059502 100644
--- a/plc4go/spi/utils/mock_ErrorIdentify_test.go
+++ b/plc4go/spi/utils/mock_ErrorIdentify_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_LengthAware_test.go b/plc4go/spi/utils/mock_LengthAware_test.go
index 21f60df804..150dfeadcd 100644
--- a/plc4go/spi/utils/mock_LengthAware_test.go
+++ b/plc4go/spi/utils/mock_LengthAware_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_PlcValue_test.go b/plc4go/spi/utils/mock_PlcValue_test.go
index 91daaf55f1..7820f5bf91 100644
--- a/plc4go/spi/utils/mock_PlcValue_test.go
+++ b/plc4go/spi/utils/mock_PlcValue_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_PositionAware_test.go b/plc4go/spi/utils/mock_PositionAware_test.go
index ae00ed5b37..a81c35a404 100644
--- a/plc4go/spi/utils/mock_PositionAware_test.go
+++ b/plc4go/spi/utils/mock_PositionAware_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_ReadBufferByteBased_test.go b/plc4go/spi/utils/mock_ReadBufferByteBased_test.go
index 47dd946fbf..7e6eb1cf78 100644
--- a/plc4go/spi/utils/mock_ReadBufferByteBased_test.go
+++ b/plc4go/spi/utils/mock_ReadBufferByteBased_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_ReadBuffer_test.go b/plc4go/spi/utils/mock_ReadBuffer_test.go
index e739377bad..c9cf539fab 100644
--- a/plc4go/spi/utils/mock_ReadBuffer_test.go
+++ b/plc4go/spi/utils/mock_ReadBuffer_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_Serializable_test.go b/plc4go/spi/utils/mock_Serializable_test.go
index 4000fb6384..c4983e3e61 100644
--- a/plc4go/spi/utils/mock_Serializable_test.go
+++ b/plc4go/spi/utils/mock_Serializable_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_WithReaderArgs_test.go b/plc4go/spi/utils/mock_WithReaderArgs_test.go
index c081beb116..d12cf86027 100644
--- a/plc4go/spi/utils/mock_WithReaderArgs_test.go
+++ b/plc4go/spi/utils/mock_WithReaderArgs_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_WithReaderWriterArgs_test.go b/plc4go/spi/utils/mock_WithReaderWriterArgs_test.go
index 9bbb4b93ad..f0bfbfe23d 100644
--- a/plc4go/spi/utils/mock_WithReaderWriterArgs_test.go
+++ b/plc4go/spi/utils/mock_WithReaderWriterArgs_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_WithWriterArgs_test.go b/plc4go/spi/utils/mock_WithWriterArgs_test.go
index 4eeb26e667..cbd6546422 100644
--- a/plc4go/spi/utils/mock_WithWriterArgs_test.go
+++ b/plc4go/spi/utils/mock_WithWriterArgs_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_WriteBufferBoxBased_test.go b/plc4go/spi/utils/mock_WriteBufferBoxBased_test.go
index 2a24acf1e5..4a5cc207a0 100644
--- a/plc4go/spi/utils/mock_WriteBufferBoxBased_test.go
+++ b/plc4go/spi/utils/mock_WriteBufferBoxBased_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_WriteBufferByteBased_test.go b/plc4go/spi/utils/mock_WriteBufferByteBased_test.go
index d0e3204ebb..7df118b420 100644
--- a/plc4go/spi/utils/mock_WriteBufferByteBased_test.go
+++ b/plc4go/spi/utils/mock_WriteBufferByteBased_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_WriteBufferJsonBased_test.go b/plc4go/spi/utils/mock_WriteBufferJsonBased_test.go
index 8316fedda3..770b82c6a3 100644
--- a/plc4go/spi/utils/mock_WriteBufferJsonBased_test.go
+++ b/plc4go/spi/utils/mock_WriteBufferJsonBased_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_WriteBufferXmlBased_test.go b/plc4go/spi/utils/mock_WriteBufferXmlBased_test.go
index 32d00ff9f9..c792d8cfe6 100644
--- a/plc4go/spi/utils/mock_WriteBufferXmlBased_test.go
+++ b/plc4go/spi/utils/mock_WriteBufferXmlBased_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/utils/mock_WriteBuffer_test.go b/plc4go/spi/utils/mock_WriteBuffer_test.go
index c51f7b682a..4116278ede 100644
--- a/plc4go/spi/utils/mock_WriteBuffer_test.go
+++ b/plc4go/spi/utils/mock_WriteBuffer_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package utils
 
diff --git a/plc4go/spi/values/mock_ArrayInfo_test.go b/plc4go/spi/values/mock_ArrayInfo_test.go
index 8260f0322e..f7ea5203f8 100644
--- a/plc4go/spi/values/mock_ArrayInfo_test.go
+++ b/plc4go/spi/values/mock_ArrayInfo_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package values
 
diff --git a/plc4go/spi/values/mock_PlcTag_test.go b/plc4go/spi/values/mock_PlcTag_test.go
index 1e3dc24f53..f3ee858e89 100644
--- a/plc4go/spi/values/mock_PlcTag_test.go
+++ b/plc4go/spi/values/mock_PlcTag_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package values
 
diff --git a/plc4go/spi/values/mock_WriteBufferPlcValueBased_test.go b/plc4go/spi/values/mock_WriteBufferPlcValueBased_test.go
index 0862c6be74..2bdb26d1e3 100644
--- a/plc4go/spi/values/mock_WriteBufferPlcValueBased_test.go
+++ b/plc4go/spi/values/mock_WriteBufferPlcValueBased_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package values
 
diff --git a/plc4go/tools/plc4xpcapanalyzer/internal/common/mock_FilteredPackage_test.go b/plc4go/tools/plc4xpcapanalyzer/internal/common/mock_FilteredPackage_test.go
index 18dcdba610..6edb9758ef 100644
--- a/plc4go/tools/plc4xpcapanalyzer/internal/common/mock_FilteredPackage_test.go
+++ b/plc4go/tools/plc4xpcapanalyzer/internal/common/mock_FilteredPackage_test.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by mockery v2.28.1. DO NOT EDIT.
+// Code generated by mockery v2.28.2. DO NOT EDIT.
 
 package common
 
diff --git a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
index fc73091245..4fa19d0ada 100644
--- a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
+++ b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
@@ -722,9 +722,15 @@ public enum KnxManufacturer {
   M_SHENZHEN_EXC_LED_TECHNOLOGY_CO__LTD(
       (int) 628, (int) 685, (String) "Shenzhen EXC-LED Technology Co.,LTD"),
   M_VIBROXX_FZCO((int) 629, (int) 686, (String) "Vibroxx-FZCO"),
-  M_ABB___RESERVED((int) 630, (int) 43954, (String) "ABB - reserved"),
+  M_SUZHOU_HONGYUN_INTELLIGENT_TECHNOLOGYCO___LTD(
+      (int) 630, (int) 687, (String) "Suzhou Hongyun Intelligent TechnologyCo., Ltd"),
+  M_PASSIV_ENERGIE_GMBH((int) 631, (int) 688, (String) "Passiv Energie GmbH"),
+  M_PAYNE_TECHNOLOGIES_LTD((int) 632, (int) 689, (String) "Payne Technologies Ltd"),
+  M_GUANGDONG_YOZEWIT_INTELLIGENT_TECHNOLOGY_CO__LTD_(
+      (int) 633, (int) 690, (String) "Guangdong Yozewit Intelligent Technology Co.,Ltd."),
+  M_ABB___RESERVED((int) 634, (int) 43954, (String) "ABB - reserved"),
   M_BUSCH_JAEGER_ELEKTRO___RESERVED(
-      (int) 631, (int) 43959, (String) "Busch-Jaeger Elektro - reserved");
+      (int) 635, (int) 43959, (String) "Busch-Jaeger Elektro - reserved");
   private static final Map<Integer, KnxManufacturer> map;
 
   static {
diff --git a/plc4j/drivers/pom.xml b/plc4j/drivers/pom.xml
index c0b47ba33a..0ce959e881 100644
--- a/plc4j/drivers/pom.xml
+++ b/plc4j/drivers/pom.xml
@@ -49,6 +49,7 @@
     <module>opcua</module>
     <module>plc4x</module>
     <module>profinet</module>
+    <module>profinet-ng</module>
     <module>s7</module>
     <module>simulated</module>
   </modules>
diff --git a/plc4j/drivers/profinet-ng/README.md b/plc4j/drivers/profinet-ng/README.md
new file mode 100644
index 0000000000..1fb6d6c6c6
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/README.md
@@ -0,0 +1,40 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      https://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  -->
+
+# Profinet
+
+## Connection
+
+In general a connection is ethernet based and therefore needs only a MAC address.
+We could simply send out every packet on every network device and listen to all for incoming packets, but that would be quite inefficient.
+
+During discovery, we get information like MAC address, IP address, Vendor-Id, Device-ID, but in theory the mac address should be enough.
+So I am thinking of two options: 
+
+1. The connection string contains an ip address
+2. The connection string doesn't contain an ip address
+
+If an IP address is present, we could theoretically simply use that ip address and try to find a local network device able to reach this.
+However on a system there might be multiple devices able to reach that target. 
+In my case my primary internet connection goes via Wi-Fi and a secondary goes via cable (So I can pass the full network to a VM and still be online via Wi-Fi). 
+We want to use the fastest option.
+
+So I was thinking of sending an ARP (Address Resolution Protocol) request for resolving the remote address and to take the ip address returned first. 
+
+As soon as we have found the local network device then we can send a PN_DCP 
\ No newline at end of file
diff --git a/plc4j/drivers/profinet-ng/pom.xml b/plc4j/drivers/profinet-ng/pom.xml
new file mode 100644
index 0000000000..63755a3dda
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/pom.xml
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      https://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.plc4x</groupId>
+    <artifactId>plc4j-drivers</artifactId>
+    <version>0.11.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>plc4j-driver-profinet-ng</artifactId>
+  <name>PLC4J: Driver: Profinet (NG)</name>
+  <description>Implementation of a PLC4X driver for the Profinet protocol.</description>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.plc4x.plugins</groupId>
+        <artifactId>plc4x-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>generate-driver</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>generate-driver</goal>
+            </goals>
+            <configuration>
+              <protocolName>profinet</protocolName>
+              <languageName>java</languageName>
+              <outputFlavor>read-write</outputFlavor>
+              <outputDir>src/main/generated</outputDir>
+              <options>
+                <generate-properties-for-parser-arguments>true</generate-properties-for-parser-arguments>
+                <!-- We want properties that contain the values of reserved fields, if the value differs from the expected one -->
+                <generate-properties-for-reserved-fields>true</generate-properties-for-reserved-fields>
+              </options>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.karaf.tooling</groupId>
+        <artifactId>karaf-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>generate-feature-xml</id>
+            <phase>compile</phase>
+            <goals>
+              <!-- Generate the feature.xml -->
+              <goal>features-generate-descriptor</goal>
+              <!-- Check the feature.xml -->
+              <goal>verify</goal>
+            </goals>
+            <configuration>
+              <enableGeneration>true</enableGeneration>
+              <aggregateFeatures>true</aggregateFeatures>
+            </configuration>
+          </execution>
+          <execution>
+            <id>build-kar</id>
+            <phase>package</phase>
+            <goals>
+              <!--
+                Build a kar archive (Jar containing the feature.xml
+                as well as the module content and it's dependencies.
+              -->
+              <goal>kar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <extensions>true</extensions>
+        <configuration>
+          <instructions>
+            <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
+            <Bundle-Activator>org.apache.plc4x.java.osgi.DriverActivator</Bundle-Activator>
+            <Export-Service>org.apache.plc4x.java.api.PlcDriver,org.apache.plc4x.java.modbus.ProfinetDriver</Export-Service>
+            <Import-Package>
+              *
+            </Import-Package>
+          </instructions>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <configuration>
+          <usedDependencies combine.children="append">
+            <usedDependency>org.apache.plc4x:plc4x-code-generation-language-java</usedDependency>
+            <usedDependency>org.apache.plc4x:plc4x-protocols-profinet</usedDependency>
+          </usedDependencies>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-api</artifactId>
+      <version>0.11.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-spi</artifactId>
+      <version>0.11.0-SNAPSHOT</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-transport-raw-socket</artifactId>
+      <version>0.11.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-utils-pcap-shared</artifactId>
+      <version>0.11.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-utils-raw-sockets</artifactId>
+      <version>0.11.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.pcap4j</groupId>
+      <artifactId>pcap4j-core</artifactId>
+      <!-- Override the "provided" scope -->
+      <scope>compile</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-buffer</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-transport</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>commons-codec</groupId>
+      <artifactId>commons-codec</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-annotations</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.dataformat</groupId>
+      <artifactId>jackson-dataformat-xml</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-utils-test-utils</artifactId>
+      <version>0.11.0-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-utils-test-generator</artifactId>
+      <version>0.11.0-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>ch.qos.logback</groupId>
+      <artifactId>logback-classic</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-code-generation-language-java</artifactId>
+      <version>0.11.0-SNAPSHOT</version>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-protocols-profinet</artifactId>
+      <version>0.11.0-SNAPSHOT</version>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-protocols-profinet</artifactId>
+      <version>0.11.0-SNAPSHOT</version>
+      <classifier>tests</classifier>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+</project>
diff --git a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_BlockType.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/CharacterEncoding.java
similarity index 52%
copy from plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_BlockType.java
copy to plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/CharacterEncoding.java
index 3366b5b92f..4218b84fed 100644
--- a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_BlockType.java
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/CharacterEncoding.java
@@ -23,49 +23,33 @@ import java.util.Map;
 
 // Code generated by code-generation. DO NOT EDIT.
 
-public enum PnIoCm_BlockType {
-  IOD_WRITE_REQUEST_HEADER((int) 0x0008),
-  AR_BLOCK_REQ((int) 0x0101),
-  IO_CR_BLOCK_REQ((int) 0x0102),
-  ALARM_CR_BLOCK_REQ((int) 0x0103),
-  EXPECTED_SUBMODULE_BLOCK_REQ((int) 0x0104),
-  IOD_CONTROL_REQ((int) 0x0110),
-  IOX_BLOCK_REQ((int) 0x0112),
-  PD_PORT_DATA_CHECK((int) 0x0200),
-  CHECK_PEERS((int) 0x020a),
-  PD_INTERFACE_ADJUST((int) 0x0250),
-  IOD_WRITE_RESPONSE_HEADER((int) 0x8008),
-  AR_BLOCK_RES((int) 0x8101),
-  IO_CR_BLOCK_RES((int) 0x8102),
-  ALARM_CR_BLOCK_RES((int) 0x8103),
-  MODULE_DIFF_BLOCK((int) 0x8104),
-  AR_SERVER_BLOCK((int) 0x8106),
-  IOD_CONTROL_RES((int) 0x8110),
-  IOX_BLOCK_RES((int) 0x8112);
-  private static final Map<Integer, PnIoCm_BlockType> map;
+public enum CharacterEncoding {
+  ASCII((byte) 0x0),
+  EBCDIC((byte) 0x1);
+  private static final Map<Byte, CharacterEncoding> map;
 
   static {
     map = new HashMap<>();
-    for (PnIoCm_BlockType value : PnIoCm_BlockType.values()) {
-      map.put((int) value.getValue(), value);
+    for (CharacterEncoding value : CharacterEncoding.values()) {
+      map.put((byte) value.getValue(), value);
     }
   }
 
-  private final int value;
+  private final byte value;
 
-  PnIoCm_BlockType(int value) {
+  CharacterEncoding(byte value) {
     this.value = value;
   }
 
-  public int getValue() {
+  public byte getValue() {
     return value;
   }
 
-  public static PnIoCm_BlockType enumForValue(int value) {
+  public static CharacterEncoding enumForValue(byte value) {
     return map.get(value);
   }
 
-  public static Boolean isDefined(int value) {
+  public static Boolean isDefined(byte value) {
     return map.containsKey(value);
   }
 }
diff --git a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_Control_Request.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/CheckPeers.java
similarity index 53%
copy from plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_Control_Request.java
copy to plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/CheckPeers.java
index 14a416c006..d253c47b5a 100644
--- a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_Control_Request.java
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/CheckPeers.java
@@ -35,37 +35,32 @@ import org.apache.plc4x.java.spi.generation.*;
 
 // Code generated by code-generation. DO NOT EDIT.
 
-public class PnIoCm_Control_Request extends PnIoCm_Block implements Message {
+public class CheckPeers extends PnIoCm_Block implements Message {
 
   // Accessors for discriminator values.
   public PnIoCm_BlockType getBlockType() {
-    return PnIoCm_BlockType.IOD_CONTROL_REQ;
+    return PnIoCm_BlockType.CHECK_PEERS;
   }
 
+  // Constant values.
+  public static final Short NOOFPEERS = 0x01;
+
   // Properties.
   protected final short blockVersionHigh;
   protected final short blockVersionLow;
-  protected final Uuid arUuid;
-  protected final int sessionKey;
-  protected final int controlCommand;
-
-  // Reserved Fields
-  private Integer reservedField0;
-  private Integer reservedField1;
-  private Integer reservedField2;
+  protected final PascalString peerPortId;
+  protected final PascalString peerChassisId;
 
-  public PnIoCm_Control_Request(
+  public CheckPeers(
       short blockVersionHigh,
       short blockVersionLow,
-      Uuid arUuid,
-      int sessionKey,
-      int controlCommand) {
+      PascalString peerPortId,
+      PascalString peerChassisId) {
     super();
     this.blockVersionHigh = blockVersionHigh;
     this.blockVersionLow = blockVersionLow;
-    this.arUuid = arUuid;
-    this.sessionKey = sessionKey;
-    this.controlCommand = controlCommand;
+    this.peerPortId = peerPortId;
+    this.peerChassisId = peerChassisId;
   }
 
   public short getBlockVersionHigh() {
@@ -76,23 +71,23 @@ public class PnIoCm_Control_Request extends PnIoCm_Block implements Message {
     return blockVersionLow;
   }
 
-  public Uuid getArUuid() {
-    return arUuid;
+  public PascalString getPeerPortId() {
+    return peerPortId;
   }
 
-  public int getSessionKey() {
-    return sessionKey;
+  public PascalString getPeerChassisId() {
+    return peerChassisId;
   }
 
-  public int getControlCommand() {
-    return controlCommand;
+  public short getNoOfPeers() {
+    return NOOFPEERS;
   }
 
   @Override
   protected void serializePnIoCm_BlockChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
     boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
-    writeBuffer.pushContext("PnIoCm_Control_Request");
+    writeBuffer.pushContext("CheckPeers");
 
     // Implicit Field (blockLength) (Used for parsing, but its value is not stored as it's
     // implicitly given by the objects content)
@@ -117,49 +112,28 @@ public class PnIoCm_Control_Request extends PnIoCm_Block implements Message {
         writeUnsignedShort(writeBuffer, 8),
         WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
-    // Reserved Field (reserved)
-    writeReservedField(
-        "reserved",
-        reservedField0 != null ? reservedField0 : (int) 0x0000,
-        writeUnsignedInt(writeBuffer, 16),
+    // Const Field (noOfPeers)
+    writeConstField(
+        "noOfPeers",
+        NOOFPEERS,
+        writeUnsignedShort(writeBuffer, 8),
         WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
-    // Simple Field (arUuid)
+    // Simple Field (peerPortId)
     writeSimpleField(
-        "arUuid",
-        arUuid,
+        "peerPortId",
+        peerPortId,
         new DataWriterComplexDefault<>(writeBuffer),
         WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
-    // Simple Field (sessionKey)
-    writeSimpleField(
-        "sessionKey",
-        sessionKey,
-        writeUnsignedInt(writeBuffer, 16),
-        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
-
-    // Reserved Field (reserved)
-    writeReservedField(
-        "reserved",
-        reservedField1 != null ? reservedField1 : (int) 0x0000,
-        writeUnsignedInt(writeBuffer, 16),
-        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
-
-    // Simple Field (controlCommand)
+    // Simple Field (peerChassisId)
     writeSimpleField(
-        "controlCommand",
-        controlCommand,
-        writeUnsignedInt(writeBuffer, 16),
-        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
-
-    // Reserved Field (reserved)
-    writeReservedField(
-        "reserved",
-        reservedField2 != null ? reservedField2 : (int) 0x0000,
-        writeUnsignedInt(writeBuffer, 16),
+        "peerChassisId",
+        peerChassisId,
+        new DataWriterComplexDefault<>(writeBuffer),
         WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
-    writeBuffer.popContext("PnIoCm_Control_Request");
+    writeBuffer.popContext("CheckPeers");
   }
 
   @Override
@@ -170,7 +144,7 @@ public class PnIoCm_Control_Request extends PnIoCm_Block implements Message {
   @Override
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
-    PnIoCm_Control_Request _value = this;
+    CheckPeers _value = this;
     boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Implicit Field (blockLength)
@@ -182,30 +156,21 @@ public class PnIoCm_Control_Request extends PnIoCm_Block implements Message {
     // Simple field (blockVersionLow)
     lengthInBits += 8;
 
-    // Reserved Field (reserved)
-    lengthInBits += 16;
-
-    // Simple field (arUuid)
-    lengthInBits += arUuid.getLengthInBits();
-
-    // Simple field (sessionKey)
-    lengthInBits += 16;
-
-    // Reserved Field (reserved)
-    lengthInBits += 16;
+    // Const Field (noOfPeers)
+    lengthInBits += 8;
 
-    // Simple field (controlCommand)
-    lengthInBits += 16;
+    // Simple field (peerPortId)
+    lengthInBits += peerPortId.getLengthInBits();
 
-    // Reserved Field (reserved)
-    lengthInBits += 16;
+    // Simple field (peerChassisId)
+    lengthInBits += peerChassisId.getLengthInBits();
 
     return lengthInBits;
   }
 
   public static PnIoCm_BlockBuilder staticParsePnIoCm_BlockBuilder(ReadBuffer readBuffer)
       throws ParseException {
-    readBuffer.pullContext("PnIoCm_Control_Request");
+    readBuffer.pullContext("CheckPeers");
     PositionAware positionAware = readBuffer;
     boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
@@ -227,96 +192,51 @@ public class PnIoCm_Control_Request extends PnIoCm_Block implements Message {
             readUnsignedShort(readBuffer, 8),
             WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
-    Integer reservedField0 =
-        readReservedField(
-            "reserved",
-            readUnsignedInt(readBuffer, 16),
-            (int) 0x0000,
-            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
-
-    Uuid arUuid =
-        readSimpleField(
-            "arUuid",
-            new DataReaderComplexDefault<>(() -> Uuid.staticParse(readBuffer), readBuffer),
+    short noOfPeers =
+        readConstField(
+            "noOfPeers",
+            readUnsignedShort(readBuffer, 8),
+            CheckPeers.NOOFPEERS,
             WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
-    int sessionKey =
+    PascalString peerPortId =
         readSimpleField(
-            "sessionKey",
-            readUnsignedInt(readBuffer, 16),
+            "peerPortId",
+            new DataReaderComplexDefault<>(() -> PascalString.staticParse(readBuffer), readBuffer),
             WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
-    Integer reservedField1 =
-        readReservedField(
-            "reserved",
-            readUnsignedInt(readBuffer, 16),
-            (int) 0x0000,
-            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
-
-    int controlCommand =
+    PascalString peerChassisId =
         readSimpleField(
-            "controlCommand",
-            readUnsignedInt(readBuffer, 16),
-            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
-
-    Integer reservedField2 =
-        readReservedField(
-            "reserved",
-            readUnsignedInt(readBuffer, 16),
-            (int) 0x0000,
+            "peerChassisId",
+            new DataReaderComplexDefault<>(() -> PascalString.staticParse(readBuffer), readBuffer),
             WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
-    readBuffer.closeContext("PnIoCm_Control_Request");
+    readBuffer.closeContext("CheckPeers");
     // Create the instance
-    return new PnIoCm_Control_RequestBuilderImpl(
-        blockVersionHigh,
-        blockVersionLow,
-        arUuid,
-        sessionKey,
-        controlCommand,
-        reservedField0,
-        reservedField1,
-        reservedField2);
+    return new CheckPeersBuilderImpl(blockVersionHigh, blockVersionLow, peerPortId, peerChassisId);
   }
 
-  public static class PnIoCm_Control_RequestBuilderImpl
-      implements PnIoCm_Block.PnIoCm_BlockBuilder {
+  public static class CheckPeersBuilderImpl implements PnIoCm_Block.PnIoCm_BlockBuilder {
     private final short blockVersionHigh;
     private final short blockVersionLow;
-    private final Uuid arUuid;
-    private final int sessionKey;
-    private final int controlCommand;
-    private final Integer reservedField0;
-    private final Integer reservedField1;
-    private final Integer reservedField2;
-
-    public PnIoCm_Control_RequestBuilderImpl(
+    private final PascalString peerPortId;
+    private final PascalString peerChassisId;
+
+    public CheckPeersBuilderImpl(
         short blockVersionHigh,
         short blockVersionLow,
-        Uuid arUuid,
-        int sessionKey,
-        int controlCommand,
-        Integer reservedField0,
-        Integer reservedField1,
-        Integer reservedField2) {
+        PascalString peerPortId,
+        PascalString peerChassisId) {
       this.blockVersionHigh = blockVersionHigh;
       this.blockVersionLow = blockVersionLow;
-      this.arUuid = arUuid;
-      this.sessionKey = sessionKey;
-      this.controlCommand = controlCommand;
-      this.reservedField0 = reservedField0;
-      this.reservedField1 = reservedField1;
-      this.reservedField2 = reservedField2;
+      this.peerPortId = peerPortId;
+      this.peerChassisId = peerChassisId;
     }
 
-    public PnIoCm_Control_Request build() {
-      PnIoCm_Control_Request pnIoCm_Control_Request =
-          new PnIoCm_Control_Request(
-              blockVersionHigh, blockVersionLow, arUuid, sessionKey, controlCommand);
-      pnIoCm_Control_Request.reservedField0 = reservedField0;
-      pnIoCm_Control_Request.reservedField1 = reservedField1;
-      pnIoCm_Control_Request.reservedField2 = reservedField2;
-      return pnIoCm_Control_Request;
+    public CheckPeers build() {
+      CheckPeers checkPeers =
+          new CheckPeers(blockVersionHigh, blockVersionLow, peerPortId, peerChassisId);
+      return checkPeers;
     }
   }
 
@@ -325,15 +245,14 @@ public class PnIoCm_Control_Request extends PnIoCm_Block implements Message {
     if (this == o) {
       return true;
     }
-    if (!(o instanceof PnIoCm_Control_Request)) {
+    if (!(o instanceof CheckPeers)) {
       return false;
     }
-    PnIoCm_Control_Request that = (PnIoCm_Control_Request) o;
+    CheckPeers that = (CheckPeers) o;
     return (getBlockVersionHigh() == that.getBlockVersionHigh())
         && (getBlockVersionLow() == that.getBlockVersionLow())
-        && (getArUuid() == that.getArUuid())
-        && (getSessionKey() == that.getSessionKey())
-        && (getControlCommand() == that.getControlCommand())
+        && (getPeerPortId() == that.getPeerPortId())
+        && (getPeerChassisId() == that.getPeerChassisId())
         && super.equals(that)
         && true;
   }
@@ -344,9 +263,8 @@ public class PnIoCm_Control_Request extends PnIoCm_Block implements Message {
         super.hashCode(),
         getBlockVersionHigh(),
         getBlockVersionLow(),
-        getArUuid(),
-        getSessionKey(),
-        getControlCommand());
+        getPeerPortId(),
+        getPeerChassisId());
   }
 
   @Override
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DataItem.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DataItem.java
new file mode 100644
index 0000000000..4404c32b75
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DataItem.java
@@ -0,0 +1,1139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.math.BigInteger;
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.WithOption;
+import org.apache.plc4x.java.spi.generation.ByteOrder;
+import org.apache.plc4x.java.spi.generation.EvaluationHelper;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.ReadBuffer;
+import org.apache.plc4x.java.spi.generation.SerializationException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
+import org.apache.plc4x.java.spi.values.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class DataItem {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(DataItem.class);
+
+  public static PlcValue staticParse(
+      ReadBuffer readBuffer, ProfinetDataType dataType, Integer numberOfValues)
+      throws ParseException {
+    if (EvaluationHelper.equals(dataType, ProfinetDataType.BOOL)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // BOOL
+
+      // Simple Field (value)
+      Boolean value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readBit("");
+
+      return new PlcBOOL(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.BOOL)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcBOOL(
+                  (Boolean) /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readBit("")));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.OCTETSTRING)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // USINT
+
+      // Simple Field (value)
+      Short value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readUnsignedShort("", 8);
+
+      return new PlcUSINT(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.OCTETSTRING)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcUINT(
+                  (Short) /*TODO: migrate me*/ /*TODO: migrate me*/
+                      readBuffer.readUnsignedShort("", 8)));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.BYTE)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // BYTE
+
+      // Simple Field (value)
+      Short value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readUnsignedShort("", 8);
+
+      return new PlcBYTE(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.BYTE)) { // List
+      // Array field (value)
+      // Count array
+      if ((numberOfValues) * (8) > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + ((numberOfValues) * (8))
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) (numberOfValues) * (8);
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcBOOL(
+                  (Boolean) /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readBit("")));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.WORD)) { // WORD
+
+      // Simple Field (value)
+      Integer value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readUnsignedInt("", 16);
+
+      return new PlcWORD(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.DWORD)) { // DWORD
+
+      // Simple Field (value)
+      Long value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readUnsignedLong("", 32);
+
+      return new PlcDWORD(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.LWORD)) { // LWORD
+
+      // Simple Field (value)
+      BigInteger value = /*TODO: migrate me*/ /*TODO: migrate me*/
+          readBuffer.readUnsignedBigInteger("", 64);
+
+      return new PlcLWORD(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.SINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // SINT
+
+      // Simple Field (value)
+      Byte value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readSignedByte("", 8);
+
+      return new PlcSINT(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.SINT)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcSINT(
+                  (Byte) /*TODO: migrate me*/ /*TODO: migrate me*/
+                      readBuffer.readSignedByte("", 8)));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.INT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // INT
+
+      // Simple Field (value)
+      Short value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readShort("", 16);
+
+      return new PlcINT(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.INT)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcINT(
+                  (Short) /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readShort("", 16)));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.DINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // DINT
+
+      // Simple Field (value)
+      Integer value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readInt("", 32);
+
+      return new PlcDINT(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.DINT)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcDINT(
+                  (Integer) /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readInt("", 32)));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.LINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // LINT
+
+      // Simple Field (value)
+      Long value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readLong("", 64);
+
+      return new PlcLINT(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.LINT)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcLINT(
+                  (Long) /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readLong("", 64)));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.USINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // USINT
+
+      // Simple Field (value)
+      Short value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readUnsignedShort("", 8);
+
+      return new PlcUSINT(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.USINT)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcUINT(
+                  (Short) /*TODO: migrate me*/ /*TODO: migrate me*/
+                      readBuffer.readUnsignedShort("", 8)));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // UINT
+
+      // Simple Field (value)
+      Integer value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readUnsignedInt("", 16);
+
+      return new PlcUINT(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UINT)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcUDINT(
+                  (Integer) /*TODO: migrate me*/ /*TODO: migrate me*/
+                      readBuffer.readUnsignedInt("", 16)));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UDINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // UDINT
+
+      // Simple Field (value)
+      Long value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readUnsignedLong("", 32);
+
+      return new PlcUDINT(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UDINT)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcULINT(
+                  (Long) /*TODO: migrate me*/ /*TODO: migrate me*/
+                      readBuffer.readUnsignedLong("", 32)));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.ULINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // ULINT
+
+      // Simple Field (value)
+      BigInteger value = /*TODO: migrate me*/ /*TODO: migrate me*/
+          readBuffer.readUnsignedBigInteger("", 64);
+
+      return new PlcULINT(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.ULINT)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcLINT(
+                  (BigInteger) /*TODO: migrate me*/ /*TODO: migrate me*/
+                      readBuffer.readUnsignedBigInteger("", 64)));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.REAL)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // REAL
+
+      // Simple Field (value)
+      Float value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readFloat("", 32);
+
+      return new PlcREAL(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.REAL)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcREAL(
+                  (Float) /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readFloat("", 32)));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.LREAL)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // LREAL
+
+      // Simple Field (value)
+      Double value = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readDouble("", 64);
+
+      return new PlcLREAL(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.LREAL)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcLREAL(
+                  (Double) /*TODO: migrate me*/ /*TODO: migrate me*/
+                      readBuffer.readDouble("", 64)));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.CHAR)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // CHAR
+
+      // Simple Field (value)
+      String value = /*TODO: migrate me*/ /*TODO: migrate me*/
+          readBuffer.readString("", 8, WithOption.WithEncoding("UTF-8"));
+
+      return new PlcCHAR(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.CHAR)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcSTRING(
+                  (String) /*TODO: migrate me*/ /*TODO: migrate me*/
+                      readBuffer.readString("", 8, WithOption.WithEncoding("UTF-8"))));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.WCHAR)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // WCHAR
+
+      // Simple Field (value)
+      String value = /*TODO: migrate me*/ /*TODO: migrate me*/
+          readBuffer.readString("", 16, WithOption.WithEncoding("UTF-16"));
+
+      return new PlcWCHAR(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.WCHAR)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcSTRING(
+                  (String) /*TODO: migrate me*/ /*TODO: migrate me*/
+                      readBuffer.readString("", 16, WithOption.WithEncoding("UTF-16"))));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UNICODESTRING8)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // CHAR
+
+      // Simple Field (value)
+      String value = /*TODO: migrate me*/ /*TODO: migrate me*/
+          readBuffer.readString("", 8, WithOption.WithEncoding("UTF-8"));
+
+      return new PlcCHAR(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UNICODESTRING8)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcSTRING(
+                  (String) /*TODO: migrate me*/ /*TODO: migrate me*/
+                      readBuffer.readString("", 8, WithOption.WithEncoding("UTF-8"))));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.WSTRING)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // CHAR
+
+      // Simple Field (value)
+      String value = /*TODO: migrate me*/ /*TODO: migrate me*/
+          readBuffer.readString("", 16, WithOption.WithEncoding("UTF-16"));
+
+      return new PlcCHAR(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.WSTRING)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcSTRING(
+                  (String) /*TODO: migrate me*/ /*TODO: migrate me*/
+                      readBuffer.readString("", 16, WithOption.WithEncoding("UTF-16"))));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.VISIBLESTRING)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // CHAR
+
+      // Simple Field (value)
+      String value = /*TODO: migrate me*/ /*TODO: migrate me*/
+          readBuffer.readString("", 8, WithOption.WithEncoding("UTF-8"));
+
+      return new PlcCHAR(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.VISIBLESTRING)) { // List
+      // Array field (value)
+      // Count array
+      if (numberOfValues > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + (numberOfValues)
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) numberOfValues;
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcSTRING(
+                  (String) /*TODO: migrate me*/ /*TODO: migrate me*/
+                      readBuffer.readString("", 8, WithOption.WithEncoding("UTF-8"))));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.F_MESSAGETRAILER4BYTE)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // List
+      // Array field (value)
+      // Count array
+      if ((4) * (8) > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + ((4) * (8))
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) (4) * (8);
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcUINT(
+                  (Short) /*TODO: migrate me*/ /*TODO: migrate me*/
+                      readBuffer.readUnsignedShort("", 8)));
+        }
+      }
+
+      return new PlcList(value);
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.F_MESSAGETRAILER4BYTE)) { // List
+      // Array field (value)
+      // Count array
+      if ((numberOfValues) * (32) > Integer.MAX_VALUE) {
+        throw new ParseException(
+            "Array count of "
+                + ((numberOfValues) * (32))
+                + " exceeds the maximum allowed count of "
+                + Integer.MAX_VALUE);
+      }
+      List<PlcValue> value;
+      {
+        int itemCount = (int) (numberOfValues) * (32);
+        value = new LinkedList<>();
+        for (int curItem = 0; curItem < itemCount; curItem++) {
+          value.add(
+              new PlcUINT(
+                  (Short) /*TODO: migrate me*/ /*TODO: migrate me*/
+                      readBuffer.readUnsignedShort("", 8)));
+        }
+      }
+
+      return new PlcList(value);
+    }
+    return null;
+  }
+
+  public static void staticSerialize(
+      WriteBuffer writeBuffer, PlcValue _value, ProfinetDataType dataType, Integer numberOfValues)
+      throws SerializationException {
+    staticSerialize(writeBuffer, _value, dataType, numberOfValues, ByteOrder.BIG_ENDIAN);
+  }
+
+  public static void staticSerialize(
+      WriteBuffer writeBuffer,
+      PlcValue _value,
+      ProfinetDataType dataType,
+      Integer numberOfValues,
+      ByteOrder byteOrder)
+      throws SerializationException {
+    if (EvaluationHelper.equals(dataType, ProfinetDataType.BOOL)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // BOOL
+      // Simple Field (value)
+      boolean value = (boolean) _value.getBoolean();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeBit("", (boolean) (value));
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.BOOL)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        Boolean value = (Boolean) val.getBoolean();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeBit("", (boolean) (value));
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.OCTETSTRING)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // USINT
+      // Simple Field (value)
+      short value = (short) _value.getShort();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeUnsignedShort("", 8, ((Number) (value)).shortValue());
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.OCTETSTRING)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        Short value = (Short) val.getShort();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeUnsignedShort("", 8, ((Number) (value)).shortValue());
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.BYTE)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // BYTE
+      // Simple Field (value)
+      short value = (short) _value.getShort();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeUnsignedShort("", 8, ((Number) (value)).shortValue());
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.BYTE)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        Boolean value = (Boolean) val.getBoolean();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeBit("", (boolean) (value));
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.WORD)) { // WORD
+      // Simple Field (value)
+      int value = (int) _value.getInt();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeUnsignedInt("", 16, ((Number) (value)).intValue());
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.DWORD)) { // DWORD
+      // Simple Field (value)
+      long value = (long) _value.getLong();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeUnsignedLong("", 32, ((Number) (value)).longValue());
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.LWORD)) { // LWORD
+      // Simple Field (value)
+      BigInteger value = (BigInteger) _value.getBigInteger();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeUnsignedBigInteger("", 64, (BigInteger) (value));
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.SINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // SINT
+      // Simple Field (value)
+      byte value = (byte) _value.getByte();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeSignedByte("", 8, ((Number) (value)).byteValue());
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.SINT)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        Byte value = (Byte) val.getByte();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeSignedByte("", 8, ((Number) (value)).byteValue());
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.INT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // INT
+      // Simple Field (value)
+      short value = (short) _value.getShort();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeShort("", 16, ((Number) (value)).shortValue());
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.INT)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        Short value = (Short) val.getShort();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeShort("", 16, ((Number) (value)).shortValue());
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.DINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // DINT
+      // Simple Field (value)
+      int value = (int) _value.getInt();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeInt("", 32, ((Number) (value)).intValue());
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.DINT)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        Integer value = (Integer) val.getInteger();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeInt("", 32, ((Number) (value)).intValue());
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.LINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // LINT
+      // Simple Field (value)
+      long value = (long) _value.getLong();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeLong("", 64, ((Number) (value)).longValue());
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.LINT)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        Long value = (Long) val.getLong();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeLong("", 64, ((Number) (value)).longValue());
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.USINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // USINT
+      // Simple Field (value)
+      short value = (short) _value.getShort();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeUnsignedShort("", 8, ((Number) (value)).shortValue());
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.USINT)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        Short value = (Short) val.getShort();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeUnsignedShort("", 8, ((Number) (value)).shortValue());
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // UINT
+      // Simple Field (value)
+      int value = (int) _value.getInt();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeUnsignedInt("", 16, ((Number) (value)).intValue());
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UINT)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        Integer value = (Integer) val.getInteger();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeUnsignedInt("", 16, ((Number) (value)).intValue());
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UDINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // UDINT
+      // Simple Field (value)
+      long value = (long) _value.getLong();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeUnsignedLong("", 32, ((Number) (value)).longValue());
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UDINT)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        Long value = (Long) val.getLong();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeUnsignedLong("", 32, ((Number) (value)).longValue());
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.ULINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // ULINT
+      // Simple Field (value)
+      BigInteger value = (BigInteger) _value.getBigInteger();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeUnsignedBigInteger("", 64, (BigInteger) (value));
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.ULINT)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        BigInteger value = (BigInteger) val.getBigInteger();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeUnsignedBigInteger("", 64, (BigInteger) (value));
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.REAL)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // REAL
+      // Simple Field (value)
+      float value = (float) _value.getFloat();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeFloat("", 32, (value));
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.REAL)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        Float value = (Float) val.getFloat();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeFloat("", 32, (value));
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.LREAL)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // LREAL
+      // Simple Field (value)
+      double value = (double) _value.getDouble();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeDouble("", 64, (value));
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.LREAL)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        Double value = (Double) val.getDouble();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeDouble("", 64, (value));
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.CHAR)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // CHAR
+      // Simple Field (value)
+      String value = (String) _value.getString();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeString(
+          "", 8, (String) (value), WithOption.WithEncoding("UTF-8"));
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.CHAR)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        String value = (String) val.getString();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeString(
+            "", 8, (String) (value), WithOption.WithEncoding("UTF-8"));
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.WCHAR)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // WCHAR
+      // Simple Field (value)
+      String value = (String) _value.getString();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeString(
+          "", 16, (String) (value), WithOption.WithEncoding("UTF-16"));
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.WCHAR)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        String value = (String) val.getString();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeString(
+            "", 16, (String) (value), WithOption.WithEncoding("UTF-16"));
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UNICODESTRING8)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // CHAR
+      // Simple Field (value)
+      String value = (String) _value.getString();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeString(
+          "", 8, (String) (value), WithOption.WithEncoding("UTF-8"));
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UNICODESTRING8)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        String value = (String) val.getString();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeString(
+            "", 8, (String) (value), WithOption.WithEncoding("UTF-8"));
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.WSTRING)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // CHAR
+      // Simple Field (value)
+      String value = (String) _value.getString();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeString(
+          "", 16, (String) (value), WithOption.WithEncoding("UTF-16"));
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.WSTRING)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        String value = (String) val.getString();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeString(
+            "", 16, (String) (value), WithOption.WithEncoding("UTF-16"));
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.VISIBLESTRING)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // CHAR
+      // Simple Field (value)
+      String value = (String) _value.getString();
+      /*TODO: migrate me*/
+      /*TODO: migrate me*/ writeBuffer.writeString(
+          "", 8, (String) (value), WithOption.WithEncoding("UTF-8"));
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.VISIBLESTRING)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        String value = (String) val.getString();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeString(
+            "", 8, (String) (value), WithOption.WithEncoding("UTF-8"));
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.F_MESSAGETRAILER4BYTE)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        Short value = (Short) val.getShort();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeUnsignedShort("", 8, ((Number) (value)).shortValue());
+      }
+
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.F_MESSAGETRAILER4BYTE)) { // List
+      PlcList values = (PlcList) _value;
+
+      for (PlcValue val : ((List<PlcValue>) values.getList())) {
+        Short value = (Short) val.getShort();
+        /*TODO: migrate me*/
+        /*TODO: migrate me*/ writeBuffer.writeUnsignedShort("", 8, ((Number) (value)).shortValue());
+      }
+    }
+  }
+
+  public static int getLengthInBytes(
+      PlcValue _value, ProfinetDataType dataType, Integer numberOfValues) {
+    return (int) Math.ceil((float) getLengthInBits(_value, dataType, numberOfValues) / 8.0);
+  }
+
+  public static int getLengthInBits(
+      PlcValue _value, ProfinetDataType dataType, Integer numberOfValues) {
+    int sizeInBits = 0;
+    if (EvaluationHelper.equals(dataType, ProfinetDataType.BOOL)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // BOOL
+      // Simple Field (value)
+      sizeInBits += 1;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.BOOL)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 1;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.OCTETSTRING)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // USINT
+      // Simple Field (value)
+      sizeInBits += 8;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.OCTETSTRING)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 8;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.BYTE)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // BYTE
+      // Simple Field (value)
+      sizeInBits += 8;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.BYTE)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 1;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.WORD)) { // WORD
+      // Simple Field (value)
+      sizeInBits += 16;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.DWORD)) { // DWORD
+      // Simple Field (value)
+      sizeInBits += 32;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.LWORD)) { // LWORD
+      // Simple Field (value)
+      sizeInBits += 64;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.SINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // SINT
+      // Simple Field (value)
+      sizeInBits += 8;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.SINT)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 8;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.INT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // INT
+      // Simple Field (value)
+      sizeInBits += 16;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.INT)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 16;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.DINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // DINT
+      // Simple Field (value)
+      sizeInBits += 32;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.DINT)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 32;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.LINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // LINT
+      // Simple Field (value)
+      sizeInBits += 64;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.LINT)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 64;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.USINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // USINT
+      // Simple Field (value)
+      sizeInBits += 8;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.USINT)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 8;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // UINT
+      // Simple Field (value)
+      sizeInBits += 16;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UINT)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 16;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UDINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // UDINT
+      // Simple Field (value)
+      sizeInBits += 32;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UDINT)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 32;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.ULINT)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // ULINT
+      // Simple Field (value)
+      sizeInBits += 64;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.ULINT)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 64;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.REAL)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // REAL
+      // Simple Field (value)
+      sizeInBits += 32;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.REAL)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 32;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.LREAL)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // LREAL
+      // Simple Field (value)
+      sizeInBits += 64;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.LREAL)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 64;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.CHAR)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // CHAR
+      // Simple Field (value)
+      sizeInBits += 8;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.CHAR)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 8;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.WCHAR)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // WCHAR
+      // Simple Field (value)
+      sizeInBits += 16;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.WCHAR)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 16;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UNICODESTRING8)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // CHAR
+      // Simple Field (value)
+      sizeInBits += 8;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.UNICODESTRING8)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 8;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.WSTRING)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // CHAR
+      // Simple Field (value)
+      sizeInBits += 16;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.WSTRING)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 16;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.VISIBLESTRING)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // CHAR
+      // Simple Field (value)
+      sizeInBits += 8;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.VISIBLESTRING)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 8;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.F_MESSAGETRAILER4BYTE)
+        && EvaluationHelper.equals(numberOfValues, 1)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 8;
+    } else if (EvaluationHelper.equals(dataType, ProfinetDataType.F_MESSAGETRAILER4BYTE)) { // List
+      PlcList values = (PlcList) _value;
+      sizeInBits += values.getList().size() * 8;
+    }
+    return sizeInBits;
+  }
+}
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_ActivityUuid.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_ActivityUuid.java
new file mode 100644
index 0000000000..1d6a1b8dc9
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_ActivityUuid.java
@@ -0,0 +1,175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class DceRpc_ActivityUuid implements Message {
+
+  // Properties.
+  protected final long data1;
+  protected final int data2;
+  protected final int data3;
+  protected final byte[] data4;
+
+  public DceRpc_ActivityUuid(long data1, int data2, int data3, byte[] data4) {
+    super();
+    this.data1 = data1;
+    this.data2 = data2;
+    this.data3 = data3;
+    this.data4 = data4;
+  }
+
+  public long getData1() {
+    return data1;
+  }
+
+  public int getData2() {
+    return data2;
+  }
+
+  public int getData3() {
+    return data3;
+  }
+
+  public byte[] getData4() {
+    return data4;
+  }
+
+  public void serialize(WriteBuffer writeBuffer) throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+    writeBuffer.pushContext("DceRpc_ActivityUuid");
+
+    // Simple Field (data1)
+    writeSimpleField("data1", data1, writeUnsignedLong(writeBuffer, 32));
+
+    // Simple Field (data2)
+    writeSimpleField("data2", data2, writeUnsignedInt(writeBuffer, 16));
+
+    // Simple Field (data3)
+    writeSimpleField("data3", data3, writeUnsignedInt(writeBuffer, 16));
+
+    // Array Field (data4)
+    writeByteArrayField("data4", data4, writeByteArray(writeBuffer, 8));
+
+    writeBuffer.popContext("DceRpc_ActivityUuid");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = 0;
+    DceRpc_ActivityUuid _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    // Simple field (data1)
+    lengthInBits += 32;
+
+    // Simple field (data2)
+    lengthInBits += 16;
+
+    // Simple field (data3)
+    lengthInBits += 16;
+
+    // Array field
+    if (data4 != null) {
+      lengthInBits += 8 * data4.length;
+    }
+
+    return lengthInBits;
+  }
+
+  public static DceRpc_ActivityUuid staticParse(ReadBuffer readBuffer, Object... args)
+      throws ParseException {
+    PositionAware positionAware = readBuffer;
+    return staticParse(readBuffer);
+  }
+
+  public static DceRpc_ActivityUuid staticParse(ReadBuffer readBuffer) throws ParseException {
+    readBuffer.pullContext("DceRpc_ActivityUuid");
+    PositionAware positionAware = readBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    long data1 = readSimpleField("data1", readUnsignedLong(readBuffer, 32));
+
+    int data2 = readSimpleField("data2", readUnsignedInt(readBuffer, 16));
+
+    int data3 = readSimpleField("data3", readUnsignedInt(readBuffer, 16));
+
+    byte[] data4 = readBuffer.readByteArray("data4", Math.toIntExact(8));
+
+    readBuffer.closeContext("DceRpc_ActivityUuid");
+    // Create the instance
+    DceRpc_ActivityUuid _dceRpc_ActivityUuid;
+    _dceRpc_ActivityUuid = new DceRpc_ActivityUuid(data1, data2, data3, data4);
+    return _dceRpc_ActivityUuid;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof DceRpc_ActivityUuid)) {
+      return false;
+    }
+    DceRpc_ActivityUuid that = (DceRpc_ActivityUuid) o;
+    return (getData1() == that.getData1())
+        && (getData2() == that.getData2())
+        && (getData3() == that.getData3())
+        && (getData4() == that.getData4())
+        && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(getData1(), getData2(), getData3(), getData4());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_InterfaceUuid.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_InterfaceUuid.java
new file mode 100644
index 0000000000..a60b0d161d
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_InterfaceUuid.java
@@ -0,0 +1,279 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public abstract class DceRpc_InterfaceUuid implements Message {
+
+  // Abstract accessors for discriminator values.
+  public abstract Long getInterfaceType();
+
+  // Constant values.
+  public static final Integer DATA1 = 0x6C97;
+  public static final Integer DATA2 = 0x11D1;
+  public static final Integer DATA3 = 0x8271;
+  public static final Integer DATA4 = 0x00A0;
+  public static final Integer DATA5 = 0x2442;
+  public static final Integer DATA6 = 0xDF7D;
+
+  public DceRpc_InterfaceUuid() {
+    super();
+  }
+
+  public int getData1() {
+    return DATA1;
+  }
+
+  public int getData2() {
+    return DATA2;
+  }
+
+  public int getData3() {
+    return DATA3;
+  }
+
+  public int getData4() {
+    return DATA4;
+  }
+
+  public int getData5() {
+    return DATA5;
+  }
+
+  public int getData6() {
+    return DATA6;
+  }
+
+  protected abstract void serializeDceRpc_InterfaceUuidChild(WriteBuffer writeBuffer)
+      throws SerializationException;
+
+  public void serialize(WriteBuffer writeBuffer) throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+    writeBuffer.pushContext("DceRpc_InterfaceUuid");
+
+    // Discriminator Field (interfaceType) (Used as input to a switch field)
+    writeDiscriminatorField(
+        "interfaceType", getInterfaceType(), writeUnsignedLong(writeBuffer, 32));
+
+    // Const Field (data1)
+    writeConstField("data1", DATA1, writeUnsignedInt(writeBuffer, 16));
+
+    // Const Field (data2)
+    writeConstField("data2", DATA2, writeUnsignedInt(writeBuffer, 16));
+
+    // Const Field (data3)
+    writeConstField(
+        "data3",
+        DATA3,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Const Field (data4)
+    writeConstField(
+        "data4",
+        DATA4,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Const Field (data5)
+    writeConstField(
+        "data5",
+        DATA5,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Const Field (data6)
+    writeConstField(
+        "data6",
+        DATA6,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Switch field (Serialize the sub-type)
+    serializeDceRpc_InterfaceUuidChild(writeBuffer);
+
+    writeBuffer.popContext("DceRpc_InterfaceUuid");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = 0;
+    DceRpc_InterfaceUuid _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    // Discriminator Field (interfaceType)
+    lengthInBits += 32;
+
+    // Const Field (data1)
+    lengthInBits += 16;
+
+    // Const Field (data2)
+    lengthInBits += 16;
+
+    // Const Field (data3)
+    lengthInBits += 16;
+
+    // Const Field (data4)
+    lengthInBits += 16;
+
+    // Const Field (data5)
+    lengthInBits += 16;
+
+    // Const Field (data6)
+    lengthInBits += 16;
+
+    // Length of sub-type elements will be added by sub-type...
+
+    return lengthInBits;
+  }
+
+  public static DceRpc_InterfaceUuid staticParse(ReadBuffer readBuffer, Object... args)
+      throws ParseException {
+    PositionAware positionAware = readBuffer;
+    return staticParse(readBuffer);
+  }
+
+  public static DceRpc_InterfaceUuid staticParse(ReadBuffer readBuffer) throws ParseException {
+    readBuffer.pullContext("DceRpc_InterfaceUuid");
+    PositionAware positionAware = readBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    long interfaceType = readDiscriminatorField("interfaceType", readUnsignedLong(readBuffer, 32));
+
+    int data1 =
+        readConstField("data1", readUnsignedInt(readBuffer, 16), DceRpc_InterfaceUuid.DATA1);
+
+    int data2 =
+        readConstField("data2", readUnsignedInt(readBuffer, 16), DceRpc_InterfaceUuid.DATA2);
+
+    int data3 =
+        readConstField(
+            "data3",
+            readUnsignedInt(readBuffer, 16),
+            DceRpc_InterfaceUuid.DATA3,
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    int data4 =
+        readConstField(
+            "data4",
+            readUnsignedInt(readBuffer, 16),
+            DceRpc_InterfaceUuid.DATA4,
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    int data5 =
+        readConstField(
+            "data5",
+            readUnsignedInt(readBuffer, 16),
+            DceRpc_InterfaceUuid.DATA5,
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    int data6 =
+        readConstField(
+            "data6",
+            readUnsignedInt(readBuffer, 16),
+            DceRpc_InterfaceUuid.DATA6,
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    DceRpc_InterfaceUuidBuilder builder = null;
+    if (EvaluationHelper.equals(interfaceType, (long) 0xDEA00001L)) {
+      builder =
+          DceRpc_InterfaceUuid_DeviceInterface.staticParseDceRpc_InterfaceUuidBuilder(readBuffer);
+    } else if (EvaluationHelper.equals(interfaceType, (long) 0xDEA00002L)) {
+      builder =
+          DceRpc_InterfaceUuid_ControllerInterface.staticParseDceRpc_InterfaceUuidBuilder(
+              readBuffer);
+    } else if (EvaluationHelper.equals(interfaceType, (long) 0xDEA00003L)) {
+      builder =
+          DceRpc_InterfaceUuid_SupervisorInterface.staticParseDceRpc_InterfaceUuidBuilder(
+              readBuffer);
+    } else if (EvaluationHelper.equals(interfaceType, (long) 0xDEA00004L)) {
+      builder =
+          DceRpc_InterfaceUuid_ParameterInterface.staticParseDceRpc_InterfaceUuidBuilder(
+              readBuffer);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "interfaceType="
+              + interfaceType
+              + "]");
+    }
+
+    readBuffer.closeContext("DceRpc_InterfaceUuid");
+    // Create the instance
+    DceRpc_InterfaceUuid _dceRpc_InterfaceUuid = builder.build();
+    return _dceRpc_InterfaceUuid;
+  }
+
+  public interface DceRpc_InterfaceUuidBuilder {
+    DceRpc_InterfaceUuid build();
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof DceRpc_InterfaceUuid)) {
+      return false;
+    }
+    DceRpc_InterfaceUuid that = (DceRpc_InterfaceUuid) o;
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash();
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_InterfaceUuid_ControllerInterface.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_InterfaceUuid_ControllerInterface.java
new file mode 100644
index 0000000000..1b3487ab74
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_InterfaceUuid_ControllerInterface.java
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class DceRpc_InterfaceUuid_ControllerInterface extends DceRpc_InterfaceUuid
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Long getInterfaceType() {
+    return (long) 0xDEA00002L;
+  }
+
+  public DceRpc_InterfaceUuid_ControllerInterface() {
+    super();
+  }
+
+  @Override
+  protected void serializeDceRpc_InterfaceUuidChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+    writeBuffer.pushContext("DceRpc_InterfaceUuid_ControllerInterface");
+
+    writeBuffer.popContext("DceRpc_InterfaceUuid_ControllerInterface");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    DceRpc_InterfaceUuid_ControllerInterface _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    return lengthInBits;
+  }
+
+  public static DceRpc_InterfaceUuidBuilder staticParseDceRpc_InterfaceUuidBuilder(
+      ReadBuffer readBuffer) throws ParseException {
+    readBuffer.pullContext("DceRpc_InterfaceUuid_ControllerInterface");
+    PositionAware positionAware = readBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    readBuffer.closeContext("DceRpc_InterfaceUuid_ControllerInterface");
+    // Create the instance
+    return new DceRpc_InterfaceUuid_ControllerInterfaceBuilderImpl();
+  }
+
+  public static class DceRpc_InterfaceUuid_ControllerInterfaceBuilderImpl
+      implements DceRpc_InterfaceUuid.DceRpc_InterfaceUuidBuilder {
+
+    public DceRpc_InterfaceUuid_ControllerInterfaceBuilderImpl() {}
+
+    public DceRpc_InterfaceUuid_ControllerInterface build() {
+      DceRpc_InterfaceUuid_ControllerInterface dceRpc_InterfaceUuid_ControllerInterface =
+          new DceRpc_InterfaceUuid_ControllerInterface();
+      return dceRpc_InterfaceUuid_ControllerInterface;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof DceRpc_InterfaceUuid_ControllerInterface)) {
+      return false;
+    }
+    DceRpc_InterfaceUuid_ControllerInterface that = (DceRpc_InterfaceUuid_ControllerInterface) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_InterfaceUuid_DeviceInterface.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_InterfaceUuid_DeviceInterface.java
new file mode 100644
index 0000000000..d5313281c7
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_InterfaceUuid_DeviceInterface.java
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class DceRpc_InterfaceUuid_DeviceInterface extends DceRpc_InterfaceUuid implements Message {
+
+  // Accessors for discriminator values.
+  public Long getInterfaceType() {
+    return (long) 0xDEA00001L;
+  }
+
+  public DceRpc_InterfaceUuid_DeviceInterface() {
+    super();
+  }
+
+  @Override
+  protected void serializeDceRpc_InterfaceUuidChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+    writeBuffer.pushContext("DceRpc_InterfaceUuid_DeviceInterface");
+
+    writeBuffer.popContext("DceRpc_InterfaceUuid_DeviceInterface");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    DceRpc_InterfaceUuid_DeviceInterface _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    return lengthInBits;
+  }
+
+  public static DceRpc_InterfaceUuidBuilder staticParseDceRpc_InterfaceUuidBuilder(
+      ReadBuffer readBuffer) throws ParseException {
+    readBuffer.pullContext("DceRpc_InterfaceUuid_DeviceInterface");
+    PositionAware positionAware = readBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    readBuffer.closeContext("DceRpc_InterfaceUuid_DeviceInterface");
+    // Create the instance
+    return new DceRpc_InterfaceUuid_DeviceInterfaceBuilderImpl();
+  }
+
+  public static class DceRpc_InterfaceUuid_DeviceInterfaceBuilderImpl
+      implements DceRpc_InterfaceUuid.DceRpc_InterfaceUuidBuilder {
+
+    public DceRpc_InterfaceUuid_DeviceInterfaceBuilderImpl() {}
+
+    public DceRpc_InterfaceUuid_DeviceInterface build() {
+      DceRpc_InterfaceUuid_DeviceInterface dceRpc_InterfaceUuid_DeviceInterface =
+          new DceRpc_InterfaceUuid_DeviceInterface();
+      return dceRpc_InterfaceUuid_DeviceInterface;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof DceRpc_InterfaceUuid_DeviceInterface)) {
+      return false;
+    }
+    DceRpc_InterfaceUuid_DeviceInterface that = (DceRpc_InterfaceUuid_DeviceInterface) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_InterfaceUuid_ParameterInterface.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_InterfaceUuid_ParameterInterface.java
new file mode 100644
index 0000000000..1e83364493
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_InterfaceUuid_ParameterInterface.java
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class DceRpc_InterfaceUuid_ParameterInterface extends DceRpc_InterfaceUuid
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Long getInterfaceType() {
+    return (long) 0xDEA00004L;
+  }
+
+  public DceRpc_InterfaceUuid_ParameterInterface() {
+    super();
+  }
+
+  @Override
+  protected void serializeDceRpc_InterfaceUuidChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+    writeBuffer.pushContext("DceRpc_InterfaceUuid_ParameterInterface");
+
+    writeBuffer.popContext("DceRpc_InterfaceUuid_ParameterInterface");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    DceRpc_InterfaceUuid_ParameterInterface _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    return lengthInBits;
+  }
+
+  public static DceRpc_InterfaceUuidBuilder staticParseDceRpc_InterfaceUuidBuilder(
+      ReadBuffer readBuffer) throws ParseException {
+    readBuffer.pullContext("DceRpc_InterfaceUuid_ParameterInterface");
+    PositionAware positionAware = readBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    readBuffer.closeContext("DceRpc_InterfaceUuid_ParameterInterface");
+    // Create the instance
+    return new DceRpc_InterfaceUuid_ParameterInterfaceBuilderImpl();
+  }
+
+  public static class DceRpc_InterfaceUuid_ParameterInterfaceBuilderImpl
+      implements DceRpc_InterfaceUuid.DceRpc_InterfaceUuidBuilder {
+
+    public DceRpc_InterfaceUuid_ParameterInterfaceBuilderImpl() {}
+
+    public DceRpc_InterfaceUuid_ParameterInterface build() {
+      DceRpc_InterfaceUuid_ParameterInterface dceRpc_InterfaceUuid_ParameterInterface =
+          new DceRpc_InterfaceUuid_ParameterInterface();
+      return dceRpc_InterfaceUuid_ParameterInterface;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof DceRpc_InterfaceUuid_ParameterInterface)) {
+      return false;
+    }
+    DceRpc_InterfaceUuid_ParameterInterface that = (DceRpc_InterfaceUuid_ParameterInterface) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_InterfaceUuid_SupervisorInterface.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_InterfaceUuid_SupervisorInterface.java
new file mode 100644
index 0000000000..320bb08c47
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_InterfaceUuid_SupervisorInterface.java
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class DceRpc_InterfaceUuid_SupervisorInterface extends DceRpc_InterfaceUuid
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Long getInterfaceType() {
+    return (long) 0xDEA00003L;
+  }
+
+  public DceRpc_InterfaceUuid_SupervisorInterface() {
+    super();
+  }
+
+  @Override
+  protected void serializeDceRpc_InterfaceUuidChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+    writeBuffer.pushContext("DceRpc_InterfaceUuid_SupervisorInterface");
+
+    writeBuffer.popContext("DceRpc_InterfaceUuid_SupervisorInterface");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    DceRpc_InterfaceUuid_SupervisorInterface _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    return lengthInBits;
+  }
+
+  public static DceRpc_InterfaceUuidBuilder staticParseDceRpc_InterfaceUuidBuilder(
+      ReadBuffer readBuffer) throws ParseException {
+    readBuffer.pullContext("DceRpc_InterfaceUuid_SupervisorInterface");
+    PositionAware positionAware = readBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    readBuffer.closeContext("DceRpc_InterfaceUuid_SupervisorInterface");
+    // Create the instance
+    return new DceRpc_InterfaceUuid_SupervisorInterfaceBuilderImpl();
+  }
+
+  public static class DceRpc_InterfaceUuid_SupervisorInterfaceBuilderImpl
+      implements DceRpc_InterfaceUuid.DceRpc_InterfaceUuidBuilder {
+
+    public DceRpc_InterfaceUuid_SupervisorInterfaceBuilderImpl() {}
+
+    public DceRpc_InterfaceUuid_SupervisorInterface build() {
+      DceRpc_InterfaceUuid_SupervisorInterface dceRpc_InterfaceUuid_SupervisorInterface =
+          new DceRpc_InterfaceUuid_SupervisorInterface();
+      return dceRpc_InterfaceUuid_SupervisorInterface;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof DceRpc_InterfaceUuid_SupervisorInterface)) {
+      return false;
+    }
+    DceRpc_InterfaceUuid_SupervisorInterface that = (DceRpc_InterfaceUuid_SupervisorInterface) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_ObjectUuid.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_ObjectUuid.java
new file mode 100644
index 0000000000..e35e173bbc
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_ObjectUuid.java
@@ -0,0 +1,268 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class DceRpc_ObjectUuid implements Message {
+
+  // Constant values.
+  public static final Long DATA1 = 0xDEA00000L;
+  public static final Integer DATA2 = 0x6C97;
+  public static final Integer DATA3 = 0x11D1;
+  public static final Integer DATA4 = 0x8271;
+
+  // Properties.
+  protected final byte interfaceNumber;
+  protected final int nodeNumber;
+  protected final int deviceId;
+  protected final int vendorId;
+
+  public DceRpc_ObjectUuid(byte interfaceNumber, int nodeNumber, int deviceId, int vendorId) {
+    super();
+    this.interfaceNumber = interfaceNumber;
+    this.nodeNumber = nodeNumber;
+    this.deviceId = deviceId;
+    this.vendorId = vendorId;
+  }
+
+  public byte getInterfaceNumber() {
+    return interfaceNumber;
+  }
+
+  public int getNodeNumber() {
+    return nodeNumber;
+  }
+
+  public int getDeviceId() {
+    return deviceId;
+  }
+
+  public int getVendorId() {
+    return vendorId;
+  }
+
+  public long getData1() {
+    return DATA1;
+  }
+
+  public int getData2() {
+    return DATA2;
+  }
+
+  public int getData3() {
+    return DATA3;
+  }
+
+  public int getData4() {
+    return DATA4;
+  }
+
+  public void serialize(WriteBuffer writeBuffer) throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+    writeBuffer.pushContext("DceRpc_ObjectUuid");
+
+    // Const Field (data1)
+    writeConstField("data1", DATA1, writeUnsignedLong(writeBuffer, 32));
+
+    // Const Field (data2)
+    writeConstField("data2", DATA2, writeUnsignedInt(writeBuffer, 16));
+
+    // Const Field (data3)
+    writeConstField("data3", DATA3, writeUnsignedInt(writeBuffer, 16));
+
+    // Const Field (data4)
+    writeConstField(
+        "data4",
+        DATA4,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Simple Field (interfaceNumber)
+    writeSimpleField(
+        "interfaceNumber",
+        interfaceNumber,
+        writeUnsignedByte(writeBuffer, 4),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Simple Field (nodeNumber)
+    writeSimpleField(
+        "nodeNumber",
+        nodeNumber,
+        writeUnsignedInt(writeBuffer, 12),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Simple Field (deviceId)
+    writeSimpleField(
+        "deviceId",
+        deviceId,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Simple Field (vendorId)
+    writeSimpleField(
+        "vendorId",
+        vendorId,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    writeBuffer.popContext("DceRpc_ObjectUuid");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = 0;
+    DceRpc_ObjectUuid _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    // Const Field (data1)
+    lengthInBits += 32;
+
+    // Const Field (data2)
+    lengthInBits += 16;
+
+    // Const Field (data3)
+    lengthInBits += 16;
+
+    // Const Field (data4)
+    lengthInBits += 16;
+
+    // Simple field (interfaceNumber)
+    lengthInBits += 4;
+
+    // Simple field (nodeNumber)
+    lengthInBits += 12;
+
+    // Simple field (deviceId)
+    lengthInBits += 16;
+
+    // Simple field (vendorId)
+    lengthInBits += 16;
+
+    return lengthInBits;
+  }
+
+  public static DceRpc_ObjectUuid staticParse(ReadBuffer readBuffer, Object... args)
+      throws ParseException {
+    PositionAware positionAware = readBuffer;
+    return staticParse(readBuffer);
+  }
+
+  public static DceRpc_ObjectUuid staticParse(ReadBuffer readBuffer) throws ParseException {
+    readBuffer.pullContext("DceRpc_ObjectUuid");
+    PositionAware positionAware = readBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    long data1 = readConstField("data1", readUnsignedLong(readBuffer, 32), DceRpc_ObjectUuid.DATA1);
+
+    int data2 = readConstField("data2", readUnsignedInt(readBuffer, 16), DceRpc_ObjectUuid.DATA2);
+
+    int data3 = readConstField("data3", readUnsignedInt(readBuffer, 16), DceRpc_ObjectUuid.DATA3);
+
+    int data4 =
+        readConstField(
+            "data4",
+            readUnsignedInt(readBuffer, 16),
+            DceRpc_ObjectUuid.DATA4,
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    byte interfaceNumber =
+        readSimpleField(
+            "interfaceNumber",
+            readUnsignedByte(readBuffer, 4),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    int nodeNumber =
+        readSimpleField(
+            "nodeNumber",
+            readUnsignedInt(readBuffer, 12),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    int deviceId =
+        readSimpleField(
+            "deviceId",
+            readUnsignedInt(readBuffer, 16),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    int vendorId =
+        readSimpleField(
+            "vendorId",
+            readUnsignedInt(readBuffer, 16),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    readBuffer.closeContext("DceRpc_ObjectUuid");
+    // Create the instance
+    DceRpc_ObjectUuid _dceRpc_ObjectUuid;
+    _dceRpc_ObjectUuid = new DceRpc_ObjectUuid(interfaceNumber, nodeNumber, deviceId, vendorId);
+    return _dceRpc_ObjectUuid;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof DceRpc_ObjectUuid)) {
+      return false;
+    }
+    DceRpc_ObjectUuid that = (DceRpc_ObjectUuid) o;
+    return (getInterfaceNumber() == that.getInterfaceNumber())
+        && (getNodeNumber() == that.getNodeNumber())
+        && (getDeviceId() == that.getDeviceId())
+        && (getVendorId() == that.getVendorId())
+        && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(getInterfaceNumber(), getNodeNumber(), getDeviceId(), getVendorId());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_BlockType.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_Operation.java
similarity index 59%
copy from plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_BlockType.java
copy to plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_Operation.java
index 3366b5b92f..0ae43b2c65 100644
--- a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_BlockType.java
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_Operation.java
@@ -23,37 +23,25 @@ import java.util.Map;
 
 // Code generated by code-generation. DO NOT EDIT.
 
-public enum PnIoCm_BlockType {
-  IOD_WRITE_REQUEST_HEADER((int) 0x0008),
-  AR_BLOCK_REQ((int) 0x0101),
-  IO_CR_BLOCK_REQ((int) 0x0102),
-  ALARM_CR_BLOCK_REQ((int) 0x0103),
-  EXPECTED_SUBMODULE_BLOCK_REQ((int) 0x0104),
-  IOD_CONTROL_REQ((int) 0x0110),
-  IOX_BLOCK_REQ((int) 0x0112),
-  PD_PORT_DATA_CHECK((int) 0x0200),
-  CHECK_PEERS((int) 0x020a),
-  PD_INTERFACE_ADJUST((int) 0x0250),
-  IOD_WRITE_RESPONSE_HEADER((int) 0x8008),
-  AR_BLOCK_RES((int) 0x8101),
-  IO_CR_BLOCK_RES((int) 0x8102),
-  ALARM_CR_BLOCK_RES((int) 0x8103),
-  MODULE_DIFF_BLOCK((int) 0x8104),
-  AR_SERVER_BLOCK((int) 0x8106),
-  IOD_CONTROL_RES((int) 0x8110),
-  IOX_BLOCK_RES((int) 0x8112);
-  private static final Map<Integer, PnIoCm_BlockType> map;
+public enum DceRpc_Operation {
+  CONNECT((int) 0x0000),
+  RELEASE((int) 0x0001),
+  READ((int) 0x0002),
+  WRITE((int) 0x0003),
+  CONTROL((int) 0x0004),
+  READ_IMPLICIT((int) 0x0005);
+  private static final Map<Integer, DceRpc_Operation> map;
 
   static {
     map = new HashMap<>();
-    for (PnIoCm_BlockType value : PnIoCm_BlockType.values()) {
+    for (DceRpc_Operation value : DceRpc_Operation.values()) {
       map.put((int) value.getValue(), value);
     }
   }
 
   private final int value;
 
-  PnIoCm_BlockType(int value) {
+  DceRpc_Operation(int value) {
     this.value = value;
   }
 
@@ -61,7 +49,7 @@ public enum PnIoCm_BlockType {
     return value;
   }
 
-  public static PnIoCm_BlockType enumForValue(int value) {
+  public static DceRpc_Operation enumForValue(int value) {
     return map.get(value);
   }
 
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_Packet.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_Packet.java
new file mode 100644
index 0000000000..bea66c6550
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_Packet.java
@@ -0,0 +1,967 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class DceRpc_Packet implements Message {
+
+  // Constant values.
+  public static final Short VERSION = 0x04;
+  public static final Boolean BROADCAST = false;
+  public static final Boolean MAYBE = false;
+  public static final Boolean FRAGMENT = false;
+  public static final Boolean CANCELWASPENDING = false;
+  public static final Short SERIALHIGH = 0x00;
+  public static final Long INTERFACEVER = 0x00000001L;
+  public static final Integer INTERFACEHINT = 0xFFFF;
+  public static final Integer ACTIVITYHINT = 0xFFFF;
+  public static final Integer FRAGMENTNUM = 0x0000;
+  public static final Short AUTHPROTO = 0x00;
+
+  // Properties.
+  protected final DceRpc_PacketType packetType;
+  protected final boolean idempotent;
+  protected final boolean noFragmentAcknowledgeRequested;
+  protected final boolean lastFragment;
+  protected final IntegerEncoding integerEncoding;
+  protected final CharacterEncoding characterEncoding;
+  protected final FloatingPointEncoding floatingPointEncoding;
+  protected final DceRpc_ObjectUuid objectUuid;
+  protected final DceRpc_InterfaceUuid interfaceUuid;
+  protected final DceRpc_ActivityUuid activityUuid;
+  protected final long serverBootTime;
+  protected final long sequenceNumber;
+  protected final DceRpc_Operation operation;
+  protected final short serialLow;
+  protected final PnIoCm_Packet payload;
+
+  // Reserved Fields
+  private Boolean reservedField0;
+  private Boolean reservedField1;
+  private Short reservedField2;
+  private Boolean reservedField3;
+  private Short reservedField4;
+
+  public DceRpc_Packet(
+      DceRpc_PacketType packetType,
+      boolean idempotent,
+      boolean noFragmentAcknowledgeRequested,
+      boolean lastFragment,
+      IntegerEncoding integerEncoding,
+      CharacterEncoding characterEncoding,
+      FloatingPointEncoding floatingPointEncoding,
+      DceRpc_ObjectUuid objectUuid,
+      DceRpc_InterfaceUuid interfaceUuid,
+      DceRpc_ActivityUuid activityUuid,
+      long serverBootTime,
+      long sequenceNumber,
+      DceRpc_Operation operation,
+      short serialLow,
+      PnIoCm_Packet payload) {
+    super();
+    this.packetType = packetType;
+    this.idempotent = idempotent;
+    this.noFragmentAcknowledgeRequested = noFragmentAcknowledgeRequested;
+    this.lastFragment = lastFragment;
+    this.integerEncoding = integerEncoding;
+    this.characterEncoding = characterEncoding;
+    this.floatingPointEncoding = floatingPointEncoding;
+    this.objectUuid = objectUuid;
+    this.interfaceUuid = interfaceUuid;
+    this.activityUuid = activityUuid;
+    this.serverBootTime = serverBootTime;
+    this.sequenceNumber = sequenceNumber;
+    this.operation = operation;
+    this.serialLow = serialLow;
+    this.payload = payload;
+  }
+
+  public DceRpc_PacketType getPacketType() {
+    return packetType;
+  }
+
+  public boolean getIdempotent() {
+    return idempotent;
+  }
+
+  public boolean getNoFragmentAcknowledgeRequested() {
+    return noFragmentAcknowledgeRequested;
+  }
+
+  public boolean getLastFragment() {
+    return lastFragment;
+  }
+
+  public IntegerEncoding getIntegerEncoding() {
+    return integerEncoding;
+  }
+
+  public CharacterEncoding getCharacterEncoding() {
+    return characterEncoding;
+  }
+
+  public FloatingPointEncoding getFloatingPointEncoding() {
+    return floatingPointEncoding;
+  }
+
+  public DceRpc_ObjectUuid getObjectUuid() {
+    return objectUuid;
+  }
+
+  public DceRpc_InterfaceUuid getInterfaceUuid() {
+    return interfaceUuid;
+  }
+
+  public DceRpc_ActivityUuid getActivityUuid() {
+    return activityUuid;
+  }
+
+  public long getServerBootTime() {
+    return serverBootTime;
+  }
+
+  public long getSequenceNumber() {
+    return sequenceNumber;
+  }
+
+  public DceRpc_Operation getOperation() {
+    return operation;
+  }
+
+  public short getSerialLow() {
+    return serialLow;
+  }
+
+  public PnIoCm_Packet getPayload() {
+    return payload;
+  }
+
+  public short getVersion() {
+    return VERSION;
+  }
+
+  public boolean getBroadcast() {
+    return BROADCAST;
+  }
+
+  public boolean getMaybe() {
+    return MAYBE;
+  }
+
+  public boolean getFragment() {
+    return FRAGMENT;
+  }
+
+  public boolean getCancelWasPending() {
+    return CANCELWASPENDING;
+  }
+
+  public short getSerialHigh() {
+    return SERIALHIGH;
+  }
+
+  public long getInterfaceVer() {
+    return INTERFACEVER;
+  }
+
+  public int getInterfaceHint() {
+    return INTERFACEHINT;
+  }
+
+  public int getActivityHint() {
+    return ACTIVITYHINT;
+  }
+
+  public int getFragmentNum() {
+    return FRAGMENTNUM;
+  }
+
+  public short getAuthProto() {
+    return AUTHPROTO;
+  }
+
+  public void serialize(WriteBuffer writeBuffer) throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+    writeBuffer.pushContext("DceRpc_Packet");
+
+    // Const Field (version)
+    writeConstField(
+        "version",
+        VERSION,
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Simple Field (packetType)
+    writeSimpleEnumField(
+        "packetType",
+        "DceRpc_PacketType",
+        packetType,
+        new DataWriterEnumDefault<>(
+            DceRpc_PacketType::getValue,
+            DceRpc_PacketType::name,
+            writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Reserved Field (reserved)
+    writeReservedField(
+        "reserved",
+        reservedField0 != null ? reservedField0 : (boolean) false,
+        writeBoolean(writeBuffer),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Const Field (broadcast)
+    writeConstField(
+        "broadcast",
+        BROADCAST,
+        writeBoolean(writeBuffer),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Simple Field (idempotent)
+    writeSimpleField(
+        "idempotent",
+        idempotent,
+        writeBoolean(writeBuffer),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Const Field (maybe)
+    writeConstField(
+        "maybe", MAYBE, writeBoolean(writeBuffer), WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Simple Field (noFragmentAcknowledgeRequested)
+    writeSimpleField(
+        "noFragmentAcknowledgeRequested",
+        noFragmentAcknowledgeRequested,
+        writeBoolean(writeBuffer),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Const Field (fragment)
+    writeConstField(
+        "fragment",
+        FRAGMENT,
+        writeBoolean(writeBuffer),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Simple Field (lastFragment)
+    writeSimpleField(
+        "lastFragment",
+        lastFragment,
+        writeBoolean(writeBuffer),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Reserved Field (reserved)
+    writeReservedField(
+        "reserved",
+        reservedField1 != null ? reservedField1 : (boolean) false,
+        writeBoolean(writeBuffer),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Reserved Field (reserved)
+    writeReservedField(
+        "reserved",
+        reservedField2 != null ? reservedField2 : (short) 0x00,
+        writeUnsignedShort(writeBuffer, 6),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Const Field (cancelWasPending)
+    writeConstField(
+        "cancelWasPending",
+        CANCELWASPENDING,
+        writeBoolean(writeBuffer),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Reserved Field (reserved)
+    writeReservedField(
+        "reserved",
+        reservedField3 != null ? reservedField3 : (boolean) false,
+        writeBoolean(writeBuffer),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Simple Field (integerEncoding)
+    writeSimpleEnumField(
+        "integerEncoding",
+        "IntegerEncoding",
+        integerEncoding,
+        new DataWriterEnumDefault<>(
+            IntegerEncoding::getValue, IntegerEncoding::name, writeUnsignedByte(writeBuffer, 4)),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Simple Field (characterEncoding)
+    writeSimpleEnumField(
+        "characterEncoding",
+        "CharacterEncoding",
+        characterEncoding,
+        new DataWriterEnumDefault<>(
+            CharacterEncoding::getValue,
+            CharacterEncoding::name,
+            writeUnsignedByte(writeBuffer, 4)),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Simple Field (floatingPointEncoding)
+    writeSimpleEnumField(
+        "floatingPointEncoding",
+        "FloatingPointEncoding",
+        floatingPointEncoding,
+        new DataWriterEnumDefault<>(
+            FloatingPointEncoding::getValue,
+            FloatingPointEncoding::name,
+            writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Reserved Field (reserved)
+    writeReservedField(
+        "reserved",
+        reservedField4 != null ? reservedField4 : (short) 0x00,
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Const Field (serialHigh)
+    writeConstField(
+        "serialHigh",
+        SERIALHIGH,
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Simple Field (objectUuid)
+    writeSimpleField(
+        "objectUuid",
+        objectUuid,
+        new DataWriterComplexDefault<>(writeBuffer),
+        WithOption.WithByteOrder(
+            (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
+
+    // Simple Field (interfaceUuid)
+    writeSimpleField(
+        "interfaceUuid",
+        interfaceUuid,
+        new DataWriterComplexDefault<>(writeBuffer),
+        WithOption.WithByteOrder(
+            (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
+
+    // Simple Field (activityUuid)
+    writeSimpleField(
+        "activityUuid",
+        activityUuid,
+        new DataWriterComplexDefault<>(writeBuffer),
+        WithOption.WithByteOrder(
+            (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
+
+    // Simple Field (serverBootTime)
+    writeSimpleField(
+        "serverBootTime",
+        serverBootTime,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithByteOrder(
+            (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
+
+    // Const Field (interfaceVer)
+    writeConstField(
+        "interfaceVer",
+        INTERFACEVER,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithByteOrder(
+            (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
+
+    // Simple Field (sequenceNumber)
+    writeSimpleField(
+        "sequenceNumber",
+        sequenceNumber,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithByteOrder(
+            (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
+
+    // Simple Field (operation)
+    writeSimpleEnumField(
+        "operation",
+        "DceRpc_Operation",
+        operation,
+        new DataWriterEnumDefault<>(
+            DceRpc_Operation::getValue, DceRpc_Operation::name, writeUnsignedInt(writeBuffer, 16)),
+        WithOption.WithByteOrder(
+            (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
+
+    // Const Field (interfaceHint)
+    writeConstField(
+        "interfaceHint",
+        INTERFACEHINT,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
+
+    // Const Field (activityHint)
+    writeConstField(
+        "activityHint",
+        ACTIVITYHINT,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
+
+    // Implicit Field (lengthOfBody) (Used for parsing, but its value is not stored as it's
+    // implicitly given by the objects content)
+    int lengthOfBody = (int) (getPayload().getLengthInBytes());
+    writeImplicitField(
+        "lengthOfBody",
+        lengthOfBody,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
+
+    // Const Field (fragmentNum)
+    writeConstField(
+        "fragmentNum",
+        FRAGMENTNUM,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
+
+    // Const Field (authProto)
+    writeConstField(
+        "authProto",
+        AUTHPROTO,
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
+
+    // Simple Field (serialLow)
+    writeSimpleField(
+        "serialLow",
+        serialLow,
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Simple Field (payload)
+    writeSimpleField(
+        "payload",
+        payload,
+        new DataWriterComplexDefault<>(writeBuffer),
+        WithOption.WithByteOrder(
+            (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
+
+    writeBuffer.popContext("DceRpc_Packet");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = 0;
+    DceRpc_Packet _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    // Const Field (version)
+    lengthInBits += 8;
+
+    // Simple field (packetType)
+    lengthInBits += 8;
+
+    // Reserved Field (reserved)
+    lengthInBits += 1;
+
+    // Const Field (broadcast)
+    lengthInBits += 1;
+
+    // Simple field (idempotent)
+    lengthInBits += 1;
+
+    // Const Field (maybe)
+    lengthInBits += 1;
+
+    // Simple field (noFragmentAcknowledgeRequested)
+    lengthInBits += 1;
+
+    // Const Field (fragment)
+    lengthInBits += 1;
+
+    // Simple field (lastFragment)
+    lengthInBits += 1;
+
+    // Reserved Field (reserved)
+    lengthInBits += 1;
+
+    // Reserved Field (reserved)
+    lengthInBits += 6;
+
+    // Const Field (cancelWasPending)
+    lengthInBits += 1;
+
+    // Reserved Field (reserved)
+    lengthInBits += 1;
+
+    // Simple field (integerEncoding)
+    lengthInBits += 4;
+
+    // Simple field (characterEncoding)
+    lengthInBits += 4;
+
+    // Simple field (floatingPointEncoding)
+    lengthInBits += 8;
+
+    // Reserved Field (reserved)
+    lengthInBits += 8;
+
+    // Const Field (serialHigh)
+    lengthInBits += 8;
+
+    // Simple field (objectUuid)
+    lengthInBits += objectUuid.getLengthInBits();
+
+    // Simple field (interfaceUuid)
+    lengthInBits += interfaceUuid.getLengthInBits();
+
+    // Simple field (activityUuid)
+    lengthInBits += activityUuid.getLengthInBits();
+
+    // Simple field (serverBootTime)
+    lengthInBits += 32;
+
+    // Const Field (interfaceVer)
+    lengthInBits += 32;
+
+    // Simple field (sequenceNumber)
+    lengthInBits += 32;
+
+    // Simple field (operation)
+    lengthInBits += 16;
+
+    // Const Field (interfaceHint)
+    lengthInBits += 16;
+
+    // Const Field (activityHint)
+    lengthInBits += 16;
+
+    // Implicit Field (lengthOfBody)
+    lengthInBits += 16;
+
+    // Const Field (fragmentNum)
+    lengthInBits += 16;
+
+    // Const Field (authProto)
+    lengthInBits += 8;
+
+    // Simple field (serialLow)
+    lengthInBits += 8;
+
+    // Simple field (payload)
+    lengthInBits += payload.getLengthInBits();
+
+    return lengthInBits;
+  }
+
+  public static DceRpc_Packet staticParse(ReadBuffer readBuffer, Object... args)
+      throws ParseException {
+    PositionAware positionAware = readBuffer;
+    return staticParse(readBuffer);
+  }
+
+  public static DceRpc_Packet staticParse(ReadBuffer readBuffer) throws ParseException {
+    readBuffer.pullContext("DceRpc_Packet");
+    PositionAware positionAware = readBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    short version =
+        readConstField(
+            "version",
+            readUnsignedShort(readBuffer, 8),
+            DceRpc_Packet.VERSION,
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    DceRpc_PacketType packetType =
+        readEnumField(
+            "packetType",
+            "DceRpc_PacketType",
+            new DataReaderEnumDefault<>(
+                DceRpc_PacketType::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    Boolean reservedField0 =
+        readReservedField(
+            "reserved",
+            readBoolean(readBuffer),
+            (boolean) false,
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    boolean broadcast =
+        readConstField(
+            "broadcast",
+            readBoolean(readBuffer),
+            DceRpc_Packet.BROADCAST,
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    boolean idempotent =
+        readSimpleField(
+            "idempotent", readBoolean(readBuffer), WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    boolean maybe =
+        readConstField(
+            "maybe",
+            readBoolean(readBuffer),
+            DceRpc_Packet.MAYBE,
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    boolean noFragmentAcknowledgeRequested =
+        readSimpleField(
+            "noFragmentAcknowledgeRequested",
+            readBoolean(readBuffer),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    boolean fragment =
+        readConstField(
+            "fragment",
+            readBoolean(readBuffer),
+            DceRpc_Packet.FRAGMENT,
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    boolean lastFragment =
+        readSimpleField(
+            "lastFragment",
+            readBoolean(readBuffer),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    Boolean reservedField1 =
+        readReservedField(
+            "reserved",
+            readBoolean(readBuffer),
+            (boolean) false,
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    Short reservedField2 =
+        readReservedField(
+            "reserved",
+            readUnsignedShort(readBuffer, 6),
+            (short) 0x00,
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    boolean cancelWasPending =
+        readConstField(
+            "cancelWasPending",
+            readBoolean(readBuffer),
+            DceRpc_Packet.CANCELWASPENDING,
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    Boolean reservedField3 =
+        readReservedField(
+            "reserved",
+            readBoolean(readBuffer),
+            (boolean) false,
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    IntegerEncoding integerEncoding =
+        readEnumField(
+            "integerEncoding",
+            "IntegerEncoding",
+            new DataReaderEnumDefault<>(
+                IntegerEncoding::enumForValue, readUnsignedByte(readBuffer, 4)),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    CharacterEncoding characterEncoding =
+        readEnumField(
+            "characterEncoding",
+            "CharacterEncoding",
+            new DataReaderEnumDefault<>(
+                CharacterEncoding::enumForValue, readUnsignedByte(readBuffer, 4)),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    FloatingPointEncoding floatingPointEncoding =
+        readEnumField(
+            "floatingPointEncoding",
+            "FloatingPointEncoding",
+            new DataReaderEnumDefault<>(
+                FloatingPointEncoding::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    Short reservedField4 =
+        readReservedField(
+            "reserved",
+            readUnsignedShort(readBuffer, 8),
+            (short) 0x00,
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    short serialHigh =
+        readConstField(
+            "serialHigh",
+            readUnsignedShort(readBuffer, 8),
+            DceRpc_Packet.SERIALHIGH,
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    DceRpc_ObjectUuid objectUuid =
+        readSimpleField(
+            "objectUuid",
+            new DataReaderComplexDefault<>(
+                () -> DceRpc_ObjectUuid.staticParse(readBuffer), readBuffer),
+            WithOption.WithByteOrder(
+                (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                    ? ByteOrder.BIG_ENDIAN
+                    : ByteOrder.LITTLE_ENDIAN)));
+
+    DceRpc_InterfaceUuid interfaceUuid =
+        readSimpleField(
+            "interfaceUuid",
+            new DataReaderComplexDefault<>(
+                () -> DceRpc_InterfaceUuid.staticParse(readBuffer), readBuffer),
+            WithOption.WithByteOrder(
+                (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                    ? ByteOrder.BIG_ENDIAN
+                    : ByteOrder.LITTLE_ENDIAN)));
+
+    DceRpc_ActivityUuid activityUuid =
+        readSimpleField(
+            "activityUuid",
+            new DataReaderComplexDefault<>(
+                () -> DceRpc_ActivityUuid.staticParse(readBuffer), readBuffer),
+            WithOption.WithByteOrder(
+                (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                    ? ByteOrder.BIG_ENDIAN
+                    : ByteOrder.LITTLE_ENDIAN)));
+
+    long serverBootTime =
+        readSimpleField(
+            "serverBootTime",
+            readUnsignedLong(readBuffer, 32),
+            WithOption.WithByteOrder(
+                (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                    ? ByteOrder.BIG_ENDIAN
+                    : ByteOrder.LITTLE_ENDIAN)));
+
+    long interfaceVer =
+        readConstField(
+            "interfaceVer",
+            readUnsignedLong(readBuffer, 32),
+            DceRpc_Packet.INTERFACEVER,
+            WithOption.WithByteOrder(
+                (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                    ? ByteOrder.BIG_ENDIAN
+                    : ByteOrder.LITTLE_ENDIAN)));
+
+    long sequenceNumber =
+        readSimpleField(
+            "sequenceNumber",
+            readUnsignedLong(readBuffer, 32),
+            WithOption.WithByteOrder(
+                (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                    ? ByteOrder.BIG_ENDIAN
+                    : ByteOrder.LITTLE_ENDIAN)));
+
+    DceRpc_Operation operation =
+        readEnumField(
+            "operation",
+            "DceRpc_Operation",
+            new DataReaderEnumDefault<>(
+                DceRpc_Operation::enumForValue, readUnsignedInt(readBuffer, 16)),
+            WithOption.WithByteOrder(
+                (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                    ? ByteOrder.BIG_ENDIAN
+                    : ByteOrder.LITTLE_ENDIAN)));
+
+    int interfaceHint =
+        readConstField(
+            "interfaceHint",
+            readUnsignedInt(readBuffer, 16),
+            DceRpc_Packet.INTERFACEHINT,
+            WithOption.WithByteOrder(
+                (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                    ? ByteOrder.BIG_ENDIAN
+                    : ByteOrder.LITTLE_ENDIAN)));
+
+    int activityHint =
+        readConstField(
+            "activityHint",
+            readUnsignedInt(readBuffer, 16),
+            DceRpc_Packet.ACTIVITYHINT,
+            WithOption.WithByteOrder(
+                (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                    ? ByteOrder.BIG_ENDIAN
+                    : ByteOrder.LITTLE_ENDIAN)));
+
+    int lengthOfBody =
+        readImplicitField(
+            "lengthOfBody",
+            readUnsignedInt(readBuffer, 16),
+            WithOption.WithByteOrder(
+                (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                    ? ByteOrder.BIG_ENDIAN
+                    : ByteOrder.LITTLE_ENDIAN)));
+
+    int fragmentNum =
+        readConstField(
+            "fragmentNum",
+            readUnsignedInt(readBuffer, 16),
+            DceRpc_Packet.FRAGMENTNUM,
+            WithOption.WithByteOrder(
+                (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                    ? ByteOrder.BIG_ENDIAN
+                    : ByteOrder.LITTLE_ENDIAN)));
+
+    short authProto =
+        readConstField(
+            "authProto",
+            readUnsignedShort(readBuffer, 8),
+            DceRpc_Packet.AUTHPROTO,
+            WithOption.WithByteOrder(
+                (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                    ? ByteOrder.BIG_ENDIAN
+                    : ByteOrder.LITTLE_ENDIAN)));
+
+    short serialLow =
+        readSimpleField(
+            "serialLow",
+            readUnsignedShort(readBuffer, 8),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    PnIoCm_Packet payload =
+        readSimpleField(
+            "payload",
+            new DataReaderComplexDefault<>(
+                () -> PnIoCm_Packet.staticParse(readBuffer, (DceRpc_PacketType) (packetType)),
+                readBuffer),
+            WithOption.WithByteOrder(
+                (((integerEncoding) == (IntegerEncoding.BIG_ENDIAN))
+                    ? ByteOrder.BIG_ENDIAN
+                    : ByteOrder.LITTLE_ENDIAN)));
+
+    readBuffer.closeContext("DceRpc_Packet");
+    // Create the instance
+    DceRpc_Packet _dceRpc_Packet;
+    _dceRpc_Packet =
+        new DceRpc_Packet(
+            packetType,
+            idempotent,
+            noFragmentAcknowledgeRequested,
+            lastFragment,
+            integerEncoding,
+            characterEncoding,
+            floatingPointEncoding,
+            objectUuid,
+            interfaceUuid,
+            activityUuid,
+            serverBootTime,
+            sequenceNumber,
+            operation,
+            serialLow,
+            payload);
+    _dceRpc_Packet.reservedField0 = reservedField0;
+    _dceRpc_Packet.reservedField1 = reservedField1;
+    _dceRpc_Packet.reservedField2 = reservedField2;
+    _dceRpc_Packet.reservedField3 = reservedField3;
+    _dceRpc_Packet.reservedField4 = reservedField4;
+    return _dceRpc_Packet;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof DceRpc_Packet)) {
+      return false;
+    }
+    DceRpc_Packet that = (DceRpc_Packet) o;
+    return (getPacketType() == that.getPacketType())
+        && (getIdempotent() == that.getIdempotent())
+        && (getNoFragmentAcknowledgeRequested() == that.getNoFragmentAcknowledgeRequested())
+        && (getLastFragment() == that.getLastFragment())
+        && (getIntegerEncoding() == that.getIntegerEncoding())
+        && (getCharacterEncoding() == that.getCharacterEncoding())
+        && (getFloatingPointEncoding() == that.getFloatingPointEncoding())
+        && (getObjectUuid() == that.getObjectUuid())
+        && (getInterfaceUuid() == that.getInterfaceUuid())
+        && (getActivityUuid() == that.getActivityUuid())
+        && (getServerBootTime() == that.getServerBootTime())
+        && (getSequenceNumber() == that.getSequenceNumber())
+        && (getOperation() == that.getOperation())
+        && (getSerialLow() == that.getSerialLow())
+        && (getPayload() == that.getPayload())
+        && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(
+        getPacketType(),
+        getIdempotent(),
+        getNoFragmentAcknowledgeRequested(),
+        getLastFragment(),
+        getIntegerEncoding(),
+        getCharacterEncoding(),
+        getFloatingPointEncoding(),
+        getObjectUuid(),
+        getInterfaceUuid(),
+        getActivityUuid(),
+        getServerBootTime(),
+        getSequenceNumber(),
+        getOperation(),
+        getSerialLow(),
+        getPayload());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_BlockType.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_PacketType.java
similarity index 52%
copy from plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_BlockType.java
copy to plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_PacketType.java
index 3366b5b92f..d34cdafaf8 100644
--- a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_BlockType.java
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/DceRpc_PacketType.java
@@ -23,49 +23,42 @@ import java.util.Map;
 
 // Code generated by code-generation. DO NOT EDIT.
 
-public enum PnIoCm_BlockType {
-  IOD_WRITE_REQUEST_HEADER((int) 0x0008),
-  AR_BLOCK_REQ((int) 0x0101),
-  IO_CR_BLOCK_REQ((int) 0x0102),
-  ALARM_CR_BLOCK_REQ((int) 0x0103),
-  EXPECTED_SUBMODULE_BLOCK_REQ((int) 0x0104),
-  IOD_CONTROL_REQ((int) 0x0110),
-  IOX_BLOCK_REQ((int) 0x0112),
-  PD_PORT_DATA_CHECK((int) 0x0200),
-  CHECK_PEERS((int) 0x020a),
-  PD_INTERFACE_ADJUST((int) 0x0250),
-  IOD_WRITE_RESPONSE_HEADER((int) 0x8008),
-  AR_BLOCK_RES((int) 0x8101),
-  IO_CR_BLOCK_RES((int) 0x8102),
-  ALARM_CR_BLOCK_RES((int) 0x8103),
-  MODULE_DIFF_BLOCK((int) 0x8104),
-  AR_SERVER_BLOCK((int) 0x8106),
-  IOD_CONTROL_RES((int) 0x8110),
-  IOX_BLOCK_RES((int) 0x8112);
-  private static final Map<Integer, PnIoCm_BlockType> map;
+public enum DceRpc_PacketType {
+  REQUEST((short) 0x00),
+  PING((short) 0x01),
+  RESPONSE((short) 0x02),
+  FAULT((short) 0x03),
+  WORKING((short) 0x04),
+  NO_CALL((short) 0x05),
+  REJECT((short) 0x06),
+  ACKNOWLEDGE((short) 0x07),
+  CONNECTIONLESS_CANCEL((short) 0x08),
+  FRAGMENT_ACKNOWLEDGE((short) 0x09),
+  CANCEL_ACKNOWLEDGE((short) 0x0A);
+  private static final Map<Short, DceRpc_PacketType> map;
 
   static {
     map = new HashMap<>();
-    for (PnIoCm_BlockType value : PnIoCm_BlockType.values()) {
-      map.put((int) value.getValue(), value);
+    for (DceRpc_PacketType value : DceRpc_PacketType.values()) {
+      map.put((short) value.getValue(), value);
     }
   }
 
-  private final int value;
+  private final short value;
 
-  PnIoCm_BlockType(int value) {
+  DceRpc_PacketType(short value) {
     this.value = value;
   }
 
-  public int getValue() {
+  public short getValue() {
     return value;
   }
 
-  public static PnIoCm_BlockType enumForValue(int value) {
+  public static DceRpc_PacketType enumForValue(short value) {
     return map.get(value);
   }
 
-  public static Boolean isDefined(int value) {
+  public static Boolean isDefined(short value) {
     return map.containsKey(value);
   }
 }
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/EndOfLldp.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/EndOfLldp.java
new file mode 100644
index 0000000000..5ace166237
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/EndOfLldp.java
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class EndOfLldp extends LldpUnit implements Message {
+
+  // Accessors for discriminator values.
+  public TlvType getTlvId() {
+    return TlvType.END_OF_LLDP;
+  }
+
+  public EndOfLldp(int tlvIdLength) {
+    super(tlvIdLength);
+  }
+
+  @Override
+  protected void serializeLldpUnitChild(WriteBuffer writeBuffer) throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+    writeBuffer.pushContext("EndOfLldp");
+
+    writeBuffer.popContext("EndOfLldp");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    EndOfLldp _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    return lengthInBits;
+  }
+
+  public static LldpUnitBuilder staticParseLldpUnitBuilder(ReadBuffer readBuffer)
+      throws ParseException {
+    readBuffer.pullContext("EndOfLldp");
+    PositionAware positionAware = readBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    readBuffer.closeContext("EndOfLldp");
+    // Create the instance
+    return new EndOfLldpBuilderImpl();
+  }
+
+  public static class EndOfLldpBuilderImpl implements LldpUnit.LldpUnitBuilder {
+
+    public EndOfLldpBuilderImpl() {}
+
+    public EndOfLldp build(int tlvIdLength) {
+      EndOfLldp endOfLldp = new EndOfLldp(tlvIdLength);
+      return endOfLldp;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof EndOfLldp)) {
+      return false;
+    }
+    EndOfLldp that = (EndOfLldp) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_Frame.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_Frame.java
new file mode 100644
index 0000000000..b35abe5b9a
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_Frame.java
@@ -0,0 +1,183 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class Ethernet_Frame implements Message {
+
+  // Properties.
+  protected final MacAddress destination;
+  protected final MacAddress source;
+  protected final Ethernet_FramePayload payload;
+
+  public Ethernet_Frame(MacAddress destination, MacAddress source, Ethernet_FramePayload payload) {
+    super();
+    this.destination = destination;
+    this.source = source;
+    this.payload = payload;
+  }
+
+  public MacAddress getDestination() {
+    return destination;
+  }
+
+  public MacAddress getSource() {
+    return source;
+  }
+
+  public Ethernet_FramePayload getPayload() {
+    return payload;
+  }
+
+  public void serialize(WriteBuffer writeBuffer) throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+    writeBuffer.pushContext("Ethernet_Frame");
+
+    // Simple Field (destination)
+    writeSimpleField(
+        "destination",
+        destination,
+        new DataWriterComplexDefault<>(writeBuffer),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Simple Field (source)
+    writeSimpleField(
+        "source",
+        source,
+        new DataWriterComplexDefault<>(writeBuffer),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Simple Field (payload)
+    writeSimpleField(
+        "payload",
+        payload,
+        new DataWriterComplexDefault<>(writeBuffer),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    writeBuffer.popContext("Ethernet_Frame");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = 0;
+    Ethernet_Frame _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    // Simple field (destination)
+    lengthInBits += destination.getLengthInBits();
+
+    // Simple field (source)
+    lengthInBits += source.getLengthInBits();
+
+    // Simple field (payload)
+    lengthInBits += payload.getLengthInBits();
+
+    return lengthInBits;
+  }
+
+  public static Ethernet_Frame staticParse(ReadBuffer readBuffer, Object... args)
+      throws ParseException {
+    PositionAware positionAware = readBuffer;
+    return staticParse(readBuffer);
+  }
+
+  public static Ethernet_Frame staticParse(ReadBuffer readBuffer) throws ParseException {
+    readBuffer.pullContext("Ethernet_Frame");
+    PositionAware positionAware = readBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    MacAddress destination =
+        readSimpleField(
+            "destination",
+            new DataReaderComplexDefault<>(() -> MacAddress.staticParse(readBuffer), readBuffer),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    MacAddress source =
+        readSimpleField(
+            "source",
+            new DataReaderComplexDefault<>(() -> MacAddress.staticParse(readBuffer), readBuffer),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    Ethernet_FramePayload payload =
+        readSimpleField(
+            "payload",
+            new DataReaderComplexDefault<>(
+                () -> Ethernet_FramePayload.staticParse(readBuffer), readBuffer),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    readBuffer.closeContext("Ethernet_Frame");
+    // Create the instance
+    Ethernet_Frame _ethernet_Frame;
+    _ethernet_Frame = new Ethernet_Frame(destination, source, payload);
+    return _ethernet_Frame;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof Ethernet_Frame)) {
+      return false;
+    }
+    Ethernet_Frame that = (Ethernet_Frame) o;
+    return (getDestination() == that.getDestination())
+        && (getSource() == that.getSource())
+        && (getPayload() == that.getPayload())
+        && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(getDestination(), getSource(), getPayload());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_FramePayload.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_FramePayload.java
new file mode 100644
index 0000000000..3fd5ea1502
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_FramePayload.java
@@ -0,0 +1,154 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public abstract class Ethernet_FramePayload implements Message {
+
+  // Abstract accessors for discriminator values.
+  public abstract Integer getPacketType();
+
+  public Ethernet_FramePayload() {
+    super();
+  }
+
+  protected abstract void serializeEthernet_FramePayloadChild(WriteBuffer writeBuffer)
+      throws SerializationException;
+
+  public void serialize(WriteBuffer writeBuffer) throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+    writeBuffer.pushContext("Ethernet_FramePayload");
+
+    // Discriminator Field (packetType) (Used as input to a switch field)
+    writeDiscriminatorField("packetType", getPacketType(), writeUnsignedInt(writeBuffer, 16));
+
+    // Switch field (Serialize the sub-type)
+    serializeEthernet_FramePayloadChild(writeBuffer);
+
+    writeBuffer.popContext("Ethernet_FramePayload");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = 0;
+    Ethernet_FramePayload _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    // Discriminator Field (packetType)
+    lengthInBits += 16;
+
+    // Length of sub-type elements will be added by sub-type...
+
+    return lengthInBits;
+  }
+
+  public static Ethernet_FramePayload staticParse(ReadBuffer readBuffer, Object... args)
+      throws ParseException {
+    PositionAware positionAware = readBuffer;
+    return staticParse(readBuffer);
+  }
+
+  public static Ethernet_FramePayload staticParse(ReadBuffer readBuffer) throws ParseException {
+    readBuffer.pullContext("Ethernet_FramePayload");
+    PositionAware positionAware = readBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    int packetType = readDiscriminatorField("packetType", readUnsignedInt(readBuffer, 16));
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    Ethernet_FramePayloadBuilder builder = null;
+    if (EvaluationHelper.equals(packetType, (int) 0x0800)) {
+      builder = Ethernet_FramePayload_IPv4.staticParseEthernet_FramePayloadBuilder(readBuffer);
+    } else if (EvaluationHelper.equals(packetType, (int) 0x8100)) {
+      builder =
+          Ethernet_FramePayload_VirtualLan.staticParseEthernet_FramePayloadBuilder(readBuffer);
+    } else if (EvaluationHelper.equals(packetType, (int) 0x8892)) {
+      builder = Ethernet_FramePayload_PnDcp.staticParseEthernet_FramePayloadBuilder(readBuffer);
+    } else if (EvaluationHelper.equals(packetType, (int) 0x88cc)) {
+      builder = Ethernet_FramePayload_LLDP.staticParseEthernet_FramePayloadBuilder(readBuffer);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "packetType="
+              + packetType
+              + "]");
+    }
+
+    readBuffer.closeContext("Ethernet_FramePayload");
+    // Create the instance
+    Ethernet_FramePayload _ethernet_FramePayload = builder.build();
+    return _ethernet_FramePayload;
+  }
+
+  public interface Ethernet_FramePayloadBuilder {
+    Ethernet_FramePayload build();
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof Ethernet_FramePayload)) {
+      return false;
+    }
+    Ethernet_FramePayload that = (Ethernet_FramePayload) o;
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash();
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_FramePayload_IPv4.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_FramePayload_IPv4.java
new file mode 100644
index 0000000000..ea48d2ec20
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_FramePayload_IPv4.java
@@ -0,0 +1,518 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class Ethernet_FramePayload_IPv4 extends Ethernet_FramePayload implements Message {
+
+  // Accessors for discriminator values.
+  public Integer getPacketType() {
+    return (int) 0x0800;
+  }
+
+  // Constant values.
+  public static final Byte VERSION = 0x4;
+  public static final Byte HEADERLENGTH = 0x5;
+  public static final Short DIFFERENTIATEDSERVICESCODEPOINT = 0x00;
+  public static final Byte EXPLICITCONGESTIONNOTIFICATION = 0x0;
+  public static final Integer FRAGMENTOFFSET = 0x00;
+  public static final Short PROTOCOL = 0x11;
+
+  // Properties.
+  protected final int identification;
+  protected final boolean dontFragment;
+  protected final boolean moreFragments;
+  protected final short timeToLive;
+  protected final IpAddress sourceAddress;
+  protected final IpAddress destinationAddress;
+  protected final int sourcePort;
+  protected final int destinationPort;
+  protected final DceRpc_Packet payload;
+
+  // Reserved Fields
+  private Boolean reservedField0;
+
+  public Ethernet_FramePayload_IPv4(
+      int identification,
+      boolean dontFragment,
+      boolean moreFragments,
+      short timeToLive,
+      IpAddress sourceAddress,
+      IpAddress destinationAddress,
+      int sourcePort,
+      int destinationPort,
+      DceRpc_Packet payload) {
+    super();
+    this.identification = identification;
+    this.dontFragment = dontFragment;
+    this.moreFragments = moreFragments;
+    this.timeToLive = timeToLive;
+    this.sourceAddress = sourceAddress;
+    this.destinationAddress = destinationAddress;
+    this.sourcePort = sourcePort;
+    this.destinationPort = destinationPort;
+    this.payload = payload;
+  }
+
+  public int getIdentification() {
+    return identification;
+  }
+
+  public boolean getDontFragment() {
+    return dontFragment;
+  }
+
+  public boolean getMoreFragments() {
+    return moreFragments;
+  }
+
+  public short getTimeToLive() {
+    return timeToLive;
+  }
+
+  public IpAddress getSourceAddress() {
+    return sourceAddress;
+  }
+
+  public IpAddress getDestinationAddress() {
+    return destinationAddress;
+  }
+
+  public int getSourcePort() {
+    return sourcePort;
+  }
+
+  public int getDestinationPort() {
+    return destinationPort;
+  }
+
+  public DceRpc_Packet getPayload() {
+    return payload;
+  }
+
+  public byte getVersion() {
+    return VERSION;
+  }
+
+  public byte getHeaderLength() {
+    return HEADERLENGTH;
+  }
+
+  public short getDifferentiatedServicesCodepoint() {
+    return DIFFERENTIATEDSERVICESCODEPOINT;
+  }
+
+  public byte getExplicitCongestionNotification() {
+    return EXPLICITCONGESTIONNOTIFICATION;
+  }
+
+  public int getFragmentOffset() {
+    return FRAGMENTOFFSET;
+  }
+
+  public short getProtocol() {
+    return PROTOCOL;
+  }
+
+  @Override
+  protected void serializeEthernet_FramePayloadChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+    writeBuffer.pushContext("Ethernet_FramePayload_IPv4");
+
+    // Const Field (version)
+    writeConstField("version", VERSION, writeUnsignedByte(writeBuffer, 4));
+
+    // Const Field (headerLength)
+    writeConstField("headerLength", HEADERLENGTH, writeUnsignedByte(writeBuffer, 4));
+
+    // Const Field (differentiatedServicesCodepoint)
+    writeConstField(
+        "differentiatedServicesCodepoint",
+        DIFFERENTIATEDSERVICESCODEPOINT,
+        writeUnsignedShort(writeBuffer, 6));
+
+    // Const Field (explicitCongestionNotification)
+    writeConstField(
+        "explicitCongestionNotification",
+        EXPLICITCONGESTIONNOTIFICATION,
+        writeUnsignedByte(writeBuffer, 2));
+
+    // Implicit Field (totalLength) (Used for parsing, but its value is not stored as it's
+    // implicitly given by the objects content)
+    int totalLength = (int) ((28) + (getPayload().getLengthInBytes()));
+    writeImplicitField("totalLength", totalLength, writeUnsignedInt(writeBuffer, 16));
+
+    // Simple Field (identification)
+    writeSimpleField("identification", identification, writeUnsignedInt(writeBuffer, 16));
+
+    // Reserved Field (reserved)
+    writeReservedField(
+        "reserved",
+        reservedField0 != null ? reservedField0 : (boolean) false,
+        writeBoolean(writeBuffer));
+
+    // Simple Field (dontFragment)
+    writeSimpleField("dontFragment", dontFragment, writeBoolean(writeBuffer));
+
+    // Simple Field (moreFragments)
+    writeSimpleField("moreFragments", moreFragments, writeBoolean(writeBuffer));
+
+    // Const Field (fragmentOffset)
+    writeConstField("fragmentOffset", FRAGMENTOFFSET, writeUnsignedInt(writeBuffer, 13));
+
+    // Simple Field (timeToLive)
+    writeSimpleField("timeToLive", timeToLive, writeUnsignedShort(writeBuffer, 8));
+
+    // Const Field (protocol)
+    writeConstField("protocol", PROTOCOL, writeUnsignedShort(writeBuffer, 8));
+
+    // Implicit Field (headerChecksum) (Used for parsing, but its value is not stored as it's
+    // implicitly given by the objects content)
+    int headerChecksum =
+        (int)
+            (org.apache.plc4x.java.profinet.readwrite.utils.StaticHelper.calculateIPv4Checksum(
+                (28) + (getPayload().getLengthInBytes()),
+                getIdentification(),
+                getTimeToLive(),
+                getSourceAddress(),
+                getDestinationAddress()));
+    writeImplicitField("headerChecksum", headerChecksum, writeUnsignedInt(writeBuffer, 16));
+
+    // Simple Field (sourceAddress)
+    writeSimpleField("sourceAddress", sourceAddress, new DataWriterComplexDefault<>(writeBuffer));
+
+    // Simple Field (destinationAddress)
+    writeSimpleField(
+        "destinationAddress", destinationAddress, new DataWriterComplexDefault<>(writeBuffer));
+
+    // Simple Field (sourcePort)
+    writeSimpleField("sourcePort", sourcePort, writeUnsignedInt(writeBuffer, 16));
+
+    // Simple Field (destinationPort)
+    writeSimpleField("destinationPort", destinationPort, writeUnsignedInt(writeBuffer, 16));
+
+    // Implicit Field (packetLength) (Used for parsing, but its value is not stored as it's
+    // implicitly given by the objects content)
+    int packetLength = (int) ((8) + (getPayload().getLengthInBytes()));
+    writeImplicitField("packetLength", packetLength, writeUnsignedInt(writeBuffer, 16));
+
+    // Implicit Field (bodyChecksum) (Used for parsing, but its value is not stored as it's
+    // implicitly given by the objects content)
+    int bodyChecksum =
+        (int)
+            (org.apache.plc4x.java.profinet.readwrite.utils.StaticHelper.calculateUdpChecksum(
+                getSourceAddress(),
+                getDestinationAddress(),
+                getSourcePort(),
+                getDestinationPort(),
+                (8) + (getPayload().getLengthInBytes()),
+                getPayload()));
+    writeImplicitField("bodyChecksum", bodyChecksum, writeUnsignedInt(writeBuffer, 16));
+
+    // Simple Field (payload)
+    writeSimpleField("payload", payload, new DataWriterComplexDefault<>(writeBuffer));
+
+    writeBuffer.popContext("Ethernet_FramePayload_IPv4");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    Ethernet_FramePayload_IPv4 _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    // Const Field (version)
+    lengthInBits += 4;
+
+    // Const Field (headerLength)
+    lengthInBits += 4;
+
+    // Const Field (differentiatedServicesCodepoint)
+    lengthInBits += 6;
+
+    // Const Field (explicitCongestionNotification)
+    lengthInBits += 2;
+
+    // Implicit Field (totalLength)
+    lengthInBits += 16;
+
+    // Simple field (identification)
+    lengthInBits += 16;
+
+    // Reserved Field (reserved)
+    lengthInBits += 1;
+
+    // Simple field (dontFragment)
+    lengthInBits += 1;
+
+    // Simple field (moreFragments)
+    lengthInBits += 1;
+
+    // Const Field (fragmentOffset)
+    lengthInBits += 13;
+
+    // Simple field (timeToLive)
+    lengthInBits += 8;
+
+    // Const Field (protocol)
+    lengthInBits += 8;
+
+    // Implicit Field (headerChecksum)
+    lengthInBits += 16;
+
+    // Simple field (sourceAddress)
+    lengthInBits += sourceAddress.getLengthInBits();
+
+    // Simple field (destinationAddress)
+    lengthInBits += destinationAddress.getLengthInBits();
+
+    // Simple field (sourcePort)
+    lengthInBits += 16;
+
+    // Simple field (destinationPort)
+    lengthInBits += 16;
+
+    // Implicit Field (packetLength)
+    lengthInBits += 16;
+
+    // Implicit Field (bodyChecksum)
+    lengthInBits += 16;
+
+    // Simple field (payload)
+    lengthInBits += payload.getLengthInBits();
+
+    return lengthInBits;
+  }
+
+  public static Ethernet_FramePayloadBuilder staticParseEthernet_FramePayloadBuilder(
+      ReadBuffer readBuffer) throws ParseException {
+    readBuffer.pullContext("Ethernet_FramePayload_IPv4");
+    PositionAware positionAware = readBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    byte version =
+        readConstField(
+            "version", readUnsignedByte(readBuffer, 4), Ethernet_FramePayload_IPv4.VERSION);
+
+    byte headerLength =
+        readConstField(
+            "headerLength",
+            readUnsignedByte(readBuffer, 4),
+            Ethernet_FramePayload_IPv4.HEADERLENGTH);
+
+    short differentiatedServicesCodepoint =
+        readConstField(
+            "differentiatedServicesCodepoint",
+            readUnsignedShort(readBuffer, 6),
+            Ethernet_FramePayload_IPv4.DIFFERENTIATEDSERVICESCODEPOINT);
+
+    byte explicitCongestionNotification =
+        readConstField(
+            "explicitCongestionNotification",
+            readUnsignedByte(readBuffer, 2),
+            Ethernet_FramePayload_IPv4.EXPLICITCONGESTIONNOTIFICATION);
+
+    int totalLength = readImplicitField("totalLength", readUnsignedInt(readBuffer, 16));
+
+    int identification = readSimpleField("identification", readUnsignedInt(readBuffer, 16));
+
+    Boolean reservedField0 =
+        readReservedField("reserved", readBoolean(readBuffer), (boolean) false);
+
+    boolean dontFragment = readSimpleField("dontFragment", readBoolean(readBuffer));
+
+    boolean moreFragments = readSimpleField("moreFragments", readBoolean(readBuffer));
+
+    int fragmentOffset =
+        readConstField(
+            "fragmentOffset",
+            readUnsignedInt(readBuffer, 13),
+            Ethernet_FramePayload_IPv4.FRAGMENTOFFSET);
+
+    short timeToLive = readSimpleField("timeToLive", readUnsignedShort(readBuffer, 8));
+
+    short protocol =
+        readConstField(
+            "protocol", readUnsignedShort(readBuffer, 8), Ethernet_FramePayload_IPv4.PROTOCOL);
+
+    int headerChecksum = readImplicitField("headerChecksum", readUnsignedInt(readBuffer, 16));
+
+    IpAddress sourceAddress =
+        readSimpleField(
+            "sourceAddress",
+            new DataReaderComplexDefault<>(() -> IpAddress.staticParse(readBuffer), readBuffer));
+
+    IpAddress destinationAddress =
+        readSimpleField(
+            "destinationAddress",
+            new DataReaderComplexDefault<>(() -> IpAddress.staticParse(readBuffer), readBuffer));
+
+    int sourcePort = readSimpleField("sourcePort", readUnsignedInt(readBuffer, 16));
+
+    int destinationPort = readSimpleField("destinationPort", readUnsignedInt(readBuffer, 16));
+
+    int packetLength = readImplicitField("packetLength", readUnsignedInt(readBuffer, 16));
+
+    int bodyChecksum = readImplicitField("bodyChecksum", readUnsignedInt(readBuffer, 16));
+
+    DceRpc_Packet payload =
+        readSimpleField(
+            "payload",
+            new DataReaderComplexDefault<>(
+                () -> DceRpc_Packet.staticParse(readBuffer), readBuffer));
+
+    readBuffer.closeContext("Ethernet_FramePayload_IPv4");
+    // Create the instance
+    return new Ethernet_FramePayload_IPv4BuilderImpl(
+        identification,
+        dontFragment,
+        moreFragments,
+        timeToLive,
+        sourceAddress,
+        destinationAddress,
+        sourcePort,
+        destinationPort,
+        payload,
+        reservedField0);
+  }
+
+  public static class Ethernet_FramePayload_IPv4BuilderImpl
+      implements Ethernet_FramePayload.Ethernet_FramePayloadBuilder {
+    private final int identification;
+    private final boolean dontFragment;
+    private final boolean moreFragments;
+    private final short timeToLive;
+    private final IpAddress sourceAddress;
+    private final IpAddress destinationAddress;
+    private final int sourcePort;
+    private final int destinationPort;
+    private final DceRpc_Packet payload;
+    private final Boolean reservedField0;
+
+    public Ethernet_FramePayload_IPv4BuilderImpl(
+        int identification,
+        boolean dontFragment,
+        boolean moreFragments,
+        short timeToLive,
+        IpAddress sourceAddress,
+        IpAddress destinationAddress,
+        int sourcePort,
+        int destinationPort,
+        DceRpc_Packet payload,
+        Boolean reservedField0) {
+      this.identification = identification;
+      this.dontFragment = dontFragment;
+      this.moreFragments = moreFragments;
+      this.timeToLive = timeToLive;
+      this.sourceAddress = sourceAddress;
+      this.destinationAddress = destinationAddress;
+      this.sourcePort = sourcePort;
+      this.destinationPort = destinationPort;
+      this.payload = payload;
+      this.reservedField0 = reservedField0;
+    }
+
+    public Ethernet_FramePayload_IPv4 build() {
+      Ethernet_FramePayload_IPv4 ethernet_FramePayload_IPv4 =
+          new Ethernet_FramePayload_IPv4(
+              identification,
+              dontFragment,
+              moreFragments,
+              timeToLive,
+              sourceAddress,
+              destinationAddress,
+              sourcePort,
+              destinationPort,
+              payload);
+      ethernet_FramePayload_IPv4.reservedField0 = reservedField0;
+      return ethernet_FramePayload_IPv4;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof Ethernet_FramePayload_IPv4)) {
+      return false;
+    }
+    Ethernet_FramePayload_IPv4 that = (Ethernet_FramePayload_IPv4) o;
+    return (getIdentification() == that.getIdentification())
+        && (getDontFragment() == that.getDontFragment())
+        && (getMoreFragments() == that.getMoreFragments())
+        && (getTimeToLive() == that.getTimeToLive())
+        && (getSourceAddress() == that.getSourceAddress())
+        && (getDestinationAddress() == that.getDestinationAddress())
+        && (getSourcePort() == that.getSourcePort())
+        && (getDestinationPort() == that.getDestinationPort())
+        && (getPayload() == that.getPayload())
+        && super.equals(that)
+        && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(
+        super.hashCode(),
+        getIdentification(),
+        getDontFragment(),
+        getMoreFragments(),
+        getTimeToLive(),
+        getSourceAddress(),
+        getDestinationAddress(),
+        getSourcePort(),
+        getDestinationPort(),
+        getPayload());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_FramePayload_LLDP.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_FramePayload_LLDP.java
new file mode 100644
index 0000000000..c469e0b280
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_FramePayload_LLDP.java
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class Ethernet_FramePayload_LLDP extends Ethernet_FramePayload implements Message {
+
+  // Accessors for discriminator values.
+  public Integer getPacketType() {
+    return (int) 0x88cc;
+  }
+
+  // Properties.
+  protected final Lldp_Pdu pdu;
+
+  public Ethernet_FramePayload_LLDP(Lldp_Pdu pdu) {
+    super();
+    this.pdu = pdu;
+  }
+
+  public Lldp_Pdu getPdu() {
+    return pdu;
+  }
+
+  @Override
+  protected void serializeEthernet_FramePayloadChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+    writeBuffer.pushContext("Ethernet_FramePayload_LLDP");
+
+    // Simple Field (pdu)
+    writeSimpleField("pdu", pdu, new DataWriterComplexDefault<>(writeBuffer));
+
+    writeBuffer.popContext("Ethernet_FramePayload_LLDP");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    Ethernet_FramePayload_LLDP _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    // Simple field (pdu)
+    lengthInBits += pdu.getLengthInBits();
+
+    return lengthInBits;
+  }
+
+  public static Ethernet_FramePayloadBuilder staticParseEthernet_FramePayloadBuilder(
+      ReadBuffer readBuffer) throws ParseException {
+    readBuffer.pullContext("Ethernet_FramePayload_LLDP");
+    PositionAware positionAware = readBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    Lldp_Pdu pdu =
+        readSimpleField(
+            "pdu",
+            new DataReaderComplexDefault<>(() -> Lldp_Pdu.staticParse(readBuffer), readBuffer));
+
+    readBuffer.closeContext("Ethernet_FramePayload_LLDP");
+    // Create the instance
+    return new Ethernet_FramePayload_LLDPBuilderImpl(pdu);
+  }
+
+  public static class Ethernet_FramePayload_LLDPBuilderImpl
+      implements Ethernet_FramePayload.Ethernet_FramePayloadBuilder {
+    private final Lldp_Pdu pdu;
+
+    public Ethernet_FramePayload_LLDPBuilderImpl(Lldp_Pdu pdu) {
+      this.pdu = pdu;
+    }
+
+    public Ethernet_FramePayload_LLDP build() {
+      Ethernet_FramePayload_LLDP ethernet_FramePayload_LLDP = new Ethernet_FramePayload_LLDP(pdu);
+      return ethernet_FramePayload_LLDP;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof Ethernet_FramePayload_LLDP)) {
+      return false;
+    }
+    Ethernet_FramePayload_LLDP that = (Ethernet_FramePayload_LLDP) o;
+    return (getPdu() == that.getPdu()) && super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode(), getPdu());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_FramePayload_PnDcp.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_FramePayload_PnDcp.java
new file mode 100644
index 0000000000..b5d2f5c688
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_FramePayload_PnDcp.java
@@ -0,0 +1,145 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class Ethernet_FramePayload_PnDcp extends Ethernet_FramePayload implements Message {
+
+  // Accessors for discriminator values.
+  public Integer getPacketType() {
+    return (int) 0x8892;
+  }
+
+  // Properties.
+  protected final PnDcp_Pdu pdu;
+
+  public Ethernet_FramePayload_PnDcp(PnDcp_Pdu pdu) {
+    super();
+    this.pdu = pdu;
+  }
+
+  public PnDcp_Pdu getPdu() {
+    return pdu;
+  }
+
+  @Override
+  protected void serializeEthernet_FramePayloadChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+    writeBuffer.pushContext("Ethernet_FramePayload_PnDcp");
+
+    // Simple Field (pdu)
+    writeSimpleField("pdu", pdu, new DataWriterComplexDefault<>(writeBuffer));
+
+    writeBuffer.popContext("Ethernet_FramePayload_PnDcp");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    Ethernet_FramePayload_PnDcp _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    // Simple field (pdu)
+    lengthInBits += pdu.getLengthInBits();
+
+    return lengthInBits;
+  }
+
+  public static Ethernet_FramePayloadBuilder staticParseEthernet_FramePayloadBuilder(
+      ReadBuffer readBuffer) throws ParseException {
+    readBuffer.pullContext("Ethernet_FramePayload_PnDcp");
+    PositionAware positionAware = readBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    PnDcp_Pdu pdu =
+        readSimpleField(
+            "pdu",
+            new DataReaderComplexDefault<>(() -> PnDcp_Pdu.staticParse(readBuffer), readBuffer));
+
+    readBuffer.closeContext("Ethernet_FramePayload_PnDcp");
+    // Create the instance
+    return new Ethernet_FramePayload_PnDcpBuilderImpl(pdu);
+  }
+
+  public static class Ethernet_FramePayload_PnDcpBuilderImpl
+      implements Ethernet_FramePayload.Ethernet_FramePayloadBuilder {
+    private final PnDcp_Pdu pdu;
+
+    public Ethernet_FramePayload_PnDcpBuilderImpl(PnDcp_Pdu pdu) {
+      this.pdu = pdu;
+    }
+
+    public Ethernet_FramePayload_PnDcp build() {
+      Ethernet_FramePayload_PnDcp ethernet_FramePayload_PnDcp =
+          new Ethernet_FramePayload_PnDcp(pdu);
+      return ethernet_FramePayload_PnDcp;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof Ethernet_FramePayload_PnDcp)) {
+      return false;
+    }
+    Ethernet_FramePayload_PnDcp that = (Ethernet_FramePayload_PnDcp) o;
+    return (getPdu() == that.getPdu()) && super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode(), getPdu());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_FramePayload_VirtualLan.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_FramePayload_VirtualLan.java
new file mode 100644
index 0000000000..35226e2715
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/Ethernet_FramePayload_VirtualLan.java
@@ -0,0 +1,213 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class Ethernet_FramePayload_VirtualLan extends Ethernet_FramePayload implements Message {
+
+  // Accessors for discriminator values.
+  public Integer getPacketType() {
+    return (int) 0x8100;
+  }
+
+  // Properties.
+  protected final VirtualLanPriority priority;
+  protected final boolean ineligible;
+  protected final int id;
+  protected final Ethernet_FramePayload payload;
+
+  public Ethernet_FramePayload_VirtualLan(
+      VirtualLanPriority priority, boolean ineligible, int id, Ethernet_FramePayload payload) {
+    super();
+    this.priority = priority;
+    this.ineligible = ineligible;
+    this.id = id;
+    this.payload = payload;
+  }
+
+  public VirtualLanPriority getPriority() {
+    return priority;
+  }
+
+  public boolean getIneligible() {
+    return ineligible;
+  }
+
+  public int getId() {
+    return id;
+  }
+
+  public Ethernet_FramePayload getPayload() {
+    return payload;
+  }
+
+  @Override
+  protected void serializeEthernet_FramePayloadChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+    writeBuffer.pushContext("Ethernet_FramePayload_VirtualLan");
+
+    // Simple Field (priority)
+    writeSimpleEnumField(
+        "priority",
+        "VirtualLanPriority",
+        priority,
+        new DataWriterEnumDefault<>(
+            VirtualLanPriority::getValue,
+            VirtualLanPriority::name,
+            writeUnsignedByte(writeBuffer, 3)));
+
+    // Simple Field (ineligible)
+    writeSimpleField("ineligible", ineligible, writeBoolean(writeBuffer));
+
+    // Simple Field (id)
+    writeSimpleField("id", id, writeUnsignedInt(writeBuffer, 12));
+
+    // Simple Field (payload)
+    writeSimpleField("payload", payload, new DataWriterComplexDefault<>(writeBuffer));
+
+    writeBuffer.popContext("Ethernet_FramePayload_VirtualLan");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    Ethernet_FramePayload_VirtualLan _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    // Simple field (priority)
+    lengthInBits += 3;
+
+    // Simple field (ineligible)
+    lengthInBits += 1;
+
+    // Simple field (id)
+    lengthInBits += 12;
+
+    // Simple field (payload)
+    lengthInBits += payload.getLengthInBits();
+
+    return lengthInBits;
+  }
+
+  public static Ethernet_FramePayloadBuilder staticParseEthernet_FramePayloadBuilder(
+      ReadBuffer readBuffer) throws ParseException {
+    readBuffer.pullContext("Ethernet_FramePayload_VirtualLan");
+    PositionAware positionAware = readBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    VirtualLanPriority priority =
+        readEnumField(
+            "priority",
+            "VirtualLanPriority",
+            new DataReaderEnumDefault<>(
+                VirtualLanPriority::enumForValue, readUnsignedByte(readBuffer, 3)));
+
+    boolean ineligible = readSimpleField("ineligible", readBoolean(readBuffer));
+
+    int id = readSimpleField("id", readUnsignedInt(readBuffer, 12));
+
+    Ethernet_FramePayload payload =
+        readSimpleField(
+            "payload",
+            new DataReaderComplexDefault<>(
+                () -> Ethernet_FramePayload.staticParse(readBuffer), readBuffer));
+
+    readBuffer.closeContext("Ethernet_FramePayload_VirtualLan");
+    // Create the instance
+    return new Ethernet_FramePayload_VirtualLanBuilderImpl(priority, ineligible, id, payload);
+  }
+
+  public static class Ethernet_FramePayload_VirtualLanBuilderImpl
+      implements Ethernet_FramePayload.Ethernet_FramePayloadBuilder {
+    private final VirtualLanPriority priority;
+    private final boolean ineligible;
+    private final int id;
+    private final Ethernet_FramePayload payload;
+
+    public Ethernet_FramePayload_VirtualLanBuilderImpl(
+        VirtualLanPriority priority, boolean ineligible, int id, Ethernet_FramePayload payload) {
+      this.priority = priority;
+      this.ineligible = ineligible;
+      this.id = id;
+      this.payload = payload;
+    }
+
+    public Ethernet_FramePayload_VirtualLan build() {
+      Ethernet_FramePayload_VirtualLan ethernet_FramePayload_VirtualLan =
+          new Ethernet_FramePayload_VirtualLan(priority, ineligible, id, payload);
+      return ethernet_FramePayload_VirtualLan;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof Ethernet_FramePayload_VirtualLan)) {
+      return false;
+    }
+    Ethernet_FramePayload_VirtualLan that = (Ethernet_FramePayload_VirtualLan) o;
+    return (getPriority() == that.getPriority())
+        && (getIneligible() == that.getIneligible())
+        && (getId() == that.getId())
+        && (getPayload() == that.getPayload())
+        && super.equals(that)
+        && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode(), getPriority(), getIneligible(), getId(), getPayload());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_BlockType.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/FloatingPointEncoding.java
similarity index 52%
copy from plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_BlockType.java
copy to plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/FloatingPointEncoding.java
index 3366b5b92f..66c7dad6f5 100644
--- a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_BlockType.java
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/FloatingPointEncoding.java
@@ -23,49 +23,35 @@ import java.util.Map;
 
 // Code generated by code-generation. DO NOT EDIT.
 
-public enum PnIoCm_BlockType {
-  IOD_WRITE_REQUEST_HEADER((int) 0x0008),
-  AR_BLOCK_REQ((int) 0x0101),
-  IO_CR_BLOCK_REQ((int) 0x0102),
-  ALARM_CR_BLOCK_REQ((int) 0x0103),
-  EXPECTED_SUBMODULE_BLOCK_REQ((int) 0x0104),
-  IOD_CONTROL_REQ((int) 0x0110),
-  IOX_BLOCK_REQ((int) 0x0112),
-  PD_PORT_DATA_CHECK((int) 0x0200),
-  CHECK_PEERS((int) 0x020a),
-  PD_INTERFACE_ADJUST((int) 0x0250),
-  IOD_WRITE_RESPONSE_HEADER((int) 0x8008),
-  AR_BLOCK_RES((int) 0x8101),
-  IO_CR_BLOCK_RES((int) 0x8102),
-  ALARM_CR_BLOCK_RES((int) 0x8103),
-  MODULE_DIFF_BLOCK((int) 0x8104),
-  AR_SERVER_BLOCK((int) 0x8106),
-  IOD_CONTROL_RES((int) 0x8110),
-  IOX_BLOCK_RES((int) 0x8112);
-  private static final Map<Integer, PnIoCm_BlockType> map;
+public enum FloatingPointEncoding {
+  IEEE((short) 0x00),
+  VAX((short) 0x01),
+  CRAY((short) 0x02),
+  IBM((short) 0x03);
+  private static final Map<Short, FloatingPointEncoding> map;
 
   static {
     map = new HashMap<>();
-    for (PnIoCm_BlockType value : PnIoCm_BlockType.values()) {
-      map.put((int) value.getValue(), value);
+    for (FloatingPointEncoding value : FloatingPointEncoding.values()) {
+      map.put((short) value.getValue(), value);
     }
   }
 
-  private final int value;
+  private final short value;
 
-  PnIoCm_BlockType(int value) {
+  FloatingPointEncoding(short value) {
     this.value = value;
   }
 
-  public int getValue() {
+  public short getValue() {
     return value;
   }
 
-  public static PnIoCm_BlockType enumForValue(int value) {
+  public static FloatingPointEncoding enumForValue(short value) {
     return map.get(value);
   }
 
-  public static Boolean isDefined(int value) {
+  public static Boolean isDefined(short value) {
     return map.containsKey(value);
   }
 }
diff --git a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteRequestHeader.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODReadRequestHeader.java
similarity index 82%
copy from plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteRequestHeader.java
copy to plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODReadRequestHeader.java
index 60b347e385..d51b68882f 100644
--- a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteRequestHeader.java
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODReadRequestHeader.java
@@ -35,11 +35,11 @@ import org.apache.plc4x.java.spi.generation.*;
 
 // Code generated by code-generation. DO NOT EDIT.
 
-public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
+public class IODReadRequestHeader extends PnIoCm_Block implements Message {
 
   // Accessors for discriminator values.
   public PnIoCm_BlockType getBlockType() {
-    return PnIoCm_BlockType.IOD_WRITE_REQUEST_HEADER;
+    return PnIoCm_BlockType.IOD_READ_REQ_HEADER;
   }
 
   // Constant values.
@@ -55,9 +55,9 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
   protected final int subSlotNumber;
   protected final int index;
   protected final long recordDataLength;
-  protected final UserData userData;
+  protected final Uuid targetArUuid;
 
-  public IODWriteRequestHeader(
+  public IODReadRequestHeader(
       short blockVersionHigh,
       short blockVersionLow,
       int sequenceNumber,
@@ -67,7 +67,7 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
       int subSlotNumber,
       int index,
       long recordDataLength,
-      UserData userData) {
+      Uuid targetArUuid) {
     super();
     this.blockVersionHigh = blockVersionHigh;
     this.blockVersionLow = blockVersionLow;
@@ -78,7 +78,7 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
     this.subSlotNumber = subSlotNumber;
     this.index = index;
     this.recordDataLength = recordDataLength;
-    this.userData = userData;
+    this.targetArUuid = targetArUuid;
   }
 
   public short getBlockVersionHigh() {
@@ -117,8 +117,8 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
     return recordDataLength;
   }
 
-  public UserData getUserData() {
-    return userData;
+  public Uuid getTargetArUuid() {
+    return targetArUuid;
   }
 
   public int getPadField() {
@@ -129,14 +129,14 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
   protected void serializePnIoCm_BlockChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
     boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
-    writeBuffer.pushContext("IODWriteRequestHeader");
+    writeBuffer.pushContext("IODReadRequestHeader");
 
     // Implicit Field (blockLength) (Used for parsing, but its value is not stored as it's
     // implicitly given by the objects content)
     int blockLength =
         (int)
             ((((getIndex()) < (0x8000))
-                ? ((getLengthInBytes()) - (4)) - (getRecordDataLength())
+                ? (getLengthInBytes()) - (((4) + (getRecordDataLength())))
                 : (getLengthInBytes()) - (4)));
     writeImplicitField(
         "blockLength",
@@ -214,26 +214,23 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
         writeUnsignedLong(writeBuffer, 32),
         WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
+    // Optional Field (targetArUuid) (Can be skipped, if the value is null)
+    writeOptionalField(
+        "targetArUuid",
+        targetArUuid,
+        new DataWriterComplexDefault<>(writeBuffer),
+        org.apache.plc4x.java.profinet.readwrite.utils.StaticHelper.isNullUuid(getArUuid()),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
     // Padding Field (padding)
     writePaddingField(
         "padding",
-        (int)
-            ((((index) < (0x8000))
-                ? (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4)
-                : (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4))),
+        (int) (((((targetArUuid) != (null))) ? 8 : 24)),
         (short) 0x00,
         writeUnsignedShort(writeBuffer, 8),
         WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
-    // Optional Field (userData) (Can be skipped, if the value is null)
-    writeOptionalField(
-        "userData",
-        userData,
-        new DataWriterComplexDefault<>(writeBuffer),
-        (getIndex()) < (0x8000),
-        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
-
-    writeBuffer.popContext("IODWriteRequestHeader");
+    writeBuffer.popContext("IODReadRequestHeader");
   }
 
   @Override
@@ -244,7 +241,7 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
   @Override
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
-    IODWriteRequestHeader _value = this;
+    IODReadRequestHeader _value = this;
     boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Implicit Field (blockLength)
@@ -280,27 +277,23 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
     // Simple field (recordDataLength)
     lengthInBits += 32;
 
+    // Optional Field (targetArUuid)
+    if (targetArUuid != null) {
+      lengthInBits += targetArUuid.getLengthInBits();
+    }
+
     // Padding Field (padding)
-    int _timesPadding =
-        (int)
-            ((((index) < (0x8000))
-                ? (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4)
-                : (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4)));
+    int _timesPadding = (int) (((((targetArUuid) != (null))) ? 8 : 24));
     while (_timesPadding-- > 0) {
       lengthInBits += 8;
     }
 
-    // Optional Field (userData)
-    if (userData != null) {
-      lengthInBits += userData.getLengthInBits();
-    }
-
     return lengthInBits;
   }
 
   public static PnIoCm_BlockBuilder staticParsePnIoCm_BlockBuilder(ReadBuffer readBuffer)
       throws ParseException {
-    readBuffer.pullContext("IODWriteRequestHeader");
+    readBuffer.pullContext("IODReadRequestHeader");
     PositionAware positionAware = readBuffer;
     boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
@@ -356,7 +349,7 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
         readConstField(
             "padField",
             readUnsignedInt(readBuffer, 16),
-            IODWriteRequestHeader.PADFIELD,
+            IODReadRequestHeader.PADFIELD,
             WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
     int index =
@@ -371,25 +364,21 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
             readUnsignedLong(readBuffer, 32),
             WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
+    Uuid targetArUuid =
+        readOptionalField(
+            "targetArUuid",
+            new DataReaderComplexDefault<>(() -> Uuid.staticParse(readBuffer), readBuffer),
+            org.apache.plc4x.java.profinet.readwrite.utils.StaticHelper.isNullUuid(arUuid),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
     readPaddingField(
         readUnsignedShort(readBuffer, 8),
-        (int)
-            ((((index) < (0x8000))
-                ? (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4)
-                : (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4))),
+        (int) (((((targetArUuid) != (null))) ? 8 : 24)),
         WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
-    UserData userData =
-        readOptionalField(
-            "userData",
-            new DataReaderComplexDefault<>(
-                () -> UserData.staticParse(readBuffer, (long) (recordDataLength)), readBuffer),
-            (index) < (0x8000),
-            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
-
-    readBuffer.closeContext("IODWriteRequestHeader");
+    readBuffer.closeContext("IODReadRequestHeader");
     // Create the instance
-    return new IODWriteRequestHeaderBuilderImpl(
+    return new IODReadRequestHeaderBuilderImpl(
         blockVersionHigh,
         blockVersionLow,
         sequenceNumber,
@@ -399,10 +388,10 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
         subSlotNumber,
         index,
         recordDataLength,
-        userData);
+        targetArUuid);
   }
 
-  public static class IODWriteRequestHeaderBuilderImpl implements PnIoCm_Block.PnIoCm_BlockBuilder {
+  public static class IODReadRequestHeaderBuilderImpl implements PnIoCm_Block.PnIoCm_BlockBuilder {
     private final short blockVersionHigh;
     private final short blockVersionLow;
     private final int sequenceNumber;
@@ -412,9 +401,9 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
     private final int subSlotNumber;
     private final int index;
     private final long recordDataLength;
-    private final UserData userData;
+    private final Uuid targetArUuid;
 
-    public IODWriteRequestHeaderBuilderImpl(
+    public IODReadRequestHeaderBuilderImpl(
         short blockVersionHigh,
         short blockVersionLow,
         int sequenceNumber,
@@ -424,7 +413,7 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
         int subSlotNumber,
         int index,
         long recordDataLength,
-        UserData userData) {
+        Uuid targetArUuid) {
       this.blockVersionHigh = blockVersionHigh;
       this.blockVersionLow = blockVersionLow;
       this.sequenceNumber = sequenceNumber;
@@ -434,12 +423,12 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
       this.subSlotNumber = subSlotNumber;
       this.index = index;
       this.recordDataLength = recordDataLength;
-      this.userData = userData;
+      this.targetArUuid = targetArUuid;
     }
 
-    public IODWriteRequestHeader build() {
-      IODWriteRequestHeader iODWriteRequestHeader =
-          new IODWriteRequestHeader(
+    public IODReadRequestHeader build() {
+      IODReadRequestHeader iODReadRequestHeader =
+          new IODReadRequestHeader(
               blockVersionHigh,
               blockVersionLow,
               sequenceNumber,
@@ -449,8 +438,8 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
               subSlotNumber,
               index,
               recordDataLength,
-              userData);
-      return iODWriteRequestHeader;
+              targetArUuid);
+      return iODReadRequestHeader;
     }
   }
 
@@ -459,10 +448,10 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
     if (this == o) {
       return true;
     }
-    if (!(o instanceof IODWriteRequestHeader)) {
+    if (!(o instanceof IODReadRequestHeader)) {
       return false;
     }
-    IODWriteRequestHeader that = (IODWriteRequestHeader) o;
+    IODReadRequestHeader that = (IODReadRequestHeader) o;
     return (getBlockVersionHigh() == that.getBlockVersionHigh())
         && (getBlockVersionLow() == that.getBlockVersionLow())
         && (getSequenceNumber() == that.getSequenceNumber())
@@ -472,7 +461,7 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
         && (getSubSlotNumber() == that.getSubSlotNumber())
         && (getIndex() == that.getIndex())
         && (getRecordDataLength() == that.getRecordDataLength())
-        && (getUserData() == that.getUserData())
+        && (getTargetArUuid() == that.getTargetArUuid())
         && super.equals(that)
         && true;
   }
@@ -490,7 +479,7 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
         getSubSlotNumber(),
         getIndex(),
         getRecordDataLength(),
-        getUserData());
+        getTargetArUuid());
   }
 
   @Override
diff --git a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteRequestHeader.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODReadResponseHeader.java
similarity index 81%
copy from plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteRequestHeader.java
copy to plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODReadResponseHeader.java
index 60b347e385..8d2b550df5 100644
--- a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteRequestHeader.java
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODReadResponseHeader.java
@@ -35,11 +35,11 @@ import org.apache.plc4x.java.spi.generation.*;
 
 // Code generated by code-generation. DO NOT EDIT.
 
-public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
+public class IODReadResponseHeader extends PnIoCm_Block implements Message {
 
   // Accessors for discriminator values.
   public PnIoCm_BlockType getBlockType() {
-    return PnIoCm_BlockType.IOD_WRITE_REQUEST_HEADER;
+    return PnIoCm_BlockType.IOD_READ_RES_HEADER;
   }
 
   // Constant values.
@@ -55,9 +55,10 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
   protected final int subSlotNumber;
   protected final int index;
   protected final long recordDataLength;
-  protected final UserData userData;
+  protected final int additionalValue1;
+  protected final int additionalValue2;
 
-  public IODWriteRequestHeader(
+  public IODReadResponseHeader(
       short blockVersionHigh,
       short blockVersionLow,
       int sequenceNumber,
@@ -67,7 +68,8 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
       int subSlotNumber,
       int index,
       long recordDataLength,
-      UserData userData) {
+      int additionalValue1,
+      int additionalValue2) {
     super();
     this.blockVersionHigh = blockVersionHigh;
     this.blockVersionLow = blockVersionLow;
@@ -78,7 +80,8 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
     this.subSlotNumber = subSlotNumber;
     this.index = index;
     this.recordDataLength = recordDataLength;
-    this.userData = userData;
+    this.additionalValue1 = additionalValue1;
+    this.additionalValue2 = additionalValue2;
   }
 
   public short getBlockVersionHigh() {
@@ -117,8 +120,12 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
     return recordDataLength;
   }
 
-  public UserData getUserData() {
-    return userData;
+  public int getAdditionalValue1() {
+    return additionalValue1;
+  }
+
+  public int getAdditionalValue2() {
+    return additionalValue2;
   }
 
   public int getPadField() {
@@ -129,14 +136,14 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
   protected void serializePnIoCm_BlockChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
     boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
-    writeBuffer.pushContext("IODWriteRequestHeader");
+    writeBuffer.pushContext("IODReadResponseHeader");
 
     // Implicit Field (blockLength) (Used for parsing, but its value is not stored as it's
     // implicitly given by the objects content)
     int blockLength =
         (int)
             ((((getIndex()) < (0x8000))
-                ? ((getLengthInBytes()) - (4)) - (getRecordDataLength())
+                ? (getLengthInBytes()) - (((4) + (getRecordDataLength())))
                 : (getLengthInBytes()) - (4)));
     writeImplicitField(
         "blockLength",
@@ -214,26 +221,29 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
         writeUnsignedLong(writeBuffer, 32),
         WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
+    // Simple Field (additionalValue1)
+    writeSimpleField(
+        "additionalValue1",
+        additionalValue1,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    // Simple Field (additionalValue2)
+    writeSimpleField(
+        "additionalValue2",
+        additionalValue2,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
     // Padding Field (padding)
     writePaddingField(
         "padding",
-        (int)
-            ((((index) < (0x8000))
-                ? (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4)
-                : (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4))),
+        (int) (20),
         (short) 0x00,
         writeUnsignedShort(writeBuffer, 8),
         WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
-    // Optional Field (userData) (Can be skipped, if the value is null)
-    writeOptionalField(
-        "userData",
-        userData,
-        new DataWriterComplexDefault<>(writeBuffer),
-        (getIndex()) < (0x8000),
-        WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
-
-    writeBuffer.popContext("IODWriteRequestHeader");
+    writeBuffer.popContext("IODReadResponseHeader");
   }
 
   @Override
@@ -244,7 +254,7 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
   @Override
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
-    IODWriteRequestHeader _value = this;
+    IODReadResponseHeader _value = this;
     boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Implicit Field (blockLength)
@@ -280,27 +290,24 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
     // Simple field (recordDataLength)
     lengthInBits += 32;
 
+    // Simple field (additionalValue1)
+    lengthInBits += 16;
+
+    // Simple field (additionalValue2)
+    lengthInBits += 16;
+
     // Padding Field (padding)
-    int _timesPadding =
-        (int)
-            ((((index) < (0x8000))
-                ? (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4)
-                : (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4)));
+    int _timesPadding = (int) (20);
     while (_timesPadding-- > 0) {
       lengthInBits += 8;
     }
 
-    // Optional Field (userData)
-    if (userData != null) {
-      lengthInBits += userData.getLengthInBits();
-    }
-
     return lengthInBits;
   }
 
   public static PnIoCm_BlockBuilder staticParsePnIoCm_BlockBuilder(ReadBuffer readBuffer)
       throws ParseException {
-    readBuffer.pullContext("IODWriteRequestHeader");
+    readBuffer.pullContext("IODReadResponseHeader");
     PositionAware positionAware = readBuffer;
     boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
@@ -356,7 +363,7 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
         readConstField(
             "padField",
             readUnsignedInt(readBuffer, 16),
-            IODWriteRequestHeader.PADFIELD,
+            IODReadResponseHeader.PADFIELD,
             WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
     int index =
@@ -371,25 +378,26 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
             readUnsignedLong(readBuffer, 32),
             WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
+    int additionalValue1 =
+        readSimpleField(
+            "additionalValue1",
+            readUnsignedInt(readBuffer, 16),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
+    int additionalValue2 =
+        readSimpleField(
+            "additionalValue2",
+            readUnsignedInt(readBuffer, 16),
+            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
+
     readPaddingField(
         readUnsignedShort(readBuffer, 8),
-        (int)
-            ((((index) < (0x8000))
-                ? (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4)
-                : (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4))),
+        (int) (20),
         WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
-    UserData userData =
-        readOptionalField(
-            "userData",
-            new DataReaderComplexDefault<>(
-                () -> UserData.staticParse(readBuffer, (long) (recordDataLength)), readBuffer),
-            (index) < (0x8000),
-            WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
-
-    readBuffer.closeContext("IODWriteRequestHeader");
+    readBuffer.closeContext("IODReadResponseHeader");
     // Create the instance
-    return new IODWriteRequestHeaderBuilderImpl(
+    return new IODReadResponseHeaderBuilderImpl(
         blockVersionHigh,
         blockVersionLow,
         sequenceNumber,
@@ -399,10 +407,11 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
         subSlotNumber,
         index,
         recordDataLength,
-        userData);
+        additionalValue1,
+        additionalValue2);
   }
 
-  public static class IODWriteRequestHeaderBuilderImpl implements PnIoCm_Block.PnIoCm_BlockBuilder {
+  public static class IODReadResponseHeaderBuilderImpl implements PnIoCm_Block.PnIoCm_BlockBuilder {
     private final short blockVersionHigh;
     private final short blockVersionLow;
     private final int sequenceNumber;
@@ -412,9 +421,10 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
     private final int subSlotNumber;
     private final int index;
     private final long recordDataLength;
-    private final UserData userData;
+    private final int additionalValue1;
+    private final int additionalValue2;
 
-    public IODWriteRequestHeaderBuilderImpl(
+    public IODReadResponseHeaderBuilderImpl(
         short blockVersionHigh,
         short blockVersionLow,
         int sequenceNumber,
@@ -424,7 +434,8 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
         int subSlotNumber,
         int index,
         long recordDataLength,
-        UserData userData) {
+        int additionalValue1,
+        int additionalValue2) {
       this.blockVersionHigh = blockVersionHigh;
       this.blockVersionLow = blockVersionLow;
       this.sequenceNumber = sequenceNumber;
@@ -434,12 +445,13 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
       this.subSlotNumber = subSlotNumber;
       this.index = index;
       this.recordDataLength = recordDataLength;
-      this.userData = userData;
+      this.additionalValue1 = additionalValue1;
+      this.additionalValue2 = additionalValue2;
     }
 
-    public IODWriteRequestHeader build() {
-      IODWriteRequestHeader iODWriteRequestHeader =
-          new IODWriteRequestHeader(
+    public IODReadResponseHeader build() {
+      IODReadResponseHeader iODReadResponseHeader =
+          new IODReadResponseHeader(
               blockVersionHigh,
               blockVersionLow,
               sequenceNumber,
@@ -449,8 +461,9 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
               subSlotNumber,
               index,
               recordDataLength,
-              userData);
-      return iODWriteRequestHeader;
+              additionalValue1,
+              additionalValue2);
+      return iODReadResponseHeader;
     }
   }
 
@@ -459,10 +472,10 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
     if (this == o) {
       return true;
     }
-    if (!(o instanceof IODWriteRequestHeader)) {
+    if (!(o instanceof IODReadResponseHeader)) {
       return false;
     }
-    IODWriteRequestHeader that = (IODWriteRequestHeader) o;
+    IODReadResponseHeader that = (IODReadResponseHeader) o;
     return (getBlockVersionHigh() == that.getBlockVersionHigh())
         && (getBlockVersionLow() == that.getBlockVersionLow())
         && (getSequenceNumber() == that.getSequenceNumber())
@@ -472,7 +485,8 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
         && (getSubSlotNumber() == that.getSubSlotNumber())
         && (getIndex() == that.getIndex())
         && (getRecordDataLength() == that.getRecordDataLength())
-        && (getUserData() == that.getUserData())
+        && (getAdditionalValue1() == that.getAdditionalValue1())
+        && (getAdditionalValue2() == that.getAdditionalValue2())
         && super.equals(that)
         && true;
   }
@@ -490,7 +504,8 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
         getSubSlotNumber(),
         getIndex(),
         getRecordDataLength(),
-        getUserData());
+        getAdditionalValue1(),
+        getAdditionalValue2());
   }
 
   @Override
diff --git a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteRequestHeader.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteRequestHeader.java
similarity index 94%
copy from plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteRequestHeader.java
copy to plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteRequestHeader.java
index 60b347e385..d76b8ab1fc 100644
--- a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteRequestHeader.java
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteRequestHeader.java
@@ -39,7 +39,7 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
 
   // Accessors for discriminator values.
   public PnIoCm_BlockType getBlockType() {
-    return PnIoCm_BlockType.IOD_WRITE_REQUEST_HEADER;
+    return PnIoCm_BlockType.IOD_WRITE_REQ_HEADER;
   }
 
   // Constant values.
@@ -136,7 +136,7 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
     int blockLength =
         (int)
             ((((getIndex()) < (0x8000))
-                ? ((getLengthInBytes()) - (4)) - (getRecordDataLength())
+                ? (getLengthInBytes()) - (((4) + (getRecordDataLength())))
                 : (getLengthInBytes()) - (4)));
     writeImplicitField(
         "blockLength",
@@ -217,10 +217,7 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
     // Padding Field (padding)
     writePaddingField(
         "padding",
-        (int)
-            ((((index) < (0x8000))
-                ? (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4)
-                : (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4))),
+        (int) ((((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4)),
         (short) 0x00,
         writeUnsignedShort(writeBuffer, 8),
         WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
@@ -282,10 +279,7 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
 
     // Padding Field (padding)
     int _timesPadding =
-        (int)
-            ((((index) < (0x8000))
-                ? (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4)
-                : (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4)));
+        (int) ((((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4));
     while (_timesPadding-- > 0) {
       lengthInBits += 8;
     }
@@ -373,10 +367,7 @@ public class IODWriteRequestHeader extends PnIoCm_Block implements Message {
 
     readPaddingField(
         readUnsignedShort(readBuffer, 8),
-        (int)
-            ((((index) < (0x8000))
-                ? (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4)
-                : (((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4))),
+        (int) ((((((((((64) - (6)) - (2)) - (16)) - (4)) - (2)) - (2)) - (2)) - (2)) - (4)),
         WithOption.WithByteOrder(ByteOrder.BIG_ENDIAN));
 
     UserData userData =
diff --git a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteResponseHeader.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteResponseHeader.java
similarity index 99%
copy from plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteResponseHeader.java
copy to plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteResponseHeader.java
index 181a254260..e57b80eafa 100644
--- a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteResponseHeader.java
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IODWriteResponseHeader.java
@@ -39,7 +39,7 @@ public class IODWriteResponseHeader extends PnIoCm_Block implements Message {
 
   // Accessors for discriminator values.
   public PnIoCm_BlockType getBlockType() {
-    return PnIoCm_BlockType.IOD_WRITE_RESPONSE_HEADER;
+    return PnIoCm_BlockType.IOD_WRITE_RES_HEADER;
   }
 
   // Constant values.
diff --git a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_BlockType.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IntegerEncoding.java
similarity index 52%
copy from plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_BlockType.java
copy to plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IntegerEncoding.java
index 3366b5b92f..c9e6ebdf06 100644
--- a/plc4j/drivers/profinet/src/main/generated/org/apache/plc4x/java/profinet/readwrite/PnIoCm_BlockType.java
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IntegerEncoding.java
@@ -23,49 +23,33 @@ import java.util.Map;
 
 // Code generated by code-generation. DO NOT EDIT.
 
-public enum PnIoCm_BlockType {
-  IOD_WRITE_REQUEST_HEADER((int) 0x0008),
-  AR_BLOCK_REQ((int) 0x0101),
-  IO_CR_BLOCK_REQ((int) 0x0102),
-  ALARM_CR_BLOCK_REQ((int) 0x0103),
-  EXPECTED_SUBMODULE_BLOCK_REQ((int) 0x0104),
-  IOD_CONTROL_REQ((int) 0x0110),
-  IOX_BLOCK_REQ((int) 0x0112),
-  PD_PORT_DATA_CHECK((int) 0x0200),
-  CHECK_PEERS((int) 0x020a),
-  PD_INTERFACE_ADJUST((int) 0x0250),
-  IOD_WRITE_RESPONSE_HEADER((int) 0x8008),
-  AR_BLOCK_RES((int) 0x8101),
-  IO_CR_BLOCK_RES((int) 0x8102),
-  ALARM_CR_BLOCK_RES((int) 0x8103),
-  MODULE_DIFF_BLOCK((int) 0x8104),
-  AR_SERVER_BLOCK((int) 0x8106),
-  IOD_CONTROL_RES((int) 0x8110),
-  IOX_BLOCK_RES((int) 0x8112);
-  private static final Map<Integer, PnIoCm_BlockType> map;
+public enum IntegerEncoding {
+  BIG_ENDIAN((byte) 0x0),
+  LITTLE_ENDIAN((byte) 0x1);
+  private static final Map<Byte, IntegerEncoding> map;
 
   static {
     map = new HashMap<>();
-    for (PnIoCm_BlockType value : PnIoCm_BlockType.values()) {
-      map.put((int) value.getValue(), value);
+    for (IntegerEncoding value : IntegerEncoding.values()) {
+      map.put((byte) value.getValue(), value);
     }
   }
 
-  private final int value;
+  private final byte value;
 
-  PnIoCm_BlockType(int value) {
+  IntegerEncoding(byte value) {
     this.value = value;
   }
 
-  public int getValue() {
+  public byte getValue() {
     return value;
   }
 
-  public static PnIoCm_BlockType enumForValue(int value) {
+  public static IntegerEncoding enumForValue(byte value) {
     return map.get(value);
   }
 
-  public static Boolean isDefined(int value) {
+  public static Boolean isDefined(byte value) {
     return map.containsKey(value);
   }
 }
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IpAddress.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IpAddress.java
new file mode 100644
index 0000000000..5cbf7c5764
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/IpAddress.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class IpAddress implements Message {
+
+  // Properties.
+  protected final byte[] data;
+
+  public IpAddress(byte[] data) {
+    super();
+    this.data = data;
+  }
+
+  public byte[] getData() {
+    return data;
+  }
+
+  public void serialize(WriteBuffer writeBuffer) throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+    writeBuffer.pushContext("IpAddress");
+
+    // Array Field (data)
+    writeByteArrayField("data", data, writeByteArray(writeBuffer, 8));
+
+    writeBuffer.popContext("IpAddress");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = 0;
+    IpAddress _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    // Array field
+    if (data != null) {
+      lengthInBits += 8 * data.length;
+    }
+
+    return lengthInBits;
+  }
+
+  public static IpAddress staticParse(ReadBuffer readBuffer, Object... args) throws ParseException {
+    PositionAware positionAware = readBuffer;
+    return staticParse(readBuffer);
+  }
+
+  public static IpAddress staticParse(ReadBuffer readBuffer) throws ParseException {
+    readBuffer.pullContext("IpAddress");
+    PositionAware positionAware = readBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
+
+    byte[] data = readBuffer.readByteArray("data", Math.toIntExact(4));
+
+    readBuffer.closeContext("IpAddress");
+    // Create the instance
+    IpAddress _ipAddress;
+    _ipAddress = new IpAddress(data);
+    return _ipAddress;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof IpAddress)) {
+      return false;
+    }
+    IpAddress that = (IpAddress) o;
+    return (getData() == that.getData()) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(getData());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/LldpUnit.java b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/LldpUnit.java
new file mode 100644
index 0000000000..4429d2c879
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/src/main/generated/org/apache/plc4x/java/profinet/readwrite/LldpUnit.java
@@ -0,0 +1,184 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.profinet.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public abstract class LldpUnit implements Message {
+
+  // Abstract accessors for discriminator values.
+  public abstract TlvType getTlvId();
+
+  // Properties.
+  protected final int tlvIdLength;
+
+  public LldpUnit(int tlvIdLength) {
+    super();
+    this.tlvIdLength = tlvIdLength;
+  }
+
+  public int getTlvIdLength() {
+    return tlvIdLength;
+  }
+
+  protected abstract void serializeLldpUnitChild(WriteBuffer writeBuffer)
+      throws SerializationException;
+
+  public void serialize(WriteBuffer writeBuffer) throws SerializationException {
+    PositionAware positionAware = writeBuffer;
... 34802 lines suppressed ...