<p>matt9j has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/erlang/osmo_ss7/+/20019">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ipa_proto: Allow configuring ack initiation behavior<br><br>When the osmo-msc version 1.6.1 connects to the osmo-hlr, it sends an<br>id response and an immediate ack. This does not match the handshake<br>spec as I understand it or was implemented here. This commit allows<br>initiating a nonstandard ack if needed to mimic behavior of particular<br>components.<br><br>Change-Id: I6ab3c9efb51e806f582ce8f473a13ee73ca1567e<br>---<br>M include/ipa.hrl<br>M src/ipa_proto.erl<br>2 files changed, 19 insertions(+), 6 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/erlang/osmo_ss7 refs/changes/19/20019/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/ipa.hrl b/include/ipa.hrl</span><br><span>index 352057f..865dcc8 100644</span><br><span>--- a/include/ipa.hrl</span><br><span>+++ b/include/ipa.hrl</span><br><span>@@ -26,7 +26,7 @@</span><br><span>                      unit_type,</span><br><span>                           equipment_version,</span><br><span>                           sw_version,</span><br><span style="color: hsl(0, 100%, 40%);">-                     unit_name</span><br><span style="color: hsl(0, 100%, 40%);">-                      }).</span><br><span style="color: hsl(120, 100%, 40%);">+                    unit_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                    initiate_nonstandard_ack=false}).</span><br><span> </span><br><span> -endif.</span><br><span>diff --git a/src/ipa_proto.erl b/src/ipa_proto.erl</span><br><span>index 18b74bd..7189033 100644</span><br><span>--- a/src/ipa_proto.erl</span><br><span>+++ b/src/ipa_proto.erl</span><br><span>@@ -283,10 +283,15 @@</span><br><span> process_ccm_msg(Socket, StreamID, _, ping, _) -></span><br><span>   io:format("Socket ~p Stream ~p: PING -> PONG~n", [Socket, StreamID]),</span><br><span>   send(Socket, StreamID, <<?IPAC_MSGT_PONG>>);</span><br><span style="color: hsl(0, 100%, 40%);">-% Simply respond to ID_ACK with ID_ACK</span><br><span style="color: hsl(0, 100%, 40%);">-process_ccm_msg(Socket, StreamID, _, id_ack, _) -></span><br><span style="color: hsl(120, 100%, 40%);">+% Respond to ID_ACK with ID_ACK if this instance did not initiate</span><br><span style="color: hsl(120, 100%, 40%);">+process_ccm_msg(Socket, StreamID, CcmOptions, id_ack, _) -></span><br><span>       io:format("Socket ~p Stream ~p: ID_ACK -> ID_ACK~n", [Socket, StreamID]),</span><br><span style="color: hsl(0, 100%, 40%);">-  send(Socket, StreamID, <<?IPAC_MSGT_ID_ACK>>);</span><br><span style="color: hsl(120, 100%, 40%);">+    if</span><br><span style="color: hsl(120, 100%, 40%);">+            CcmOptions#ipa_ccm_options.initiate_nonstandard_ack /= true -></span><br><span style="color: hsl(120, 100%, 40%);">+                     % Only respond to an ack if this instance did</span><br><span style="color: hsl(120, 100%, 40%);">+                 % not initiate to prevent an infinite ack loop.</span><br><span style="color: hsl(120, 100%, 40%);">+                       send(Socket, StreamID, <<?IPAC_MSGT_ID_ACK>>)</span><br><span style="color: hsl(120, 100%, 40%);">+     end;</span><br><span> % Simply respond to ID_RESP with ID_ACK</span><br><span> process_ccm_msg(Socket, StreamID, _, id_resp, _) -></span><br><span>    io:format("Socket ~p Stream ~p: ID_RESP -> ID_ACK~n", [Socket, StreamID]),</span><br><span>@@ -305,7 +310,15 @@</span><br><span>                 {string,sw_version,CcmOptions#ipa_ccm_options.sw_version},</span><br><span>                   {string,unit_name,CcmOptions#ipa_ccm_options.unit_name}</span><br><span>             ]}),</span><br><span style="color: hsl(0, 100%, 40%);">-   send(Socket, StreamID, CcmBin);</span><br><span style="color: hsl(120, 100%, 40%);">+       send(Socket, StreamID, CcmBin),</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if</span><br><span style="color: hsl(120, 100%, 40%);">+            CcmOptions#ipa_ccm_options.initiate_nonstandard_ack -></span><br><span style="color: hsl(120, 100%, 40%);">+                     % Send the ack from the same entity which</span><br><span style="color: hsl(120, 100%, 40%);">+                     % generates the response if configured to</span><br><span style="color: hsl(120, 100%, 40%);">+                     % match behavior of other components.</span><br><span style="color: hsl(120, 100%, 40%);">+                 send(Socket, StreamID, <<?IPAC_MSGT_ID_ACK>>)</span><br><span style="color: hsl(120, 100%, 40%);">+     end;</span><br><span> </span><br><span> % Default message handler for unknown messages</span><br><span> process_ccm_msg(Socket, StreamID, _, MsgType, Opts) -></span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/erlang/osmo_ss7/+/20019">change 20019</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/c/erlang/osmo_ss7/+/20019"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: erlang/osmo_ss7 </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I6ab3c9efb51e806f582ce8f473a13ee73ca1567e </div>
<div style="display:none"> Gerrit-Change-Number: 20019 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: matt9j <matt9j@cs.washington.edu> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>