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>