1%% 2%% %CopyrightBegin% 3%% 4%% Copyright Ericsson AB 2001-2017. All Rights Reserved. 5%% 6%% Licensed under the Apache License, Version 2.0 (the "License"); 7%% you may not use this file except in compliance with the License. 8%% You may obtain a copy of the License at 9%% 10%% http://www.apache.org/licenses/LICENSE-2.0 11%% 12%% Unless required by applicable law or agreed to in writing, software 13%% distributed under the License is distributed on an "AS IS" BASIS, 14%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15%% See the License for the specific language governing permissions and 16%% limitations under the License. 17%% 18%% %CopyrightEnd% 19%% 20%% 21-module(testobj). 22 23-include("RANAP.hrl"). 24 25-compile(export_all). 26 27-define(ranap, 'RANAP'). 28 29 30%% These are possible Reason-values for sccp_disconnect_req in RANPM 31%% 32%% 0,0,0,0,0,1,0,0, % Message-type 33%% 0,0,0,0,0,0,0,0, % Dest local ref (dummy) - 3 octets 34%% 0,0,0,0,0,0,0,0, 35%% 0,0,0,0,0,0,0,1, 36%% 0,0,0,0,0,0,0,0, % Source local ref (dummy) - 3 octets 37%% 0,0,0,0,0,0,0,0, 38%% 0,0,0,0,0,0,1,0, 39 40run() -> 41 ok = run_com_id(), 42 ok = run_dir_tsf_2cn(), 43 ok = run_dir_tsf_2rnc(), 44 ok = run_init_ue(), 45 ok = run_iu_rel_cmd(), 46 ok = run_iu_rel_cmp(), 47 ok = run_rab_ass_rsp_delete(), 48 ok = run_rab_ass_rsp_setup(), 49 ok = run_rab_create(), 50 ok = run_rab_rel(), 51 ok = run_reset(), 52 ok = run_reset_res(), 53 ok = run_sm_cmd(), 54 ok = run_sm_cmp(), 55 ok = run_sm_rej(). 56 57 58ranap_pdu_contents(Enc,Type) -> 59 {initiatingMessage, #'InitiatingMessage'{ 60 procedureCode = Type, 61 criticality = ignore, %{'Criticality', ignore}, %XXX 62 value = Enc 63 }}. 64 65ranap_pdu_contents_outcome(Enc,Type) -> 66 {outcome, #'Outcome'{ 67 procedureCode = Type, 68 criticality = ignore,%XXX 69 value = Enc 70 }}. 71 72ranap_pdu_contents_suc(Enc,Type) -> 73 {successfulOutcome, #'SuccessfulOutcome'{ 74 procedureCode = Type, 75 criticality = ignore,%XXX 76 value = Enc 77 }}. 78 79ranap_pdu_contents_unsuc(Enc,Type) -> 80 {unsuccessfulOutcome, #'UnsuccessfulOutcome'{ 81 procedureCode = Type, 82 criticality = ignore,%XXX 83 value = Enc 84 }}. 85 86 87 88run_rab_rel() -> 89 RAS = rab_release_request(), 90 io:format("~w~n~n", [RAS]), 91 RanapRAS = ranap_pdu_contents(RAS,0), % 0=Rab Assignment Procedure 92 {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapRAS), 93 EncRanapRAS = lists:flatten(Tmp2), 94 io:format("~w~n~n", [EncRanapRAS]), 95 {ok,{initiatingMessage, 96 #'InitiatingMessage'{procedureCode=ProcedureCode, 97 criticality=Criticality, 98 value=DecGeneral}}} = 99 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapRAS), 100 io:format("~w~n~n", [DecGeneral]), 101 case DecGeneral of 102 {'RAB-AssignmentRequest',[{_ProtIEField,_Code,_Crit,DecRel}],_ASN1novalue} -> 103 io:format("~w~n~n", [DecRel]) 104 end, 105 case DecRel of 106 [[{_ProtIEField1,_Code1,_Crit1,DecRelList}]] -> 107 io:format("~w~n~n", [DecRelList]) 108 end, 109 ok. 110 111run_rab_create() -> 112 RabID = [0,1,0,1,0,1,0,1], 113 Teid = [0,13,83,211], 114 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], 115 RAS = rab_create_request(RabID, Teid, SgsnIP), 116 io:format("~w~n~n", [RAS]), 117 RanapRAS = ranap_pdu_contents(RAS,0), % 0=Rab Assignment Procedure 118 {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapRAS), 119 EncRanapRAS = lists:flatten(Tmp2), 120 io:format("~w~n~n", [EncRanapRAS]), 121 {ok,{initiatingMessage, 122 #'InitiatingMessage'{procedureCode=ProcedureCode, 123 criticality=Criticality, 124 value=DecGeneral}}} = 125 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapRAS), 126 io:format("~w~n~n", [DecGeneral]), 127 case DecGeneral of 128 {'RAB-AssignmentRequest',[{_ProtIEField,_Code,_Crit,DecSetOrMod}],_ASN1novalue} -> 129 io:format("~w~n~n", [DecSetOrMod]) 130 end, 131 case DecSetOrMod of 132 [[{'ProtocolIE-FieldPair',_Code1,_Crit1,DecSetOrModFirst,_Crit2,DecSetOrModSecond}]] -> 133 io:format("~w~n~n", [DecSetOrModFirst]), 134 io:format("~w~n~n", [DecSetOrModSecond]) 135 end, 136 ok. 137 138decode_initiating_ras(ProcedureCode,Crit,Val) -> 139 case ProcedureCode of 140 0 -> % RAB-Assignment 141 wrapper_decode(?ranap, 'RAB-AssignmentRequest',Val) 142 end. 143 144 145run_rab_ass_rsp_setup() -> 146 RAR = rab_assignment_response_setup(), 147 io:format("~w~n~n", [RAR]), 148 RanapRAR = ranap_pdu_contents_outcome(RAR,0), % 0=Rab Assignment Procedure 149 {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapRAR), 150 EncRanapRAR = lists:flatten(Tmp2), 151 io:format("~w~n~n", [EncRanapRAR]), 152 {ok,{outcome, 153 #'Outcome'{procedureCode=ProcedureCode, 154 criticality=Criticality, 155 value=DecGeneral}}} = 156 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapRAR), 157 io:format("~w~n~n", [DecGeneral]), 158 case DecGeneral of 159 {'RAB-AssignmentResponse',[{_ProtIEField,52,_Crit,DecSetOrMod}], _ASN1novalue} -> 160 io:format("Setup or Modified: ~w~n~n", [DecSetOrMod]) 161 end, 162 case DecSetOrMod of 163 [[{_ProtIEField1,51,_Crit1,DecSetOrModFirst}]] -> 164 io:format("Setup or Modified: ~w~n~n", [DecSetOrModFirst]) 165 end, 166 ok. 167 168run_rab_ass_rsp_delete() -> 169 RAR = rab_assignment_response_delete(), 170 io:format("~w~n~n", [RAR]), 171 RanapRAR = ranap_pdu_contents_outcome(RAR,0), % 0=Rab Assignment Procedure 172 {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapRAR), 173 EncRanapRAR = lists:flatten(Tmp2), 174 io:format("~w~n~n", [EncRanapRAR]), 175 {ok,{outcome, 176 #'Outcome'{procedureCode=ProcedureCode, 177 criticality=Criticality, 178 value=DecGeneral}}} = 179 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapRAR), 180 io:format("~w~n~n", [DecGeneral]), 181 case DecGeneral of 182 {'RAB-AssignmentResponse',[{_ProtIEField2,43,_Crit2,DecRelsd}], _ASN1novalue} -> 183 io:format("Released: ~w~n~n", [DecRelsd]) 184 end, 185 case DecRelsd of 186 [[{_ProtIEField3,_Code3,_Crit3,DecRelsdItem}]] -> 187 io:format("Released: ~w~n~n", [DecRelsdItem]) 188 end, 189 ok. 190 191decode_initiating_rar(ProcedureCode,Crit,Val) -> 192 case ProcedureCode of 193 0 -> % RAB-Assignment 194 wrapper_decode(?ranap, 'RAB-AssignmentResponse',Val) 195 end. 196 197 198 199run_init_ue() -> 200 INI = initial_ue(), 201 io:format("~w~n~n", [INI]), 202 RanapINI = ranap_pdu_contents(INI, 19), % 19 = InitialUE-Message 203 {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapINI), 204 EncRanapINI = lists:flatten(Tmp2), 205 io:format("~w~n~n", [EncRanapINI]), 206 207 {ok,{initiatingMessage, 208 #'InitiatingMessage'{procedureCode=ProcedureCode, 209 criticality=Criticality, 210 value=DecGeneral}}} = 211 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapINI), 212 io:format("~w~n~n", [DecGeneral]), 213 case DecGeneral of 214 {'InitialUE-Message',[{_ProtIEField,Code,_Crit,DecCN}, 215 {_ProtIEField1,Code1,_Crit1, 216 {_LAI,LaiPlmnid,LaiLac,_ASN1novalue}}, 217 {_ProtIEField2,Code2,_Crit2,DecRAC}, 218 {_ProtIEField3,Code3,_Crit3, 219 {_SAI,SaiPlmnid,SaiLac,SaiSac,_ASN1novalue}}, 220 {_ProtIEField4,Code4,_Crit4,DecNASPDU}, 221 {_ProtIEField5,Code5,_Crit5,DecIUSCID}, 222 {_ProtIEField6,Code6,_Crit6, 223 {_GRI,GlPlmnid,GlRNCID}}],_ASN1novalue} -> 224 io:format("CN Dom Ind: ~w~n", [DecCN]), 225 io:format("Code: ~w~n~n", [Code]), 226 io:format("LaiPlmnid: ~w~n", [LaiPlmnid]), 227 io:format("LaiLac: ~w~n", [LaiLac]), 228 io:format("Code: ~w~n~n", [Code1]), 229 io:format("RAC: ~w~n", [DecRAC]), 230 io:format("Code: ~w~n~n", [Code2]), 231 io:format("SaiPlmnid: ~w~n", [SaiPlmnid]), 232 io:format("SaiLac: ~w~n", [SaiLac]), 233 io:format("SaiSac: ~w~n", [SaiSac]), 234 io:format("Code: ~w~n~n", [Code3]), 235 io:format("NAS-PDU: ~w~n", [DecNASPDU]), 236 io:format("Code: ~w~n~n", [Code4]), 237 io:format("Iu Sign Con Id: ~w~n", [DecIUSCID]), 238 io:format("Code: ~w~n~n", [Code5]), 239 io:format("GlPlmnid: ~w~n", [GlPlmnid]), 240 io:format("GlRNCID: ~w~n", [GlRNCID]), 241 io:format("Code: ~w~n~n", [Code6]) 242 end, 243 ok. 244 245% NasPdu = extract_ie({init_ue},'InitUE-MessageIEsNAS-PDU',ListsinLists), 246% io:format("Tebax~n~w~n~n", [NasPdu]), 247% ok. 248 249decode_initiating_ini(ProcedureCode,Crit,Val) -> 250 case ProcedureCode of 251 19 -> % InitialUE-Message 252 wrapper_decode(?ranap, 'InitialUE-Message',Val) 253 end. 254 255 256run_dir_tsf_2cn() -> 257 DIR = direct_transfer_cn(), 258 io:format("~w~n~n", [DIR]), 259 RanapDIR = ranap_pdu_contents(DIR, 20), % 20 = DirectTransfer 260 {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapDIR), 261 EncRanapDIR = lists:flatten(Tmp2), 262 io:format("~w~n~n", [EncRanapDIR]), 263 {ok,{initiatingMessage, 264 #'InitiatingMessage'{procedureCode=ProcedureCode, 265 criticality=Criticality, 266 value=DecGeneral}}} = 267 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapDIR), 268 io:format("~w~n~n", [DecGeneral]), 269 case DecGeneral of 270 {'DirectTransfer', 271 [{_ProtIEField1,_Code1,_Crit1,DecNASPDU}, 272 {_ProtIEField2,_Code2,_Crit2,DecLAI}, 273 {_ProtIEField3,_Code3,_Crit3,DecRAC}], 274 _ASN1novalue} -> 275 io:format("NAS-PDU: ~w~n~n", [DecNASPDU]), 276 io:format("LAI: ~w~n~n", [DecLAI]), 277 io:format("RAC: ~w~n~n", [DecRAC]) 278 end, 279 ok. 280 281run_dir_tsf_2rnc() -> 282 DIR = direct_transfer_rnc(), 283 io:format("~w~n~n", [DIR]), 284 RanapDIR = ranap_pdu_contents(DIR, 20), % 20 = DirectTransfer 285 {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapDIR), 286 EncRanapDIR = lists:flatten(Tmp2), 287 io:format("~w~n~n", [EncRanapDIR]), 288 {ok,{initiatingMessage, 289 #'InitiatingMessage'{procedureCode=ProcedureCode, 290 criticality=Criticality, 291 value=DecGeneral}}} = 292 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapDIR), 293 io:format("~w~n~n", [DecGeneral]), 294 case DecGeneral of 295 {'DirectTransfer', 296 [{_ProtIEField1,_Code1,_Crit1,DecNASPDU}, 297 {_ProtIEField2,_Code2,_Crit2,DecSAPI}], 298 _ASN1novalue} -> 299 io:format("NAS-PDU: ~w~n~n", [DecNASPDU]), 300 io:format("SAPI: m~w~n~n", [DecSAPI]) 301 end, 302 ok. 303 304decode_initiating_dir(ProcedureCode,Crit,Val) -> 305 io:format("ProcedureCode: ~w~n~n", [ProcedureCode]), 306 case ProcedureCode of 307 20 -> % DirectTransfer 308 wrapper_decode(?ranap, 'DirectTransfer',Val) 309 end. 310 311% List = tuple2list(Dec), 312% io:format("~w~n~n", [List]), 313% NasPdu = extract_ie({dir_trans},'DirTransIEs-NAS-PDU',List), 314% io:format("~w~n~n", [NasPdu]), 315% ok. 316 317 318run_iu_rel_cmd() -> 319 IUR = iu_release_command(), 320 io:format("~w~n~n", [IUR]), 321 RanapIUR = ranap_pdu_contents(IUR, 1), % 1 = Iu-Release 322 {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapIUR), 323 EncRanapIUR = lists:flatten(Tmp2), 324 io:format("~w~n~n", [EncRanapIUR]), 325 {ok,{initiatingMessage, 326 #'InitiatingMessage'{procedureCode=ProcedureCode, 327 criticality=Criticality, 328 value=DecGeneral}}} = 329 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapIUR), 330 io:format("General: ~w~n~n", [DecGeneral]), 331 case DecGeneral of 332 {'Iu-ReleaseCommand',[{_ProtIEField,_Code,_Crit,DecCause}],_ASN1novalue} -> 333 io:format("Cause: ~w~n~n", [DecCause]) 334 end. 335 336run_iu_rel_cmp() -> 337 IUP = iu_release_complete(), 338 io:format("~w~n~n", [IUP]), 339 RanapIUP = ranap_pdu_contents_suc(IUP, 1), % 1 = Iu-Release 340 {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapIUP), 341 EncRanapIUP = lists:flatten(Tmp2), 342 io:format("~w~n~n", [EncRanapIUP]), 343 {ok,{successfulOutcome, 344 #'SuccessfulOutcome'{procedureCode=ProcedureCode, 345 criticality=Criticality, 346 value=DecGeneral}}} = 347 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapIUP), 348 io:format("~w~n~n", [DecGeneral]). 349 350% run_iu_rel_req() -> 351% IUP = iu_release_request(), 352% io:format("~w~n~n", [IUP]), 353% {ok, Tmp} = wrapper_encode(?ranap, 'Iu-ReleaseRequest', IUP), 354% EncIUP = lists:flatten(Tmp), 355% RanapIUP = ranap_pdu_contents(EncIUP, 1), % 1 = Iu-Release 356% {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapIUP), 357% EncRanapIUP = lists:flatten(Tmp2), 358% io:format("~w~n~n", [EncRanapIUP]), 359% case wrapper_decode(?ranap, 'RANAP-PDU', EncRanapIUP) of 360% {ok,{initiatingMessage, 361% #'InitiatingMessage'{procedureCode=ProcedureCode, 362% criticality=Criticality, 363% value=Value}}} -> 364% DecGeneral = decode_initiating_iu(ProcedureCode,Criticality,Value) 365% end, 366% io:format("~w~n~n", [DecGeneral]). 367 368decode_initiating_iu(ProcedureCode,Crit,Val) -> 369 case ProcedureCode of 370 1 -> % Iu-Release 371 wrapper_decode(?ranap, 'Iu-ReleaseComplete',Val) 372 end. 373 374 375 376 377 378run_com_id() -> 379 COM = common_id(), 380 io:format("~w~n~n", [COM]), 381 RanapCOM = ranap_pdu_contents(COM, 15), % 15 = CommonID 382 {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapCOM), 383 EncRanapCOM = lists:flatten(Tmp2), 384 io:format("~w~n~n", [EncRanapCOM]), 385 {ok,{initiatingMessage, 386 #'InitiatingMessage'{procedureCode=ProcedureCode, 387 criticality=Criticality, 388 value=DecGeneral}}} = 389 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapCOM), 390 io:format("DecGeneral: ~w~n~n", [DecGeneral]), 391 case DecGeneral of 392 {'CommonID',[{_ProtIEField,23,_Crit,DecCause}],_ASN1novalue} -> 393 io:format("Cause: ~w~n~n", [DecCause]); 394 Error -> 395 io:format("Error: ~w~n~n", [Error]) 396 end. 397 398 399decode_common_id(ProcedureCode,Crit,Val) -> 400 case ProcedureCode of 401 15 -> % Common ID 402 wrapper_decode(?ranap, 'CommonID',Val); 403 Error -> 404 io:format("Error: ~w~n~n", [Error]) 405 end. 406 407 408 409 410run_sm_cmd() -> 411 DIR = security_mode_cmd(), 412 io:format("~w~n~n", [DIR]), 413 RanapDIR = ranap_pdu_contents(DIR, 6), % 6 = Sec Mode 414 io:format("~w~n~n", [RanapDIR]), 415 {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapDIR), 416 EncRanapDIR = lists:flatten(Tmp2), 417 io:format("~w~n~n", [EncRanapDIR]), 418 {ok,{initiatingMessage, 419 #'InitiatingMessage'{procedureCode=ProcedureCode, 420 criticality=Criticality, 421 value=DecGeneral}}} = 422 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapDIR), 423 io:format("~w~n~n", [DecGeneral]), 424 case DecGeneral of 425 {'SecurityModeCommand', 426 [{_ProtIEField1,12,_Crit1,DecIPI}, 427 {_ProtIEField2,11,_Crit2,DecEI}, 428 {_ProtIEField3,75,_Crit3,DecKS}], 429 _ASN1novalue} -> 430 io:format("Integrity Protection Algoritm: ~w~n~n", [DecIPI]), 431 io:format("Encryption Information: ~w~n~n", [DecEI]), 432 io:format("Key Status: ~w~n~n", [DecKS]) 433 end, 434 ok. 435 436run_sm_cmp() -> 437 DIR = security_mode_cmp(), 438 io:format("~w~n~n", [DIR]), 439 RanapDIR = ranap_pdu_contents_suc(DIR, 6), % 6 = Sec Mode 440 io:format("~w~n~n", [RanapDIR]), 441 {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapDIR), 442 EncRanapDIR = lists:flatten(Tmp2), 443 io:format("~w~n~n", [EncRanapDIR]), 444 {ok,{successfulOutcome, 445 #'SuccessfulOutcome'{procedureCode=ProcedureCode, 446 criticality=Criticality, 447 value=DecGeneral}}} = 448 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapDIR), 449 io:format("~w~n~n", [DecGeneral]), 450 case DecGeneral of 451 {'SecurityModeComplete', 452 [{_ProtIEField1,6,_Crit1,DecIPA}, 453 {_ProtIEField2,5,_Crit2,DecEI}], 454 _ASN1novalue} -> 455 io:format("Integrity Protection Algoritm: ~w~n~n", [DecIPA]), 456 io:format("Encryption Information: ~w~n~n", [DecEI]) 457 end, 458 ok. 459 460run_sm_rej() -> 461 DIR = security_mode_rej(), 462 io:format("~w~n~n", [DIR]), 463 RanapDIR = ranap_pdu_contents_unsuc(DIR, 6), % 6 = Sec Mode 464 io:format("~w~n~n", [RanapDIR]), 465 {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapDIR), 466 EncRanapDIR = lists:flatten(Tmp2), 467 io:format("~w~n~n", [EncRanapDIR]), 468 {ok,{unsuccessfulOutcome, 469 #'UnsuccessfulOutcome'{procedureCode=ProcedureCode, 470 criticality=Criticality, 471 value=DecGeneral}}} = 472 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapDIR), 473 io:format("~w~n~n", [DecGeneral]), 474% case DecGeneral of 475% {ok,{'SecurityModeReject', 476% [{_ProtIEField1,6,_Crit1,Value1}, 477% {_ProtIEField2,5,_Crit2,Value2}], 478% _ASN1novalue}} -> 479% io:format("Value1: ~w~n~n", [Value1]), 480% io:format("Value2: ~w~n~n", [Value2]), 481% {ok,DecIPA} = wrapper_decode(?ranap, 'IntegrityProtectionAlgorithm', Value1), 482% {ok,DecEI} = wrapper_decode(?ranap, 'EncryptionAlgorithm', Value2), 483% io:format("Integrity Protection Algoritm: ~w~n~n", [DecIPA]), 484% io:format("Encryption Information: ~w~n~n", [DecEI]) 485% end, 486 ok. 487 488decode_initiating_sm(ProcedureCode,Crit,Val) -> 489 io:format("ProcedureCode: ~w~n~n", [ProcedureCode]), 490 case ProcedureCode of 491 6 -> % Sec Mode 492 wrapper_decode(?ranap, 'SecurityModeCommand',Val) 493 end. 494 495decode_suc_sm(ProcedureCode,Criticality,Value) -> 496 io:format("ProcedureCode: ~w~n~n", [ProcedureCode]), 497 case ProcedureCode of 498 6 -> % Sec Mode 499 wrapper_decode(?ranap, 'SecurityModeComplete',Value) 500 end. 501 502decode_unsuc_sm(ProcedureCode,Criticality,Value) -> 503 io:format("ProcedureCode: ~w~n~n", [ProcedureCode]), 504 case ProcedureCode of 505 6 -> % Sec Mode 506 wrapper_decode(?ranap, 'SecurityModeReject',Value) 507 end. 508 509 510 511 512 513 514 515run_reset() -> 516 IUP = reset(), 517 io:format("Reset: ~w~n~n", [IUP]), 518 RanapIUP = ranap_pdu_contents(IUP, 9), % 9 = Reset 519 {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapIUP), 520 EncRanapIUP = lists:flatten(Tmp2), 521 io:format("Coded Reset: ~w~n~n", [EncRanapIUP]), 522 {ok,{initiatingMessage, 523 #'InitiatingMessage'{procedureCode=ProcedureCode, 524 criticality=Criticality, 525 value=DecGeneral}}} = 526 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapIUP), 527 io:format("Decoded Reset: ~w~n~n", [DecGeneral]), 528 529 IUP1 = reset_ack(), 530 io:format("Reset Ack:~w~n~n", [IUP1]), 531 RanapIUP1 = ranap_pdu_contents_suc(IUP1, 9), % 9 = Reset 532 {ok, Tmp21} = wrapper_encode(?ranap, 'RANAP-PDU', RanapIUP1), 533 EncRanapIUP1 = lists:flatten(Tmp21), 534 io:format("Coded Reset Ack: ~w~n~n", [EncRanapIUP1]), 535 {ok,{successfulOutcome, 536 #'SuccessfulOutcome'{procedureCode=ProcedureCode1, 537 criticality=Criticality1, 538 value=DecGeneral1}}} = 539 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapIUP1), 540 io:format("Decoded Reset Ack: ~w~n~n", [DecGeneral1]). 541 542% decode_init_reset(ProcedureCode,Crit,Val) -> 543% io:format("ProcedureCode: ~w~n~n", [ProcedureCode]), 544% case ProcedureCode of 545% 9 -> % reset 546% wrapper_decode(?ranap, 'Reset',Val) 547% end. 548 549% decode_init_reset_ack(ProcedureCode,Crit,Val) -> 550% io:format("ProcedureCode: ~w~n~n", [ProcedureCode]), 551% case ProcedureCode of 552% 9 -> % reset 553% wrapper_decode(?ranap, 'ResetAcknowledge',Val) 554% end. 555 556 557 558 559 560 561 562 563 564run_reset_res() -> 565 IUP = reset_res([12,13,14,15,16,17,18,19,20]), 566 io:format("Reset Rsource: ~w~n~n", [IUP]), 567 RanapIUP = ranap_pdu_contents(IUP, 27), % 27 = Reset Res 568 {ok, Tmp2} = wrapper_encode(?ranap, 'RANAP-PDU', RanapIUP), 569 EncRanapIUP = lists:flatten(Tmp2), 570 io:format("Coded Reset Resource: ~w~n~n", [EncRanapIUP]), 571 {ok,{initiatingMessage, 572 #'InitiatingMessage'{procedureCode=ProcedureCode, 573 criticality=Criticality, 574 value=DecGeneral}}} = 575 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapIUP), 576 io:format("Decoded Reset Resource: ~w~n~n", [DecGeneral]), 577% case DecGeneral of 578% {ok,{'ResetResource', 579% [{'ProtocolIE-Field',3,ignore,Value1}, 580% {'ProtocolIE-Field',4,ignore,Value2}, 581% {'ProtocolIE-Field',77,ignore,Value3}, 582% {'ProtocolIE-Field',86,ignore,Value4}], 583% asn1_NOVALUE}} -> 584% io:format("Value1: ~w~n~n", [Value1]), 585% io:format("Value2: ~w~n~n", [Value2]), 586% io:format("Value3: ~w~n~n", [Value3]), 587% io:format("Value4: ~w~n~n", [Value4]), 588% {ok,DecIPA} = wrapper_decode(?ranap, 'CN-DomainIndicator', Value1), 589% {ok,{_Radio,DecEI}} = wrapper_decode(?ranap, 'Cause', Value2), 590% {ok,DecRR} = wrapper_decode(?ranap, 'ResetResourceList', Value3), 591% DecRRI = case DecRR of 592% [[{'ProtocolIE-Field',78,ignore,Value5}]] -> 593% {ok,{_apa,DecRI,_asn1novalue}} = 594% wrapper_decode(?ranap, 'ResetResourceItem', Value5), 595% DecRI 596% end, 597% {ok,{_Gl_id,PLMN_ID,RNC_ID}} = wrapper_decode(?ranap, 'GlobalRNC-ID', Value4), 598% io:format("CN-DomainIndicator: ~w~n~n", [DecIPA]), 599% io:format("Cause: ~w~n~n", [DecEI]), 600% io:format("ResetResourceList: ~w~n~n", [DecRR]), 601% io:format(" ResetResourceItem: ~w~n~n", [DecRRI]), 602% io:format("GlobalRNC-ID: PLMN_ID: ~w, RNC_ID: ~w~n~n", [PLMN_ID,RNC_ID]) 603% end, 604 605 RSA = reset_res_ack([12,13,14,15,16,17,18,19,20]), 606 io:format("~n~nReset Resource Ack:~w~n~n", [RSA]), 607 RanapRSA = ranap_pdu_contents_suc(RSA, 27), % 27 = Reset Res 608 {ok, Tmp12} = wrapper_encode(?ranap, 'RANAP-PDU', RanapRSA), 609 EncRanapRSA = lists:flatten(Tmp12), 610 io:format("Coded Reset Resource Ack: ~w~n~n", [EncRanapRSA]), 611 {ok,{successfulOutcome, 612 #'SuccessfulOutcome'{procedureCode=ProcedureCode1, 613 criticality=Criticality1, 614 value=DecGeneral1}}} = 615 wrapper_decode(?ranap, 'RANAP-PDU', EncRanapRSA), 616 io:format("Decoded Reset Resource Ack: ~w~n~n", [DecGeneral1]). 617% case DecGeneral1 of 618% {ok,{'ResetResourceAcknowledge', 619% [{'ProtocolIE-Field',3,ignore,Value12}, 620% {'ProtocolIE-Field',77,ignore,Value32}], 621% asn1_NOVALUE}} -> 622% io:format("Value1: ~w~n~n", [Value12]), 623% io:format("Value3: ~w~n~n", [Value32]), 624% {ok,DecIPA2} = wrapper_decode(?ranap, 'CN-DomainIndicator', Value12), 625% {ok,DecRR2} = wrapper_decode(?ranap, 'ResetResourceList', Value32), 626% DecRRI2 = case DecRR2 of 627% [[{'ProtocolIE-Field',78,ignore,Value52}]] -> 628% {ok,{_apa2,DecRI2,_asn1novalue2}} = 629% wrapper_decode(?ranap, 'ResetResourceItem', Value52), 630% DecRI2 631% end, 632% io:format("CN-DomainIndicator: ~w~n~n", [DecIPA2]), 633% io:format("ResetResourceList: ~w~n~n", [DecRR2]), 634% io:format(" ResetResourceItem: ~w~n~n", [DecRRI2]) 635% end. 636 637 638 639 640 641%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 642%% 643%% Code for constructing RANAP messages 644%% 645%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 646 647rab_release_request() -> 648 #'RAB-AssignmentRequest'{ 649 protocolIEs = rab_assign_request_release_ies() 650 }. 651 652rab_assign_request_release_ies() -> 653 [rab_assign_release_rab_release_list()]. 654 655rab_assign_release_rab_release_list() -> 656 #'ProtocolIE-Field'{ 657 id = 41, % 41 = id-RAB-ReleaseList 658 criticality = ignore,%XXX 659 value = rab_release_list() 660 }. 661 662rab_release_list() -> 663 [release_lists()]. 664 665release_lists() -> 666 [rab_release_item_ies()]. 667 668rab_release_item_ies() -> 669 #'ProtocolIE-Field'{ 670 id = 40, % 40 = id-RAB-ReleaseItem 671 criticality = ignore,%XXX 672 value = rab_release_item()}. 673 674rab_release_item() -> 675 #'RAB-ReleaseItem'{'rAB-ID' = rab_id(), 676 cause = cause_nas()}. 677 678cause_nas() -> 679 {nAS, 'normal-release'}. 680 681 682 683 684 685 686rab_create_request(Rabid, Teid, SgsnIP) -> 687 #'RAB-AssignmentRequest'{ 688 protocolIEs = 689 rab_assign_create_request_ies(Rabid, Teid, SgsnIP) 690 }. 691 692rab_assign_create_request_ies(Rabid, Teid, SgsnIP) -> 693 [rab_assign_setup_or_modify_list(Rabid, Teid, SgsnIP)]. 694 695rab_assign_setup_or_modify_list(Rabid, Teid, SgsnIP) -> 696 #'ProtocolIE-Field'{ 697 id = 54, %id-RAB-SetupOrModifyList 698 criticality = ignore,%XXX 699 value = rab_setup_or_modify_list(Rabid, Teid, SgsnIP) 700 }. 701 702rab_setup_or_modify_list(Rabid, Teid, SgsnIP) -> 703 [setup_or_modify_lists(Rabid, Teid, SgsnIP)]. 704 705setup_or_modify_lists(Rabid, Teid, SgsnIP) -> 706 [rab_setup_or_modify_item_ies(Rabid, Teid, SgsnIP)]. 707 708rab_setup_or_modify_item_ies(Rabid, Teid, SgsnIP) -> 709 #'ProtocolIE-FieldPair'{ 710 id = 53, 711 firstCriticality = reject, %{'Criticality',reject}, 712 firstValue = rab_setup_or_modify_item_first(Rabid, Teid, SgsnIP), 713 secondCriticality = ignore, %{'Criticality', ignore} 714 secondValue = rab_setup_or_modify_item_second() 715 }. 716 717rab_setup_or_modify_item_first(Rabid, Teid, SgsnIP) -> 718 #'RAB-SetupOrModifyItemFirst'{ 719 'rAB-ID' = Rabid, %ras_rab_id(Rabid), 720 'rAB-Parameters' = rab_parameters(), 721 userPlaneInformation = user_plane_information(), 722 transportLayerAddress = SgsnIP, 723 iuTransportAssociation = ras_iu_transport_association(Teid) 724 }. 725 726ras_iu_transport_association(Teid) -> 727 {'gTP-TEI', Teid}. 728 729rab_id() -> 730 [0,1,0,1,0,1,0,1]. 731 732rab_parameters() -> 733 #'RAB-Parameters'{ 734 trafficClass = background, 735 'rAB-AsymmetryIndicator' = 'symmetric-bidirectional', 736 maxBitrate = [200000], 737 deliveryOrder = 'delivery-order-not-requested', 738 'maxSDU-Size' = 11, 739 'sDU-Parameters' = sdu_parameters(), 740 trafficHandlingPriority = 14 %{'TrafficHandlingPriority', 14} %14=lowest 741 }. 742 743user_plane_information() -> 744 #'UserPlaneInformation'{ 745 userPlaneMode = 'support-mode-for-predefined-SDU-sizes', 746 'uP-ModeVersions' = 2#1010101010101010 747 }. 748 749transport_layer_address() -> 750 [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]. 751% 1 2 3 4 752 753iu_transport_association() -> 754 {'gTP-TEI', [31,32,33,34]}. 755 756sdu_parameters() -> 757 [#'SDU-Parameters_SEQOF'{ 758 'sDU-ErrorRatio' = sdu_error_ratio(), 759 residualBitErrorRatio = residual_bit_error_ratio(), 760 deliveryOfErroneousSDU = no 761 }]. 762 763sdu_error_ratio() -> 764 #'SDU-ErrorRatio'{ 765 mantissa = 9, 766 exponent = 4 767 }. 768 769residual_bit_error_ratio() -> 770 #'ResidualBitErrorRatio'{ 771 mantissa = 9, 772 exponent = 5 773 }. 774 775%allocationOrRetentionPriority() -> 776% #'AllocationOrRetentionPriority'{ 777% priorityLevel = lowest, 778% 'pre-emptionCapability' = {'Pre-emptionCapability','can-trigger-pre-emption'}, 779% 'pre-emptionVulnerability' = {'Pre-emptionVulnerability','not-vulnerable-to-pre-emption'}, 780% queuingAllowed = {'QueuingAllowed','queueing-allowed'} 781% }. 782 783rab_setup_or_modify_item_second() -> % returns OpenType value 784 #'RAB-SetupOrModifyItemSecond'{ 785 'pDP-TypeInformation' = ['ipv4'], 786 dataVolumeReportingIndication = 'do-not-report', 787 'dl-GTP-PDU-SequenceNumber' = 1, 788 'ul-GTP-PDU-SequenceNumber' = 2, 789 'dl-N-PDU-SequenceNumber' = 0, 790 'ul-N-PDU-SequenceNumber' = 0 791 }. 792 793 794 795 796rab_assignment_response_setup() -> 797 #'RAB-AssignmentResponse'{ 798 protocolIEs = rab_assignement_response_ies_setup() 799 }. 800 801rab_assignement_response_ies_setup() -> 802 [rab_ass_rsp_setup_or_modified_list()]. 803 804rab_ass_rsp_setup_or_modified_list() -> 805 #'ProtocolIE-Field'{ 806 id = 52, % 52=RAB-AssignRABSetupOrModifiedList 807 criticality = ignore,%XXX 808 value = rab_setup_or_modified_list() 809 }. 810 811rab_setup_or_modified_list() -> 812 [rab_setup_or_modified_item_list()]. 813 814rab_setup_or_modified_item_list() -> 815 [rab_setup_or_modified_item_ies()]. 816 817rab_setup_or_modified_item_ies() -> 818 #'ProtocolIE-Field'{ 819 id = 51, % 51 = RAB-SetupOrModifiedItemIEs 820 criticality = reject, %{'Criticality', reject}, 821 value = rab_setup_or_modified_item() 822 }. 823 824rab_setup_or_modified_item() -> 825 #'RAB-SetupOrModifiedItem'{ 826 'rAB-ID' = rab_id(), 827 transportLayerAddress = transport_layer_address(), 828 iuTransportAssociation = iu_transport_association() 829 }. 830 831 832 833 834 835 836rab_assignment_response_delete() -> 837 #'RAB-AssignmentResponse'{ 838 protocolIEs = rab_assignement_response_ies_delete() 839 }. 840 841rab_assignement_response_ies_delete() -> 842 [rab_ass_rsp_rab_release_list()]. 843 844rab_ass_rsp_rab_release_list() -> 845 #'ProtocolIE-Field'{ 846 id = 43, % 41 = RAB-AssignRABReleasedList 847 criticality = ignore,%XXX 848 value = rab_released_list() 849 }. 850 851rab_released_list() -> 852 [released_lists()]. 853 854released_lists() -> 855 [rab_released_item_ies()]. % 'ReleasedLists' 856 857rab_released_item_ies() -> 858 #'ProtocolIE-Field'{ 859 id = 42, % 42 = RAB-ReleaseItemIEs 860 criticality = ignore,%XXX 861 value = rab_released_item() 862 }. 863 864rab_released_item() -> 865 #'RAB-ReleasedItem'{ 866 'rAB-ID' = rab_id() 867 }. 868 869 870 871initial_ue() -> 872 #'InitialUE-Message'{ 873 protocolIEs = initial_ue_ies() 874 }. 875 876initial_ue_ies() -> 877 [cn_domain_ind(), 878 init_lai(), 879 init_rac(), 880 init_sai(), 881 init_nas_pdu(), 882 init_iu_sign_con_id(), 883 init_global_rnc_id_initial_ue()]. 884 885 886cn_domain_indicator() -> 887 'ps-domain'. 888 889init_lai() -> 890 #'ProtocolIE-Field'{ 891 id = 15, % 15 = LAI 892 criticality = ignore,%XXX 893 value = lai() 894 }. 895 896lai() -> 897 #'LAI'{'pLMN-ID' = [25,26,27], 898 lAC = [25,26]}. 899 900init_rac() -> 901 #'ProtocolIE-Field'{ 902 id = 55, % 55 = RAC 903 criticality = ignore,%XXX 904 value = rac() 905 }. 906 907rac() -> 908 [25]. 909 910init_sai() -> 911 #'ProtocolIE-Field'{ 912 id = 58, % 58 = SAI 913 criticality = ignore,%XXX 914 value = sai() 915 }. 916 917sai() -> 918 #'SAI'{'pLMN-ID' = [28,29,30], %KOLLA!!!! 919 lAC = [30,31], 920 sAC = [32,33]}. 921 922init_nas_pdu() -> 923 #'ProtocolIE-Field'{ 924 id = 16, % 16 = NAS-PDU 925 criticality = ignore,%XXX 926 value = pdu_ar() 927 }. 928 929pdu_ac()-> 930 [16#08, 931 16#03]. 932 933pdu_ar() -> 934 [16#08, % Skip indicator | Protocol discriminator 935 16#01, % Attach Request 936 16#01,16#b7, % MsNetworkCapability 937 16#21, % Cksn | AttachType 938 16#55,16#06, % DrxParameter 939 16#05,16#61,16#86,16#14,16#09,16#f7, % MsId 940 16#21,16#63,16#54,16#ac,16#dc,16#d5, % OldRai 941 16#0a,16#f0,16#f1,16#f2,16#f3,16#f4, % MsRaCap 942 16#f5,16#f6,16#f7,16#f8,16#f9 % MsRaCap continues 943 %%16#19,16#ab,16#cd,16#ef, % P-TMSI signature 944 %%16#17,16#5b, % Requested READY timer 945 %%16#91 % TMSI status 946 ]. 947 948pdu_pdp() -> 949 [2#01001010, % Transaction_id | Protocol_disc 950 2#01000001, % Message_type 951 2#00001001, % Nsapi 952 1, % Llc_sapi (dummie_value) 953 1,1,1,1, % QoS dummie_value=1 (19 octets) 954 1,1,1,1,1, 955 1,1,1,1,1, 956 1,1,1,1,1, 957 7, % PDP_Address (Ltot=7), 958 2#00000001, % ietf/etsi organisation 959 2#00100001, % IPv4 960 198, % IP address MSD 961 124, 962 56, 963 124, % IP address LSD 964 1, % APN optional (octet1=IEI) 965 25, % APN total length 966 4, % length lable1 967 116,101,115,116, % lable1 = test 968 4, % length lable2 969 116,101,115,116, % lable2 = test 970 4, % length lable3 971 116,101,115,116, % lable3 = test 972 4, % length lable3 973 116,101,115,116, % lable4 = test 974 4, % length label5 975 103,112,114,115 976 ]. 977 978pdu_auth_rsp() -> 979 [8,16#13,0,1,2,3,16#21,2,0,1]. 980 981pdu_auth_fail() -> 982 [8,16#1C,1,16#22,2,0,1]. 983 984init_iu_sign_con_id() -> 985 #'ProtocolIE-Field'{ 986 id = 79, % 79 = id-IuSigConId 987 criticality = ignore,%XXX 988 value = iu_sign_con_id() 989 }. 990 991iu_sign_con_id() -> 992 53245. 993% [1,0,1,0,1,0,1,0, 994% 1,0,1,0,1,0,1,0, 995% 1,0,1,0,1,0,1,1] 996 997init_global_rnc_id_initial_ue() -> 998 #'ProtocolIE-Field'{ 999 id = 86, % 86 = id-GlobalRNC-ID 1000 criticality = ignore,%XXX 1001 value = global_rnc_id() 1002 }. 1003 1004global_rnc_id() -> 1005 #'GlobalRNC-ID'{'pLMN-ID' = [10,11,12], 'rNC-ID' = 2048}. 1006 1007direct_transfer_cn() -> 1008 #'DirectTransfer'{ 1009 protocolIEs = direct_transfer_cn_ies() 1010 }. 1011 1012direct_transfer_cn_ies() -> 1013 [dir_cn_nas_pdu(), 1014 dir_lai(), 1015 dir_rac()]. 1016 1017dir_cn_nas_pdu() -> 1018 #'ProtocolIE-Field'{ 1019 id = 16, % 16 = id-NAS-PDU 1020 criticality = ignore,%XXX 1021 value = pdu_auth_fail() 1022 }. 1023 1024dir_lai() -> 1025 #'ProtocolIE-Field'{ 1026 id = 15, % 15 = id-LAI 1027 criticality = ignore,%XXX 1028 value = lai() 1029 }. 1030 1031dir_rac() -> 1032 #'ProtocolIE-Field'{ 1033 id = 55, % 55 = id-RAC 1034 criticality = ignore,%XXX 1035 value = rac() 1036 }. 1037 1038 1039 1040 1041 1042 1043direct_transfer_rnc() -> 1044 #'DirectTransfer'{ 1045 protocolIEs = direct_transfer_rnc_ies() 1046 }. 1047 1048direct_transfer_rnc_ies() -> 1049 [dir_rnc_nas_pdu(), 1050 dir_sapi()]. 1051 1052dir_rnc_nas_pdu() -> 1053 #'ProtocolIE-Field'{ 1054 id = 16, % 16 = id-NAS-PDU 1055 criticality = ignore,%XXX 1056 value = pdu_auth_rsp() 1057 }. 1058 1059dir_sapi() -> 1060 #'ProtocolIE-Field'{ 1061 id = 59, % 59 = id-SAPI 1062 criticality = ignore,%XXX 1063 value = sapi() 1064 }. 1065 1066sapi() -> 1067 'normal-priority'. 1068 1069 1070 1071 1072 1073iu_release_command() -> 1074 #'Iu-ReleaseCommand'{ 1075 protocolIEs = iu_rel_command_ies() 1076 }. 1077 1078iu_rel_command_ies() -> 1079 [iu_relcomcause_nas()]. 1080 1081iu_relcomcause_nas() -> 1082 #'ProtocolIE-Field'{ 1083 id = 4, % 4 = Id-Cause 1084 criticality = ignore,%XXX 1085 value = cause() 1086 }. 1087 1088cause() -> 1089 cause_nas(). 1090 1091% cause() -> 1092% {ok,Bytes} = 1093% wrapper_encode(?ranap,'CauseNAS', 1094% {'CauseNAS', 'normal-release'}), 1095% Bytes. 1096 1097 1098 1099 1100 1101 1102iu_release_complete() -> 1103 #'Iu-ReleaseComplete'{ 1104 protocolIEs = iu_rel_comp_ies() 1105 }. 1106 1107iu_rel_comp_ies() -> 1108 []. 1109% 'iu-RelCompRABDataVolumeReportList' = asn1_NOVALUE, 1110% 'iu-RelCompRABReleasedListIuRelComp' = asn1_NOVALUE, 1111% 'iu-RelCompCriticalityDiagnostics' = asn1_NOVALUE 1112% }. 1113 1114 1115 1116 1117 1118 1119 1120 1121common_id() -> 1122 #'CommonID'{ 1123 protocolIEs = common_id_ies() 1124 }. 1125 1126common_id_ies() -> 1127 [common_id_imsi()]. 1128 1129common_id_imsi() -> 1130 #'ProtocolIE-Field'{ 1131 id = 23, % 23 = Perm. NAS ID (IMSI) 1132 criticality = ignore, %ignore,%XXX %XXX 1133 value = imsi() 1134 }. 1135 1136imsi() -> 1137 {iMSI, [1,2,3,4,5,6,7,8]}. 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148security_mode_cmd() -> 1149 #'SecurityModeCommand'{ 1150 protocolIEs = security_mode_cmd_ies() 1151 }. 1152 1153security_mode_cmd_ies() -> 1154 [security_mode_cmd_integ(), 1155 security_mode_cmd_encr(), 1156 security_mode_cmd_keystat() 1157 ]. 1158 1159security_mode_cmd_integ() -> 1160 #'ProtocolIE-Field'{ 1161 id = 12, % 12 = Integ info 1162 criticality = ignore,%{'Criticality', ignore}, 1163 value = integ_info() 1164 }. 1165 1166integ_info() -> 1167 #'IntegrityProtectionInformation'{ 1168 permittedAlgorithms = perm_integ_algs(), 1169 key = key() }. 1170 1171perm_integ_algs() -> 1172 [integ_prot_alg()]. 1173 1174integ_prot_alg() -> 1175 'standard-UMTS-integrity-algorithm-UIA1'. 1176 1177key() -> 1178 [1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, 1179 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, 1180 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, 1181 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, 1182 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, 1183 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, 1184 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, 1185 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0]. 1186 1187 1188 1189security_mode_cmd_encr() -> 1190 #'ProtocolIE-Field'{ 1191 id = 11, % 11 = Encr info 1192 criticality = ignore,%{'Criticality', ignore}, 1193 value = encr_info() 1194 }. 1195 1196encr_info() -> 1197 #'EncryptionInformation'{ 1198 permittedAlgorithms = perm_encr_algs(), 1199 key = key() }. 1200 1201perm_encr_algs() -> 1202 [encr_prot_alg()]. 1203 1204encr_prot_alg() -> 1205 'standard-UMTS-encryption-algorith-UEA1'. 1206 1207security_mode_cmd_keystat() -> 1208 #'ProtocolIE-Field'{ 1209 id = 75, % 75 = id-KeyStatus 1210 criticality = ignore,%{'Criticality', ignore}, 1211 value = key_status() 1212 }. 1213 1214key_status() -> 1215 new. 1216 1217 1218 1219 1220 1221security_mode_cmp() -> 1222 #'SecurityModeComplete'{ 1223 protocolIEs = security_mode_cmp_ies() 1224 }. 1225 1226security_mode_cmp_ies() -> 1227 [security_mode_cmp_ch_integ_prot_alg(), 1228 security_mode_cmp_ch_encr_alg() 1229 ]. 1230 1231security_mode_cmp_ch_integ_prot_alg() -> 1232 #'ProtocolIE-Field'{ 1233 id = 6, % 6 = Chosen Integ prot alg 1234 criticality = ignore,%XXX 1235 value = ch_integ_prot_alg() 1236 }. 1237 1238ch_integ_prot_alg() -> 1239 'standard-UMTS-integrity-algorithm-UIA1'. 1240 1241 1242security_mode_cmp_ch_encr_alg() -> 1243 #'ProtocolIE-Field'{ 1244 id = 5, % 5 = Chosen Encr alg 1245 criticality = ignore,%XXX 1246 value = ch_encr_alg() 1247 }. 1248 1249ch_encr_alg() -> 1250 'standard-UMTS-encryption-algorith-UEA1'. 1251 1252 1253 1254 1255security_mode_rej() -> 1256 #'SecurityModeReject'{ 1257 protocolIEs = security_mode_rej_ies() 1258 }. 1259 1260security_mode_rej_ies() -> 1261 [security_mode_rej_cause()]. 1262 1263 1264security_mode_rej_cause() -> 1265 #'ProtocolIE-Field'{ 1266 id = 4, % 4 = Id-Cause 1267 criticality = ignore,%XXX 1268 value = cause_radio() % Se Reset 1269 }. 1270 1271 1272 1273 1274 1275 1276 1277 1278reset() -> 1279 #'Reset'{ 1280 protocolIEs = reset_ies() 1281 }. 1282reset_ies() -> 1283 [reset_cause(), 1284 cn_domain_ind(), % Se initial Ue 1285 init_global_rnc_id() % ---- " ---- 1286 ]. 1287 1288init_global_rnc_id() -> 1289 #'ProtocolIE-Field'{ 1290 id = 86, % 86 = id-GlobalRNC-ID 1291 criticality = ignore,%XXX 1292 value = global_rnc_id() 1293 }. 1294 1295reset_cause() -> 1296 #'ProtocolIE-Field'{ 1297 id = 4, % 4 = id-Cause 1298 criticality = ignore,%XXX 1299 value = cause_radio() 1300 }. 1301%cause_open() -> 1302% {ok,Bytes} = 1303% wrapper_encode(?ranap,'Cause', cause_radio()), 1304% Bytes. 1305cause_radio() -> 1306 {radioNetwork, 'release-due-to-utran-generated-reason'}. 1307 1308 1309cn_domain_ind(IEs) when atom(IEs)-> 1310 setelement(1,cn_domain_ind(),IEs). 1311 1312cn_domain_ind() -> 1313 #'ProtocolIE-Field'{ 1314 id = 3, % 3 = InitUE-MessageIEsCN-DomainIndicator 1315 criticality = ignore,%XXX 1316 value = cn_domain_indicator() 1317 }. 1318 1319 1320 1321 1322reset_ack() -> 1323 #'ResetAcknowledge'{ 1324 protocolIEs = reset_ack_ies() 1325 }. 1326reset_ack_ies() -> 1327 [cn_domain_ind()]. % Se initial Ue 1328 1329 1330 1331 1332 1333reset_res(IuSCId) -> 1334 #'ResetResource'{ 1335 protocolIEs = reset_res_ies(IuSCId) 1336 }. 1337 1338reset_res_ies(IuSCId) -> 1339 [ 1340 cn_domain_ind() % Se initial Ue 1341 ,reset_cause() % Se reset 1342 ,reset_res_list(IuSCId) 1343 ,init_global_rnc_id_reset_res() % ---- " ---- 1344 ]. 1345 1346init_global_rnc_id_reset_res() -> 1347 #'ProtocolIE-Field'{ 1348 id = 86, % 86 = id-GlobalRNC-ID 1349 criticality = ignore,%XXX 1350 value = global_rnc_id() 1351 }. 1352 1353reset_res_list(IuSCId) -> 1354 #'ProtocolIE-Field'{ 1355 id = 77, % 77 = id-IuSigConIdList 1356 criticality = ignore,%XXX 1357 value = res_list(IuSCId) 1358 }. 1359 1360res_list(IuSCId) -> 1361 iu_Sig_Con_Id_list(IuSCId,[]). 1362 1363iu_Sig_Con_Id_list([],List) -> 1364 List; 1365 1366iu_Sig_Con_Id_list([IuSCId|T],List) -> 1367 Ie = [iu_Sig_Con_Id_ie(IuSCId)], 1368 iu_Sig_Con_Id_list(T,[Ie|List]). 1369 1370iu_Sig_Con_Id_ie(IuSCId) -> 1371 #'ProtocolIE-Field'{ 1372 id = 78, % 78 = id-IuSigConIdItem 1373 criticality = ignore,%XXX 1374 value = iu_Sig_Con_Id_item(IuSCId)}. 1375 1376iu_Sig_Con_Id_item(IuSCId) -> 1377 #'ResetResourceItem'{ 1378 iuSigConId = IuSCId 1379% 53432 1380% [1,0,1,0,1,0,1,0, 1381% 1,0,1,0,1,0,1,0, 1382% 1,0,1,0,1,0,1,0] 1383 }. 1384 1385 1386reset_res_ack(IuSCId) -> 1387 #'ResetResourceAcknowledge'{ 1388 protocolIEs = reset_res_ack_ies(IuSCId) 1389 }. 1390reset_res_ack_ies(IuSCId) -> 1391 [ 1392 cn_domain_ind() % Se initial Ue 1393 ,reset_res_list(IuSCId) % Se Reset Ressource 1394 ]. 1395 1396 1397int2bin(Int) -> 1398 EmptyList = [], 1399 BitList_b1 = [Int band 2#1 | EmptyList], 1400 BitList_b2 = [(Int bsr 1) band 2#1 | BitList_b1], 1401 BitList_b3 = [(Int bsr 2) band 2#1 | BitList_b2], 1402 BitList_b4 = [(Int bsr 3) band 2#1 | BitList_b3], 1403 BitList_b5 = [(Int bsr 4) band 2#1 | BitList_b4], 1404 BitList_b6 = [(Int bsr 5) band 2#1 | BitList_b5], 1405 BitList_b7 = [(Int bsr 6) band 2#1 | BitList_b6], 1406 BitList = [(Int bsr 7) band 2#1 | BitList_b7], 1407 io:format("~n~w~n", [BitList]). 1408 1409 1410%%%%%%%%%%%%%%%%% wrappers %%%%%%%%%%%%%%%%%%%%%%%% 1411 1412wrapper_encode(Module,Type,Value) -> 1413 case Module:encode(Type, Value) of 1414 {ok,X} when is_binary(X) -> 1415 {ok, binary_to_list(X)}; 1416 Error -> 1417 Error 1418 end. 1419 1420wrapper_decode(Module, Type, Bytes) when is_binary(Bytes) -> 1421 Module:decode(Type, Bytes); 1422wrapper_decode(Module, Type, Bytes) when is_list(Bytes) -> 1423 Module:decode(Type, list_to_binary(Bytes)). 1424