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 2022/08/01 11:33:47 UTC

[plc4x] 04/04: chore(plc4go/ads): Updates for the latest changes in ADS.

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

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

commit b5195e2531bf24f0666de01600b107820f800379
Author: christoferdutz <ch...@c-ware.de>
AuthorDate: Mon Aug 1 13:33:35 2022 +0200

    chore(plc4go/ads): Updates for the latest changes in ADS.
---
 .../protocols/ads/AdsDiscoverySerializerTest.xml   | 826 +++++++++++++--------
 plc4go/go.mod                                      |   2 +-
 plc4go/protocols/ads/readwrite/ParserHelper.go     |   2 +
 plc4go/protocols/ads/readwrite/XmlParserHelper.go  |   2 +
 4 files changed, 508 insertions(+), 324 deletions(-)

diff --git a/plc4go/assets/testing/protocols/ads/AdsDiscoverySerializerTest.xml b/plc4go/assets/testing/protocols/ads/AdsDiscoverySerializerTest.xml
index 6521e503d..a12f2c3f2 100644
--- a/plc4go/assets/testing/protocols/ads/AdsDiscoverySerializerTest.xml
+++ b/plc4go/assets/testing/protocols/ads/AdsDiscoverySerializerTest.xml
@@ -18,7 +18,7 @@
   under the License.
   -->
 <test:testsuite xmlns:test="https://plc4x.apache.org/schemas/parser-serializer-testsuite.xsd"
-                byteOrder="BIG_ENDIAN">
+                byteOrder="LITTLE_ENDIAN">
 
   <name>Beckhoff ADS/AMS Discovery</name>
 
@@ -31,234 +31,391 @@
     <root-type>AdsDiscovery</root-type>
     <xml>
       <AdsDiscovery>
-        <header dataType="uint" bitLength="32">57021553</header>
-        <reserved dataType="uint" bitLength="32">0</reserved>
+        <header dataType="uint" bitLength="32">1897162243</header>
+        <requestId dataType="uint" bitLength="32">0</requestId>
         <operation>
-          <Operation dataType="uint" bitLength="8" stringRepresentation="DISCOVERY">1</Operation>
+          <Operation dataType="uint" bitLength="32" stringRepresentation="DISCOVERY_REQUEST">1</Operation>
         </operation>
-        <reserved dataType="uint" bitLength="16">0</reserved>
-        <direction>
-          <Direction dataType="uint" bitLength="8" stringRepresentation="REQUEST">0</Direction>
-        </direction>
-        <DiscoveryRequest>
-          <amsNetId>
-            <AmsNetId>
-              <octet1 dataType="uint" bitLength="8">10</octet1>
-              <octet2 dataType="uint" bitLength="8">10</octet2>
-              <octet3 dataType="uint" bitLength="8">10</octet3>
-              <octet4 dataType="uint" bitLength="8">10</octet4>
-              <octet5 dataType="uint" bitLength="8">1</octet5>
-              <octet6 dataType="uint" bitLength="8">1</octet6>
-            </AmsNetId>
-          </amsNetId>
-          <reserved dataType="uint" bitLength="16">4135</reserved>
-          <reserved dataType="uint" bitLength="32">0</reserved>
-        </DiscoveryRequest>
+        <amsNetId>
+          <AmsNetId>
+            <octet1 dataType="uint" bitLength="8">10</octet1>
+            <octet2 dataType="uint" bitLength="8">10</octet2>
+            <octet3 dataType="uint" bitLength="8">10</octet3>
+            <octet4 dataType="uint" bitLength="8">10</octet4>
+            <octet5 dataType="uint" bitLength="8">1</octet5>
+            <octet6 dataType="uint" bitLength="8">1</octet6>
+          </AmsNetId>
+        </amsNetId>
+        <portNumber>
+          <AdsPortNumbers dataType="uint" bitLength="16" stringRepresentation="SYSTEM_SERVICE">10000</AdsPortNumbers>
+        </portNumber>
+        <numBlocks dataType="uint" bitLength="32">0</numBlocks>
+        <blocks isList="true">
+        </blocks>
       </AdsDiscovery>
     </xml>
   </testcase>
 
   <testcase>
     <name>ADS Discovery Response from 192.168.2.221.1.1</name>
