From 18bd1239bee04427340a44f57f993ea92c264e41 Mon Sep 17 00:00:00 2001 From: Kenneth Lundin Date: Fri, 19 Feb 2010 14:01:57 +0000 Subject: OTP-8463 Support for EXTENSIBILITY IMPLIED and SET/SEQ OF NamedType is added. --- lib/asn1/test/asn1_SUITE_data/testobj.erl | 1443 +++++++++++++++++++++++++++++ 1 file changed, 1443 insertions(+) create mode 100644 lib/asn1/test/asn1_SUITE_data/testobj.erl (limited to 'lib/asn1/test/asn1_SUITE_data/testobj.erl') diff --git a/lib/asn1/test/asn1_SUITE_data/testobj.erl b/lib/asn1/test/asn1_SUITE_data/testobj.erl new file mode 100644 index 0000000000..be7ceee7d1 --- /dev/null +++ b/lib/asn1/test/asn1_SUITE_data/testobj.erl @@ -0,0 +1,1443 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2001-2010. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% +%% +-module(testobj). + +-include("RANAP.hrl"). + +-compile(export_all). + +-define(ranap, 'RANAP'). + + +%% These are possible Reason-values for sccp_disconnect_req in RANPM +%% +%% 0,0,0,0,0,1,0,0, % Message-type +%% 0,0,0,0,0,0,0,0, % Dest local ref (dummy) - 3 octets +%% 0,0,0,0,0,0,0,0, +%% 0,0,0,0,0,0,0,1, +%% 0,0,0,0,0,0,0,0, % Source local ref (dummy) - 3 octets +%% 0,0,0,0,0,0,0,0, +%% 0,0,0,0,0,0,1,0, + +run() -> + ok = run_com_id(), + ok = run_dir_tsf_2cn(), + ok = run_dir_tsf_2rnc(), + ok = run_init_ue(), + ok = run_iu_rel_cmd(), + ok = run_iu_rel_cmp(), + ok = run_rab_ass_rsp_delete(), + ok = run_rab_ass_rsp_setup(), + ok = run_rab_create(), + ok = run_rab_rel(), + ok = run_reset(), + ok = run_reset_res(), + ok = run_sm_cmd(), + ok = run_sm_cmp(), + ok = run_sm_rej(). + + +ranap_pdu_contents(Enc,Type) -> + {initiatingMessage, #'InitiatingMessage'{ + procedureCode = Type, + criticality = ignore, %{'Criticality', ignore}, %XXX + value = Enc + }}. + +ranap_pdu_contents_outcome(Enc,Type) -> + {outcome, #'Outcome'{ + procedureCode = Type, + criticality = ignore,%XXX + value = Enc + }}. + +ranap_pdu_contents_suc(Enc,Type) -> + {successfulOutcome, #'SuccessfulOutcome'{ + procedureCode = Type, + criticality = ignore,%XXX + value = Enc + }}. + +ranap_pdu_contents_unsuc(Enc,Type) -> + {unsuccessfulOutcome, #'UnsuccessfulOutcome'{ + procedureCode = Type, + criticality = ignore,%XXX + value = Enc + }}. + + + +run_rab_rel() -> + RAS = rab_release_request(), + io:format("~w~n~n", [RAS]), + RanapRAS = ranap_pdu_contents(RAS,0), % 0=Rab Assignment Procedure + {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapRAS), + EncRanapRAS = lists:flatten(Tmp2), + io:format("~w~n~n", [EncRanapRAS]), + {ok,{initiatingMessage, + #'InitiatingMessage'{procedureCode=ProcedureCode, + criticality=Criticality, + value=DecGeneral}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapRAS), + io:format("~w~n~n", [DecGeneral]), + case DecGeneral of + {'RAB-AssignmentRequest',[{_ProtIEField,_Code,_Crit,DecRel}],_ASN1novalue} -> + io:format("~w~n~n", [DecRel]) + end, + case DecRel of + [[{_ProtIEField1,_Code1,_Crit1,DecRelList}]] -> + io:format("~w~n~n", [DecRelList]) + end, + ok. + +run_rab_create() -> + RabID = [0,1,0,1,0,1,0,1], + Teid = [0,13,83,211], + SgsnIP = [0,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0], + RAS = rab_create_request(RabID, Teid, SgsnIP), + io:format("~w~n~n", [RAS]), + RanapRAS = ranap_pdu_contents(RAS,0), % 0=Rab Assignment Procedure + {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapRAS), + EncRanapRAS = lists:flatten(Tmp2), + io:format("~w~n~n", [EncRanapRAS]), + {ok,{initiatingMessage, + #'InitiatingMessage'{procedureCode=ProcedureCode, + criticality=Criticality, + value=DecGeneral}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapRAS), + io:format("~w~n~n", [DecGeneral]), + case DecGeneral of + {'RAB-AssignmentRequest',[{_ProtIEField,_Code,_Crit,DecSetOrMod}],_ASN1novalue} -> + io:format("~w~n~n", [DecSetOrMod]) + end, + case DecSetOrMod of + [[{'ProtocolIE-FieldPair',_Code1,_Crit1,DecSetOrModFirst,_Crit2,DecSetOrModSecond}]] -> + io:format("~w~n~n", [DecSetOrModFirst]), + io:format("~w~n~n", [DecSetOrModSecond]) + end, + ok. + +decode_initiating_ras(ProcedureCode,Crit,Val) -> + case ProcedureCode of + 0 -> % RAB-Assignment + wrapper_decode(?ranap, 'RAB-AssignmentRequest',Val) + end. + + +run_rab_ass_rsp_setup() -> + RAR = rab_assignment_response_setup(), + io:format("~w~n~n", [RAR]), + RanapRAR = ranap_pdu_contents_outcome(RAR,0), % 0=Rab Assignment Procedure + {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapRAR), + EncRanapRAR = lists:flatten(Tmp2), + io:format("~w~n~n", [EncRanapRAR]), + {ok,{outcome, + #'Outcome'{procedureCode=ProcedureCode, + criticality=Criticality, + value=DecGeneral}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapRAR), + io:format("~w~n~n", [DecGeneral]), + case DecGeneral of + {'RAB-AssignmentResponse',[{_ProtIEField,52,_Crit,DecSetOrMod}], _ASN1novalue} -> + io:format("Setup or Modified: ~w~n~n", [DecSetOrMod]) + end, + case DecSetOrMod of + [[{_ProtIEField1,51,_Crit1,DecSetOrModFirst}]] -> + io:format("Setup or Modified: ~w~n~n", [DecSetOrModFirst]) + end, + ok. + +run_rab_ass_rsp_delete() -> + RAR = rab_assignment_response_delete(), + io:format("~w~n~n", [RAR]), + RanapRAR = ranap_pdu_contents_outcome(RAR,0), % 0=Rab Assignment Procedure + {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapRAR), + EncRanapRAR = lists:flatten(Tmp2), + io:format("~w~n~n", [EncRanapRAR]), + {ok,{outcome, + #'Outcome'{procedureCode=ProcedureCode, + criticality=Criticality, + value=DecGeneral}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapRAR), + io:format("~w~n~n", [DecGeneral]), + case DecGeneral of + {'RAB-AssignmentResponse',[{_ProtIEField2,43,_Crit2,DecRelsd}], _ASN1novalue} -> + io:format("Released: ~w~n~n", [DecRelsd]) + end, + case DecRelsd of + [[{_ProtIEField3,_Code3,_Crit3,DecRelsdItem}]] -> + io:format("Released: ~w~n~n", [DecRelsdItem]) + end, + ok. + +decode_initiating_rar(ProcedureCode,Crit,Val) -> + case ProcedureCode of + 0 -> % RAB-Assignment + wrapper_decode(?ranap, 'RAB-AssignmentResponse',Val) + end. + + + +run_init_ue() -> + INI = initial_ue(), + io:format("~w~n~n", [INI]), + RanapINI = ranap_pdu_contents(INI, 19), % 19 = InitialUE-Message + {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapINI), + EncRanapINI = lists:flatten(Tmp2), + io:format("~w~n~n", [EncRanapINI]), + + {ok,{initiatingMessage, + #'InitiatingMessage'{procedureCode=ProcedureCode, + criticality=Criticality, + value=DecGeneral}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapINI), + io:format("~w~n~n", [DecGeneral]), + case DecGeneral of + {'InitialUE-Message',[{_ProtIEField,Code,_Crit,DecCN}, + {_ProtIEField1,Code1,_Crit1, + {_LAI,LaiPlmnid,LaiLac,_ASN1novalue}}, + {_ProtIEField2,Code2,_Crit2,DecRAC}, + {_ProtIEField3,Code3,_Crit3, + {_SAI,SaiPlmnid,SaiLac,SaiSac,_ASN1novalue}}, + {_ProtIEField4,Code4,_Crit4,DecNASPDU}, + {_ProtIEField5,Code5,_Crit5,DecIUSCID}, + {_ProtIEField6,Code6,_Crit6, + {_GRI,GlPlmnid,GlRNCID}}],_ASN1novalue} -> + io:format("CN Dom Ind: ~w~n", [DecCN]), + io:format("Code: ~w~n~n", [Code]), + io:format("LaiPlmnid: ~w~n", [LaiPlmnid]), + io:format("LaiLac: ~w~n", [LaiLac]), + io:format("Code: ~w~n~n", [Code1]), + io:format("RAC: ~w~n", [DecRAC]), + io:format("Code: ~w~n~n", [Code2]), + io:format("SaiPlmnid: ~w~n", [SaiPlmnid]), + io:format("SaiLac: ~w~n", [SaiLac]), + io:format("SaiSac: ~w~n", [SaiSac]), + io:format("Code: ~w~n~n", [Code3]), + io:format("NAS-PDU: ~w~n", [DecNASPDU]), + io:format("Code: ~w~n~n", [Code4]), + io:format("Iu Sign Con Id: ~w~n", [DecIUSCID]), + io:format("Code: ~w~n~n", [Code5]), + io:format("GlPlmnid: ~w~n", [GlPlmnid]), + io:format("GlRNCID: ~w~n", [GlRNCID]), + io:format("Code: ~w~n~n", [Code6]) + end, + ok. + +% NasPdu = extract_ie({init_ue},'InitUE-MessageIEsNAS-PDU',ListsinLists), +% io:format("Tebax~n~w~n~n", [NasPdu]), +% ok. + +decode_initiating_ini(ProcedureCode,Crit,Val) -> + case ProcedureCode of + 19 -> % InitialUE-Message + wrapper_decode(?ranap, 'InitialUE-Message',Val) + end. + + +run_dir_tsf_2cn() -> + DIR = direct_transfer_cn(), + io:format("~w~n~n", [DIR]), + RanapDIR = ranap_pdu_contents(DIR, 20), % 20 = DirectTransfer + {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapDIR), + EncRanapDIR = lists:flatten(Tmp2), + io:format("~w~n~n", [EncRanapDIR]), + {ok,{initiatingMessage, + #'InitiatingMessage'{procedureCode=ProcedureCode, + criticality=Criticality, + value=DecGeneral}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapDIR), + io:format("~w~n~n", [DecGeneral]), + case DecGeneral of + {'DirectTransfer', + [{_ProtIEField1,_Code1,_Crit1,DecNASPDU}, + {_ProtIEField2,_Code2,_Crit2,DecLAI}, + {_ProtIEField3,_Code3,_Crit3,DecRAC}], + _ASN1novalue} -> + io:format("NAS-PDU: ~w~n~n", [DecNASPDU]), + io:format("LAI: ~w~n~n", [DecLAI]), + io:format("RAC: ~w~n~n", [DecRAC]) + end, + ok. + +run_dir_tsf_2rnc() -> + DIR = direct_transfer_rnc(), + io:format("~w~n~n", [DIR]), + RanapDIR = ranap_pdu_contents(DIR, 20), % 20 = DirectTransfer + {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapDIR), + EncRanapDIR = lists:flatten(Tmp2), + io:format("~w~n~n", [EncRanapDIR]), + {ok,{initiatingMessage, + #'InitiatingMessage'{procedureCode=ProcedureCode, + criticality=Criticality, + value=DecGeneral}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapDIR), + io:format("~w~n~n", [DecGeneral]), + case DecGeneral of + {'DirectTransfer', + [{_ProtIEField1,_Code1,_Crit1,DecNASPDU}, + {_ProtIEField2,_Code2,_Crit2,DecSAPI}], + _ASN1novalue} -> + io:format("NAS-PDU: ~w~n~n", [DecNASPDU]), + io:format("SAPI: m~w~n~n", [DecSAPI]) + end, + ok. + +decode_initiating_dir(ProcedureCode,Crit,Val) -> + io:format("ProcedureCode: ~w~n~n", [ProcedureCode]), + case ProcedureCode of + 20 -> % DirectTransfer + wrapper_decode(?ranap, 'DirectTransfer',Val) + end. + +% List = tuple2list(Dec), +% io:format("~w~n~n", [List]), +% NasPdu = extract_ie({dir_trans},'DirTransIEs-NAS-PDU',List), +% io:format("~w~n~n", [NasPdu]), +% ok. + + +run_iu_rel_cmd() -> + IUR = iu_release_command(), + io:format("~w~n~n", [IUR]), + RanapIUR = ranap_pdu_contents(IUR, 1), % 1 = Iu-Release + {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapIUR), + EncRanapIUR = lists:flatten(Tmp2), + io:format("~w~n~n", [EncRanapIUR]), + {ok,{initiatingMessage, + #'InitiatingMessage'{procedureCode=ProcedureCode, + criticality=Criticality, + value=DecGeneral}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapIUR), + io:format("General: ~w~n~n", [DecGeneral]), + case DecGeneral of + {'Iu-ReleaseCommand',[{_ProtIEField,_Code,_Crit,DecCause}],_ASN1novalue} -> + io:format("Cause: ~w~n~n", [DecCause]) + end. + +run_iu_rel_cmp() -> + IUP = iu_release_complete(), + io:format("~w~n~n", [IUP]), + RanapIUP = ranap_pdu_contents_suc(IUP, 1), % 1 = Iu-Release + {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapIUP), + EncRanapIUP = lists:flatten(Tmp2), + io:format("~w~n~n", [EncRanapIUP]), + {ok,{successfulOutcome, + #'SuccessfulOutcome'{procedureCode=ProcedureCode, + criticality=Criticality, + value=DecGeneral}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapIUP), + io:format("~w~n~n", [DecGeneral]). + +% run_iu_rel_req() -> +% IUP = iu_release_request(), +% io:format("~w~n~n", [IUP]), +% {ok, Tmp} = wrapper_encode(?ranap, 'Iu-ReleaseRequest', IUP), +% EncIUP = lists:flatten(Tmp), +% RanapIUP = ranap_pdu_contents(EncIUP, 1), % 1 = Iu-Release +% {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapIUP), +% EncRanapIUP = lists:flatten(Tmp2), +% io:format("~w~n~n", [EncRanapIUP]), +% case wrapper_decode(?ranap, 'RANAP-PDU', EncRanapIUP) of +% {ok,{initiatingMessage, +% #'InitiatingMessage'{procedureCode=ProcedureCode, +% criticality=Criticality, +% value=Value}}} -> +% DecGeneral = decode_initiating_iu(ProcedureCode,Criticality,Value) +% end, +% io:format("~w~n~n", [DecGeneral]). + +decode_initiating_iu(ProcedureCode,Crit,Val) -> + case ProcedureCode of + 1 -> % Iu-Release + wrapper_decode(?ranap, 'Iu-ReleaseComplete',Val) + end. + + + + + +run_com_id() -> + COM = common_id(), + io:format("~w~n~n", [COM]), + RanapCOM = ranap_pdu_contents(COM, 15), % 15 = CommonID + {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapCOM), + EncRanapCOM = lists:flatten(Tmp2), + io:format("~w~n~n", [EncRanapCOM]), + {ok,{initiatingMessage, + #'InitiatingMessage'{procedureCode=ProcedureCode, + criticality=Criticality, + value=DecGeneral}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapCOM), + io:format("DecGeneral: ~w~n~n", [DecGeneral]), + case DecGeneral of + {'CommonID',[{_ProtIEField,23,_Crit,DecCause}],_ASN1novalue} -> + io:format("Cause: ~w~n~n", [DecCause]); + Error -> + io:format("Error: ~w~n~n", [Error]) + end. + + +decode_common_id(ProcedureCode,Crit,Val) -> + case ProcedureCode of + 15 -> % Common ID + wrapper_decode(?ranap, 'CommonID',Val); + Error -> + io:format("Error: ~w~n~n", [Error]) + end. + + + + +run_sm_cmd() -> + DIR = security_mode_cmd(), + io:format("~w~n~n", [DIR]), + RanapDIR = ranap_pdu_contents(DIR, 6), % 6 = Sec Mode + io:format("~w~n~n", [RanapDIR]), + {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapDIR), + EncRanapDIR = lists:flatten(Tmp2), + io:format("~w~n~n", [EncRanapDIR]), + {ok,{initiatingMessage, + #'InitiatingMessage'{procedureCode=ProcedureCode, + criticality=Criticality, + value=DecGeneral}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapDIR), + io:format("~w~n~n", [DecGeneral]), + case DecGeneral of + {'SecurityModeCommand', + [{_ProtIEField1,12,_Crit1,DecIPI}, + {_ProtIEField2,11,_Crit2,DecEI}, + {_ProtIEField3,75,_Crit3,DecKS}], + _ASN1novalue} -> + io:format("Integrity Protection Algoritm: ~w~n~n", [DecIPI]), + io:format("Encryption Information: ~w~n~n", [DecEI]), + io:format("Key Status: ~w~n~n", [DecKS]) + end, + ok. + +run_sm_cmp() -> + DIR = security_mode_cmp(), + io:format("~w~n~n", [DIR]), + RanapDIR = ranap_pdu_contents_suc(DIR, 6), % 6 = Sec Mode + io:format("~w~n~n", [RanapDIR]), + {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapDIR), + EncRanapDIR = lists:flatten(Tmp2), + io:format("~w~n~n", [EncRanapDIR]), + {ok,{successfulOutcome, + #'SuccessfulOutcome'{procedureCode=ProcedureCode, + criticality=Criticality, + value=DecGeneral}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapDIR), + io:format("~w~n~n", [DecGeneral]), + case DecGeneral of + {'SecurityModeComplete', + [{_ProtIEField1,6,_Crit1,DecIPA}, + {_ProtIEField2,5,_Crit2,DecEI}], + _ASN1novalue} -> + io:format("Integrity Protection Algoritm: ~w~n~n", [DecIPA]), + io:format("Encryption Information: ~w~n~n", [DecEI]) + end, + ok. + +run_sm_rej() -> + DIR = security_mode_rej(), + io:format("~w~n~n", [DIR]), + RanapDIR = ranap_pdu_contents_unsuc(DIR, 6), % 6 = Sec Mode + io:format("~w~n~n", [RanapDIR]), + {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapDIR), + EncRanapDIR = lists:flatten(Tmp2), + io:format("~w~n~n", [EncRanapDIR]), + {ok,{unsuccessfulOutcome, + #'UnsuccessfulOutcome'{procedureCode=ProcedureCode, + criticality=Criticality, + value=DecGeneral}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapDIR), + io:format("~w~n~n", [DecGeneral]), +% case DecGeneral of +% {ok,{'SecurityModeReject', +% [{_ProtIEField1,6,_Crit1,Value1}, +% {_ProtIEField2,5,_Crit2,Value2}], +% _ASN1novalue}} -> +% io:format("Value1: ~w~n~n", [Value1]), +% io:format("Value2: ~w~n~n", [Value2]), +% {ok,DecIPA} = wrapper_decode(?ranap, 'IntegrityProtectionAlgorithm', Value1), +% {ok,DecEI} = wrapper_decode(?ranap, 'EncryptionAlgorithm', Value2), +% io:format("Integrity Protection Algoritm: ~w~n~n", [DecIPA]), +% io:format("Encryption Information: ~w~n~n", [DecEI]) +% end, + ok. + +decode_initiating_sm(ProcedureCode,Crit,Val) -> + io:format("ProcedureCode: ~w~n~n", [ProcedureCode]), + case ProcedureCode of + 6 -> % Sec Mode + wrapper_decode(?ranap, 'SecurityModeCommand',Val) + end. + +decode_suc_sm(ProcedureCode,Criticality,Value) -> + io:format("ProcedureCode: ~w~n~n", [ProcedureCode]), + case ProcedureCode of + 6 -> % Sec Mode + wrapper_decode(?ranap, 'SecurityModeComplete',Value) + end. + +decode_unsuc_sm(ProcedureCode,Criticality,Value) -> + io:format("ProcedureCode: ~w~n~n", [ProcedureCode]), + case ProcedureCode of + 6 -> % Sec Mode + wrapper_decode(?ranap, 'SecurityModeReject',Value) + end. + + + + + + + +run_reset() -> + IUP = reset(), + io:format("Reset: ~w~n~n", [IUP]), + RanapIUP = ranap_pdu_contents(IUP, 9), % 9 = Reset + {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapIUP), + EncRanapIUP = lists:flatten(Tmp2), + io:format("Coded Reset: ~w~n~n", [EncRanapIUP]), + {ok,{initiatingMessage, + #'InitiatingMessage'{procedureCode=ProcedureCode, + criticality=Criticality, + value=DecGeneral}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapIUP), + io:format("Decoded Reset: ~w~n~n", [DecGeneral]), + + IUP1 = reset_ack(), + io:format("Reset Ack:~w~n~n", [IUP1]), + RanapIUP1 = ranap_pdu_contents_suc(IUP1, 9), % 9 = Reset + {ok, Tmp21} = wrapper_encode(?ranap, 'RANAP-PDU', RanapIUP1), + EncRanapIUP1 = lists:flatten(Tmp21), + io:format("Coded Reset Ack: ~w~n~n", [EncRanapIUP1]), + {ok,{successfulOutcome, + #'SuccessfulOutcome'{procedureCode=ProcedureCode1, + criticality=Criticality1, + value=DecGeneral1}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapIUP1), + io:format("Decoded Reset Ack: ~w~n~n", [DecGeneral1]). + +% decode_init_reset(ProcedureCode,Crit,Val) -> +% io:format("ProcedureCode: ~w~n~n", [ProcedureCode]), +% case ProcedureCode of +% 9 -> % reset +% wrapper_decode(?ranap, 'Reset',Val) +% end. + +% decode_init_reset_ack(ProcedureCode,Crit,Val) -> +% io:format("ProcedureCode: ~w~n~n", [ProcedureCode]), +% case ProcedureCode of +% 9 -> % reset +% wrapper_decode(?ranap, 'ResetAcknowledge',Val) +% end. + + + + + + + + + +run_reset_res() -> + IUP = reset_res([12,13,14,15,16,17,18,19,20]), + io:format("Reset Rsource: ~w~n~n", [IUP]), + RanapIUP = ranap_pdu_contents(IUP, 27), % 27 = Reset Res + {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapIUP), + EncRanapIUP = lists:flatten(Tmp2), + io:format("Coded Reset Resource: ~w~n~n", [EncRanapIUP]), + {ok,{initiatingMessage, + #'InitiatingMessage'{procedureCode=ProcedureCode, + criticality=Criticality, + value=DecGeneral}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapIUP), + io:format("Decoded Reset Resource: ~w~n~n", [DecGeneral]), +% case DecGeneral of +% {ok,{'ResetResource', +% [{'ProtocolIE-Field',3,ignore,Value1}, +% {'ProtocolIE-Field',4,ignore,Value2}, +% {'ProtocolIE-Field',77,ignore,Value3}, +% {'ProtocolIE-Field',86,ignore,Value4}], +% asn1_NOVALUE}} -> +% io:format("Value1: ~w~n~n", [Value1]), +% io:format("Value2: ~w~n~n", [Value2]), +% io:format("Value3: ~w~n~n", [Value3]), +% io:format("Value4: ~w~n~n", [Value4]), +% {ok,DecIPA} = wrapper_decode(?ranap, 'CN-DomainIndicator', Value1), +% {ok,{_Radio,DecEI}} = wrapper_decode(?ranap, 'Cause', Value2), +% {ok,DecRR} = wrapper_decode(?ranap, 'ResetResourceList', Value3), +% DecRRI = case DecRR of +% [[{'ProtocolIE-Field',78,ignore,Value5}]] -> +% {ok,{_apa,DecRI,_asn1novalue}} = +% wrapper_decode(?ranap, 'ResetResourceItem', Value5), +% DecRI +% end, +% {ok,{_Gl_id,PLMN_ID,RNC_ID}} = wrapper_decode(?ranap, 'GlobalRNC-ID', Value4), +% io:format("CN-DomainIndicator: ~w~n~n", [DecIPA]), +% io:format("Cause: ~w~n~n", [DecEI]), +% io:format("ResetResourceList: ~w~n~n", [DecRR]), +% io:format(" ResetResourceItem: ~w~n~n", [DecRRI]), +% io:format("GlobalRNC-ID: PLMN_ID: ~w, RNC_ID: ~w~n~n", [PLMN_ID,RNC_ID]) +% end, + + RSA = reset_res_ack([12,13,14,15,16,17,18,19,20]), + io:format("~n~nReset Resource Ack:~w~n~n", [RSA]), + RanapRSA = ranap_pdu_contents_suc(RSA, 27), % 27 = Reset Res + {ok, Tmp12} = wrapper_encode(?ranap, 'RANAP-PDU', RanapRSA), + EncRanapRSA = lists:flatten(Tmp12), + io:format("Coded Reset Resource Ack: ~w~n~n", [EncRanapRSA]), + {ok,{successfulOutcome, + #'SuccessfulOutcome'{procedureCode=ProcedureCode1, + criticality=Criticality1, + value=DecGeneral1}}} = + wrapper_decode(?ranap, 'RANAP-PDU', EncRanapRSA), + io:format("Decoded Reset Resource Ack: ~w~n~n", [DecGeneral1]). +% case DecGeneral1 of +% {ok,{'ResetResourceAcknowledge', +% [{'ProtocolIE-Field',3,ignore,Value12}, +% {'ProtocolIE-Field',77,ignore,Value32}], +% asn1_NOVALUE}} -> +% io:format("Value1: ~w~n~n", [Value12]), +% io:format("Value3: ~w~n~n", [Value32]), +% {ok,DecIPA2} = wrapper_decode(?ranap, 'CN-DomainIndicator', Value12), +% {ok,DecRR2} = wrapper_decode(?ranap, 'ResetResourceList', Value32), +% DecRRI2 = case DecRR2 of +% [[{'ProtocolIE-Field',78,ignore,Value52}]] -> +% {ok,{_apa2,DecRI2,_asn1novalue2}} = +% wrapper_decode(?ranap, 'ResetResourceItem', Value52), +% DecRI2 +% end, +% io:format("CN-DomainIndicator: ~w~n~n", [DecIPA2]), +% io:format("ResetResourceList: ~w~n~n", [DecRR2]), +% io:format(" ResetResourceItem: ~w~n~n", [DecRRI2]) +% end. + + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% Kod för att sätta ihop RANAP-meddelanden +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +rab_release_request() -> + #'RAB-AssignmentRequest'{ + protocolIEs = rab_assign_request_release_ies() + }. + +rab_assign_request_release_ies() -> + [rab_assign_release_rab_release_list()]. + +rab_assign_release_rab_release_list() -> + #'ProtocolIE-Field'{ + id = 41, % 41 = id-RAB-ReleaseList + criticality = ignore,%XXX + value = rab_release_list() + }. + +rab_release_list() -> + [release_lists()]. + +release_lists() -> + [rab_release_item_ies()]. + +rab_release_item_ies() -> + #'ProtocolIE-Field'{ + id = 40, % 40 = id-RAB-ReleaseItem + criticality = ignore,%XXX + value = rab_release_item()}. + +rab_release_item() -> + #'RAB-ReleaseItem'{'rAB-ID' = rab_id(), + cause = cause_nas()}. + +cause_nas() -> + {nAS, 'normal-release'}. + + + + + + +rab_create_request(Rabid, Teid, SgsnIP) -> + #'RAB-AssignmentRequest'{ + protocolIEs = + rab_assign_create_request_ies(Rabid, Teid, SgsnIP) + }. + +rab_assign_create_request_ies(Rabid, Teid, SgsnIP) -> + [rab_assign_setup_or_modify_list(Rabid, Teid, SgsnIP)]. + +rab_assign_setup_or_modify_list(Rabid, Teid, SgsnIP) -> + #'ProtocolIE-Field'{ + id = 54, %id-RAB-SetupOrModifyList + criticality = ignore,%XXX + value = rab_setup_or_modify_list(Rabid, Teid, SgsnIP) + }. + +rab_setup_or_modify_list(Rabid, Teid, SgsnIP) -> + [setup_or_modify_lists(Rabid, Teid, SgsnIP)]. + +setup_or_modify_lists(Rabid, Teid, SgsnIP) -> + [rab_setup_or_modify_item_ies(Rabid, Teid, SgsnIP)]. + +rab_setup_or_modify_item_ies(Rabid, Teid, SgsnIP) -> + #'ProtocolIE-FieldPair'{ + id = 53, + firstCriticality = reject, %{'Criticality',reject}, + firstValue = rab_setup_or_modify_item_first(Rabid, Teid, SgsnIP), + secondCriticality = ignore, %{'Criticality', ignore} + secondValue = rab_setup_or_modify_item_second() + }. + +rab_setup_or_modify_item_first(Rabid, Teid, SgsnIP) -> + #'RAB-SetupOrModifyItemFirst'{ + 'rAB-ID' = Rabid, %ras_rab_id(Rabid), + 'rAB-Parameters' = rab_parameters(), + userPlaneInformation = user_plane_information(), + transportLayerAddress = SgsnIP, + iuTransportAssociation = ras_iu_transport_association(Teid) + }. + +ras_iu_transport_association(Teid) -> + {'gTP-TEI', Teid}. + +rab_id() -> + [0,1,0,1,0,1,0,1]. + +rab_parameters() -> + #'RAB-Parameters'{ + trafficClass = background, + 'rAB-AsymmetryIndicator' = 'symmetric-bidirectional', + maxBitrate = [200000], + deliveryOrder = 'delivery-order-not-requested', + 'maxSDU-Size' = 11, + 'sDU-Parameters' = sdu_parameters(), + trafficHandlingPriority = 14 %{'TrafficHandlingPriority', 14} %14=lowest + }. + +user_plane_information() -> + #'UserPlaneInformation'{ + userPlaneMode = 'support-mode-for-predefined-SDU-sizes', + 'uP-ModeVersions' = 2#1010101010101010 + }. + +transport_layer_address() -> + [1,1,0,0,1,1,0,0,1,1,1,1,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1]. +% 1 2 3 4 + +iu_transport_association() -> + {'gTP-TEI', [31,32,33,34]}. + +sdu_parameters() -> + [#'SDU-Parameters_SEQOF'{ + 'sDU-ErrorRatio' = sdu_error_ratio(), + residualBitErrorRatio = residual_bit_error_ratio(), + deliveryOfErroneousSDU = no + }]. + +sdu_error_ratio() -> + #'SDU-ErrorRatio'{ + mantissa = 9, + exponent = 4 + }. + +residual_bit_error_ratio() -> + #'ResidualBitErrorRatio'{ + mantissa = 9, + exponent = 5 + }. + +%allocationOrRetentionPriority() -> +% #'AllocationOrRetentionPriority'{ +% priorityLevel = lowest, +% 'pre-emptionCapability' = {'Pre-emptionCapability','can-trigger-pre-emption'}, +% 'pre-emptionVulnerability' = {'Pre-emptionVulnerability','not-vulnerable-to-pre-emption'}, +% queuingAllowed = {'QueuingAllowed','queueing-allowed'} +% }. + +rab_setup_or_modify_item_second() -> % returns OpenType value + #'RAB-SetupOrModifyItemSecond'{ + 'pDP-TypeInformation' = ['ipv4'], + dataVolumeReportingIndication = 'do-not-report', + 'dl-GTP-PDU-SequenceNumber' = 1, + 'ul-GTP-PDU-SequenceNumber' = 2, + 'dl-N-PDU-SequenceNumber' = 0, + 'ul-N-PDU-SequenceNumber' = 0 + }. + + + + +rab_assignment_response_setup() -> + #'RAB-AssignmentResponse'{ + protocolIEs = rab_assignement_response_ies_setup() + }. + +rab_assignement_response_ies_setup() -> + [rab_ass_rsp_setup_or_modified_list()]. + +rab_ass_rsp_setup_or_modified_list() -> + #'ProtocolIE-Field'{ + id = 52, % 52=RAB-AssignRABSetupOrModifiedList + criticality = ignore,%XXX + value = rab_setup_or_modified_list() + }. + +rab_setup_or_modified_list() -> + [rab_setup_or_modified_item_list()]. + +rab_setup_or_modified_item_list() -> + [rab_setup_or_modified_item_ies()]. + +rab_setup_or_modified_item_ies() -> + #'ProtocolIE-Field'{ + id = 51, % 51 = RAB-SetupOrModifiedItemIEs + criticality = reject, %{'Criticality', reject}, + value = rab_setup_or_modified_item() + }. + +rab_setup_or_modified_item() -> + #'RAB-SetupOrModifiedItem'{ + 'rAB-ID' = rab_id(), + transportLayerAddress = transport_layer_address(), + iuTransportAssociation = iu_transport_association() + }. + + + + + + +rab_assignment_response_delete() -> + #'RAB-AssignmentResponse'{ + protocolIEs = rab_assignement_response_ies_delete() + }. + +rab_assignement_response_ies_delete() -> + [rab_ass_rsp_rab_release_list()]. + +rab_ass_rsp_rab_release_list() -> + #'ProtocolIE-Field'{ + id = 43, % 41 = RAB-AssignRABReleasedList + criticality = ignore,%XXX + value = rab_released_list() + }. + +rab_released_list() -> + [released_lists()]. + +released_lists() -> + [rab_released_item_ies()]. % 'ReleasedLists' + +rab_released_item_ies() -> + #'ProtocolIE-Field'{ + id = 42, % 42 = RAB-ReleaseItemIEs + criticality = ignore,%XXX + value = rab_released_item() + }. + +rab_released_item() -> + #'RAB-ReleasedItem'{ + 'rAB-ID' = rab_id() + }. + + + +initial_ue() -> + #'InitialUE-Message'{ + protocolIEs = initial_ue_ies() + }. + +initial_ue_ies() -> + [cn_domain_ind(), + init_lai(), + init_rac(), + init_sai(), + init_nas_pdu(), + init_iu_sign_con_id(), + init_global_rnc_id_initial_ue()]. + + +cn_domain_indicator() -> + {'CN-DomainIndicator', 'ps-domain'}. + +init_lai() -> + #'ProtocolIE-Field'{ + id = 15, % 15 = LAI + criticality = ignore,%XXX + value = lai() + }. + +lai() -> + #'LAI'{'pLMN-ID' = [25,26,27], + lAC = [25,26]}. + +init_rac() -> + #'ProtocolIE-Field'{ + id = 55, % 55 = RAC + criticality = ignore,%XXX + value = rac() + }. + +rac() -> + [25]. + +init_sai() -> + #'ProtocolIE-Field'{ + id = 58, % 58 = SAI + criticality = ignore,%XXX + value = sai() + }. + +sai() -> + #'SAI'{'pLMN-ID' = [28,29,30], %KOLLA!!!! + lAC = [30,31], + sAC = [32,33]}. + +init_nas_pdu() -> + #'ProtocolIE-Field'{ + id = 16, % 16 = NAS-PDU + criticality = ignore,%XXX + value = pdu_ar() + }. + +pdu_ac()-> + [16#08, + 16#03]. + +pdu_ar() -> + [16#08, % Skip indicator | Protocol discriminator + 16#01, % Attach Request + 16#01,16#b7, % MsNetworkCapability + 16#21, % Cksn | AttachType + 16#55,16#06, % DrxParameter + 16#05,16#61,16#86,16#14,16#09,16#f7, % MsId + 16#21,16#63,16#54,16#ac,16#dc,16#d5, % OldRai + 16#0a,16#f0,16#f1,16#f2,16#f3,16#f4, % MsRaCap + 16#f5,16#f6,16#f7,16#f8,16#f9 % MsRaCap continues + %%16#19,16#ab,16#cd,16#ef, % P-TMSI signature + %%16#17,16#5b, % Requested READY timer + %%16#91 % TMSI status + ]. + +pdu_pdp() -> + [2#01001010, % Transaction_id | Protocol_disc + 2#01000001, % Message_type + 2#00001001, % Nsapi + 1, % Llc_sapi (dummie_value) + 1,1,1,1, % QoS dummie_value=1 (19 octets) + 1,1,1,1,1, + 1,1,1,1,1, + 1,1,1,1,1, + 7, % PDP_Address (Ltot=7), + 2#00000001, % ietf/etsi organisation + 2#00100001, % IPv4 + 198, % IP address MSD + 124, + 56, + 124, % IP address LSD + 1, % APN optional (octet1=IEI) + 25, % APN total length + 4, % length lable1 + 116,101,115,116, % lable1 = test + 4, % length lable2 + 116,101,115,116, % lable2 = test + 4, % lenght lable3 + 116,101,115,116, % lable3 = test + 4, % length lable3 + 116,101,115,116, % lable4 = test + 4, % length label5 + 103,112,114,115 + ]. + +pdu_auth_rsp() -> + [8,16#13,0,1,2,3,16#21,2,0,1]. + +pdu_auth_fail() -> + [8,16#1C,1,16#22,2,0,1]. + +init_iu_sign_con_id() -> + #'ProtocolIE-Field'{ + id = 79, % 79 = id-IuSigConId + criticality = ignore,%XXX + value = iu_sign_con_id() + }. + +iu_sign_con_id() -> + 53245. +% [1,0,1,0,1,0,1,0, +% 1,0,1,0,1,0,1,0, +% 1,0,1,0,1,0,1,1] + +init_global_rnc_id_initial_ue() -> + #'ProtocolIE-Field'{ + id = 86, % 86 = id-GlobalRNC-ID + criticality = ignore,%XXX + value = global_rnc_id() + }. + +global_rnc_id() -> + #'GlobalRNC-ID'{'pLMN-ID' = [10,11,12], 'rNC-ID' = 2048}. + +direct_transfer_cn() -> + #'DirectTransfer'{ + protocolIEs = direct_transfer_cn_ies() + }. + +direct_transfer_cn_ies() -> + [dir_cn_nas_pdu(), + dir_lai(), + dir_rac()]. + +dir_cn_nas_pdu() -> + #'ProtocolIE-Field'{ + id = 16, % 16 = id-NAS-PDU + criticality = ignore,%XXX + value = pdu_auth_fail() + }. + +dir_lai() -> + #'ProtocolIE-Field'{ + id = 15, % 15 = id-LAI + criticality = ignore,%XXX + value = lai() + }. + +dir_rac() -> + #'ProtocolIE-Field'{ + id = 55, % 55 = id-RAC + criticality = ignore,%XXX + value = rac() + }. + + + + + + +direct_transfer_rnc() -> + #'DirectTransfer'{ + protocolIEs = direct_transfer_rnc_ies() + }. + +direct_transfer_rnc_ies() -> + [dir_rnc_nas_pdu(), + dir_sapi()]. + +dir_rnc_nas_pdu() -> + #'ProtocolIE-Field'{ + id = 16, % 16 = id-NAS-PDU + criticality = ignore,%XXX + value = pdu_auth_rsp() + }. + +dir_sapi() -> + #'ProtocolIE-Field'{ + id = 59, % 59 = id-SAPI + criticality = ignore,%XXX + value = sapi() + }. + +sapi() -> + 'normal-priority'. + + + + + +iu_release_command() -> + #'Iu-ReleaseCommand'{ + protocolIEs = iu_rel_command_ies() + }. + +iu_rel_command_ies() -> + [iu_relcomcause_nas()]. + +iu_relcomcause_nas() -> + #'ProtocolIE-Field'{ + id = 4, % 4 = Id-Cause + criticality = ignore,%XXX + value = cause() + }. + +cause() -> + cause_nas(). + +% cause() -> +% {ok,Bytes} = +% wrapper_encode(?ranap,'CauseNAS', +% {'CauseNAS', 'normal-release'}), +% Bytes. + + + + + + +iu_release_complete() -> + #'Iu-ReleaseComplete'{ + protocolIEs = iu_rel_comp_ies() + }. + +iu_rel_comp_ies() -> + []. +% 'iu-RelCompRABDataVolumeReportList' = asn1_NOVALUE, +% 'iu-RelCompRABReleasedListIuRelComp' = asn1_NOVALUE, +% 'iu-RelCompCriticalityDiagnostics' = asn1_NOVALUE +% }. + + + + + + + + +common_id() -> + #'CommonID'{ + protocolIEs = common_id_ies() + }. + +common_id_ies() -> + [common_id_imsi()]. + +common_id_imsi() -> + #'ProtocolIE-Field'{ + id = 23, % 23 = Perm. NAS ID (IMSI) + criticality = ignore, %ignore,%XXX %XXX + value = imsi() + }. + +imsi() -> + {iMSI, [1,2,3,4,5,6,7,8]}. + + + + + + + + + + +security_mode_cmd() -> + #'SecurityModeCommand'{ + protocolIEs = security_mode_cmd_ies() + }. + +security_mode_cmd_ies() -> + [security_mode_cmd_integ(), + security_mode_cmd_encr(), + security_mode_cmd_keystat() + ]. + +security_mode_cmd_integ() -> + #'ProtocolIE-Field'{ + id = 12, % 12 = Integ info + criticality = ignore,%{'Criticality', ignore}, + value = integ_info() + }. + +integ_info() -> + #'IntegrityProtectionInformation'{ + permittedAlgorithms = perm_integ_algs(), + key = key() }. + +perm_integ_algs() -> + [integ_prot_alg()]. + +integ_prot_alg() -> + 'standard-UMTS-integrity-algorithm-UIA1'. + +key() -> + [1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0]. + + + +security_mode_cmd_encr() -> + #'ProtocolIE-Field'{ + id = 11, % 11 = Encr info + criticality = ignore,%{'Criticality', ignore}, + value = encr_info() + }. + +encr_info() -> + #'EncryptionInformation'{ + permittedAlgorithms = perm_encr_algs(), + key = key() }. + +perm_encr_algs() -> + [encr_prot_alg()]. + +encr_prot_alg() -> + 'standard-UMTS-encryption-algorith-UEA1'. + +security_mode_cmd_keystat() -> + #'ProtocolIE-Field'{ + id = 75, % 75 = id-KeyStatus + criticality = ignore,%{'Criticality', ignore}, + value = key_status() + }. + +key_status() -> + new. + + + + + +security_mode_cmp() -> + #'SecurityModeComplete'{ + protocolIEs = security_mode_cmp_ies() + }. + +security_mode_cmp_ies() -> + [security_mode_cmp_ch_integ_prot_alg(), + security_mode_cmp_ch_encr_alg() + ]. + +security_mode_cmp_ch_integ_prot_alg() -> + #'ProtocolIE-Field'{ + id = 6, % 6 = Chosen Integ prot alg + criticality = ignore,%XXX + value = ch_integ_prot_alg() + }. + +ch_integ_prot_alg() -> + 'standard-UMTS-integrity-algorithm-UIA1'. + + +security_mode_cmp_ch_encr_alg() -> + #'ProtocolIE-Field'{ + id = 5, % 5 = Chosen Encr alg + criticality = ignore,%XXX + value = ch_encr_alg() + }. + +ch_encr_alg() -> + 'standard-UMTS-encryption-algorith-UEA1'. + + + + +security_mode_rej() -> + #'SecurityModeReject'{ + protocolIEs = security_mode_rej_ies() + }. + +security_mode_rej_ies() -> + [security_mode_rej_cause()]. + + +security_mode_rej_cause() -> + #'ProtocolIE-Field'{ + id = 4, % 4 = Id-Cause + criticality = ignore,%XXX + value = cause_radio() % Se Reset + }. + + + + + + + + +reset() -> + #'Reset'{ + protocolIEs = reset_ies() + }. +reset_ies() -> + {'Reset_protocolIEs', % this identifier is very unneccesary here + [reset_cause(), + cn_domain_ind(), % Se initial Ue + init_global_rnc_id() % ---- " ---- + ]}. +init_global_rnc_id() -> + #'ProtocolIE-Field'{ + id = 86, % 86 = id-GlobalRNC-ID + criticality = ignore,%XXX + value = global_rnc_id() + }. + +reset_cause() -> + #'ProtocolIE-Field'{ + id = 4, % 4 = id-Cause + criticality = ignore,%XXX + value = cause_radio() + }. +%cause_open() -> +% {ok,Bytes} = +% wrapper_encode(?ranap,'Cause', cause_radio()), +% Bytes. +cause_radio() -> + {radioNetwork, 'release-due-to-utran-generated-reason'}. + + +cn_domain_ind(IEs) when atom(IEs)-> + setelement(1,cn_domain_ind(),IEs). + +cn_domain_ind() -> + #'ProtocolIE-Field'{ + id = 3, % 3 = InitUE-MessageIEsCN-DomainIndicator + criticality = ignore,%XXX + value = cn_domain_indicator() + }. + + + + +reset_ack() -> + #'ResetAcknowledge'{ + protocolIEs = reset_ack_ies() + }. +reset_ack_ies() -> + {'ResetAcknowledge_protocolIEs', % very unneccesary + [cn_domain_ind()]}. % Se initial Ue + + + + + +reset_res(IuSCId) -> + #'ResetResource'{ + protocolIEs = reset_res_ies(IuSCId) + }. + +reset_res_ies(IuSCId) -> + {'ResetResource_protocolIEs', % very unneccesary + [ + cn_domain_ind() % Se initial Ue + ,reset_cause() % Se reset + ,reset_res_list(IuSCId) + ,init_global_rnc_id_reset_res() % ---- " ---- + ]}. + +init_global_rnc_id_reset_res() -> + #'ProtocolIE-Field'{ + id = 86, % 86 = id-GlobalRNC-ID + criticality = ignore,%XXX + value = global_rnc_id() + }. + +reset_res_list(IuSCId) -> + #'ProtocolIE-Field'{ + id = 77, % 77 = id-IuSigConIdList + criticality = ignore,%XXX + value = res_list(IuSCId) + }. + +res_list(IuSCId) -> + iu_Sig_Con_Id_list(IuSCId,[]). + +iu_Sig_Con_Id_list([],List) -> + List; + +iu_Sig_Con_Id_list([IuSCId|T],List) -> + Ie = [iu_Sig_Con_Id_ie(IuSCId)], + iu_Sig_Con_Id_list(T,[Ie|List]). + +iu_Sig_Con_Id_ie(IuSCId) -> + #'ProtocolIE-Field'{ + id = 78, % 78 = id-IuSigConIdItem + criticality = ignore,%XXX + value = iu_Sig_Con_Id_item(IuSCId)}. + +iu_Sig_Con_Id_item(IuSCId) -> + #'ResetResourceItem'{ + iuSigConId = IuSCId +% 53432 +% [1,0,1,0,1,0,1,0, +% 1,0,1,0,1,0,1,0, +% 1,0,1,0,1,0,1,0] + }. + + +reset_res_ack(IuSCId) -> + #'ResetResourceAcknowledge'{ + protocolIEs = reset_res_ack_ies(IuSCId) + }. +reset_res_ack_ies(IuSCId) -> + [ + cn_domain_ind() % Se initial Ue + ,reset_res_list(IuSCId) % Se Reset Ressource + ]. + + +int2bin(Int) -> + EmptyList = [], + BitList_b1 = [Int band 2#1 | EmptyList], + BitList_b2 = [(Int bsr 1) band 2#1 | BitList_b1], + BitList_b3 = [(Int bsr 2) band 2#1 | BitList_b2], + BitList_b4 = [(Int bsr 3) band 2#1 | BitList_b3], + BitList_b5 = [(Int bsr 4) band 2#1 | BitList_b4], + BitList_b6 = [(Int bsr 5) band 2#1 | BitList_b5], + BitList_b7 = [(Int bsr 6) band 2#1 | BitList_b6], + BitList = [(Int bsr 7) band 2#1 | BitList_b7], + io:format("~n~w~n", [BitList]). + + +%%%%%%%%%%%%%%%%% wrappers %%%%%%%%%%%%%%%%%%%%%%%% + +wrapper_encode(Module,Type,Value) -> + case asn1rt:encode(Module,Type,Value) of + {ok,X} when binary(X) -> + {ok, binary_to_list(X)}; + {ok,X} -> + {ok, binary_to_list(list_to_binary(X))}; + Error -> + Error + end. + +wrapper_decode(Module,Type,Bytes) -> + case Module:encoding_rule() of + ber -> + asn1rt:decode(Module,Type,Bytes); + ber_bin when binary(Bytes) -> + asn1rt:decode(Module,Type,Bytes); + ber_bin -> + asn1rt:decode(Module,Type,list_to_binary(Bytes)); + ber_bin_v2 when binary(Bytes) -> + asn1rt:decode(Module,Type,Bytes); + ber_bin_v2 -> + asn1rt:decode(Module,Type,list_to_binary(Bytes)); + per -> + asn1rt:decode(Module,Type,Bytes); + per_bin when binary(Bytes) -> + asn1rt:decode(Module,Type,Bytes); + per_bin -> + asn1rt:decode(Module,Type,list_to_binary(Bytes)); + uper_bin -> + asn1rt:decode(Module,Type,list_to_binary(Bytes)) + end. -- cgit v1.2.3