pespin has uploaded this change for review.
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(-)
git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-epdg refs/changes/89/35689/1
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]} }.
To view, visit change 35689. To unsubscribe, or for help writing mail filters, visit settings.