lynxis lazus has submitted this change. ( https://gerrit.osmocom.org/c/erlang/osmo_dia2gsup/+/43092?usp=email )
Change subject: Set Item-Number in UTRAN and GERAN vectors. ......................................................................
Set Item-Number in UTRAN and GERAN vectors.
For some reason this field was only being set on E-UTRAN vectors, even though its required for all vectors.
Change-Id: I75da04b806f23452c9b4cfaad0446dceb32a0369 --- M src/server_cb.erl 1 file changed, 22 insertions(+), 8 deletions(-)
Approvals: lynxis lazus: Looks good to me, approved Jenkins Builder: Verified fixeria: Looks good to me, but someone else must approve
diff --git a/src/server_cb.erl b/src/server_cb.erl index f51bb5c..1606085 100644 --- a/src/server_cb.erl +++ b/src/server_cb.erl @@ -74,13 +74,13 @@ #'E-UTRAN-Vector'{'Item-Number'=Idx, 'RAND'=Rand, 'XRES'=Res , 'AUTN'=Autn, 'KASME'=compute_kasme(Ck, Ik, Vplmn, Autn)}.
--spec gsup_tuple2dia_utran('GSUPAuthTuple'()) -> #'UTRAN-Vector'{}. -gsup_tuple2dia_utran(#{autn:=Autn, ck:=Ck, ik:=Ik, rand:=Rand, res:=Res}) -> - #'UTRAN-Vector'{'RAND'=Rand, 'XRES'=Res, 'AUTN'=Autn, 'Confidentiality-Key'=Ck, 'Integrity-Key'=Ik}. +-spec gsup_tuple2dia_utran('GSUPAuthTuple'(), integer()) -> #'UTRAN-Vector'{}. +gsup_tuple2dia_utran(#{autn:=Autn, ck:=Ck, ik:=Ik, rand:=Rand, res:=Res}, Idx) -> + #'UTRAN-Vector'{'Item-Number'=Idx, 'RAND'=Rand, 'XRES'=Res, 'AUTN'=Autn, 'Confidentiality-Key'=Ck, 'Integrity-Key'=Ik}.
--spec gsup_tuple2dia_geran('GSUPAuthTuple'()) -> #'GERAN-Vector'{}. -gsup_tuple2dia_geran(#{rand:=Rand, sres:=Sres, kc:=Kc}) -> - #'GERAN-Vector'{'RAND'=Rand, 'SRES'=Sres, 'Kc'=Kc}. +-spec gsup_tuple2dia_geran('GSUPAuthTuple'(), integer()) -> #'GERAN-Vector'{}. +gsup_tuple2dia_geran(#{rand:=Rand, sres:=Sres, kc:=Kc}, Idx) -> + #'GERAN-Vector'{'Item-Number'=Idx, 'RAND'=Rand, 'SRES'=Sres, 'Kc'=Kc}.
-spec gsup_tuples2dia_eutran(['GSUPAuthTuple'()], binary()) -> [#'E-UTRAN-Vector'{}]. gsup_tuples2dia_eutran(List, Vplmn) -> gsup_tuples2dia_eutran(List, Vplmn, [], 1). @@ -89,6 +89,20 @@ Dia = gsup_tuple2dia_eutran(Head, Vplmn, Ctr), gsup_tuples2dia_eutran(Tail, Vplmn, [Dia|Out], Ctr+1).
+-spec gsup_tuples2dia_utran(['GSUPAuthTuple'()]) -> [#'UTRAN-Vector'{}]. +gsup_tuples2dia_utran(List) -> gsup_tuples2dia_utran(List, [], 1). +gsup_tuples2dia_utran([], Out, _Idx) -> Out; +gsup_tuples2dia_utran([Head|Tail], Out, Ctr) -> + Dia = gsup_tuple2dia_utran(Head, Ctr), + gsup_tuples2dia_utran(Tail, [Dia|Out], Ctr+1). + +-spec gsup_tuples2dia_geran(['GSUPAuthTuple'()]) -> [#'GERAN-Vector'{}]. +gsup_tuples2dia_geran(List) -> gsup_tuples2dia_geran(List, [], 1). +gsup_tuples2dia_geran([], Out, _Idx) -> Out; +gsup_tuples2dia_geran([Head|Tail], Out, Ctr) -> + Dia = gsup_tuple2dia_geran(Head, Ctr), + gsup_tuples2dia_geran(Tail, [Dia|Out], Ctr+1). + -type int_or_false() :: false | integer(). -spec gsup_tuples2dia(['GSUPAuthTuple'()], binary(), int_or_false(), int_or_false(), int_or_false()) -> #'Authentication-Info'{}. gsup_tuples2dia(Tuples, Vplmn, NumEutran, NumUtran, NumGeran) -> @@ -100,12 +114,12 @@ case NumUtran of false -> UtranVecs = []; 0 -> UtranVecs = []; - _ -> UtranVecs = lists:map(fun gsup_tuple2dia_utran/1, lists:sublist(Tuples,NumUtran)) + _ -> UtranVecs = gsup_tuples2dia_utran(lists:sublist(Tuples,NumUtran)) end, case NumGeran of false -> GeranVecs = []; 0 -> GeranVecs = []; - _ -> GeranVecs = lists:map(fun gsup_tuple2dia_geran/1, lists:sublist(Tuples,NumGeran)) + _ -> GeranVecs = gsup_tuples2dia_geran(lists:sublist(Tuples,NumGeran)) end, #'Authentication-Info'{'E-UTRAN-Vector'=EutranVecs, 'UTRAN-Vector'=UtranVecs, 'GERAN-Vector'=GeranVecs}.