-    <raw>036614710000000001000080c0a802dd0101102704000000050010004445534b544f502d54304e36554e4200</raw>
-    <!--
-    remaining part of frame
-    04001401140100000a00000000000000bb4700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
-    -->
+    <raw>036614710000000001000080c0a802dd0101102704000000050010004445534b544f502d54304e36554e420004001401140100000a00000000000000bb4700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
+    <root-type>AdsDiscovery</root-type>
+    <xml>
+      <AdsDiscovery>
+        <header dataType="uint" bitLength="32">1897162243</header>
+        <requestId dataType="uint" bitLength="32">0</requestId>
+        <operation>
+          <Operation dataType="uint" bitLength="32" stringRepresentation="DISCOVERY_RESPONSE">2147483649</Operation>
+        </operation>
+        <amsNetId>
+          <AmsNetId>
+            <octet1 dataType="uint" bitLength="8">192</octet1>
+            <octet2 dataType="uint" bitLength="8">168</octet2>
+            <octet3 dataType="uint" bitLength="8">2</octet3>
+            <octet4 dataType="uint" bitLength="8">221</octet4>
+            <octet5 dataType="uint" bitLength="8">1</octet5>
+            <octet6 dataType="uint" bitLength="8">1</octet6>
+          </AmsNetId>
+        </amsNetId>
+        <portNumber>
+          <AdsPortNumbers dataType="uint" bitLength="16" stringRepresentation="SYSTEM_SERVICE">10000</AdsPortNumbers>
+        </portNumber>
+        <numBlocks dataType="uint" bitLength="32">4</numBlocks>
+        <blocks isList="true">
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="HOST_NAME">5</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockHostName>
+              <hostName>
+                <AmsString>
+                  <len dataType="uint" bitLength="16">16</len>
+                  <text dataType="string" bitLength="120" encoding="UTF-8">DESKTOP-T0N6UNB</text>
+                  <reserved dataType="uint" bitLength="8">0</reserved>
+                </AmsString>
+              </hostName>
+            </AdsDiscoveryBlockHostName>
+          </AdsDiscoveryBlock>
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="OS_DATA">4</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockOsData>
+              <osDataLen dataType="uint" bitLength="16">276</osDataLen>
+              <osData dataType="byte" bitLength="2208">0x140100000a00000000000000bb4700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
+            </AdsDiscoveryBlockOsData>
+          </AdsDiscoveryBlock>
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="VERSION">3</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockVersion>
+              <versionDataLen dataType="uint" bitLength="16">4</versionDataLen>
+              <versionData dataType="byte" bitLength="32">0x0301b80f</versionData>
+            </AdsDiscoveryBlockVersion>
+          </AdsDiscoveryBlock>
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="FINGERPRINT">18</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockFingerprint>
+              <dataLen dataType="uint" bitLength="16">65</dataLen>
+              <data dataType="byte" bitLength="520">0x3363303937326134386664623736663132613831323839613335643461333731653138666333303736363038323839373031386138626638386439393264633800</data>
+            </AdsDiscoveryBlockFingerprint>
+          </AdsDiscoveryBlock>
+        </blocks>
+      </AdsDiscovery>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>ADS Discovery Request from 192.168.23.209.1.1</name>
+    <raw>036614710000000001000000c0a817d10101102700000000</raw>
+    <root-type>AdsDiscovery</root-type>
+    <xml>
+      <AdsDiscovery>
+        <header dataType="uint" bitLength="32">1897162243</header>
+        <requestId dataType="uint" bitLength="32">0</requestId>
+        <operation>
+          <Operation dataType="uint" bitLength="32" stringRepresentation="DISCOVERY_REQUEST">1</Operation>
+        </operation>
+        <amsNetId>
+          <AmsNetId>
+            <octet1 dataType="uint" bitLength="8">192</octet1>
+            <octet2 dataType="uint" bitLength="8">168</octet2>
+            <octet3 dataType="uint" bitLength="8">23</octet3>
+            <octet4 dataType="uint" bitLength="8">209</octet4>
+            <octet5 dataType="uint" bitLength="8">1</octet5>
+            <octet6 dataType="uint" bitLength="8">1</octet6>
+          </AmsNetId>
+        </amsNetId>
+        <portNumber>
+          <AdsPortNumbers dataType="uint" bitLength="16" stringRepresentation="SYSTEM_SERVICE">10000</AdsPortNumbers>
+        </portNumber>
+        <numBlocks dataType="uint" bitLength="32">0</numBlocks>
+        <blocks isList="true">
+        </blocks>
+      </AdsDiscovery>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>ADS Discovery Response from 192.168.23.20.1.1</name>
+    <raw>036614710000000001000080c0a81714010110270400000005000700424b5f4950430004001401140100000600000001000000b11d000002000000530065007200760069006300650020005000610063006b0020003100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
     <root-type>AdsDiscovery</root-type>
     <xml>
       <AdsDiscovery>
-        <header dataType="uint" bitLength="32">57021553</header>
-        <reserved dataType="uint" bitLength="32">0</reserved>
+        <header dataType="uint" bitLength="32">1897162243</header>
+        <requestId dataType="uint" bitLength="32">0</requestId>
         <operation>
-          <Operation dataType="uint" bitLength="8" stringRepresentation="DISCOVERY">1</Operation>
+          <Operation dataType="uint" bitLength="32" stringRepresentation="DISCOVERY_RESPONSE">2147483649</Operation>
         </operation>
