<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/9394">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">GGSN_Tests: test what happens when PCO contains only one DNS entry<br><br>When the protocol configuration options (PCO) contain a protocol<br>option that lists only one DNS server (normally there are two<br>included, a primary and a secondary). Than the parser in osmo-ggsn<br>runs into an endles loop. This testcase tries to provoke this behavior<br>by sending PDP CONTEXT ACTIVATE messages with PCO that contain only<br>a single DNS entry.<br><br>The problematic behavior of osmo-ggsn has been fixed recently<br>(see depends).<br><br>Change-Id: I71761e1f9db7ceac3c3df43d2e539f8c8d53c4fc<br>Depends: osmo-msc Icffde89f9bc5d8fcadf6e2dd6c0b4de03440edd5<br>Related: OS#3288<br>---<br>M ggsn_tests/GGSN_Tests.ttcn<br>M ggsn_tests/expected-results.xml<br>M library/GTP_Templates.ttcn<br>3 files changed, 47 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/94/9394/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/ggsn_tests/GGSN_Tests.ttcn b/ggsn_tests/GGSN_Tests.ttcn</span><br><span>index d099681..28a1785 100644</span><br><span>--- a/ggsn_tests/GGSN_Tests.ttcn</span><br><span>+++ b/ggsn_tests/GGSN_Tests.ttcn</span><br><span>@@ -932,6 +932,24 @@</span><br><span>            T_default.stop;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Test if the parser can cope with PCO that only contain either a single or a primary DNS.</span><br><span style="color: hsl(120, 100%, 40%);">+    * Note: an unpatched osmo-ggsn version will enter an endless-loop when the test is run</span><br><span style="color: hsl(120, 100%, 40%);">+        * see Change-Id Icffde89f9bc5d8fcadf6e2dd6c0b4de03440edd5 and OS#3288 */</span><br><span style="color: hsl(120, 100%, 40%);">+     testcase TC_pdp4_act_deact_with_single_dns() runs on GT_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+          f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+             var PdpContext ctx := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInternet, valueof(t_EuaIPv4Dyn)));</span><br><span style="color: hsl(120, 100%, 40%);">+              var ProtConfigOptions pco_pri_dns := valueof(ts_PCO_IPv4_PRI_DNS_IPCP);</span><br><span style="color: hsl(120, 100%, 40%);">+               var ProtConfigOptions pco_sec_dns := valueof(ts_PCO_IPv4_SEC_DNS_IPCP);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             ctx.pco_req := pco_pri_dns;</span><br><span style="color: hsl(120, 100%, 40%);">+           f_pdp_ctx_act(ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+           f_pdp_ctx_del(ctx, '1'B);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           ctx.pco_req := pco_sec_dns;</span><br><span style="color: hsl(120, 100%, 40%);">+           f_pdp_ctx_act(ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+           f_pdp_ctx_del(ctx, '1'B);</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  control {</span><br><span>            execute(TC_pdp4_act_deact());</span><br><span>                execute(TC_pdp4_act_deact_ipcp());</span><br><span>@@ -947,5 +965,7 @@</span><br><span>             execute(TC_pdp6_clients_interact());</span><br><span> </span><br><span>             execute(TC_echo_req_resp());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                execute(TC_pdp4_act_deact_with_single_dns());</span><br><span>        }</span><br><span> }</span><br><span>diff --git a/ggsn_tests/expected-results.xml b/ggsn_tests/expected-results.xml</span><br><span>index 1e5da38..f871657 100644</span><br><span>--- a/ggsn_tests/expected-results.xml</span><br><span>+++ b/ggsn_tests/expected-results.xml</span><br><span>@@ -11,4 +11,5 @@</span><br><span>   <testcase classname='GGSN_Tests' name='TC_pdp6_act_deact_gtpu_access' time='MASKED'/></span><br><span>   <testcase classname='GGSN_Tests' name='TC_pdp6_clients_interact' time='MASKED'/></span><br><span>   <testcase classname='GGSN_Tests' name='TC_echo_req_resp' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='GGSN_Tests' name='TC_pdp4_act_deact_with_single_dns' time='MASKED'/></span><br><span> </testsuite></span><br><span>diff --git a/library/GTP_Templates.ttcn b/library/GTP_Templates.ttcn</span><br><span>index 44ec439..6c71765 100644</span><br><span>--- a/library/GTP_Templates.ttcn</span><br><span>+++ b/library/GTP_Templates.ttcn</span><br><span>@@ -400,6 +400,25 @@</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ template ProtConfigOptions ts_PCO_IPv4_PRI_DNS_IPCP modifies ts_PCO := {</span><br><span style="color: hsl(120, 100%, 40%);">+              protocols := {</span><br><span style="color: hsl(120, 100%, 40%);">+                        /* dummy PAP entry to check if our parser can cope with a single primary DNS entry</span><br><span style="color: hsl(120, 100%, 40%);">+                     * see Change-Id Icffde89f9bc5d8fcadf6e2dd6c0b4de03440edd5 and OS#3288 */</span><br><span style="color: hsl(120, 100%, 40%);">+                     { protocolID := 'C023'O, lengthProtoID := 0, protoIDContents := ''O },</span><br><span style="color: hsl(120, 100%, 40%);">+                        { protocolID := '8021'O, lengthProtoID := 16, protoIDContents :=</span><br><span style="color: hsl(120, 100%, 40%);">+                                                              enc_IpcpPacket(valueof(ts_IPCP_ReqDNS_Primary)) }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     template ProtConfigOptions ts_PCO_IPv4_SEC_DNS_IPCP modifies ts_PCO := {</span><br><span style="color: hsl(120, 100%, 40%);">+              protocols := {</span><br><span style="color: hsl(120, 100%, 40%);">+                        /* dummy PAP entry to check if our parser can cope with a single secondary DNS entry</span><br><span style="color: hsl(120, 100%, 40%);">+                   * see Change-Id Icffde89f9bc5d8fcadf6e2dd6c0b4de03440edd5 and OS#3288 */</span><br><span style="color: hsl(120, 100%, 40%);">+                     { protocolID := 'C023'O, lengthProtoID := 0, protoIDContents := ''O },</span><br><span style="color: hsl(120, 100%, 40%);">+                        { protocolID := '8021'O, lengthProtoID := 16, protoIDContents :=</span><br><span style="color: hsl(120, 100%, 40%);">+                                                              enc_IpcpPacket(valueof(ts_IPCP_ReqDNS_Secondary)) }</span><br><span style="color: hsl(120, 100%, 40%);">+           }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  template ProtocolElement tr_PCO_Proto(OCT2 prot_id) := {</span><br><span>             protocolID := prot_id,</span><br><span>               lengthProtoID := ?,</span><br><span>@@ -468,6 +487,13 @@</span><br><span>           ts_IPCP(LCP_Configure_Request, identifier,</span><br><span>                   { tr_IPCP_PrimaryDns('00000000'O), tr_IPCP_SecondaryDns('00000000'O) });</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  template IpcpPacket ts_IPCP_ReqDNS_Primary(uint8_t identifier := 0) :=</span><br><span style="color: hsl(120, 100%, 40%);">+                ts_IPCP(LCP_Configure_Request, identifier,</span><br><span style="color: hsl(120, 100%, 40%);">+                    { tr_IPCP_PrimaryDns('00000000'O) });</span><br><span style="color: hsl(120, 100%, 40%);">+ template IpcpPacket ts_IPCP_ReqDNS_Secondary(uint8_t identifier := 0) :=</span><br><span style="color: hsl(120, 100%, 40%);">+              ts_IPCP(LCP_Configure_Request, identifier,</span><br><span style="color: hsl(120, 100%, 40%);">+                    { tr_IPCP_SecondaryDns('00000000'O) });</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    function f_teardown_ind_IE(in template (omit) BIT1 ind) return template (omit) TearDownInd {</span><br><span>                 if (istemplatekind(ind, "omit")) {</span><br><span>                         return omit;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9394">change 9394</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/9394"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I71761e1f9db7ceac3c3df43d2e539f8c8d53c4fc </div>
<div style="display:none"> Gerrit-Change-Number: 9394 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>