pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36171?usp=email )
Change subject: Forward PGW Address PGW->AAA->HSS
......................................................................
Forward PGW Address PGW->AAA->HSS
We were missing passing the actual IP address of the PDN-GW when
transmitting SAR to the HSS (precisely with the aim of updating that
information).
Change-Id: Ia99442487fef56c16c4be2fb7f36221d016e55e0
---
M src/aaa_diameter_s6b_cb.erl
M src/aaa_diameter_swx.erl
M src/aaa_ue_fsm.erl
3 files changed, 32 insertions(+), 17 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-epdg refs/changes/71/36171/1
diff --git a/src/aaa_diameter_s6b_cb.erl b/src/aaa_diameter_s6b_cb.erl
index ab15bd6..b3fe209 100644
--- a/src/aaa_diameter_s6b_cb.erl
+++ b/src/aaa_diameter_s6b_cb.erl
@@ -58,12 +58,13 @@
'Auth-Application-Id' = AuthAppId,
'Auth-Request-Type' = AuthReqType,
'User-Name' = [UserName],
- 'Service-Selection' = [Apn]} = Req,
+ 'Service-Selection' = [Apn],
+ 'MIP6-Agent-Info' = AgentInfoOpt } = Req,
Imsi = conv:nai_to_imsi(UserName),
PidRes = aaa_ue_fsm:get_pid_by_imsi(Imsi),
case PidRes of
PidRes when is_pid(PidRes) ->
- ok = aaa_ue_fsm:ev_rx_s6b_aar(PidRes, Apn),
+ ok = aaa_ue_fsm:ev_rx_s6b_aar(PidRes, {Apn, AgentInfoOpt}),
lager:debug("Waiting for S6b AAA~n", []),
receive
{aaa, ResultCode} -> lager:debug("Rx AAA with ResultCode=~p~n",
[ResultCode])
diff --git a/src/aaa_diameter_swx.erl b/src/aaa_diameter_swx.erl
index be301f2..72a360e 100644
--- a/src/aaa_diameter_swx.erl
+++ b/src/aaa_diameter_swx.erl
@@ -51,7 +51,7 @@
-export([init/1, handle_call/3, handle_cast/2, handle_info/2]).
-export([code_change/3]).
-export([multimedia_auth_request/7]).
--export([server_assignment_request/3]).
+-export([server_assignment_request/4]).
-export([test/0, test/1]).
%% Diameter Application Definitions
@@ -146,9 +146,9 @@
gen_server:call(?SERVER,
{mar, {IMSI, NumAuthItems, AuthScheme, RAT, CKey, IntegrityKey,
PdpTypeNr}}).
% APN is optional and should be []
-server_assignment_request(IMSI, Type, APN) ->
+server_assignment_request(IMSI, Type, APN, AgentInfoOpt) ->
gen_server:call(?SERVER,
- {sar, {IMSI, Type, APN}}).
+ {sar, {IMSI, Type, APN, AgentInfoOpt}}).
result_code_success(2001) -> ok;
result_code_success(2002) -> ok;
@@ -235,8 +235,8 @@
{reply, {error, Err}, State}
end;
-handle_call({sar, {IMSI, Type, APN}}, {Pid, _Tag} = _From, State) ->
- lager:debug("SWx Tx SAR Imsi=~p Type=~p APN=~p~n", [IMSI, Type, APN]),
+handle_call({sar, {IMSI, Type, APN, AgentInfoOpt}}, {Pid, _Tag} = _From, State) ->
+ lager:debug("SWx Tx SAR Imsi=~p Type=~p APN=~p AgentInfoOpt=~p ~n", [IMSI,
Type, APN, AgentInfoOpt]),
SessionId = diameter:session_id(application:get_env(?ENV_APP_NAME, origin_host,
?ENV_DEFAULT_ORIG_HOST)),
SAR = #'SAR'{'Vendor-Specific-Application-Id' =
#'Vendor-Specific-Application-Id'{
'Vendor-Id' = ?VENDOR_ID_3GPP,
@@ -245,7 +245,8 @@
'User-Name' = IMSI,
'Auth-Session-State' = 1,
'Server-Assignment-Type' = Type,
- 'Service-Selection' = [APN]
+ 'Service-Selection' = [APN],
+ 'MIP6-Agent-Info' = AgentInfoOpt
},
Ret = diameter_call(SAR, Pid, State),
case Ret of
diff --git a/src/aaa_ue_fsm.erl b/src/aaa_ue_fsm.erl
index fd39061..9fa868e 100644
--- a/src/aaa_ue_fsm.erl
+++ b/src/aaa_ue_fsm.erl
@@ -111,10 +111,10 @@
{error, Err}
end.
-ev_rx_s6b_aar(Pid, Apn) ->
- lager:info("ue_fsm ev_rx_s6b_aar: ~p~n", [Apn]),
+ev_rx_s6b_aar(Pid, {Apn, AgentInfoOpt}) ->
+ lager:info("ue_fsm ev_rx_s6b_aar: ~p ~p~n", [Apn, AgentInfoOpt]),
try
- gen_statem:call(Pid, {rx_s6b_aar, Apn})
+ gen_statem:call(Pid, {rx_s6b_aar, Apn, AgentInfoOpt})
catch
exit:Err ->
{error, Err}
@@ -164,7 +164,7 @@
state_new({call, From}, {swm_auth_compl, Apn}, Data) ->
lager:info("ue_fsm state_new event=swm_auth_compl, ~p~n", [Data]),
- case aaa_diameter_swx:server_assignment_request(Data#ue_fsm_data.imsi, 1, Apn)
of
+ case aaa_diameter_swx:server_assignment_request(Data#ue_fsm_data.imsi, 1, Apn,
[]) of
ok -> {next_state, state_wait_swx_saa, Data, [{reply,From,ok}]};
{error, Err} -> {keep_state, Data, [{reply,From,{error, Err}}]}
end.
@@ -197,11 +197,11 @@
Data1 = Data#ue_fsm_data{epdg_sess_active = true},
{keep_state, Data1};
-state_authenticated({call, {Pid, _Tag} = From}, {rx_s6b_aar, Apn}, Data) ->
- lager:info("ue_fsm state_authenticated event=rx_s6b_aar Apn=~p, ~p~n",
[Apn, Data]),
+state_authenticated({call, {Pid, _Tag} = From}, {rx_s6b_aar, Apn, AgentInfoOpt}, Data)
->
+ lager:info("ue_fsm state_authenticated event=rx_s6b_aar Apn=~p AgentInfo=~p,
~p~n", [Apn, AgentInfoOpt, Data]),
case aaa_diameter_swx:server_assignment_request(Data#ue_fsm_data.imsi,
?'DIAMETER_CX_SERVER-ASSIGNMENT-TYPE_PGW_UPDATE',
- Apn) of
+ Apn, AgentInfoOpt) of
ok -> Data1 = Data#ue_fsm_data{s6b_resp_pid = Pid, apn = Apn},
{next_state, state_authenticated_wait_swx_saa, Data1,
[{reply,From,ok}]};
{error, Err} -> {keep_state, Data, [{reply,From,{error, Err}}]}
@@ -220,7 +220,7 @@
{true, false} -> %% All sessions will now be gone, trigger SAR
Type=USER_DEREGISTRATION
case aaa_diameter_swx:server_assignment_request(Data#ue_fsm_data.imsi,
?'DIAMETER_CX_SERVER-ASSIGNMENT-TYPE_USER_DEREGISTRATION',
- Data#ue_fsm_data.apn) of
+ Data#ue_fsm_data.apn, [])
of
ok -> {next_state, state_authenticated_wait_swx_saa, Data,
[{reply,From,ok}]};
{error, _Err} ->
DiaRC = 5002, %% UNKNOWN_SESSION_ID
@@ -241,7 +241,7 @@
{true, false} -> %% All sessions will now be gone, trigger SAR
Type=USER_DEREGISTRATION
case aaa_diameter_swx:server_assignment_request(Data#ue_fsm_data.imsi,
?'DIAMETER_CX_SERVER-ASSIGNMENT-TYPE_USER_DEREGISTRATION',
- Data#ue_fsm_data.apn) of
+ Data#ue_fsm_data.apn, [])
of
ok -> Data1 = Data#ue_fsm_data{s6b_resp_pid = Pid},
{next_state, state_authenticated_wait_swx_saa, Data1,
[{reply,From,ok}]};
{error, _Err} ->
--
To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36171?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: erlang/osmo-epdg
Gerrit-Branch: master
Gerrit-Change-Id: Ia99442487fef56c16c4be2fb7f36221d016e55e0
Gerrit-Change-Number: 36171
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: newchange