-        <reserved dataType="uint" bitLength="16">0</reserved>
-        <direction>
-          <Direction dataType="uint" bitLength="8" stringRepresentation="RESPONSE">128</Direction>
-        </direction>
-        <DiscoveryResponse>
-          <amsNetId>
-            <AmsNetId>
-              <octet1 dataType="uint" bitLength="8">192</octet1>
-              <octet2 dataType="uint" bitLength="8">168</octet2>
-              <octet3 dataType="uint" bitLength="8">2</octet3>
-              <octet4 dataType="uint" bitLength="8">221</octet4>
-              <octet5 dataType="uint" bitLength="8">1</octet5>
-              <octet6 dataType="uint" bitLength="8">1</octet6>
-            </AmsNetId>
-          </amsNetId>
-          <reserved dataType="uint" bitLength="16">4135</reserved>
-          <reserved dataType="uint" bitLength="16">1024</reserved>
-          <reserved dataType="uint" bitLength="24">5</reserved>
-          <name>
-            <AmsMagicString>
-              <len dataType="uint" bitLength="16">16</len>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-              <text dataType="string" bitLength="120" encoding="UTF-8">DESKTOP-T0N6UNB</text>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-            </AmsMagicString>
-          </name>
-        </DiscoveryResponse>
+        <amsNetId>
+          <AmsNetId>
+            <octet1 dataType="uint" bitLength="8">192</octet1>
+            <octet2 dataType="uint" bitLength="8">168</octet2>
+            <octet3 dataType="uint" bitLength="8">23</octet3>
+            <octet4 dataType="uint" bitLength="8">20</octet4>
+            <octet5 dataType="uint" bitLength="8">1</octet5>
+            <octet6 dataType="uint" bitLength="8">1</octet6>
+          </AmsNetId>
+        </amsNetId>
+        <portNumber>
+          <AdsPortNumbers dataType="uint" bitLength="16" stringRepresentation="SYSTEM_SERVICE">10000</AdsPortNumbers>
+        </portNumber>
+        <numBlocks dataType="uint" bitLength="32">4</numBlocks>
+        <blocks isList="true">
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="HOST_NAME">5</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockHostName>
+              <hostName>
+                <AmsString>
+                  <len dataType="uint" bitLength="16">7</len>
+                  <text dataType="string" bitLength="48" encoding="UTF-8">BK_IPC</text>
+                  <reserved dataType="uint" bitLength="8">0</reserved>
+                </AmsString>
+              </hostName>
+            </AdsDiscoveryBlockHostName>
+          </AdsDiscoveryBlock>
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="OS_DATA">4</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockOsData>
+              <osDataLen dataType="uint" bitLength="16">276</osDataLen>
+              <osData dataType="byte" bitLength="2208">0x140100000600000001000000b11d000002000000530065007200760069006300650020005000610063006b0020003100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [...]
+            </AdsDiscoveryBlockOsData>
+          </AdsDiscoveryBlock>
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="VERSION">3</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockVersion>
+              <versionDataLen dataType="uint" bitLength="16">4</versionDataLen>
+              <versionData dataType="byte" bitLength="32">0x0301b80f</versionData>
+            </AdsDiscoveryBlockVersion>
+          </AdsDiscoveryBlock>
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="FINGERPRINT">18</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockFingerprint>
+              <dataLen dataType="uint" bitLength="16">65</dataLen>
+              <data dataType="byte" bitLength="520">0x3365383565393165353864346663613166643663636133323332336338613561326665306334323132343532343833303662373638353034323665353532623100</data>
+            </AdsDiscoveryBlockFingerprint>
+          </AdsDiscoveryBlock>
+        </blocks>
       </AdsDiscovery>
     </xml>
   </testcase>
 
   <testcase>
-    <name>ADS Route Request from 10.10.10.10.1.1 via 10.10.10.10 with user='username' and pwd='password'</name>
+    <name>ADS Add Route Request from 10.10.10.10.1.1 via 10.10.10.10 with user='username' and pwd='password'</name>
     <raw>0366147100000000060000000a0a0a0a01011027050000000c000c0031302e31302e31302e313000070006000a0a0a0a01010d000900757365726e616d65000200090070617373776f72640005000c0031302e31302e31302e313000</raw>
     <root-type>AdsDiscovery</root-type>
     <xml>
       <AdsDiscovery>
-        <header dataType="uint" bitLength="32">57021553</header>
-        <reserved dataType="uint" bitLength="32">0</reserved>
+        <header dataType="uint" bitLength="32">1897162243</header>
+        <requestId dataType="uint" bitLength="32">0</requestId>
         <operation>
-          <Operation dataType="uint" bitLength="8" stringRepresentation="ROUTE">6</Operation>
+          <Operation dataType="uint" bitLength="32" stringRepresentation="ADD_ROUTE_REQUEST">6</Operation>
         </operation>
