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/.
pespin gerrit-no-reply at lists.osmocom.orgpespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/26444 )
Change subject: hnodeb: Add audio SAPI
......................................................................
hnodeb: Add audio SAPI
Change-Id: I20544f67c2450bc3cd4bcb3ee638de1958bf5783
---
M hnodeb/HNB_Tests.ttcn
M library/HNBLLIF_Templates.ttcn
M library/HNBLLIF_Types.ttcn
3 files changed, 255 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/44/26444/1
diff --git a/hnodeb/HNB_Tests.ttcn b/hnodeb/HNB_Tests.ttcn
index 6b95730..07da8c8 100644
--- a/hnodeb/HNB_Tests.ttcn
+++ b/hnodeb/HNB_Tests.ttcn
@@ -63,6 +63,7 @@
const hexstring ranap_auth_req := '00144032000002001040262505120217dc146aeac56cb5ff6d5fb51f47f19220108ca5a6d0c8110000b9e9272498872764003b400100'H;
const hexstring ranap_auth_resp := '001440140000010010400d0c0554ccbdd0302104002f3ae4'H;
const hexstring ranap_paging := '000e401e0000030003400100001740095000010100000000f10040400500b6cf4773'H;
+const hexstring ranap_rab_ass_req := '0000005900000100364052000001003500487824cd80102fa7201a2c0000f44c080a028000514000272028140067400000222814003c40000000503d02000227c03500010a0901a200000000000000000000000000401f4a0000400100'H;
const hexstring iu_release_compl := '20010003000000'H;
type component test_CT extends CTRL_Adapter_CT {
@@ -277,11 +278,55 @@
f_shutdown_helper();
}
+private function f_tc_cs_mo_call(charstring id) runs on HNBGW_ConnHdlr {
+ const integer context_id := 30;
+ const bitstring context_id_bstr := '000000000000000000011110'B; /* encoded context_id */
+ const Establishment_Cause est_cause := normal_call;
+ f_handle_hnbap_hnb_register_req();
+
+ LLSK.receive(f_llsk_rx(tr_HNBLLIF_IUH_CONFIGURE_REQ(g_pars.mcc, g_pars.mnc, g_pars.cell_identity,
+ g_pars.lac, g_pars.rac, g_pars.sac, g_pars.rnc_id)));
+
+ /* Now an UE attempts CM Service Request: */
+ LLSK.send(f_llsk_tx(ts_HNBLLIF_IUH_CONN_ESTABLISH_IND(context_id, 0, enum2int(est_cause), hex2oct(ranap_cm_service_req))));
+ /* The related RUA Connect + RANAP message is received on Iuh: */
+ RUA.receive(tr_RUA_Connect(cs_domain, context_id_bstr, est_cause, hex2oct(ranap_cm_service_req)));
+
+ /* Now HNBGW answers with RUA-DirectTransfer(RANAP-RabASsReq) */
+ RUA.send(ts_RUA_DirectTransfer(cs_domain, context_id_bstr, hex2oct(ranap_rab_ass_req)));
+
+ /* Now on LLSK first the Conn establishment is confirmed and then we receive data */
+ LLSK.receive(f_llsk_rx(tr_HNBLLIF_IUH_CONN_ESTABLISH_CNF(context_id, 0, 0)));
+ LLSK.receive(f_llsk_rx(tr_HNBLLIF_IUH_CONN_DATA_REQ(context_id, 0, hex2oct(ranap_rab_ass_req))));
+
+ /* Now LLSK provides the remote TransportLayerAddress from RabAssReq and asks SUT to provide a local address: */
+ LLSK.send(f_llsk_tx(ts_HNBLLIF_AUDIO_CONN_ESTABLISH_IND(context_id, 8888, HNBLL_IF_ADDR_TYPE_IPV4,
+ f_HNBLLIF_Addr(HNBLL_IF_ADDR_TYPE_IPV4, g_pars.hnbgw_addr))));
+ LLSK.receive(f_llsk_rx(tr_HNBLLIF_AUDIO_CONN_ESTABLISH_CNF(context_id, 0, ?, HNBLL_IF_ADDR_TYPE_IPV4, ?)));
+
+ /* TODO: forward audio data in both directions */
+
+ LLSK.send(f_llsk_tx(ts_HNBLLIF_AUDIO_CONN_RELEASE_IND(context_id)));
+
+ /* UE sends Iu Release Complete to release the conn */
+ LLSK.send(f_llsk_tx(ts_HNBLLIF_IUH_CONN_RELEASE_IND(context_id, 0, 0, 0, hex2oct(iu_release_compl))));
+ RUA.receive(tr_RUA_Disconnect(cs_domain, context_id_bstr, ts_RUA_Cause(normal), hex2oct(iu_release_compl)));
+}
+testcase TC_cs_mo_call() runs on test_CT {
+ var HNBGW_ConnHdlr vc_conn;
+
+ f_init();
+ vc_conn := f_start_handler(refers(f_tc_cs_mo_call));
+ vc_conn.done;
+ f_shutdown_helper();
+}
+
control {
execute( TC_hnb_register_request_accept() );
execute( TC_hnb_register_request_reject() );
execute( TC_mo_conn() );
execute( TC_paging() );
+ execute( TC_cs_mo_call() );
}
}
diff --git a/library/HNBLLIF_Templates.ttcn b/library/HNBLLIF_Templates.ttcn
index f2cb961..a2673c0 100644
--- a/library/HNBLLIF_Templates.ttcn
+++ b/library/HNBLLIF_Templates.ttcn
@@ -244,4 +244,80 @@
}
}
+/**********************
+ * AUDIO SAPI
+ **********************/
+
+template (value) HNBLLIF_Message ts_HNBLLIF_AUDIO_CONN_ESTABLISH_IND(template (value) uint32_t context_id,
+ template (value) uint16_t remote_rtp_port,
+ template (value) HNBLLIF_AddrType remote_rtp_address_type,
+ template (value) HNBLLIF_Addr remote_addr) := {
+ sapi := HNBLL_IF_SAPI_AUDIO,
+ u := {
+ audio := {
+ prim := HNBLL_IF_AUDIO_MSG_CONN_ESTABLISH,
+ u := {
+ conn_establish := {
+ op := HNBLL_IF_OP_INDICATION,
+ u := {
+ ind := {
+ context_id := context_id,
+ remote_rtp_port := remote_rtp_port,
+ reserved := 0,
+ remote_rtp_address_type := remote_rtp_address_type,
+ remote_addr := remote_addr
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+template (present) HNBLLIF_Message tr_HNBLLIF_AUDIO_CONN_ESTABLISH_CNF(template (present) uint32_t context_id := ?,
+ template (present) uint8_t error_code := ?,
+ template (present) uint16_t local_rtp_port:= ?,
+ template (present) HNBLLIF_AddrType local_rtp_address_type := ?,
+ template (present) HNBLLIF_Addr local_addr := ?) := {
+ sapi := HNBLL_IF_SAPI_AUDIO,
+ u := {
+ audio := {
+ prim := HNBLL_IF_AUDIO_MSG_CONN_ESTABLISH,
+ u := {
+ conn_establish := {
+ op := HNBLL_IF_OP_CONFIRM,
+ u := {
+ cnf := {
+ context_id := context_id,
+ local_rtp_port := local_rtp_port,
+ error_code := error_code,
+ local_rtp_address_type := local_rtp_address_type,
+ local_addr := local_addr
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+template (value) HNBLLIF_Message ts_HNBLLIF_AUDIO_CONN_RELEASE_IND(template (value) uint32_t context_id) := {
+ sapi := HNBLL_IF_SAPI_AUDIO,
+ u := {
+ audio := {
+ prim := HNBLL_IF_AUDIO_MSG_CONN_RELEASE,
+ u := {
+ conn_release := {
+ op := HNBLL_IF_OP_INDICATION,
+ u := {
+ ind := {
+ context_id := context_id
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
} with { encode "RAW" variant "BYTEORDER(first)" };
diff --git a/library/HNBLLIF_Types.ttcn b/library/HNBLLIF_Types.ttcn
index 8bc87d0..8b0c08f 100644
--- a/library/HNBLLIF_Types.ttcn
+++ b/library/HNBLLIF_Types.ttcn
@@ -230,15 +230,121 @@
other, OTHERWISE)"
};
+/**********************
+ * AUDIO SAPI
+ **********************/
+type enumerated HNBLLIF_AUDIO_MsgType {
+ HNBLL_IF_AUDIO_MSG_CONN_ESTABLISH ('0000'O),
+ HNBLL_IF_AUDIO_MSG_CONN_RELEASE ('0001'O),
+ HNBLL_IF_AUDIO_MSG_CONN_DATA ('0002'O)
+} with { variant "FIELDLENGTH(16)" };
+
+/* CONN_ESTABLISH */
+type record HNBLLIF_AUDIO_conn_establish_ind {
+ uint32_t context_id,
+ uint16_t remote_rtp_port,
+ uint8_t reserved,
+ HNBLLIF_AddrType remote_rtp_address_type,
+ HNBLLIF_Addr remote_addr
+} with { variant "" };
+
+type record HNBLLIF_AUDIO_conn_establish_cnf {
+ uint32_t context_id,
+ uint16_t local_rtp_port,
+ uint8_t error_code,
+ HNBLLIF_AddrType local_rtp_address_type,
+ HNBLLIF_Addr local_addr
+} with { variant "" };
+
+type union HNBLLIF_AUDIO_PrimOpUnion_conn_establish {
+ HNBLLIF_AUDIO_conn_establish_ind ind,
+ HNBLLIF_AUDIO_conn_establish_cnf cnf,
+ octetstring other
+} with { variant "" };
+type record HNBLLIF_AUDIO_PrimOp_conn_establish {
+ HNBLLIF_Operation op,
+ HNBLLIF_AUDIO_PrimOpUnion_conn_establish u
+} with { variant (u) "CROSSTAG( ind, op = HNBLL_IF_OP_INDICATION;
+ cnf, op = HNBLL_IF_OP_CONFIRM;
+ other, OTHERWISE)"
+};
+
+/* CONN_RELEASE */
+type record HNBLLIF_AUDIO_conn_release_ind {
+ uint32_t context_id
+} with { variant "" };
+
+
+type union HNBLLIF_AUDIO_PrimOpUnion_conn_release {
+ HNBLLIF_AUDIO_conn_release_ind ind,
+ octetstring other
+} with { variant "" };
+type record HNBLLIF_AUDIO_PrimOp_conn_release {
+ HNBLLIF_Operation op,
+ HNBLLIF_AUDIO_PrimOpUnion_conn_release u
+} with { variant (u) "CROSSTAG( ind, op = HNBLL_IF_OP_INDICATION;
+ other, OTHERWISE)"
+};
+
+/* CONN_DATA */
+type record HNBLLIF_AUDIO_conn_data_ind {
+ uint32_t context_id,
+ uint32_t data_len,
+ octetstring data /* RANAP message */
+} with { variant (data_len) "LENGTHTO (data)" };
+
+type record HNBLLIF_AUDIO_conn_data_req {
+ uint32_t context_id,
+ uint32_t data_len,
+ octetstring data /* RANAP message */
+} with { variant (data_len) "LENGTHTO (data)" };
+
+type union HNBLLIF_AUDIO_PrimOpUnion_conn_data {
+ HNBLLIF_AUDIO_conn_data_req req,
+ HNBLLIF_AUDIO_conn_data_ind ind,
+ octetstring other
+} with { variant "" };
+type record HNBLLIF_AUDIO_PrimOp_conn_data {
+ HNBLLIF_Operation op,
+ HNBLLIF_AUDIO_PrimOpUnion_conn_data u
+} with { variant (u) "CROSSTAG( req, op = HNBLL_IF_OP_REQUEST;
+ ind, op = HNBLL_IF_OP_INDICATION;
+ other, OTHERWISE)"
+};
+
+type union HNBLLIF_AUDIO_PrimUnion {
+ HNBLLIF_AUDIO_PrimOp_conn_establish conn_establish,
+ HNBLLIF_AUDIO_PrimOp_conn_release conn_release,
+ HNBLLIF_AUDIO_PrimOp_conn_data conn_data,
+ octetstring other
+} with { variant "" };
+
+type record HNBLLIF_AUDIO_PrimHdr {
+ HNBLLIF_AUDIO_MsgType prim,
+ HNBLLIF_AUDIO_PrimUnion u
+} with { variant (u) "CROSSTAG( conn_establish, prim = HNBLL_IF_AUDIO_MSG_CONN_ESTABLISH;
+ conn_release, prim = HNBLL_IF_AUDIO_MSG_CONN_RELEASE;
+ conn_data, prim = HNBLL_IF_AUDIO_MSG_CONN_DATA;
+ other, OTHERWISE)"
+};
+
/**********************
* General
**********************/
+
+type enumerated HNBLLIF_AddrType {
+ HNBLL_IF_ADDR_TYPE_UNSPEC ('00'O),
+ HNBLL_IF_ADDR_TYPE_IPV4 ('01'O),
+ HNBLL_IF_ADDR_TYPE_IPV6 ('02'O)
+} with { variant "FIELDLENGTH(8)" };
+type octetstring HNBLLIF_Addr length(16);
+
type enumerated HNBLLIF_Sapi {
HNBLL_IF_SAPI_CTL ('00000000'O),
- HNBLL_IF_SAPI_IUH ('00000001'O)//,
+ HNBLL_IF_SAPI_IUH ('00000001'O),
//HNBLL_IF_SAPI_GTP ('00000002'O),
- //HNBLL_IF_SAPI_AUDIO ('00000003'O),
+ HNBLL_IF_SAPI_AUDIO ('00000003'O)
} with { variant "FIELDLENGTH(32)" };
type enumerated HNBLLIF_Operation {
@@ -251,6 +357,7 @@
type union HNBLLIF_SapiUnion {
HNBLLIF_CTL_PrimHdr ctl,
HNBLLIF_IUH_PrimHdr iuh,
+ HNBLLIF_AUDIO_PrimHdr audio,
octetstring other
} with { variant "" };
@@ -259,6 +366,7 @@
HNBLLIF_SapiUnion u
} with { variant (u) "CROSSTAG( ctl, sapi = HNBLL_IF_SAPI_CTL;
iuh, sapi = HNBLL_IF_SAPI_IUH;
+ audio, sapi = HNBLL_IF_SAPI_AUDIO;
other, OTHERWISE)"
};
@@ -267,5 +375,29 @@
external function dec_HNBLLIF_Message(in octetstring stream) return HNBLLIF_Message
with { extension "prototype(convert) decode(RAW)" };
+function f_HNBLLIF_AF2addr_type(AddressFamily address_family)
+return HNBLLIF_AddrType {
+ if (address_family == AF_INET) {
+ return HNBLL_IF_ADDR_TYPE_IPV4;
+ } else if (address_family == AF_INET6) {
+ return HNBLL_IF_ADDR_TYPE_IPV6;
+ } else {
+ return HNBLL_IF_ADDR_TYPE_UNSPEC;
+ }
+}
+
+function f_HNBLLIF_Addr(HNBLLIF_AddrType addr_type, charstring addr_str)
+return HNBLLIF_Addr {
+ var HNBLLIF_Addr addr;
+
+ if (addr_type == HNBLL_IF_ADDR_TYPE_IPV4) {
+ addr := f_inet_addr(addr_str);
+ } else {
+ addr := f_inet6_addr(addr_str);
+ }
+
+ return addr;
+}
+
} with { encode "RAW" variant "BYTEORDER(first)" };
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/26444
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I20544f67c2450bc3cd4bcb3ee638de1958bf5783
Gerrit-Change-Number: 26444
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20211203/cfb435bc/attachment.htm>