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 2021/12/15 21:24:42 UTC

[plc4x] 08/09: - Added the basic generation of model classes for the protocol types in C#

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

cdutz pushed a commit to branch feature/plc4net2
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 430cfbd069325c459adb943a7d9dbae85755a882
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Thu Dec 3 22:36:54 2020 +0100

    - Added the basic generation of model classes for the protocol types in C#
---
 .../apache/plc4x/language/cs/CsLanguageOutput.java |   3 +-
 .../resources/templates/cs/model-template.ftlh     | 134 +++++++++++++++++++++
 .../knxnetip/src/knxnetip/readwrite/model/CEMI.cs  |  34 ++++++
 .../readwrite/model/CEMIAdditionalInformation.cs   |  34 ++++++
 .../CEMIAdditionalInformationBusmonitorInfo.cs     |  53 ++++++++
 .../CEMIAdditionalInformationRelativeTimestamp.cs  |  43 +++++++
 .../src/knxnetip/readwrite/model/CEMIBusmonInd.cs  |  44 +++++++
 .../src/knxnetip/readwrite/model/CEMIDataCon.cs    |  44 +++++++
 .../src/knxnetip/readwrite/model/CEMIDataFrame.cs  |  70 +++++++++++
 .../src/knxnetip/readwrite/model/CEMIDataInd.cs    |  44 +++++++
 .../src/knxnetip/readwrite/model/CEMIDataReq.cs    |  44 +++++++
 .../src/knxnetip/readwrite/model/CEMIFrame.cs      |  46 +++++++
 .../src/knxnetip/readwrite/model/CEMIFrameAck.cs   |  43 +++++++
 .../src/knxnetip/readwrite/model/CEMIFrameData.cs  |  67 +++++++++++
 .../knxnetip/readwrite/model/CEMIFrameDataExt.cs   |  69 +++++++++++
 .../readwrite/model/CEMIFramePollingData.cs        |  43 +++++++
 .../readwrite/model/CEMIFramePollingDataExt.cs     |  43 +++++++
 .../knxnetip/readwrite/model/CEMIMPropReadCon.cs   |  50 ++++++++
 .../knxnetip/readwrite/model/CEMIMPropReadReq.cs   |  48 ++++++++
 .../knxnetip/readwrite/model/CEMIPollDataCon.cs    |  36 ++++++
 .../knxnetip/readwrite/model/CEMIPollDataReq.cs    |  36 ++++++
 .../src/knxnetip/readwrite/model/CEMIRawCon.cs     |  36 ++++++
 .../src/knxnetip/readwrite/model/CEMIRawInd.cs     |  36 ++++++
 .../src/knxnetip/readwrite/model/CEMIRawReq.cs     |  36 ++++++
 .../knxnetip/readwrite/model/ConnectionRequest.cs  |  44 +++++++
 .../model/ConnectionRequestInformation.cs          |  34 ++++++
 ...ConnectionRequestInformationDeviceManagement.cs |  36 ++++++
 ...ConnectionRequestInformationTunnelConnection.cs |  40 ++++++
 .../knxnetip/readwrite/model/ConnectionResponse.cs |  46 +++++++
 .../readwrite/model/ConnectionResponseDataBlock.cs |  34 ++++++
 .../ConnectionResponseDataBlockDeviceManagement.cs |  36 ++++++
 .../ConnectionResponseDataBlockTunnelConnection.cs |  40 ++++++
 .../readwrite/model/ConnectionStateRequest.cs      |  42 +++++++
 .../readwrite/model/ConnectionStateResponse.cs     |  42 +++++++
 .../src/knxnetip/readwrite/model/DIBDeviceInfo.cs  |  52 ++++++++
 .../knxnetip/readwrite/model/DIBSuppSvcFamilies.cs |  38 ++++++
 .../knxnetip/readwrite/model/DescriptionRequest.cs |  40 ++++++
 .../readwrite/model/DescriptionResponse.cs         |  42 +++++++
 .../readwrite/model/DeviceConfigurationAck.cs      |  40 ++++++
 .../model/DeviceConfigurationAckDataBlock.cs       |  40 ++++++
 .../readwrite/model/DeviceConfigurationRequest.cs  |  42 +++++++
 .../model/DeviceConfigurationRequestDataBlock.cs   |  38 ++++++
 .../src/knxnetip/readwrite/model/DeviceStatus.cs   |  36 ++++++
 .../knxnetip/readwrite/model/DisconnectRequest.cs  |  42 +++++++
 .../knxnetip/readwrite/model/DisconnectResponse.cs |  42 +++++++
 .../readwrite/model/HPAIControlEndpoint.cs         |  40 ++++++
 .../knxnetip/readwrite/model/HPAIDataEndpoint.cs   |  40 ++++++
 .../readwrite/model/HPAIDiscoveryEndpoint.cs       |  40 ++++++
 .../src/knxnetip/readwrite/model/IPAddress.cs      |  36 ++++++
 .../src/knxnetip/readwrite/model/KnxAddress.cs     |  40 ++++++
 .../knxnetip/readwrite/model/KnxGroupAddress.cs    |  34 ++++++
 .../readwrite/model/KnxGroupAddress2Level.cs       |  42 +++++++
 .../readwrite/model/KnxGroupAddress3Level.cs       |  44 +++++++
 .../readwrite/model/KnxGroupAddressFreeLevel.cs    |  40 ++++++
 .../src/knxnetip/readwrite/model/KnxNetIpCore.cs   |  40 ++++++
 .../readwrite/model/KnxNetIpDeviceManagement.cs    |  40 ++++++
 .../knxnetip/readwrite/model/KnxNetIpMessage.cs    |  37 ++++++
 .../knxnetip/readwrite/model/KnxNetIpTunneling.cs  |  40 ++++++
 .../knxnetip/readwrite/model/KnxNetObjectServer.cs |  40 ++++++
 .../model/KnxNetRemoteConfigurationAndDiagnosis.cs |  40 ++++++
 .../readwrite/model/KnxNetRemoteLogging.cs         |  40 ++++++
 .../src/knxnetip/readwrite/model/MACAddress.cs     |  36 ++++++
 .../model/ProjectInstallationIdentifier.cs         |  38 ++++++
 .../knxnetip/readwrite/model/RelativeTimestamp.cs  |  36 ++++++
 .../knxnetip/readwrite/model/RoutingIndication.cs  |  36 ++++++
 .../src/knxnetip/readwrite/model/SearchRequest.cs  |  40 ++++++
 .../src/knxnetip/readwrite/model/SearchResponse.cs |  44 +++++++
 .../src/knxnetip/readwrite/model/ServiceId.cs      |  34 ++++++
 .../knxnetip/readwrite/model/TunnelingRequest.cs   |  42 +++++++
 .../readwrite/model/TunnelingRequestDataBlock.cs   |  38 ++++++
 .../knxnetip/readwrite/model/TunnelingResponse.cs  |  40 ++++++
 .../readwrite/model/TunnelingResponseDataBlock.cs  |  40 ++++++
 .../src/knxnetip/readwrite/model/UnknownMessage.cs |  40 ++++++
 73 files changed, 3078 insertions(+), 1 deletion(-)