-        <reserved dataType="uint" bitLength="16">0</reserved>
-        <direction>
-          <Direction dataType="uint" bitLength="8" stringRepresentation="REQUEST">0</Direction>
-        </direction>
-        <RouteRequest>
-          <sender>
-            <AmsNetId>
-              <octet1 dataType="uint" bitLength="8">10</octet1>
-              <octet2 dataType="uint" bitLength="8">10</octet2>
-              <octet3 dataType="uint" bitLength="8">10</octet3>
-              <octet4 dataType="uint" bitLength="8">10</octet4>
-              <octet5 dataType="uint" bitLength="8">1</octet5>
-              <octet6 dataType="uint" bitLength="8">1</octet6>
-            </AmsNetId>
-          </sender>
-          <reserved dataType="uint" bitLength="16">4135</reserved>
-          <reserved dataType="uint" bitLength="16">1280</reserved>
-          <reserved dataType="uint" bitLength="24">12</reserved>
-          <routeName>
-            <AmsMagicString>
-              <len dataType="uint" bitLength="16">12</len>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-              <text dataType="string" bitLength="88" encoding="UTF-8">10.10.10.10</text>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-            </AmsMagicString>
-          </routeName>
-          <reserved dataType="uint" bitLength="16">1792</reserved>
-          <amsSize dataType="uint" bitLength="8">6</amsSize>
-          <targetPrefix dataType="uint" bitLength="8">0</targetPrefix>
-          <target>
-            <AmsNetId>
-              <octet1 dataType="uint" bitLength="8">10</octet1>
-              <octet2 dataType="uint" bitLength="8">10</octet2>
-              <octet3 dataType="uint" bitLength="8">10</octet3>
-              <octet4 dataType="uint" bitLength="8">10</octet4>
-              <octet5 dataType="uint" bitLength="8">1</octet5>
-              <octet6 dataType="uint" bitLength="8">1</octet6>
-            </AmsNetId>
-          </target>
-          <usernamePrefix dataType="uint" bitLength="8">13</usernamePrefix>
-          <username>
-            <AmsMagicString>
-              <len dataType="uint" bitLength="16">9</len>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-              <text dataType="string" bitLength="64" encoding="UTF-8">username</text>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-            </AmsMagicString>
-          </username>
-          <passwordPrefix dataType="uint" bitLength="8">2</passwordPrefix>
-          <password>
-            <AmsMagicString>
-              <len dataType="uint" bitLength="16">9</len>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-              <text dataType="string" bitLength="64" encoding="UTF-8">password</text>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-            </AmsMagicString>
-          </password>
-          <routePrefix dataType="uint" bitLength="8">5</routePrefix>
-          <address>
-            <AmsMagicString>
-              <len dataType="uint" bitLength="16">12</len>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-              <text dataType="string" bitLength="88" encoding="UTF-8">10.10.10.10</text>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-            </AmsMagicString>
-          </address>
-        </RouteRequest>
+        <amsNetId>
+          <AmsNetId>
+            <octet1 dataType="uint" bitLength="8">10</octet1>
+            <octet2 dataType="uint" bitLength="8">10</octet2>
+            <octet3 dataType="uint" bitLength="8">10</octet3>
+            <octet4 dataType="uint" bitLength="8">10</octet4>
+            <octet5 dataType="uint" bitLength="8">1</octet5>
+            <octet6 dataType="uint" bitLength="8">1</octet6>
+          </AmsNetId>
+        </amsNetId>
+        <portNumber>
+          <AdsPortNumbers dataType="uint" bitLength="16" stringRepresentation="SYSTEM_SERVICE">10000</AdsPortNumbers>
+        </portNumber>
+        <numBlocks dataType="uint" bitLength="32">5</numBlocks>
+        <blocks isList="true">
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="ROUTE_NAME">12</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockRouteName>
+              <routeName>
+                <AmsString>
+                  <len dataType="uint" bitLength="16">12</len>
+                  <text dataType="string" bitLength="88" encoding="UTF-8">10.10.10.10</text>
+                  <reserved dataType="uint" bitLength="8">0</reserved>
+                </AmsString>
+              </routeName>
+            </AdsDiscoveryBlockRouteName>
+          </AdsDiscoveryBlock>
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="AMS_NET_ID">7</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockAmsNetId>
+              <amsNetIdLength dataType="uint" bitLength="16">6</amsNetIdLength>
+              <amsNetId>
+                <AmsNetId>
+                  <octet1 dataType="uint" bitLength="8">10</octet1>
+                  <octet2 dataType="uint" bitLength="8">10</octet2>
+                  <octet3 dataType="uint" bitLength="8">10</octet3>
+                  <octet4 dataType="uint" bitLength="8">10</octet4>
+                  <octet5 dataType="uint" bitLength="8">1</octet5>
+                  <octet6 dataType="uint" bitLength="8">1</octet6>
+                </AmsNetId>
+              </amsNetId>
+            </AdsDiscoveryBlockAmsNetId>
+          </AdsDiscoveryBlock>
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="USER_NAME">13</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockUserName>
+              <userName>
+                <AmsString>
+                  <len dataType="uint" bitLength="16">9</len>
+                  <text dataType="string" bitLength="64" encoding="UTF-8">username</text>
+                  <reserved dataType="uint" bitLength="8">0</reserved>
+                </AmsString>
+              </userName>
+            </AdsDiscoveryBlockUserName>
+          </AdsDiscoveryBlock>
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="PASSWORD">2</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockPassword>
+              <password>
+                <AmsString>
+                  <len dataType="uint" bitLength="16">9</len>
+                  <text dataType="string" bitLength="64" encoding="UTF-8">password</text>
+                  <reserved dataType="uint" bitLength="8">0</reserved>
+                </AmsString>
+              </password>
+            </AdsDiscoveryBlockPassword>
+          </AdsDiscoveryBlock>
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="HOST_NAME">5</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockHostName>
+              <hostName>
+                <AmsString>
+                  <len dataType="uint" bitLength="16">12</len>
+                  <text dataType="string" bitLength="88" encoding="UTF-8">10.10.10.10</text>
+                  <reserved dataType="uint" bitLength="8">0</reserved>
+                </AmsString>
+              </hostName>
+            </AdsDiscoveryBlockHostName>
+          </AdsDiscoveryBlock>
+        </blocks>
       </AdsDiscovery>
     </xml>
   </testcase>
 
   <testcase>
-    <name>ADS Route Response with Success status</name>
+    <name>ADS Add Route Response with Success status</name>
     <raw>036614710000000006000080c0a802dd01011027010000000100040000000000</raw>
     <root-type>AdsDiscovery</root-type>
     <xml>
       <AdsDiscovery>
-        <header dataType="uint" bitLength="32">57021553</header>
-        <reserved dataType="uint" bitLength="32">0</reserved>
+        <header dataType="uint" bitLength="32">1897162243</header>
+        <requestId dataType="uint" bitLength="32">0</requestId>
         <operation>
-          <Operation dataType="uint" bitLength="8" stringRepresentation="ROUTE">6</Operation>
+          <Operation dataType="uint" bitLength="32" stringRepresentation="ADD_ROUTE_RESPONSE">2147483654</Operation>
         </operation>
