pespin has submitted this change. ( https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/35689?usp=email )
Change subject: Split auth_handler module into SWm files for ePDG and AAA Server ......................................................................
Split auth_handler module into SWm files for ePDG and AAA Server
This allows more easily matching and following the code against the procedures the specs define. Also, ensure proper separation of data and proper order of procedures when later on we may split the AAA Server to be an external process.
Change-Id: Ieb925445fb0cf45a58439fd0c4cd9e4d779a0a79 --- R src/aaa_diameter_swm.erl C src/epdg_diameter_swm.erl M src/epdg_ue_fsm.erl M src/osmo_epdg_sup.erl 4 files changed, 43 insertions(+), 22 deletions(-)
Approvals: pespin: Looks good to me, approved laforge: Looks good to me, but someone else must approve Jenkins Builder: Verified
diff --git a/src/auth_handler.erl b/src/aaa_diameter_swm.erl similarity index 83% rename from src/auth_handler.erl rename to src/aaa_diameter_swm.erl index 9d142fa..6aef1b2 100644 --- a/src/auth_handler.erl +++ b/src/aaa_diameter_swm.erl @@ -1,10 +1,12 @@ --module(auth_handler). +% AAA Server implementation of SWm Diameter interface, TS 29.273 section 7 +% This interface is so far implemented through internal erlang messages against +% the internal ePDG. +-module(aaa_diameter_swm). -behaviour(gen_server).
--include_lib("osmo_gsup/include/gsup_protocol.hrl"). -include_lib("diameter_3gpp_ts29_273_swx.hrl").
--record(auth_state, { +-record(swm_state, { table_id % ets table id }).
@@ -23,7 +25,7 @@
init([]) -> TableId = ets:new(auth_req, [bag, named_table]), - {ok, #auth_state{table_id = TableId}}. + {ok, #swm_state{table_id = TableId}}.
auth_request(Imsi) -> diff --git a/src/auth_handler.erl b/src/epdg_diameter_swm.erl similarity index 70% copy from src/auth_handler.erl copy to src/epdg_diameter_swm.erl index 9d142fa..9c3145b 100644 --- a/src/auth_handler.erl +++ b/src/epdg_diameter_swm.erl @@ -1,11 +1,12 @@ --module(auth_handler). +% ePDG implementation of SWm Diameter interface, TS 29.273 section 7 +% This interface is so far implemented through internal erlang messages against +% the internal AAA Server. +-module(epdg_diameter_swm). -behaviour(gen_server).
--include_lib("osmo_gsup/include/gsup_protocol.hrl"). -include_lib("diameter_3gpp_ts29_273_swx.hrl").
--record(auth_state, { - table_id % ets table id +-record(swm_state, { }).
-export([start_link/0]). @@ -22,18 +23,15 @@ gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
init([]) -> - TableId = ets:new(auth_req, [bag, named_table]), - {ok, #auth_state{table_id = TableId}}. + {ok, #swm_state{}}.
auth_request(Imsi) -> gen_server:call(?SERVER, {epdg_auth_req, Imsi}).
-handle_call({epdg_auth_req, Imsi}, From, State) -> - % request the diameter code for a tuple - CKey = [], - IntegrityKey = [], - Result = aaa_diameter_swx:multimedia_auth_request(Imsi, 1, "EAP-AKA", 1, CKey, IntegrityKey), +handle_call({epdg_auth_req, Imsi}, _From, State) -> + % we yet don't implement the Diameter SWm interface on the wire, we process the call internally: + Result = aaa_diameter_swm:auth_request(Imsi), case Result of {ok, Mar} -> {reply, {ok, Mar}, State}; {error, Err} -> {reply, {error, Err}, State}; diff --git a/src/epdg_ue_fsm.erl b/src/epdg_ue_fsm.erl index 8ddb369..787689d 100644 --- a/src/epdg_ue_fsm.erl +++ b/src/epdg_ue_fsm.erl @@ -128,7 +128,7 @@
state_new({call, From}, auth_request, Data) -> lager:info("ue_fsm state_new event=auth_request, ~p~n", [Data]), - Auth = auth_handler:auth_request(Data#ue_fsm_data.imsi), + Auth = epdg_diameter_swm:auth_request(Data#ue_fsm_data.imsi), gsup_server:auth_response(Data#ue_fsm_data.imsi, Auth), case Auth of {ok, _} -> diff --git a/src/osmo_epdg_sup.erl b/src/osmo_epdg_sup.erl index 9b44731..4d004e2 100644 --- a/src/osmo_epdg_sup.erl +++ b/src/osmo_epdg_sup.erl @@ -23,6 +23,7 @@ GtpcLocalPort = application:get_env(?ENV_APP_NAME, gtpc_local_port, ?ENV_DEFAULT_GTPC_LOCAL_PORT), GtpcRemoteIp = application:get_env(?ENV_APP_NAME, gtpc_remote_ip, ?ENV_DEFAULT_GTPC_REMOTE_IP), GtpcRemotePort = application:get_env(?ENV_APP_NAME, gtpc_remote_port, ?ENV_DEFAULT_GTPC_REMOTE_PORT), + %% AAA Server processes: AAADiaSWxServer = {aaa_diameter_swx, {aaa_diameter_swx,start_link,[]}, permanent, 5000, @@ -33,6 +34,12 @@ 5000, worker, [aaa_diameter_s6b_cb]}, + AAADiaSWmServer = {aaa_diameter_swm, {aaa_diameter_swm, start_link, []}, + permanent, + 5000, + worker, + [aaa_diameter_swm]}, + %% ePDG processes: GtpcServer = {epdg_gtpc_s2b, {epdg_gtpc_s2b,start_link, [GtpcLocalIp, GtpcLocalPort, GtpcRemoteIp, GtpcRemotePort, []]}, permanent, 5000, @@ -43,9 +50,9 @@ 5000, worker, [gsup_server]}, - AuthHandler = {auth_handler, {auth_handler, start_link, []}, - permanent, - 5000, - worker, - [auth_handler]}, - {ok, { {one_for_all, 5, 10}, [AAADiaSWxServer, AAADiaS6bServer, GtpcServer, GsupServer, AuthHandler]} }. + DiaSWmServer = {epdg_diameter_swm, {epdg_diameter_swm, start_link, []}, + permanent, + 5000, + worker, + [epdg_diameter_swm]}, + {ok, { {one_for_all, 5, 10}, [AAADiaSWxServer, AAADiaS6bServer, AAADiaSWmServer, GtpcServer, GsupServer, DiaSWmServer]} }.