Change in osmo-ttcn3-hacks[master]: SGsAP_Emulation: Add functions to send MME or VLR reset

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/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Sun Oct 28 09:52:35 UTC 2018


Harald Welte has submitted this change and it was merged. ( https://gerrit.osmocom.org/11487 )

Change subject: SGsAP_Emulation: Add functions to send MME or VLR reset
......................................................................

SGsAP_Emulation: Add functions to send MME or VLR reset

... including encoding/decoding of names between string and binary labels

Change-Id: I981c7c1d34f0db60031b5436739cd924e5a09407
---
A library/DNS_Helpers.ttcn
M library/SGsAP_Emulation.ttcn
2 files changed, 106 insertions(+), 1 deletion(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/library/DNS_Helpers.ttcn b/library/DNS_Helpers.ttcn
new file mode 100644
index 0000000..45c3a09
--- /dev/null
+++ b/library/DNS_Helpers.ttcn
@@ -0,0 +1,63 @@
+module DNS_Helpers {
+
+private function f_strchr(charstring s, char c) return integer {
+	var integer i;
+	for (i := 0; i < lengthof(s); i := i+1) {
+		if (s[i] == c) {
+			return i;
+		}
+	}
+	return -1;
+}
+
+private function f_dns_enc_label(charstring str) return octetstring {
+	var octetstring ret;
+
+	ret[0] := int2oct(lengthof(str), 1);
+	return ret & char2oct(str);
+}
+
+function f_enc_dns_hostname(charstring str) return octetstring {
+	var octetstring ret := ''O;
+	while (lengthof(str) > 0) {
+		var integer dot_idx;
+		var octetstring lbl;
+
+		dot_idx := f_strchr(str, ".");
+		if (dot_idx >= 0) {
+			/* there is another dot */
+			lbl := f_dns_enc_label(substr(str, 0, dot_idx));
+			str := substr(str, dot_idx+1, lengthof(str)-dot_idx-1);
+		} else {
+			/* no more dot */
+			lbl := f_dns_enc_label(str);
+			str := "";
+		}
+		ret := ret & lbl;
+	}
+	return ret;
+}
+
+
+
+
+function f_dec_dns_hostname(octetstring inp) return charstring {
+	var charstring ret := "";
+	while (lengthof(inp) > 0) {
+		var integer label_len;
+		var charstring lbl;
+
+		label_len := oct2int(substr(inp, 0, 1));
+		lbl := oct2char(substr(inp, 1, label_len));
+		inp := substr(inp, 1+label_len, lengthof(inp)-1-label_len);
+
+		ret := ret & lbl;
+		if (lengthof(inp) > 0) {
+			ret := ret & ".";
+		}
+	}
+	return ret;
+}
+
+
+}
diff --git a/library/SGsAP_Emulation.ttcn b/library/SGsAP_Emulation.ttcn
index 0c37840..968bcdd 100644
--- a/library/SGsAP_Emulation.ttcn
+++ b/library/SGsAP_Emulation.ttcn
@@ -31,6 +31,7 @@
 import from SGsAP_Templates all;
 import from Osmocom_Types all;
 import from IPL4asp_Types all;
+import from DNS_Helpers all;
 
 type component SGsAP_ConnHdlr {
 	port SGsAP_Conn_PT SGsAP;
@@ -295,6 +296,7 @@
 		var hexstring imsi;
 		var SGsAP_RecvFrom mrf;
 		var PDU_SGsAP msg;
+		var charstring vlr_name, mme_name;
 
 		alt {
 		/* SGsAP from client */
@@ -329,6 +331,24 @@
 			f_create_expect(imsi, vc_conn);
 			SGsAP_PROC.reply(SGsAPEM_register:{imsi, vc_conn}) to vc_conn;
 			}
+		[] SGsAP_PROC.getcall(SGsAPEM_reset_mme:{?,-}) -> param(mme_name) {
+			var octetstring mme_enc, vlr_enc;
+			mme_enc := f_enc_dns_hostname(mme_name);
+			msg := f_sgsap_xceive(ts_SGsAP_RESET_IND_MME(mme_enc));
+			vlr_enc := msg.sGsAP_RESET_ACK.vLR_Name.name;
+			vlr_name := f_dec_dns_hostname(vlr_enc);
+			SGsAP_PROC.reply(SGsAPEM_reset_mme:{mme_name, vlr_name});
+			}
+		[] SGsAP_PROC.getcall(SGsAPEM_reset_vlr:{?,-}) -> param(vlr_name) {
+			var octetstring mme_enc, vlr_enc;
+			vlr_enc := f_enc_dns_hostname(vlr_name);
+			msg := f_sgsap_xceive(ts_SGsAP_RESET_IND_VLR(vlr_enc));
+			mme_enc := msg.sGsAP_RESET_ACK.mME_Name.name;
+			mme_name := f_dec_dns_hostname(mme_enc);
+			SGsAP_PROC.reply(SGsAPEM_reset_vlr:{vlr_name, mme_name});
+			}
+
+
 		}
 
 	}
@@ -343,8 +363,11 @@
 
 signature SGsAPEM_register(in hexstring imsi, in SGsAP_ConnHdlr hdlr);
 
+signature SGsAPEM_reset_vlr(in charstring vlr_name, out charstring mme_name);
+signature SGsAPEM_reset_mme(in charstring mme_name, out charstring vlr_name);
+
 type port SGsAPEM_PROC_PT procedure {
-	inout SGsAPEM_register;
+	inout SGsAPEM_register, SGsAPEM_reset_vlr, SGsAPEM_reset_mme;
 } with { extension "internal" };
 
 /* Function that can be used as create_cb and will usse the expect table */
@@ -399,6 +422,25 @@
 	}
 }
 
+/* client/conn_hdlr side function to use procedure port to send RESET from emulated MME */
+function f_sgsap_reset_mme(charstring mme_name) runs on SGsAP_ConnHdlr return charstring {
+	var charstring vlr_name;
+	SGsAP_PROC.call(SGsAPEM_reset_mme:{mme_name, -}) {
+		[] SGsAP_PROC.getreply(SGsAPEM_reset_mme:{mme_name,?}) -> param(vlr_name) {
+			return vlr_name;
+			};
+	}
+}
+
+/* client/conn_hdlr side function to use procedure port to send RESET from emulated VLR */
+function f_sgsap_reset_vlr(charstring vlr_name) runs on SGsAP_ConnHdlr return charstring {
+	var charstring mme_name;
+	SGsAP_PROC.call(SGsAPEM_reset_vlr:{vlr_name, -}) {
+		[] SGsAP_PROC.getreply(SGsAPEM_reset_vlr:{vlr_name,?}) -> param(mme_name) {
+			return mme_name;
+			};
+	}
+}
 
 private function f_expect_table_init()
 runs on SGsAP_Emulation_CT {

-- 
To view, visit https://gerrit.osmocom.org/11487
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I981c7c1d34f0db60031b5436739cd924e5a09407
Gerrit-Change-Number: 11487
Gerrit-PatchSet: 3
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder (1000002)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20181028/823af53c/attachment.htm>


More information about the gerrit-log mailing list