-        <reserved dataType="uint" bitLength="16">0</reserved>
-        <direction>
-          <Direction dataType="uint" bitLength="8" stringRepresentation="RESPONSE">128</Direction>
-        </direction>
-        <RouteResponse>
-          <amsNetId>
-            <AmsNetId>
-              <octet1 dataType="uint" bitLength="8">192</octet1>
-              <octet2 dataType="uint" bitLength="8">168</octet2>
-              <octet3 dataType="uint" bitLength="8">2</octet3>
-              <octet4 dataType="uint" bitLength="8">221</octet4>
-              <octet5 dataType="uint" bitLength="8">1</octet5>
-              <octet6 dataType="uint" bitLength="8">1</octet6>
-            </AmsNetId>
-          </amsNetId>
-          <reserved dataType="uint" bitLength="16">4135</reserved>
-          <reserved dataType="uint" bitLength="16">256</reserved>
-          <reserved dataType="uint" bitLength="32">256</reserved>
-          <status>
-            <RouteStatus dataType="uint" bitLength="24" stringRepresentation="SUCCESS">262144</RouteStatus>
-          </status>
-          <reserved dataType="uint" bitLength="24">0</reserved>
-        </RouteResponse>
+        <amsNetId>
+          <AmsNetId>
+            <octet1 dataType="uint" bitLength="8">192</octet1>
+            <octet2 dataType="uint" bitLength="8">168</octet2>
+            <octet3 dataType="uint" bitLength="8">2</octet3>
+            <octet4 dataType="uint" bitLength="8">221</octet4>
+            <octet5 dataType="uint" bitLength="8">1</octet5>
+            <octet6 dataType="uint" bitLength="8">1</octet6>
+          </AmsNetId>
+        </amsNetId>
+        <portNumber>
+          <AdsPortNumbers dataType="uint" bitLength="16" stringRepresentation="SYSTEM_SERVICE">10000</AdsPortNumbers>
+        </portNumber>
+        <numBlocks dataType="uint" bitLength="32">1</numBlocks>
+        <blocks isList="true">
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="STATUS">1</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockStatus>
+              <statusLength dataType="uint" bitLength="16">4</statusLength>
+              <status>
+                <Status dataType="uint" bitLength="32" stringRepresentation="SUCCESS">0</Status>
+              </status>
+            </AdsDiscoveryBlockStatus>
+          </AdsDiscoveryBlock>
+        </blocks>
       </AdsDiscovery>
-
     </xml>
   </testcase>
 
   <testcase>
-    <name>ADS Route Response with Failure status</name>
-    <raw>036614710000000006000080c0a802dd01011027010000000100000407000000</raw>
+    <name>ADS Add Route Response with Failure status</name>
+    <raw>036614710000000006000080c0a802dd01011027010000000100040007000000</raw>
     <root-type>AdsDiscovery</root-type>
     <xml>
       <AdsDiscovery>
-        <header dataType="uint" bitLength="32">57021553</header>
-        <reserved dataType="uint" bitLength="32">0</reserved>
+        <header dataType="uint" bitLength="32">1897162243</header>
+        <requestId dataType="uint" bitLength="32">0</requestId>
         <operation>
-          <Operation dataType="uint" bitLength="8" stringRepresentation="ROUTE">6</Operation>
+          <Operation dataType="uint" bitLength="32" stringRepresentation="ADD_ROUTE_RESPONSE">2147483654</Operation>
         </operation>
-        <reserved dataType="uint" bitLength="16">0</reserved>
-        <direction>
-          <Direction dataType="uint" bitLength="8" stringRepresentation="RESPONSE">128</Direction>
-        </direction>
-        <RouteResponse>
-          <amsNetId>
-            <AmsNetId>
-              <octet1 dataType="uint" bitLength="8">192</octet1>
-              <octet2 dataType="uint" bitLength="8">168</octet2>
-              <octet3 dataType="uint" bitLength="8">2</octet3>
-              <octet4 dataType="uint" bitLength="8">221</octet4>
-              <octet5 dataType="uint" bitLength="8">1</octet5>
-              <octet6 dataType="uint" bitLength="8">1</octet6>
-            </AmsNetId>
-          </amsNetId>
-          <reserved dataType="uint" bitLength="16">4135</reserved>
-          <reserved dataType="uint" bitLength="16">256</reserved>
-          <reserved dataType="uint" bitLength="32">256</reserved>
-          <status>
-            <RouteStatus dataType="uint" bitLength="24" stringRepresentation="FAILURE">1031</RouteStatus>
-          </status>
-          <reserved dataType="uint" bitLength="24">0</reserved>
-        </RouteResponse>
+        <amsNetId>
+          <AmsNetId>
+            <octet1 dataType="uint" bitLength="8">192</octet1>
+            <octet2 dataType="uint" bitLength="8">168</octet2>
+            <octet3 dataType="uint" bitLength="8">2</octet3>
+            <octet4 dataType="uint" bitLength="8">221</octet4>
+            <octet5 dataType="uint" bitLength="8">1</octet5>
+            <octet6 dataType="uint" bitLength="8">1</octet6>
+          </AmsNetId>
+        </amsNetId>
+        <portNumber>
+          <AdsPortNumbers dataType="uint" bitLength="16" stringRepresentation="SYSTEM_SERVICE">10000</AdsPortNumbers>
+        </portNumber>
+        <numBlocks dataType="uint" bitLength="32">1</numBlocks>
+        <blocks isList="true">
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="STATUS">1</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockStatus>
+              <statusLength dataType="uint" bitLength="16">4</statusLength>
+              <status>
+                <Status dataType="uint" bitLength="32" stringRepresentation="FAILURE">7</Status>
+              </status>
+            </AdsDiscoveryBlockStatus>
+          </AdsDiscoveryBlock>
+        </blocks>
       </AdsDiscovery>
     </xml>
   </testcase>
@@ -269,29 +426,27 @@
     <root-type>AdsDiscovery</root-type>
     <xml>
       <AdsDiscovery>
-        <header dataType="uint" bitLength="32">57021553</header>
-        <reserved dataType="uint" bitLength="32">0</reserved>
+        <header dataType="uint" bitLength="32">1897162243</header>
+        <requestId dataType="uint" bitLength="32">0</requestId>
         <operation>
-          <Operation dataType="uint" bitLength="8" stringRepresentation="DISCOVERY">1</Operation>
+          <Operation dataType="uint" bitLength="32" stringRepresentation="DISCOVERY_REQUEST">1</Operation>
         </operation>
