Change in ...osmo_ss7[master]: ipa_proto: Allow configuring ack initiation behavior

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

matt9j gerrit-no-reply at lists.osmocom.org
Tue Sep 8 09:05:20 UTC 2020


matt9j has uploaded this change for review. ( https://gerrit.osmocom.org/c/erlang/osmo_ss7/+/20019 )


Change subject: ipa_proto: Allow configuring ack initiation behavior
......................................................................

ipa_proto: Allow configuring ack initiation behavior

When the osmo-msc version 1.6.1 connects to the osmo-hlr, it sends an
id response and an immediate ack. This does not match the handshake
spec as I understand it or was implemented here. This commit allows
initiating a nonstandard ack if needed to mimic behavior of particular
components.

Change-Id: I6ab3c9efb51e806f582ce8f473a13ee73ca1567e
---
M include/ipa.hrl
M src/ipa_proto.erl
2 files changed, 19 insertions(+), 6 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/erlang/osmo_ss7 refs/changes/19/20019/1

diff --git a/include/ipa.hrl b/include/ipa.hrl
index 352057f..865dcc8 100644
--- a/include/ipa.hrl
+++ b/include/ipa.hrl
@@ -26,7 +26,7 @@
 			  unit_type,
 			  equipment_version,
 			  sw_version,
-			  unit_name
-			 }).
+			  unit_name,
+			  initiate_nonstandard_ack=false}).
 
 -endif.
diff --git a/src/ipa_proto.erl b/src/ipa_proto.erl
index 18b74bd..7189033 100644
--- a/src/ipa_proto.erl
+++ b/src/ipa_proto.erl
@@ -283,10 +283,15 @@
 process_ccm_msg(Socket, StreamID, _, ping, _) ->
 	io:format("Socket ~p Stream ~p: PING -> PONG~n", [Socket, StreamID]),
 	send(Socket, StreamID, <<?IPAC_MSGT_PONG>>);
-% Simply respond to ID_ACK with ID_ACK
-process_ccm_msg(Socket, StreamID, _, id_ack, _) ->
+% Respond to ID_ACK with ID_ACK if this instance did not initiate
+process_ccm_msg(Socket, StreamID, CcmOptions, id_ack, _) ->
 	io:format("Socket ~p Stream ~p: ID_ACK -> ID_ACK~n", [Socket, StreamID]),
-	send(Socket, StreamID, <<?IPAC_MSGT_ID_ACK>>);
+	if
+		CcmOptions#ipa_ccm_options.initiate_nonstandard_ack /= true ->
+			% Only respond to an ack if this instance did
+			% not initiate to prevent an infinite ack loop.
+			send(Socket, StreamID, <<?IPAC_MSGT_ID_ACK>>)
+	end;
 % Simply respond to ID_RESP with ID_ACK
 process_ccm_msg(Socket, StreamID, _, id_resp, _) ->
 	io:format("Socket ~p Stream ~p: ID_RESP -> ID_ACK~n", [Socket, StreamID]),
@@ -305,7 +310,15 @@
 		  {string,sw_version,CcmOptions#ipa_ccm_options.sw_version},
 		  {string,unit_name,CcmOptions#ipa_ccm_options.unit_name}
 		 ]}),
-	send(Socket, StreamID, CcmBin);
+	send(Socket, StreamID, CcmBin),
+
+	if
+		CcmOptions#ipa_ccm_options.initiate_nonstandard_ack ->
+			% Send the ack from the same entity which
+			% generates the response if configured to
+			% match behavior of other components.
+			send(Socket, StreamID, <<?IPAC_MSGT_ID_ACK>>)
+	end;
 
 % Default message handler for unknown messages
 process_ccm_msg(Socket, StreamID, _, MsgType, Opts) ->

-- 
To view, visit https://gerrit.osmocom.org/c/erlang/osmo_ss7/+/20019
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: erlang/osmo_ss7
Gerrit-Branch: master
Gerrit-Change-Id: I6ab3c9efb51e806f582ce8f473a13ee73ca1567e
Gerrit-Change-Number: 20019
Gerrit-PatchSet: 1
Gerrit-Owner: matt9j <matt9j at cs.washington.edu>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200908/15523c17/attachment.htm>


More information about the gerrit-log mailing list