aboutsummaryrefslogtreecommitdiffstats
path: root/lib/asn1/test/asn1_SUITE_data/testobj.erl
diff options
context:
space:
mode:
authorKenneth Lundin <[email protected]>2010-02-19 14:01:57 +0000
committerErlang/OTP <[email protected]>2010-02-19 14:01:57 +0000
commit18bd1239bee04427340a44f57f993ea92c264e41 (patch)
treedbb3031dcd2e446eb457ff7ac5229949517d7557 /lib/asn1/test/asn1_SUITE_data/testobj.erl
parent729565dc3f8bcf8829508136498aef6a542840f4 (diff)
downloadotp-18bd1239bee04427340a44f57f993ea92c264e41.tar.gz
otp-18bd1239bee04427340a44f57f993ea92c264e41.tar.bz2
otp-18bd1239bee04427340a44f57f993ea92c264e41.zip
OTP-8463 Support for EXTENSIBILITY IMPLIED and SET/SEQ OF NamedType is
added.
Diffstat (limited to 'lib/asn1/test/asn1_SUITE_data/testobj.erl')
-rw-r--r--lib/asn1/test/asn1_SUITE_data/testobj.erl1443
1 files changed, 1443 insertions, 0 deletions
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.