-        <reserved dataType="uint" bitLength="16">0</reserved>
-        <direction>
-          <Direction dataType="uint" bitLength="8" stringRepresentation="REQUEST">0</Direction>
-        </direction>
-        <DiscoveryRequest>
-          <amsNetId>
-            <AmsNetId>
-              <octet1 dataType="uint" bitLength="8">192</octet1>
-              <octet2 dataType="uint" bitLength="8">168</octet2>
-              <octet3 dataType="uint" bitLength="8">2</octet3>
-              <octet4 dataType="uint" bitLength="8">232</octet4>
-              <octet5 dataType="uint" bitLength="8">1</octet5>
-              <octet6 dataType="uint" bitLength="8">1</octet6>
-            </AmsNetId>
-          </amsNetId>
-          <reserved dataType="uint" bitLength="16">4135</reserved>
-          <reserved dataType="uint" bitLength="32">0</reserved>
-        </DiscoveryRequest>
+        <amsNetId>
+          <AmsNetId>
+            <octet1 dataType="uint" bitLength="8">192</octet1>
+            <octet2 dataType="uint" bitLength="8">168</octet2>
+            <octet3 dataType="uint" bitLength="8">2</octet3>
+            <octet4 dataType="uint" bitLength="8">232</octet4>
+            <octet5 dataType="uint" bitLength="8">1</octet5>
+            <octet6 dataType="uint" bitLength="8">1</octet6>
+          </AmsNetId>
+        </amsNetId>
+        <portNumber>
+          <AdsPortNumbers dataType="uint" bitLength="16" stringRepresentation="SYSTEM_SERVICE">10000</AdsPortNumbers>
+        </portNumber>
+        <numBlocks dataType="uint" bitLength="32">0</numBlocks>
+        <blocks isList="true">
+        </blocks>
       </AdsDiscovery>
     </xml>
   </testcase>
@@ -302,29 +457,27 @@
     <root-type>AdsDiscovery</root-type>
     <xml>
       <AdsDiscovery>
-        <header dataType="uint" bitLength="32">57021553</header>
-        <reserved dataType="uint" bitLength="32">0</reserved>
+        <header dataType="uint" bitLength="32">1897162243</header>
+        <requestId dataType="uint" bitLength="32">0</requestId>
         <operation>
-          <Operation dataType="uint" bitLength="8" stringRepresentation="DISCOVERY">1</Operation>
+          <Operation dataType="uint" bitLength="32" stringRepresentation="DISCOVERY_REQUEST">1</Operation>
         </operation>
-        <reserved dataType="uint" bitLength="16">0</reserved>
-        <direction>
-          <Direction dataType="uint" bitLength="8" stringRepresentation="REQUEST">0</Direction>
-        </direction>
-        <DiscoveryRequest>
-          <amsNetId>
-            <AmsNetId>
-              <octet1 dataType="uint" bitLength="8">192</octet1>
-              <octet2 dataType="uint" bitLength="8">168</octet2>
-              <octet3 dataType="uint" bitLength="8">0</octet3>
-              <octet4 dataType="uint" bitLength="8">137</octet4>
-              <octet5 dataType="uint" bitLength="8">1</octet5>
-              <octet6 dataType="uint" bitLength="8">1</octet6>
-            </AmsNetId>
-          </amsNetId>
-          <reserved dataType="uint" bitLength="16">4135</reserved>
-          <reserved dataType="uint" bitLength="32">0</reserved>
-        </DiscoveryRequest>
+        <amsNetId>
+          <AmsNetId>
+            <octet1 dataType="uint" bitLength="8">192</octet1>
+            <octet2 dataType="uint" bitLength="8">168</octet2>
+            <octet3 dataType="uint" bitLength="8">0</octet3>
+            <octet4 dataType="uint" bitLength="8">137</octet4>
+            <octet5 dataType="uint" bitLength="8">1</octet5>
+            <octet6 dataType="uint" bitLength="8">1</octet6>
+          </AmsNetId>
+        </amsNetId>
+        <portNumber>
+          <AdsPortNumbers dataType="uint" bitLength="16" stringRepresentation="SYSTEM_SERVICE">10000</AdsPortNumbers>
+        </portNumber>
+        <numBlocks dataType="uint" bitLength="32">0</numBlocks>
+        <blocks isList="true">
+        </blocks>
       </AdsDiscovery>
     </xml>
   </testcase>
@@ -355,83 +508,106 @@
   -->
 
   <testcase>
-    <name>ADS Route Request (TC2)</name>
+    <name>ADS Add Route Request (TC2)</name>
     <raw>036614710000000006000000c0a8008901011027050000000c0010004445534b544f502d33504a314135440007000600c0a8008901010d000e0041646d696e6973747261746f72000200010000050010004445534b544f502d33504a3141354400</raw>
     <root-type>AdsDiscovery</root-type>
     <xml>
       <AdsDiscovery>
-        <header dataType="uint" bitLength="32">57021553</header>
-        <reserved dataType="uint" bitLength="32">0</reserved>
+        <header dataType="uint" bitLength="32">1897162243</header>
+        <requestId dataType="uint" bitLength="32">0</requestId>
         <operation>
-          <Operation dataType="uint" bitLength="8" stringRepresentation="ROUTE">6</Operation>
+          <Operation dataType="uint" bitLength="32" stringRepresentation="ADD_ROUTE_REQUEST">6</Operation>
         </operation>