diff --git a/build-utils/language-cs/src/main/java/org/apache/plc4x/language/cs/CsLanguageOutput.java b/build-utils/language-cs/src/main/java/org/apache/plc4x/language/cs/CsLanguageOutput.java
index a71b4dd..9009615 100644
--- a/build-utils/language-cs/src/main/java/org/apache/plc4x/language/cs/CsLanguageOutput.java
+++ b/build-utils/language-cs/src/main/java/org/apache/plc4x/language/cs/CsLanguageOutput.java
@@ -50,7 +50,8 @@ public class CsLanguageOutput extends FreemarkerLanguageOutput {
 
     @Override
     protected List<Template> getComplexTypeTemplates(Configuration freemarkerConfiguration) throws IOException {
-        return Collections.emptyList();
+        return Collections.singletonList(
+            freemarkerConfiguration.getTemplate("templates/cs/model-template.ftlh"));
     }
 
     @Override
diff --git a/build-utils/language-cs/src/main/resources/templates/cs/model-template.ftlh b/build-utils/language-cs/src/main/resources/templates/cs/model-template.ftlh
new file mode 100644
index 0000000..795a979
--- /dev/null
+++ b/build-utils/language-cs/src/main/resources/templates/cs/model-template.ftlh
@@ -0,0 +1,134 @@
+<#--
+  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
+
+      http://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.
+-->
+<#-- Prevent freemarker from escaping stuff -->
+<#outputformat "undefined">
+<#-- Declare the name and type of variables passed in to the template -->
+<#-- @ftlvariable name="languageName" type="java.lang.String" -->
+<#-- @ftlvariable name="protocolName" type="java.lang.String" -->
+<#-- @ftlvariable name="outputFlavor" type="java.lang.String" -->
+<#-- @ftlvariable name="helper" type="org.apache.plc4x.language.cs.CsLanguageTemplateHelper" -->
+<#-- @ftlvariable name="type" type="org.apache.plc4x.plugins.codegenerator.types.definitions.ComplexTypeDefinition" -->
+<#-- Declare the name and type of variables declared locally inside the template -->
+<#-- @ftlvariable name="arrayField" type="org.apache.plc4x.plugins.codegenerator.types.fields.ArrayField" -->
+<#-- @ftlvariable name="checksumField" type="org.apache.plc4x.plugins.codegenerator.types.fields.ChecksumField" -->
+<#-- @ftlvariable name="constField" type="org.apache.plc4x.plugins.codegenerator.types.fields.ConstField" -->
+<#-- @ftlvariable name="discriminatorField" type="org.apache.plc4x.plugins.codegenerator.types.fields.DiscriminatorField" -->
+<#-- @ftlvariable name="enumField" type="org.apache.plc4x.plugins.codegenerator.types.fields.EnumField" -->
+<#-- @ftlvariable name="implicitField" type="org.apache.plc4x.plugins.codegenerator.types.fields.ImplicitField" -->
+<#-- @ftlvariable name="manualArrayField" type="org.apache.plc4x.plugins.codegenerator.types.fields.ManualArrayField" -->
+<#-- @ftlvariable name="manualField" type="org.apache.plc4x.plugins.codegenerator.types.fields.ManualField" -->
+<#-- @ftlvariable name="optionalField" type="org.apache.plc4x.plugins.codegenerator.types.fields.OptionalField" -->
+<#-- @ftlvariable name="paddingField" type="org.apache.plc4x.plugins.codegenerator.types.fields.PaddingField" -->
+<#-- @ftlvariable name="reservedField" type="org.apache.plc4x.plugins.codegenerator.types.fields.ReservedField" -->
+<#-- @ftlvariable name="simpleField" type="org.apache.plc4x.plugins.codegenerator.types.fields.SimpleField" -->
+<#-- @ftlvariable name="switchField" type="org.apache.plc4x.plugins.codegenerator.types.fields.SwitchField" -->
+<#-- @ftlvariable name="virtualField" type="org.apache.plc4x.plugins.codegenerator.types.fields.VirtualField" -->
+<#-- @ftlvariable name="simpleTypeReference" type="org.apache.plc4x.plugins.codegenerator.types.references.SimpleTypeReference" -->
+<#-- @ftlvariable name="complexTypeReference" type="org.apache.plc4x.plugins.codegenerator.types.references.ComplexTypeReference" -->
+${helper.fileName(protocolName, languageName, outputFlavor)?replace(".", "/")}/model/${type.name}.cs
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.${protocolName?replace("-", "")}.${outputFlavor?replace("-", "")}.model
+{
+
+    public<#if helper.isDiscriminatedParentTypeDefinition()> abstract</#if> class ${type.name}<#if type.parentType??> : ${type.parentType.name}</#if>
+    {
+    <#--
+        If this is a discriminated child type, we need to generate methods for accessing it's discriminator
+        values, as if they were normal java properties.
+    -->
+    <#if helper.isDiscriminatedChildTypeDefinition()>
+        <#assign discriminatedChildType = type>
+
+        <#-- @ftlvariable name="discriminatedChildType" type="org.apache.plc4x.plugins.codegenerator.types.definitions.DiscriminatedComplexTypeDefinition" -->
+        // Accessors for discriminator values.
+        <#list helper.getDiscriminatorValues(discriminatedChildType) as discriminatorName, discriminatorValue>
+        <#-- If the discriminator name matches that of another field, suppress the methods generation -->
+            <#if !helper.isNonDiscriminatorField(discriminatorName)>
+        public override ${helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])} Get${discriminatorName?cap_first}() {
+            return <#if discriminatorValue??>${discriminatorValue}<#else>${helper.getNullValueForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])}</#if>;
+        }
+            </#if>
+        </#list>
+    </#if>
+    <#--
+        If this is a discriminated parent type, we need to generate the abstract methods for accessing it's
+        discriminator values instead.
+    -->
+    <#if helper.isDiscriminatedParentTypeDefinition()>
+        <#assign discriminatedParentType = type>
+
+    <#-- @ftlvariable name="discriminatedParentType" type="org.apache.plc4x.plugins.codegenerator.types.definitions.ComplexTypeDefinition" -->
+        // Abstract accessors for discriminator values.
+        <#list helper.getDiscriminatorTypes() as discriminatorName, discriminatorType>
+        <#-- If the discriminator name matches that of another field, suppress the methods generation -->
+            <#if !helper.isNonDiscriminatorField(discriminatorName)>
+        public abstract ${helper.getLanguageTypeNameForTypeReference(discriminatorType)} Get${discriminatorName?cap_first}();
+            </#if>
+        </#list>
+    </#if>
+    <#-- If the current type contains "const" fields, generate some java constants for holing their values -->
+    <#if type.constFields?has_content>
+
+        // Constant values.
+        <#list type.constFields as field>
+        public const ${helper.getLanguageTypeNameForField(field)} ${field.name?upper_case} = ${field.referenceValue};
+        </#list>
+    </#if>
+    <#-- Prpoerty fields are fields that require a property in the pojo -->
+    <#if type.propertyFields?has_content>
+
+        // Properties.
+        <#list type.propertyFields as field>
+        public ${helper.getLanguageTypeNameForField(field)}<#if field.loopType??>[]</#if> ${field.name?cap_first} { get; }
+        </#list>
+    </#if>
+
+    <#-- getAllPropertyFields() returns not only the property fields of this type but also of it's parents -->
+        public ${type.name}(<#list type.getAllPropertyFields() as field>${helper.getLanguageTypeNameForField(field)}<#if field.loopType??>[]</#if> ${field.name}<#sep>, </#sep></#list>)
+    <#if type.getParentPropertyFields()?has_content>
+            : base(<#list type.getParentPropertyFields() as field>${field.name}<#sep>, </#sep></#list>)
+    </#if>
+        {
+    <#list type.propertyFields as field>
+            ${field.name?cap_first} = ${field.name};
+    </#list>
+        }
+
+    }
+
+}
+</#outputformat>
\ No newline at end of file
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMI.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMI.cs
new file mode 100644
index 0000000..794eb23
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMI.cs
@@ -0,0 +1,34 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public abstract class CEMI
+    {
+        // Abstract accessors for discriminator values.
+        public abstract byte GetMessageCode();
+
+        public CEMI()
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIAdditionalInformation.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIAdditionalInformation.cs
new file mode 100644
index 0000000..e95ec38
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIAdditionalInformation.cs
@@ -0,0 +1,34 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public abstract class CEMIAdditionalInformation
+    {
+        // Abstract accessors for discriminator values.
+        public abstract byte GetAdditionalInformationType();
+
+        public CEMIAdditionalInformation()
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.cs
new file mode 100644
index 0000000..e028087
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.cs
@@ -0,0 +1,53 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIAdditionalInformationBusmonitorInfo : CEMIAdditionalInformation
+    {
+        // Accessors for discriminator values.
+        public override byte GetAdditionalInformationType() {
+            return 0x03;
+        }
+
+        // Constant values.
+        public const byte LEN = 1;
+
+        // Properties.
+        public bool FrameErrorFlag { get; }
+        public bool BitErrorFlag { get; }
+        public bool ParityErrorFlag { get; }
+        public bool UnknownFlag { get; }
+        public bool LostFlag { get; }
+        public byte SequenceNumber { get; }
+
+        public CEMIAdditionalInformationBusmonitorInfo(bool frameErrorFlag, bool bitErrorFlag, bool parityErrorFlag, bool unknownFlag, bool lostFlag, byte sequenceNumber)
+        {
+            FrameErrorFlag = frameErrorFlag;
+            BitErrorFlag = bitErrorFlag;
+            ParityErrorFlag = parityErrorFlag;
+            UnknownFlag = unknownFlag;
+            LostFlag = lostFlag;
+            SequenceNumber = sequenceNumber;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.cs
new file mode 100644
index 0000000..cbbb160
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.cs
@@ -0,0 +1,43 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIAdditionalInformationRelativeTimestamp : CEMIAdditionalInformation
+    {
+        // Accessors for discriminator values.
+        public override byte GetAdditionalInformationType() {
+            return 0x04;
+        }
+
+        // Constant values.
+        public const byte LEN = 2;
+
+        // Properties.
+        public RelativeTimestamp RelativeTimestamp { get; }
+
+        public CEMIAdditionalInformationRelativeTimestamp(RelativeTimestamp relativeTimestamp)
+        {
+            RelativeTimestamp = relativeTimestamp;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIBusmonInd.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIBusmonInd.cs
new file mode 100644
index 0000000..fb5252d
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIBusmonInd.cs
@@ -0,0 +1,44 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIBusmonInd : CEMI
+    {
+        // Accessors for discriminator values.
+        public override byte GetMessageCode() {
+            return 0x2B;
+        }
+
+        // Properties.
+        public byte AdditionalInformationLength { get; }
+        public CEMIAdditionalInformation[] AdditionalInformation { get; }
+        public CEMIFrame CemiFrame { get; }
+
+        public CEMIBusmonInd(byte additionalInformationLength, CEMIAdditionalInformation[] additionalInformation, CEMIFrame cemiFrame)
+        {
+            AdditionalInformationLength = additionalInformationLength;
+            AdditionalInformation = additionalInformation;
+            CemiFrame = cemiFrame;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIDataCon.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIDataCon.cs
new file mode 100644
index 0000000..061c2f7
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIDataCon.cs
@@ -0,0 +1,44 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIDataCon : CEMI
+    {
+        // Accessors for discriminator values.
+        public override byte GetMessageCode() {
+            return 0x2E;
+        }
+
+        // Properties.
+        public byte AdditionalInformationLength { get; }
+        public CEMIAdditionalInformation[] AdditionalInformation { get; }
+        public CEMIDataFrame CemiDataFrame { get; }
+
+        public CEMIDataCon(byte additionalInformationLength, CEMIAdditionalInformation[] additionalInformation, CEMIDataFrame cemiDataFrame)
+        {
+            AdditionalInformationLength = additionalInformationLength;
+            AdditionalInformation = additionalInformation;
+            CemiDataFrame = cemiDataFrame;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIDataFrame.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIDataFrame.cs
new file mode 100644
index 0000000..a252fd8
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIDataFrame.cs
@@ -0,0 +1,70 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIDataFrame
+    {
+
+        // Properties.
+        public bool StandardFrame { get; }
+        public bool Polling { get; }
+        public bool NotRepeated { get; }
+        public bool NotAckFrame { get; }
+        public CEMIPriority Priority { get; }
+        public bool AcknowledgeRequested { get; }
+        public bool ErrorFlag { get; }
+        public bool GroupDestinationAddress { get; }
+        public byte HopCount { get; }
+        public byte ExtendedFrameFormat { get; }
+        public KnxAddress SourceAddress { get; }
+        public sbyte[] DestinationAddress { get; }
+        public byte DataLength { get; }
+        public TPCI Tcpi { get; }
+        public byte Counter { get; }
+        public APCI Apci { get; }
+        public sbyte DataFirstByte { get; }
+        public sbyte[] Data { get; }
+
+        public CEMIDataFrame(bool standardFrame, bool polling, bool notRepeated, bool notAckFrame, CEMIPriority priority, bool acknowledgeRequested, bool errorFlag, bool groupDestinationAddress, byte hopCount, byte extendedFrameFormat, KnxAddress sourceAddress, sbyte[] destinationAddress, byte dataLength, TPCI tcpi, byte counter, APCI apci, sbyte dataFirstByte, sbyte[] data)
+        {
+            StandardFrame = standardFrame;
+            Polling = polling;
+            NotRepeated = notRepeated;
+            NotAckFrame = notAckFrame;
+            Priority = priority;
+            AcknowledgeRequested = acknowledgeRequested;
+            ErrorFlag = errorFlag;
+            GroupDestinationAddress = groupDestinationAddress;
+            HopCount = hopCount;
+            ExtendedFrameFormat = extendedFrameFormat;
+            SourceAddress = sourceAddress;
+            DestinationAddress = destinationAddress;
+            DataLength = dataLength;
+            Tcpi = tcpi;
+            Counter = counter;
+            Apci = apci;
+            DataFirstByte = dataFirstByte;
+            Data = data;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIDataInd.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIDataInd.cs
new file mode 100644
index 0000000..694131f
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIDataInd.cs
@@ -0,0 +1,44 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIDataInd : CEMI
+    {
+        // Accessors for discriminator values.
+        public override byte GetMessageCode() {
+            return 0x29;
+        }
+
+        // Properties.
+        public byte AdditionalInformationLength { get; }
+        public CEMIAdditionalInformation[] AdditionalInformation { get; }
+        public CEMIDataFrame CemiDataFrame { get; }
+
+        public CEMIDataInd(byte additionalInformationLength, CEMIAdditionalInformation[] additionalInformation, CEMIDataFrame cemiDataFrame)
+        {
+            AdditionalInformationLength = additionalInformationLength;
+            AdditionalInformation = additionalInformation;
+            CemiDataFrame = cemiDataFrame;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIDataReq.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIDataReq.cs
new file mode 100644
index 0000000..39b3215
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIDataReq.cs
@@ -0,0 +1,44 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIDataReq : CEMI
+    {
+        // Accessors for discriminator values.
+        public override byte GetMessageCode() {
+            return 0x11;
+        }
+
+        // Properties.
+        public byte AdditionalInformationLength { get; }
+        public CEMIAdditionalInformation[] AdditionalInformation { get; }
+        public CEMIDataFrame CemiDataFrame { get; }
+
+        public CEMIDataReq(byte additionalInformationLength, CEMIAdditionalInformation[] additionalInformation, CEMIDataFrame cemiDataFrame)
+        {
+            AdditionalInformationLength = additionalInformationLength;
+            AdditionalInformation = additionalInformation;
+            CemiDataFrame = cemiDataFrame;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFrame.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFrame.cs
new file mode 100644
index 0000000..ec0cbfd
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFrame.cs
@@ -0,0 +1,46 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public abstract class CEMIFrame
+    {
+        // Abstract accessors for discriminator values.
+        public abstract bool GetNotAckFrame();
+        public abstract bool GetPolling();
+        public abstract bool GetStandardFrame();
+
+        // Properties.
+        public bool Repeated { get; }
+        public CEMIPriority Priority { get; }
+        public bool AcknowledgeRequested { get; }
+        public bool ErrorFlag { get; }
+
+        public CEMIFrame(bool repeated, CEMIPriority priority, bool acknowledgeRequested, bool errorFlag)
+        {
+            Repeated = repeated;
+            Priority = priority;
+            AcknowledgeRequested = acknowledgeRequested;
+            ErrorFlag = errorFlag;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFrameAck.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFrameAck.cs
new file mode 100644
index 0000000..f519c6d
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFrameAck.cs
@@ -0,0 +1,43 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIFrameAck : CEMIFrame
+    {
+        // Accessors for discriminator values.
+        public override bool GetNotAckFrame() {
+            return false;
+        }
+        public override bool GetStandardFrame() {
+            return false;
+        }
+        public override bool GetPolling() {
+            return false;
+        }
+
+        public CEMIFrameAck(bool repeated, CEMIPriority priority, bool acknowledgeRequested, bool errorFlag)
+            : base(repeated, priority, acknowledgeRequested, errorFlag)
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFrameData.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFrameData.cs
new file mode 100644
index 0000000..1510b3e
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFrameData.cs
@@ -0,0 +1,67 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIFrameData : CEMIFrame
+    {
+        // Accessors for discriminator values.
+        public override bool GetNotAckFrame() {
+            return true;
+        }
+        public override bool GetStandardFrame() {
+            return true;
+        }
+        public override bool GetPolling() {
+            return false;
+        }
+
+        // Properties.
+        public KnxAddress SourceAddress { get; }
+        public sbyte[] DestinationAddress { get; }
+        public bool GroupAddress { get; }
+        public byte HopCount { get; }
+        public byte DataLength { get; }
+        public TPCI Tcpi { get; }
+        public byte Counter { get; }
+        public APCI Apci { get; }
+        public sbyte DataFirstByte { get; }
+        public sbyte[] Data { get; }
+        public byte Crc { get; }
+
+        public CEMIFrameData(bool repeated, CEMIPriority priority, bool acknowledgeRequested, bool errorFlag, KnxAddress sourceAddress, sbyte[] destinationAddress, bool groupAddress, byte hopCount, byte dataLength, TPCI tcpi, byte counter, APCI apci, sbyte dataFirstByte, sbyte[] data, byte crc)
+            : base(repeated, priority, acknowledgeRequested, errorFlag)
+        {
+            SourceAddress = sourceAddress;
+            DestinationAddress = destinationAddress;
+            GroupAddress = groupAddress;
+            HopCount = hopCount;
+            DataLength = dataLength;
+            Tcpi = tcpi;
+            Counter = counter;
+            Apci = apci;
+            DataFirstByte = dataFirstByte;
+            Data = data;
+            Crc = crc;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFrameDataExt.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFrameDataExt.cs
new file mode 100644
index 0000000..539f224
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFrameDataExt.cs
@@ -0,0 +1,69 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIFrameDataExt : CEMIFrame
+    {
+        // Accessors for discriminator values.
+        public override bool GetNotAckFrame() {
+            return true;
+        }
+        public override bool GetStandardFrame() {
+            return false;
+        }
+        public override bool GetPolling() {
+            return false;
+        }
+
+        // Properties.
+        public bool GroupAddress { get; }
+        public byte HopCount { get; }
+        public byte ExtendedFrameFormat { get; }
+        public KnxAddress SourceAddress { get; }
+        public sbyte[] DestinationAddress { get; }
+        public byte DataLength { get; }
+        public TPCI Tcpi { get; }
+        public byte Counter { get; }
+        public APCI Apci { get; }
+        public sbyte DataFirstByte { get; }
+        public sbyte[] Data { get; }
+        public byte Crc { get; }
+
+        public CEMIFrameDataExt(bool repeated, CEMIPriority priority, bool acknowledgeRequested, bool errorFlag, bool groupAddress, byte hopCount, byte extendedFrameFormat, KnxAddress sourceAddress, sbyte[] destinationAddress, byte dataLength, TPCI tcpi, byte counter, APCI apci, sbyte dataFirstByte, sbyte[] data, byte crc)
+            : base(repeated, priority, acknowledgeRequested, errorFlag)
+        {
+            GroupAddress = groupAddress;
+            HopCount = hopCount;
+            ExtendedFrameFormat = extendedFrameFormat;
+            SourceAddress = sourceAddress;
+            DestinationAddress = destinationAddress;
+            DataLength = dataLength;
+            Tcpi = tcpi;
+            Counter = counter;
+            Apci = apci;
+            DataFirstByte = dataFirstByte;
+            Data = data;
+            Crc = crc;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFramePollingData.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFramePollingData.cs
new file mode 100644
index 0000000..3506ff7
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFramePollingData.cs
@@ -0,0 +1,43 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIFramePollingData : CEMIFrame
+    {
+        // Accessors for discriminator values.
+        public override bool GetNotAckFrame() {
+            return true;
+        }
+        public override bool GetStandardFrame() {
+            return true;
+        }
+        public override bool GetPolling() {
+            return true;
+        }
+
+        public CEMIFramePollingData(bool repeated, CEMIPriority priority, bool acknowledgeRequested, bool errorFlag)
+            : base(repeated, priority, acknowledgeRequested, errorFlag)
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFramePollingDataExt.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFramePollingDataExt.cs
new file mode 100644
index 0000000..c80a567
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIFramePollingDataExt.cs
@@ -0,0 +1,43 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIFramePollingDataExt : CEMIFrame
+    {
+        // Accessors for discriminator values.
+        public override bool GetNotAckFrame() {
+            return true;
+        }
+        public override bool GetStandardFrame() {
+            return false;
+        }
+        public override bool GetPolling() {
+            return true;
+        }
+
+        public CEMIFramePollingDataExt(bool repeated, CEMIPriority priority, bool acknowledgeRequested, bool errorFlag)
+            : base(repeated, priority, acknowledgeRequested, errorFlag)
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIMPropReadCon.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIMPropReadCon.cs
new file mode 100644
index 0000000..213b265
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIMPropReadCon.cs
@@ -0,0 +1,50 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIMPropReadCon : CEMI
+    {
+        // Accessors for discriminator values.
+        public override byte GetMessageCode() {
+            return 0xFB;
+        }
+
+        // Properties.
+        public ushort InterfaceObjectType { get; }
+        public byte ObjectInstance { get; }
+        public byte PropertyId { get; }
+        public byte NumberOfElements { get; }
+        public ushort StartIndex { get; }
+        public ushort Unknown { get; }
+
+        public CEMIMPropReadCon(ushort interfaceObjectType, byte objectInstance, byte propertyId, byte numberOfElements, ushort startIndex, ushort unknown)
+        {
+            InterfaceObjectType = interfaceObjectType;
+            ObjectInstance = objectInstance;
+            PropertyId = propertyId;
+            NumberOfElements = numberOfElements;
+            StartIndex = startIndex;
+            Unknown = unknown;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIMPropReadReq.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIMPropReadReq.cs
new file mode 100644
index 0000000..eed16e5
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIMPropReadReq.cs
@@ -0,0 +1,48 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIMPropReadReq : CEMI
+    {
+        // Accessors for discriminator values.
+        public override byte GetMessageCode() {
+            return 0xFC;
+        }
+
+        // Properties.
+        public ushort InterfaceObjectType { get; }
+        public byte ObjectInstance { get; }
+        public byte PropertyId { get; }
+        public byte NumberOfElements { get; }
+        public ushort StartIndex { get; }
+
+        public CEMIMPropReadReq(ushort interfaceObjectType, byte objectInstance, byte propertyId, byte numberOfElements, ushort startIndex)
+        {
+            InterfaceObjectType = interfaceObjectType;
+            ObjectInstance = objectInstance;
+            PropertyId = propertyId;
+            NumberOfElements = numberOfElements;
+            StartIndex = startIndex;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIPollDataCon.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIPollDataCon.cs
new file mode 100644
index 0000000..37d1f22
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIPollDataCon.cs
@@ -0,0 +1,36 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIPollDataCon : CEMI
+    {
+        // Accessors for discriminator values.
+        public override byte GetMessageCode() {
+            return 0x25;
+        }
+
+        public CEMIPollDataCon()
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIPollDataReq.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIPollDataReq.cs
new file mode 100644
index 0000000..dec3e84
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIPollDataReq.cs
@@ -0,0 +1,36 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIPollDataReq : CEMI
+    {
+        // Accessors for discriminator values.
+        public override byte GetMessageCode() {
+            return 0x13;
+        }
+
+        public CEMIPollDataReq()
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIRawCon.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIRawCon.cs
new file mode 100644
index 0000000..f3e69f1
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIRawCon.cs
@@ -0,0 +1,36 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIRawCon : CEMI
+    {
+        // Accessors for discriminator values.
+        public override byte GetMessageCode() {
+            return 0x2F;
+        }
+
+        public CEMIRawCon()
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIRawInd.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIRawInd.cs
new file mode 100644
index 0000000..9e5cf00
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIRawInd.cs
@@ -0,0 +1,36 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIRawInd : CEMI
+    {
+        // Accessors for discriminator values.
+        public override byte GetMessageCode() {
+            return 0x2D;
+        }
+
+        public CEMIRawInd()
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIRawReq.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIRawReq.cs
new file mode 100644
index 0000000..0d6a8b1
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/CEMIRawReq.cs
@@ -0,0 +1,36 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class CEMIRawReq : CEMI
+    {
+        // Accessors for discriminator values.
+        public override byte GetMessageCode() {
+            return 0x10;
+        }
+
+        public CEMIRawReq()
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionRequest.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionRequest.cs
new file mode 100644
index 0000000..e4d73b4
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionRequest.cs
@@ -0,0 +1,44 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class ConnectionRequest : KnxNetIpMessage
+    {
+        // Accessors for discriminator values.
+        public override ushort GetMsgType() {
+            return 0x0205;
+        }
+
+        // Properties.
+        public HPAIDiscoveryEndpoint HpaiDiscoveryEndpoint { get; }
+        public HPAIDataEndpoint HpaiDataEndpoint { get; }
+        public ConnectionRequestInformation ConnectionRequestInformation { get; }
+
+        public ConnectionRequest(HPAIDiscoveryEndpoint hpaiDiscoveryEndpoint, HPAIDataEndpoint hpaiDataEndpoint, ConnectionRequestInformation connectionRequestInformation)
+        {
+            HpaiDiscoveryEndpoint = hpaiDiscoveryEndpoint;
+            HpaiDataEndpoint = hpaiDataEndpoint;
+            ConnectionRequestInformation = connectionRequestInformation;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionRequestInformation.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionRequestInformation.cs
new file mode 100644
index 0000000..f01a300
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionRequestInformation.cs
@@ -0,0 +1,34 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public abstract class ConnectionRequestInformation
+    {
+        // Abstract accessors for discriminator values.
+        public abstract byte GetConnectionType();
+
+        public ConnectionRequestInformation()
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.cs
new file mode 100644
index 0000000..3786528
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.cs
@@ -0,0 +1,36 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class ConnectionRequestInformationDeviceManagement : ConnectionRequestInformation
+    {
+        // Accessors for discriminator values.
+        public override byte GetConnectionType() {
+            return 0x03;
+        }
+
+        public ConnectionRequestInformationDeviceManagement()
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.cs
new file mode 100644
index 0000000..a2c3c7a
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class ConnectionRequestInformationTunnelConnection : ConnectionRequestInformation
+    {
+        // Accessors for discriminator values.
+        public override byte GetConnectionType() {
+            return 0x04;
+        }
+
+        // Properties.
+        public KnxLayer KnxLayer { get; }
+
+        public ConnectionRequestInformationTunnelConnection(KnxLayer knxLayer)
+        {
+            KnxLayer = knxLayer;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionResponse.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionResponse.cs
new file mode 100644
index 0000000..250381a
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionResponse.cs
@@ -0,0 +1,46 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class ConnectionResponse : KnxNetIpMessage
+    {
+        // Accessors for discriminator values.
+        public override ushort GetMsgType() {
+            return 0x0206;
+        }
+
+        // Properties.
+        public byte CommunicationChannelId { get; }
+        public Status Status { get; }
+        public HPAIDataEndpoint HpaiDataEndpoint { get; }
+        public ConnectionResponseDataBlock ConnectionResponseDataBlock { get; }
+
+        public ConnectionResponse(byte communicationChannelId, Status status, HPAIDataEndpoint hpaiDataEndpoint, ConnectionResponseDataBlock connectionResponseDataBlock)
+        {
+            CommunicationChannelId = communicationChannelId;
+            Status = status;
+            HpaiDataEndpoint = hpaiDataEndpoint;
+            ConnectionResponseDataBlock = connectionResponseDataBlock;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionResponseDataBlock.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionResponseDataBlock.cs
new file mode 100644
index 0000000..d01c6f7
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionResponseDataBlock.cs
@@ -0,0 +1,34 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public abstract class ConnectionResponseDataBlock
+    {
+        // Abstract accessors for discriminator values.
+        public abstract byte GetConnectionType();
+
+        public ConnectionResponseDataBlock()
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.cs
new file mode 100644
index 0000000..dca298f
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.cs
@@ -0,0 +1,36 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class ConnectionResponseDataBlockDeviceManagement : ConnectionResponseDataBlock
+    {
+        // Accessors for discriminator values.
+        public override byte GetConnectionType() {
+            return 0x03;
+        }
+
+        public ConnectionResponseDataBlockDeviceManagement()
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.cs
new file mode 100644
index 0000000..a45fda7
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class ConnectionResponseDataBlockTunnelConnection : ConnectionResponseDataBlock
+    {
+        // Accessors for discriminator values.
+        public override byte GetConnectionType() {
+            return 0x04;
+        }
+
+        // Properties.
+        public KnxAddress KnxAddress { get; }
+
+        public ConnectionResponseDataBlockTunnelConnection(KnxAddress knxAddress)
+        {
+            KnxAddress = knxAddress;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionStateRequest.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionStateRequest.cs
new file mode 100644
index 0000000..b6636d7
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionStateRequest.cs
@@ -0,0 +1,42 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class ConnectionStateRequest : KnxNetIpMessage
+    {
+        // Accessors for discriminator values.
+        public override ushort GetMsgType() {
+            return 0x0207;
+        }
+
+        // Properties.
+        public byte CommunicationChannelId { get; }
+        public HPAIControlEndpoint HpaiControlEndpoint { get; }
+
+        public ConnectionStateRequest(byte communicationChannelId, HPAIControlEndpoint hpaiControlEndpoint)
+        {
+            CommunicationChannelId = communicationChannelId;
+            HpaiControlEndpoint = hpaiControlEndpoint;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionStateResponse.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionStateResponse.cs
new file mode 100644
index 0000000..0d98468
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ConnectionStateResponse.cs
@@ -0,0 +1,42 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class ConnectionStateResponse : KnxNetIpMessage
+    {
+        // Accessors for discriminator values.
+        public override ushort GetMsgType() {
+            return 0x0208;
+        }
+
+        // Properties.
+        public byte CommunicationChannelId { get; }
+        public Status Status { get; }
+
+        public ConnectionStateResponse(byte communicationChannelId, Status status)
+        {
+            CommunicationChannelId = communicationChannelId;
+            Status = status;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DIBDeviceInfo.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DIBDeviceInfo.cs
new file mode 100644
index 0000000..1ffeac0
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DIBDeviceInfo.cs
@@ -0,0 +1,52 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class DIBDeviceInfo
+    {
+
+        // Properties.
+        public byte DescriptionType { get; }
+        public KnxMedium KnxMedium { get; }
+        public DeviceStatus DeviceStatus { get; }
+        public KnxAddress KnxAddress { get; }
+        public ProjectInstallationIdentifier ProjectInstallationIdentifier { get; }
+        public sbyte[] KnxNetIpDeviceSerialNumber { get; }
+        public IPAddress KnxNetIpDeviceMulticastAddress { get; }
+        public MACAddress KnxNetIpDeviceMacAddress { get; }
+        public sbyte[] DeviceFriendlyName { get; }
+
+        public DIBDeviceInfo(byte descriptionType, KnxMedium knxMedium, DeviceStatus deviceStatus, KnxAddress knxAddress, ProjectInstallationIdentifier projectInstallationIdentifier, sbyte[] knxNetIpDeviceSerialNumber, IPAddress knxNetIpDeviceMulticastAddress, MACAddress knxNetIpDeviceMacAddress, sbyte[] deviceFriendlyName)
+        {
+            DescriptionType = descriptionType;
+            KnxMedium = knxMedium;
+            DeviceStatus = deviceStatus;
+            KnxAddress = knxAddress;
+            ProjectInstallationIdentifier = projectInstallationIdentifier;
+            KnxNetIpDeviceSerialNumber = knxNetIpDeviceSerialNumber;
+            KnxNetIpDeviceMulticastAddress = knxNetIpDeviceMulticastAddress;
+            KnxNetIpDeviceMacAddress = knxNetIpDeviceMacAddress;
+            DeviceFriendlyName = deviceFriendlyName;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DIBSuppSvcFamilies.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DIBSuppSvcFamilies.cs
new file mode 100644
index 0000000..f1a8549
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DIBSuppSvcFamilies.cs
@@ -0,0 +1,38 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class DIBSuppSvcFamilies
+    {
+
+        // Properties.
+        public byte DescriptionType { get; }
+        public ServiceId[] ServiceIds { get; }
+
+        public DIBSuppSvcFamilies(byte descriptionType, ServiceId[] serviceIds)
+        {
+            DescriptionType = descriptionType;
+            ServiceIds = serviceIds;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DescriptionRequest.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DescriptionRequest.cs
new file mode 100644
index 0000000..7d4b62d
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DescriptionRequest.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class DescriptionRequest : KnxNetIpMessage
+    {
+        // Accessors for discriminator values.
+        public override ushort GetMsgType() {
+            return 0x0203;
+        }
+
+        // Properties.
+        public HPAIControlEndpoint HpaiControlEndpoint { get; }
+
+        public DescriptionRequest(HPAIControlEndpoint hpaiControlEndpoint)
+        {
+            HpaiControlEndpoint = hpaiControlEndpoint;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DescriptionResponse.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DescriptionResponse.cs
new file mode 100644
index 0000000..f34c1b3
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DescriptionResponse.cs
@@ -0,0 +1,42 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class DescriptionResponse : KnxNetIpMessage
+    {
+        // Accessors for discriminator values.
+        public override ushort GetMsgType() {
+            return 0x0204;
+        }
+
+        // Properties.
+        public DIBDeviceInfo DibDeviceInfo { get; }
+        public DIBSuppSvcFamilies DibSuppSvcFamilies { get; }
+
+        public DescriptionResponse(DIBDeviceInfo dibDeviceInfo, DIBSuppSvcFamilies dibSuppSvcFamilies)
+        {
+            DibDeviceInfo = dibDeviceInfo;
+            DibSuppSvcFamilies = dibSuppSvcFamilies;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DeviceConfigurationAck.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DeviceConfigurationAck.cs
new file mode 100644
index 0000000..f68c071
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DeviceConfigurationAck.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class DeviceConfigurationAck : KnxNetIpMessage
+    {
+        // Accessors for discriminator values.
+        public override ushort GetMsgType() {
+            return 0x0311;
+        }
+
+        // Properties.
+        public DeviceConfigurationAckDataBlock DeviceConfigurationAckDataBlock { get; }
+
+        public DeviceConfigurationAck(DeviceConfigurationAckDataBlock deviceConfigurationAckDataBlock)
+        {
+            DeviceConfigurationAckDataBlock = deviceConfigurationAckDataBlock;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DeviceConfigurationAckDataBlock.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DeviceConfigurationAckDataBlock.cs
new file mode 100644
index 0000000..749b756
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DeviceConfigurationAckDataBlock.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class DeviceConfigurationAckDataBlock
+    {
+
+        // Properties.
+        public byte CommunicationChannelId { get; }
+        public byte SequenceCounter { get; }
+        public Status Status { get; }
+
+        public DeviceConfigurationAckDataBlock(byte communicationChannelId, byte sequenceCounter, Status status)
+        {
+            CommunicationChannelId = communicationChannelId;
+            SequenceCounter = sequenceCounter;
+            Status = status;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DeviceConfigurationRequest.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DeviceConfigurationRequest.cs
new file mode 100644
index 0000000..af8bff2
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DeviceConfigurationRequest.cs
@@ -0,0 +1,42 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class DeviceConfigurationRequest : KnxNetIpMessage
+    {
+        // Accessors for discriminator values.
+        public override ushort GetMsgType() {
+            return 0x0310;
+        }
+
+        // Properties.
+        public DeviceConfigurationRequestDataBlock DeviceConfigurationRequestDataBlock { get; }
+        public CEMI Cemi { get; }
+
+        public DeviceConfigurationRequest(DeviceConfigurationRequestDataBlock deviceConfigurationRequestDataBlock, CEMI cemi)
+        {
+            DeviceConfigurationRequestDataBlock = deviceConfigurationRequestDataBlock;
+            Cemi = cemi;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DeviceConfigurationRequestDataBlock.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DeviceConfigurationRequestDataBlock.cs
new file mode 100644
index 0000000..b514c89
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DeviceConfigurationRequestDataBlock.cs
@@ -0,0 +1,38 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class DeviceConfigurationRequestDataBlock
+    {
+
+        // Properties.
+        public byte CommunicationChannelId { get; }
+        public byte SequenceCounter { get; }
+
+        public DeviceConfigurationRequestDataBlock(byte communicationChannelId, byte sequenceCounter)
+        {
+            CommunicationChannelId = communicationChannelId;
+            SequenceCounter = sequenceCounter;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DeviceStatus.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DeviceStatus.cs
new file mode 100644
index 0000000..3fce7c2
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DeviceStatus.cs
@@ -0,0 +1,36 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class DeviceStatus
+    {
+
+        // Properties.
+        public bool ProgramMode { get; }
+
+        public DeviceStatus(bool programMode)
+        {
+            ProgramMode = programMode;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DisconnectRequest.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DisconnectRequest.cs
new file mode 100644
index 0000000..a45d552
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DisconnectRequest.cs
@@ -0,0 +1,42 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class DisconnectRequest : KnxNetIpMessage
+    {
+        // Accessors for discriminator values.
+        public override ushort GetMsgType() {
+            return 0x0209;
+        }
+
+        // Properties.
+        public byte CommunicationChannelId { get; }
+        public HPAIControlEndpoint HpaiControlEndpoint { get; }
+
+        public DisconnectRequest(byte communicationChannelId, HPAIControlEndpoint hpaiControlEndpoint)
+        {
+            CommunicationChannelId = communicationChannelId;
+            HpaiControlEndpoint = hpaiControlEndpoint;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DisconnectResponse.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DisconnectResponse.cs
new file mode 100644
index 0000000..c648bdd
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/DisconnectResponse.cs
@@ -0,0 +1,42 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class DisconnectResponse : KnxNetIpMessage
+    {
+        // Accessors for discriminator values.
+        public override ushort GetMsgType() {
+            return 0x020A;
+        }
+
+        // Properties.
+        public byte CommunicationChannelId { get; }
+        public Status Status { get; }
+
+        public DisconnectResponse(byte communicationChannelId, Status status)
+        {
+            CommunicationChannelId = communicationChannelId;
+            Status = status;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/HPAIControlEndpoint.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/HPAIControlEndpoint.cs
new file mode 100644
index 0000000..e2fd1b8
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/HPAIControlEndpoint.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class HPAIControlEndpoint
+    {
+
+        // Properties.
+        public HostProtocolCode HostProtocolCode { get; }
+        public IPAddress IpAddress { get; }
+        public ushort IpPort { get; }
+
+        public HPAIControlEndpoint(HostProtocolCode hostProtocolCode, IPAddress ipAddress, ushort ipPort)
+        {
+            HostProtocolCode = hostProtocolCode;
+            IpAddress = ipAddress;
+            IpPort = ipPort;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/HPAIDataEndpoint.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/HPAIDataEndpoint.cs
new file mode 100644
index 0000000..a2bff76
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/HPAIDataEndpoint.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class HPAIDataEndpoint
+    {
+
+        // Properties.
+        public HostProtocolCode HostProtocolCode { get; }
+        public IPAddress IpAddress { get; }
+        public ushort IpPort { get; }
+
+        public HPAIDataEndpoint(HostProtocolCode hostProtocolCode, IPAddress ipAddress, ushort ipPort)
+        {
+            HostProtocolCode = hostProtocolCode;
+            IpAddress = ipAddress;
+            IpPort = ipPort;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/HPAIDiscoveryEndpoint.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/HPAIDiscoveryEndpoint.cs
new file mode 100644
index 0000000..ff1c60d
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/HPAIDiscoveryEndpoint.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class HPAIDiscoveryEndpoint
+    {
+
+        // Properties.
+        public HostProtocolCode HostProtocolCode { get; }
+        public IPAddress IpAddress { get; }
+        public ushort IpPort { get; }
+
+        public HPAIDiscoveryEndpoint(HostProtocolCode hostProtocolCode, IPAddress ipAddress, ushort ipPort)
+        {
+            HostProtocolCode = hostProtocolCode;
+            IpAddress = ipAddress;
+            IpPort = ipPort;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/IPAddress.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/IPAddress.cs
new file mode 100644
index 0000000..2b35bb7
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/IPAddress.cs
@@ -0,0 +1,36 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class IPAddress
+    {
+
+        // Properties.
+        public sbyte[] Addr { get; }
+
+        public IPAddress(sbyte[] addr)
+        {
+            Addr = addr;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxAddress.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxAddress.cs
new file mode 100644
index 0000000..cd94f5a
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxAddress.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class KnxAddress
+    {
+
+        // Properties.
+        public byte MainGroup { get; }
+        public byte MiddleGroup { get; }
+        public byte SubGroup { get; }
+
+        public KnxAddress(byte mainGroup, byte middleGroup, byte subGroup)
+        {
+            MainGroup = mainGroup;
+            MiddleGroup = middleGroup;
+            SubGroup = subGroup;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxGroupAddress.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxGroupAddress.cs
new file mode 100644
index 0000000..71dc57a
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxGroupAddress.cs
@@ -0,0 +1,34 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public abstract class KnxGroupAddress
+    {
+        // Abstract accessors for discriminator values.
+        public abstract byte GetNumLevels();
+
+        public KnxGroupAddress()
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxGroupAddress2Level.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxGroupAddress2Level.cs
new file mode 100644
index 0000000..d991db8
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxGroupAddress2Level.cs
@@ -0,0 +1,42 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class KnxGroupAddress2Level : KnxGroupAddress
+    {
+        // Accessors for discriminator values.
+        public override byte GetNumLevels() {
+            return 2;
+        }
+
+        // Properties.
+        public byte MainGroup { get; }
+        public ushort SubGroup { get; }
+
+        public KnxGroupAddress2Level(byte mainGroup, ushort subGroup)
+        {
+            MainGroup = mainGroup;
+            SubGroup = subGroup;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxGroupAddress3Level.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxGroupAddress3Level.cs
new file mode 100644
index 0000000..b045e08
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxGroupAddress3Level.cs
@@ -0,0 +1,44 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class KnxGroupAddress3Level : KnxGroupAddress
+    {
+        // Accessors for discriminator values.
+        public override byte GetNumLevels() {
+            return 3;
+        }
+
+        // Properties.
+        public byte MainGroup { get; }
+        public byte MiddleGroup { get; }
+        public byte SubGroup { get; }
+
+        public KnxGroupAddress3Level(byte mainGroup, byte middleGroup, byte subGroup)
+        {
+            MainGroup = mainGroup;
+            MiddleGroup = middleGroup;
+            SubGroup = subGroup;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.cs
new file mode 100644
index 0000000..d7bc817
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class KnxGroupAddressFreeLevel : KnxGroupAddress
+    {
+        // Accessors for discriminator values.
+        public override byte GetNumLevels() {
+            return 1;
+        }
+
+        // Properties.
+        public ushort SubGroup { get; }
+
+        public KnxGroupAddressFreeLevel(ushort subGroup)
+        {
+            SubGroup = subGroup;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetIpCore.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetIpCore.cs
new file mode 100644
index 0000000..199f867
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetIpCore.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class KnxNetIpCore : ServiceId
+    {
+        // Accessors for discriminator values.
+        public override byte GetServiceType() {
+            return 0x02;
+        }
+
+        // Properties.
+        public byte Version { get; }
+
+        public KnxNetIpCore(byte version)
+        {
+            Version = version;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetIpDeviceManagement.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetIpDeviceManagement.cs
new file mode 100644
index 0000000..45f2398
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetIpDeviceManagement.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class KnxNetIpDeviceManagement : ServiceId
+    {
+        // Accessors for discriminator values.
+        public override byte GetServiceType() {
+            return 0x03;
+        }
+
+        // Properties.
+        public byte Version { get; }
+
+        public KnxNetIpDeviceManagement(byte version)
+        {
+            Version = version;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetIpMessage.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetIpMessage.cs
new file mode 100644
index 0000000..4c65a75
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetIpMessage.cs
@@ -0,0 +1,37 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public abstract class KnxNetIpMessage
+    {
+        // Abstract accessors for discriminator values.
+        public abstract ushort GetMsgType();
+
+        // Constant values.
+        public const byte PROTOCOLVERSION = 0x10;
+
+        public KnxNetIpMessage()
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetIpTunneling.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetIpTunneling.cs
new file mode 100644
index 0000000..ab2ee0f
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetIpTunneling.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class KnxNetIpTunneling : ServiceId
+    {
+        // Accessors for discriminator values.
+        public override byte GetServiceType() {
+            return 0x04;
+        }
+
+        // Properties.
+        public byte Version { get; }
+
+        public KnxNetIpTunneling(byte version)
+        {
+            Version = version;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetObjectServer.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetObjectServer.cs
new file mode 100644
index 0000000..8f4a93a
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetObjectServer.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class KnxNetObjectServer : ServiceId
+    {
+        // Accessors for discriminator values.
+        public override byte GetServiceType() {
+            return 0x08;
+        }
+
+        // Properties.
+        public byte Version { get; }
+
+        public KnxNetObjectServer(byte version)
+        {
+            Version = version;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetRemoteConfigurationAndDiagnosis.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetRemoteConfigurationAndDiagnosis.cs
new file mode 100644
index 0000000..ed06102
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetRemoteConfigurationAndDiagnosis.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class KnxNetRemoteConfigurationAndDiagnosis : ServiceId
+    {
+        // Accessors for discriminator values.
+        public override byte GetServiceType() {
+            return 0x07;
+        }
+
+        // Properties.
+        public byte Version { get; }
+
+        public KnxNetRemoteConfigurationAndDiagnosis(byte version)
+        {
+            Version = version;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetRemoteLogging.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetRemoteLogging.cs
new file mode 100644
index 0000000..8b97a98
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/KnxNetRemoteLogging.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class KnxNetRemoteLogging : ServiceId
+    {
+        // Accessors for discriminator values.
+        public override byte GetServiceType() {
+            return 0x06;
+        }
+
+        // Properties.
+        public byte Version { get; }
+
+        public KnxNetRemoteLogging(byte version)
+        {
+            Version = version;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/MACAddress.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/MACAddress.cs
new file mode 100644
index 0000000..6314819
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/MACAddress.cs
@@ -0,0 +1,36 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class MACAddress
+    {
+
+        // Properties.
+        public sbyte[] Addr { get; }
+
+        public MACAddress(sbyte[] addr)
+        {
+            Addr = addr;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ProjectInstallationIdentifier.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ProjectInstallationIdentifier.cs
new file mode 100644
index 0000000..30a5b53
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ProjectInstallationIdentifier.cs
@@ -0,0 +1,38 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class ProjectInstallationIdentifier
+    {
+
+        // Properties.
+        public byte ProjectNumber { get; }
+        public byte InstallationNumber { get; }
+
+        public ProjectInstallationIdentifier(byte projectNumber, byte installationNumber)
+        {
+            ProjectNumber = projectNumber;
+            InstallationNumber = installationNumber;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/RelativeTimestamp.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/RelativeTimestamp.cs
new file mode 100644
index 0000000..45f1d58
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/RelativeTimestamp.cs
@@ -0,0 +1,36 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class RelativeTimestamp
+    {
+
+        // Properties.
+        public ushort Timestamp { get; }
+
+        public RelativeTimestamp(ushort timestamp)
+        {
+            Timestamp = timestamp;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/RoutingIndication.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/RoutingIndication.cs
new file mode 100644
index 0000000..30afa77
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/RoutingIndication.cs
@@ -0,0 +1,36 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class RoutingIndication : KnxNetIpMessage
+    {
+        // Accessors for discriminator values.
+        public override ushort GetMsgType() {
+            return 0x0530;
+        }
+
+        public RoutingIndication()
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/SearchRequest.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/SearchRequest.cs
new file mode 100644
index 0000000..d16d8de
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/SearchRequest.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class SearchRequest : KnxNetIpMessage
+    {
+        // Accessors for discriminator values.
+        public override ushort GetMsgType() {
+            return 0x0201;
+        }
+
+        // Properties.
+        public HPAIDiscoveryEndpoint HpaiIDiscoveryEndpoint { get; }
+
+        public SearchRequest(HPAIDiscoveryEndpoint hpaiIDiscoveryEndpoint)
+        {
+            HpaiIDiscoveryEndpoint = hpaiIDiscoveryEndpoint;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/SearchResponse.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/SearchResponse.cs
new file mode 100644
index 0000000..a02e703
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/SearchResponse.cs
@@ -0,0 +1,44 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class SearchResponse : KnxNetIpMessage
+    {
+        // Accessors for discriminator values.
+        public override ushort GetMsgType() {
+            return 0x0202;
+        }
+
+        // Properties.
+        public HPAIControlEndpoint HpaiControlEndpoint { get; }
+        public DIBDeviceInfo DibDeviceInfo { get; }
+        public DIBSuppSvcFamilies DibSuppSvcFamilies { get; }
+
+        public SearchResponse(HPAIControlEndpoint hpaiControlEndpoint, DIBDeviceInfo dibDeviceInfo, DIBSuppSvcFamilies dibSuppSvcFamilies)
+        {
+            HpaiControlEndpoint = hpaiControlEndpoint;
+            DibDeviceInfo = dibDeviceInfo;
+            DibSuppSvcFamilies = dibSuppSvcFamilies;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ServiceId.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ServiceId.cs
new file mode 100644
index 0000000..7db9d85
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/ServiceId.cs
@@ -0,0 +1,34 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public abstract class ServiceId
+    {
+        // Abstract accessors for discriminator values.
+        public abstract byte GetServiceType();
+
+        public ServiceId()
+        {
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/TunnelingRequest.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/TunnelingRequest.cs
new file mode 100644
index 0000000..28f6c27
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/TunnelingRequest.cs
@@ -0,0 +1,42 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class TunnelingRequest : KnxNetIpMessage
+    {
+        // Accessors for discriminator values.
+        public override ushort GetMsgType() {
+            return 0x0420;
+        }
+
+        // Properties.
+        public TunnelingRequestDataBlock TunnelingRequestDataBlock { get; }
+        public CEMI Cemi { get; }
+
+        public TunnelingRequest(TunnelingRequestDataBlock tunnelingRequestDataBlock, CEMI cemi)
+        {
+            TunnelingRequestDataBlock = tunnelingRequestDataBlock;
+            Cemi = cemi;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/TunnelingRequestDataBlock.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/TunnelingRequestDataBlock.cs
new file mode 100644
index 0000000..ce8aa02
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/TunnelingRequestDataBlock.cs
@@ -0,0 +1,38 @@
+//
+// 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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class TunnelingRequestDataBlock
+    {
+
+        // Properties.
+        public byte CommunicationChannelId { get; }
+        public byte SequenceCounter { get; }
+
+        public TunnelingRequestDataBlock(byte communicationChannelId, byte sequenceCounter)
+        {
+            CommunicationChannelId = communicationChannelId;
+            SequenceCounter = sequenceCounter;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/TunnelingResponse.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/TunnelingResponse.cs
new file mode 100644
index 0000000..3c5f21e
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/TunnelingResponse.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class TunnelingResponse : KnxNetIpMessage
+    {
+        // Accessors for discriminator values.
+        public override ushort GetMsgType() {
+            return 0x0421;
+        }
+
+        // Properties.
+        public TunnelingResponseDataBlock TunnelingResponseDataBlock { get; }
+
+        public TunnelingResponse(TunnelingResponseDataBlock tunnelingResponseDataBlock)
+        {
+            TunnelingResponseDataBlock = tunnelingResponseDataBlock;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/TunnelingResponseDataBlock.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/TunnelingResponseDataBlock.cs
new file mode 100644
index 0000000..ccd50b5
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/TunnelingResponseDataBlock.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class TunnelingResponseDataBlock
+    {
+
+        // Properties.
+        public byte CommunicationChannelId { get; }
+        public byte SequenceCounter { get; }
+        public Status Status { get; }
+
+        public TunnelingResponseDataBlock(byte communicationChannelId, byte sequenceCounter, Status status)
+        {
+            CommunicationChannelId = communicationChannelId;
+            SequenceCounter = sequenceCounter;
+            Status = status;
+        }
+
+    }
+
+}
diff --git a/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/UnknownMessage.cs b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/UnknownMessage.cs
new file mode 100644
index 0000000..e20e6bc
--- /dev/null
+++ b/sandbox/plc4net/drivers/knxnetip/src/knxnetip/readwrite/model/UnknownMessage.cs
@@ -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
+//
+//      http://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.
+//
+
+namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
+{
+
+    public class UnknownMessage : KnxNetIpMessage
+    {
+        // Accessors for discriminator values.
+        public override ushort GetMsgType() {
+            return 0x020B;
+        }
+
+        // Properties.
+        public sbyte[] UnknownData { get; }
+
+        public UnknownMessage(sbyte[] unknownData)
+        {
+            UnknownData = unknownData;
+        }
+
+    }
+
+}