pespin has submitted this change. ( https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/35947?usp=email )
Change subject: s2b: Use provided APN in CreateSessionReq ......................................................................
s2b: Use provided APN in CreateSessionReq
Change-Id: I9e48c531aec837aade44a8c87d61a67f6bb44ca9 --- M src/epdg_gtpc_s2b.erl M src/epdg_ue_fsm.erl 2 files changed, 21 insertions(+), 14 deletions(-)
Approvals: laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved Jenkins Builder: Verified
diff --git a/src/epdg_gtpc_s2b.erl b/src/epdg_gtpc_s2b.erl index e3e464b..313e101 100644 --- a/src/epdg_gtpc_s2b.erl +++ b/src/epdg_gtpc_s2b.erl @@ -48,7 +48,7 @@ %% gen_server Function Exports -export([init/1, handle_call/3, handle_cast/2, handle_info/2]). -export([code_change/3]). --export([create_session_req/1, delete_session_req/1]). +-export([create_session_req/2, delete_session_req/1]).
%% Application Definitions -define(SERVER, ?MODULE). @@ -57,8 +57,6 @@ -define(CALLBACK_MOD, epdg_gtpc_s2b_cb). -define(ENV_APP_NAME, osmo_epdg).
-%% TODO: make APN configurable? get it from HSS? --define(APN, <<"internet">>). -define(MCC, 901). -define(MNC, 42). -define(MNC_SIZE, 3). @@ -137,14 +135,16 @@ lager:error("GTPv2C UDP socket open error: ~w~n", [Reason]) end.
-create_session_req(Imsi) -> - gen_server:call(?SERVER, {gtpc_create_session_req, {Imsi}}). +create_session_req(Imsi, Apn) -> + gen_server:call(?SERVER, {gtpc_create_session_req, {Imsi, Apn}}).
delete_session_req(Imsi) -> gen_server:call(?SERVER, {gtpc_delete_session_req, {Imsi}}).
-handle_call({gtpc_create_session_req, {Imsi}}, {Pid, _Tag} = _From, State0) -> - {Sess0, State1} = find_or_new_gtp_session(Imsi, Pid, State0), +handle_call({gtpc_create_session_req, {Imsi, Apn}}, {Pid, _Tag} = _From, State0) -> + {Sess0, State1} = find_or_new_gtp_session(Imsi, + #gtp_session{pid = Pid, apn = list_to_binary(Apn)}, + State0), Req = gen_create_session_request(Sess0, State1), %TODO: increment State.seq_no. tx_gtp(Req, State1), @@ -199,15 +199,13 @@ %% Internal Function Definitions %% ------------------------------------------------------------------
-new_gtp_session(Imsi, Pid, State) -> +new_gtp_session(Imsi, SessTpl, State) -> % TODO: find non-used local TEI inside State DefaultBearer = #gtp_bearer{ ebi = 5, local_data_tei = State#gtp_state.next_local_data_tei }, - Sess = #gtp_session{imsi = Imsi, - pid = Pid, - apn = ?APN, + Sess = SessTpl#gtp_session{imsi = Imsi, local_control_tei = State#gtp_state.next_local_control_tei, default_bearer_id = DefaultBearer#gtp_bearer.ebi, bearers = sets:add_element(DefaultBearer, sets:new()) @@ -227,13 +225,13 @@ State#gtp_state.sessions), Res.
-find_or_new_gtp_session(Imsi, Pid, State) -> +find_or_new_gtp_session(Imsi, SessTpl, State) -> Sess = find_gtp_session_by_imsi(Imsi, State), case Sess of #gtp_session{imsi = Imsi} -> {Sess, State}; undefined -> - new_gtp_session(Imsi, Pid, State) + new_gtp_session(Imsi, SessTpl, State) end.
update_gtp_session(OldSess, NewSess, State) -> diff --git a/src/epdg_ue_fsm.erl b/src/epdg_ue_fsm.erl index 2553e3f..4b6747e 100644 --- a/src/epdg_ue_fsm.erl +++ b/src/epdg_ue_fsm.erl @@ -239,7 +239,7 @@
state_authenticated({call, From}, tunnel_request, Data) -> lager:info("ue_fsm state_authenticated event=tunnel_request, ~p~n", [Data]), - epdg_gtpc_s2b:create_session_req(Data#ue_fsm_data.imsi), + epdg_gtpc_s2b:create_session_req(Data#ue_fsm_data.imsi, Data#ue_fsm_data.apn), {keep_state, Data, [{reply,From,ok}]};
state_authenticated({call, From}, {received_gtpc_create_session_response, Result}, Data) ->