-        <reserved dataType="uint" bitLength="16">0</reserved>
-        <direction>
-          <Direction dataType="uint" bitLength="8" stringRepresentation="REQUEST">0</Direction>
-        </direction>
-        <RouteRequest>
-          <sender>
-            <AmsNetId>
-              <octet1 dataType="uint" bitLength="8">192</octet1>
-              <octet2 dataType="uint" bitLength="8">168</octet2>
-              <octet3 dataType="uint" bitLength="8">0</octet3>
-              <octet4 dataType="uint" bitLength="8">137</octet4>
-              <octet5 dataType="uint" bitLength="8">1</octet5>
-              <octet6 dataType="uint" bitLength="8">1</octet6>
-            </AmsNetId>
-          </sender>
-          <reserved dataType="uint" bitLength="16">4135</reserved>
-          <reserved dataType="uint" bitLength="16">1280</reserved>
-          <reserved dataType="uint" bitLength="24">12</reserved>
-          <routeName>
-            <AmsMagicString>
-              <len dataType="uint" bitLength="16">16</len>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-              <text dataType="string" bitLength="120" encoding="UTF-8">DESKTOP-3PJ1A5D</text>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-            </AmsMagicString>
-          </routeName>
-          <reserved dataType="uint" bitLength="16">1792</reserved>
-          <amsSize dataType="uint" bitLength="8">6</amsSize>
-          <targetPrefix dataType="uint" bitLength="8">0</targetPrefix>
-          <target>
-            <AmsNetId>
-              <octet1 dataType="uint" bitLength="8">192</octet1>
-              <octet2 dataType="uint" bitLength="8">168</octet2>
-              <octet3 dataType="uint" bitLength="8">0</octet3>
-              <octet4 dataType="uint" bitLength="8">137</octet4>
-              <octet5 dataType="uint" bitLength="8">1</octet5>
-              <octet6 dataType="uint" bitLength="8">1</octet6>
-            </AmsNetId>
-          </target>
-          <usernamePrefix dataType="uint" bitLength="8">13</usernamePrefix>
-          <username>
-            <AmsMagicString>
-              <len dataType="uint" bitLength="16">14</len>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-              <text dataType="string" bitLength="104" encoding="UTF-8">Administrator</text>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-            </AmsMagicString>
-          </username>
-          <passwordPrefix dataType="uint" bitLength="8">2</passwordPrefix>
-          <password>
-            <AmsMagicString>
-              <len dataType="uint" bitLength="16">1</len>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-              <text dataType="string" bitLength="0" encoding="UTF-8"></text>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-            </AmsMagicString>
-          </password>
-          <routePrefix dataType="uint" bitLength="8">5</routePrefix>
-          <address>
-            <AmsMagicString>
-              <len dataType="uint" bitLength="16">16</len>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-              <text dataType="string" bitLength="120" encoding="UTF-8">DESKTOP-3PJ1A5D</text>
-              <reserved dataType="uint" bitLength="8">0</reserved>
-            </AmsMagicString>
-          </address>
-        </RouteRequest>
+        <amsNetId>
+          <AmsNetId>
+            <octet1 dataType="uint" bitLength="8">192</octet1>
+            <octet2 dataType="uint" bitLength="8">168</octet2>
+            <octet3 dataType="uint" bitLength="8">0</octet3>
+            <octet4 dataType="uint" bitLength="8">137</octet4>
+            <octet5 dataType="uint" bitLength="8">1</octet5>
+            <octet6 dataType="uint" bitLength="8">1</octet6>
+          </AmsNetId>
+        </amsNetId>
+        <portNumber>
+          <AdsPortNumbers dataType="uint" bitLength="16" stringRepresentation="SYSTEM_SERVICE">10000</AdsPortNumbers>
+        </portNumber>
+        <numBlocks dataType="uint" bitLength="32">5</numBlocks>
+        <blocks isList="true">
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="ROUTE_NAME">12</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockRouteName>
+              <routeName>
+                <AmsString>
+                  <len dataType="uint" bitLength="16">16</len>
+                  <text dataType="string" bitLength="120" encoding="UTF-8">DESKTOP-3PJ1A5D</text>
+                  <reserved dataType="uint" bitLength="8">0</reserved>
+                </AmsString>
+              </routeName>
+            </AdsDiscoveryBlockRouteName>
+          </AdsDiscoveryBlock>
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="AMS_NET_ID">7</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockAmsNetId>
+              <amsNetIdLength dataType="uint" bitLength="16">6</amsNetIdLength>
+              <amsNetId>
+                <AmsNetId>
+                  <octet1 dataType="uint" bitLength="8">192</octet1>
+                  <octet2 dataType="uint" bitLength="8">168</octet2>
+                  <octet3 dataType="uint" bitLength="8">0</octet3>
+                  <octet4 dataType="uint" bitLength="8">137</octet4>
+                  <octet5 dataType="uint" bitLength="8">1</octet5>
+                  <octet6 dataType="uint" bitLength="8">1</octet6>
+                </AmsNetId>
+              </amsNetId>
+            </AdsDiscoveryBlockAmsNetId>
+          </AdsDiscoveryBlock>
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="USER_NAME">13</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockUserName>
+              <userName>
+                <AmsString>
+                  <len dataType="uint" bitLength="16">14</len>
+                  <text dataType="string" bitLength="104" encoding="UTF-8">Administrator</text>
+                  <reserved dataType="uint" bitLength="8">0</reserved>
+                </AmsString>
+              </userName>
+            </AdsDiscoveryBlockUserName>
+          </AdsDiscoveryBlock>
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="PASSWORD">2</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockPassword>
+              <password>
+                <AmsString>
+                  <len dataType="uint" bitLength="16">1</len>
+                  <text dataType="string" bitLength="0" encoding="UTF-8"></text>
+                  <reserved dataType="uint" bitLength="8">0</reserved>
+                </AmsString>
+              </password>
+            </AdsDiscoveryBlockPassword>
+          </AdsDiscoveryBlock>
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="HOST_NAME">5</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockHostName>
+              <hostName>
+                <AmsString>
+                  <len dataType="uint" bitLength="16">16</len>
+                  <text dataType="string" bitLength="120" encoding="UTF-8">DESKTOP-3PJ1A5D</text>
+                  <reserved dataType="uint" bitLength="8">0</reserved>
+                </AmsString>
+              </hostName>
+            </AdsDiscoveryBlockHostName>
+          </AdsDiscoveryBlock>
+        </blocks>
       </AdsDiscovery>
     </xml>
   </testcase>
@@ -442,34 +618,38 @@
     <root-type>AdsDiscovery</root-type>
     <xml>
       <AdsDiscovery>
-        <header dataType="uint" bitLength="32">57021553</header>
-        <reserved dataType="uint" bitLength="32">0</reserved>
+        <header dataType="uint" bitLength="32">1897162243</header>
+        <requestId dataType="uint" bitLength="32">0</requestId>
         <operation>
-          <Operation dataType="uint" bitLength="8" stringRepresentation="ROUTE">6</Operation>
+          <Operation dataType="uint" bitLength="32" stringRepresentation="ADD_ROUTE_RESPONSE">2147483654</Operation>
         </operation>
-        <reserved dataType="uint" bitLength="16">0</reserved>
-        <direction>
-          <Direction dataType="uint" bitLength="8" stringRepresentation="RESPONSE">128</Direction>
-        </direction>
-        <RouteResponse>
-          <amsNetId>
-            <AmsNetId>
-              <octet1 dataType="uint" bitLength="8">5</octet1>
-              <octet2 dataType="uint" bitLength="8">28</octet2>
-              <octet3 dataType="uint" bitLength="8">91</octet3>
-              <octet4 dataType="uint" bitLength="8">140</octet4>
-              <octet5 dataType="uint" bitLength="8">1</octet5>
-              <octet6 dataType="uint" bitLength="8">1</octet6>
-            </AmsNetId>
-          </amsNetId>
-          <reserved dataType="uint" bitLength="16">4135</reserved>
-          <reserved dataType="uint" bitLength="16">256</reserved>
-          <reserved dataType="uint" bitLength="32">256</reserved>
-          <status>
-            <RouteStatus dataType="uint" bitLength="24" stringRepresentation="SUCCESS">262144</RouteStatus>
-          </status>
-          <reserved dataType="uint" bitLength="24">0</reserved>
-        </RouteResponse>
+        <amsNetId>
+          <AmsNetId>
+            <octet1 dataType="uint" bitLength="8">5</octet1>
+            <octet2 dataType="uint" bitLength="8">28</octet2>
+            <octet3 dataType="uint" bitLength="8">91</octet3>
+            <octet4 dataType="uint" bitLength="8">140</octet4>
+            <octet5 dataType="uint" bitLength="8">1</octet5>
+            <octet6 dataType="uint" bitLength="8">1</octet6>
+          </AmsNetId>
+        </amsNetId>
+        <portNumber>
+          <AdsPortNumbers dataType="uint" bitLength="16" stringRepresentation="SYSTEM_SERVICE">10000</AdsPortNumbers>
+        </portNumber>
+        <numBlocks dataType="uint" bitLength="32">1</numBlocks>
+        <blocks isList="true">
+          <AdsDiscoveryBlock>
+            <blockType>
+              <AdsDiscoveryBlockType dataType="uint" bitLength="16" stringRepresentation="STATUS">1</AdsDiscoveryBlockType>
+            </blockType>
+            <AdsDiscoveryBlockStatus>
+              <statusLength dataType="uint" bitLength="16">4</statusLength>
+              <status>
+                <Status dataType="uint" bitLength="32" stringRepresentation="SUCCESS">0</Status>
+              </status>
+            </AdsDiscoveryBlockStatus>
+          </AdsDiscoveryBlock>
+        </blocks>
       </AdsDiscovery>
     </xml>
   </testcase>
diff --git a/plc4go/go.mod b/plc4go/go.mod
index acc8c15ad..f75cc69f3 100644
--- a/plc4go/go.mod
+++ b/plc4go/go.mod
@@ -41,6 +41,7 @@ require (
 	github.com/stretchr/testify v1.8.0
 	github.com/subchen/go-xmldom v1.1.2
 	github.com/viney-shih/go-lock v1.1.2
+	gopkg.in/yaml.v3 v3.0.1
 )
 
 require (
@@ -73,5 +74,4 @@ require (
 	golang.org/x/text v0.3.7 // indirect
 	gopkg.in/ini.v1 v1.66.4 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
-	gopkg.in/yaml.v3 v3.0.1 // indirect
 )
diff --git a/plc4go/protocols/ads/readwrite/ParserHelper.go b/plc4go/protocols/ads/readwrite/ParserHelper.go
index 4aeaf8103..802fd848c 100644
--- a/plc4go/protocols/ads/readwrite/ParserHelper.go
+++ b/plc4go/protocols/ads/readwrite/ParserHelper.go
@@ -65,6 +65,8 @@ func (m AdsParserHelper) Parse(typeName string, arguments []string, io utils.Rea
 		return model.AdsStampHeaderParse(io)
 	case "AmsSerialResetFrame":
 		return model.AmsSerialResetFrameParse(io)
+	case "AdsConstants":
+		return model.AdsConstantsParse(io)
 	case "AdsNotificationSample":
 		return model.AdsNotificationSampleParse(io)
 	case "AmsTCPPacket":
diff --git a/plc4go/protocols/ads/readwrite/XmlParserHelper.go b/plc4go/protocols/ads/readwrite/XmlParserHelper.go
index f27e6b08b..e09831b45 100644
--- a/plc4go/protocols/ads/readwrite/XmlParserHelper.go
+++ b/plc4go/protocols/ads/readwrite/XmlParserHelper.go
@@ -72,6 +72,8 @@ func (m AdsXmlParserHelper) Parse(typeName string, xmlString string, parserArgum
 		return model.AdsStampHeaderParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "AmsSerialResetFrame":
 		return model.AmsSerialResetFrameParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
+	case "AdsConstants":
+		return model.AdsConstantsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "AdsNotificationSample":
 		return model.AdsNotificationSampleParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "AmsTCPPacket":