pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/35885?usp=email )
Change subject: s2b: Session can contain several bearers
......................................................................
s2b: Session can contain several bearers
Change-Id: I0ccb05a03e808122db085df73c6f0c56cec1b523
---
M src/epdg_gtpc_s2b.erl
1 file changed, 32 insertions(+), 8 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-epdg refs/changes/85/35885/1
diff --git a/src/epdg_gtpc_s2b.erl b/src/epdg_gtpc_s2b.erl
index 349aac6..3762ec3 100644
--- a/src/epdg_gtpc_s2b.erl
+++ b/src/epdg_gtpc_s2b.erl
@@ -75,7 +75,7 @@
seq_no :: 0..16#ffffffff,
next_local_control_tei = 1 :: 0..16#ffffffff,
next_local_data_tei = 1 :: 0..16#ffffffff,
- sessions = sets:new()
+ sessions = sets:new() :: sets:set()
}).
-record(gtp_bearer, {
@@ -91,7 +91,8 @@
ue_ip :: inet:ip_address(),
local_control_tei = 0 :: non_neg_integer(),
remote_control_tei = 0 :: non_neg_integer(),
- bearer :: gtp_bearer %% FIXME: only one bearer for now
+ default_bearer_id :: non_neg_integer(),
+ bearers = sets:new() :: sets:set()
}).
start_link(LocalAddr, LocalPort, RemoteAddr, RemotePort, Options) ->
@@ -200,7 +201,7 @@
new_gtp_session(Imsi, Pid, State) ->
% TODO: find non-used local TEI inside State
- Bearer = #gtp_bearer{
+ DefaultBearer = #gtp_bearer{
ebi = 5,
local_data_tei = State#gtp_state.next_local_data_tei
},
@@ -208,7 +209,8 @@
pid = Pid,
apn = ?APN,
local_control_tei = State#gtp_state.next_local_control_tei,
- bearer = Bearer
+ default_bearer_id = DefaultBearer#gtp_bearer.ebi,
+ bearers = sets:add_element(DefaultBearer, sets:new())
},
NewSt = State#gtp_state{next_local_control_tei =
State#gtp_state.next_local_control_tei + 1,
next_local_data_tei = State#gtp_state.next_local_data_tei +
1,
@@ -242,6 +244,19 @@
SetRemoved = sets:del_element(Sess, State#gtp_state.sessions),
State#gtp_state{sessions = SetRemoved}.
+gtp_session_find_bearer_by_ebi(Sess, Ebi) ->
+ {Ebi, Res} = sets:fold(
+ fun(BearerIt = #gtp_bearer{ebi = LookupEbi}, {LookupEbi, _AccIn})
-> {LookupEbi, BearerIt};
+ (_, AccIn) -> AccIn
+ end,
+ {Ebi, undefined},
+ Sess#gtp_session.bearers),
+ Res.
+
+gtp_session_default_bearer(Sess) ->
+ gtp_session_find_bearer_by_ebi(Sess, Sess#gtp_session.default_bearer_id).
+
+
update_gtp_session_from_create_session_response_ie(none, Sess) ->
Sess;
update_gtp_session_from_create_session_response_ie({_,
@@ -329,11 +344,11 @@
%% 7.2.1 Create Session Request
gen_create_session_request(#gtp_session{imsi = Imsi,
apn = Apn,
- local_control_tei = LocalCtlTEI,
- bearer = Bearer},
+ local_control_tei = LocalCtlTEI} = Sess,
#gtp_state{laddr = LocalAddr,
restart_counter = RCnt,
seq_no = SeqNo}) ->
+ Bearer = gtp_session_default_bearer(Sess),
BearersIE = [#v2_bearer_level_quality_of_service{
pci = 1, pl = 10, pvi = 0, label = 8,
maximum_bit_rate_for_uplink = 0,
@@ -369,10 +384,10 @@
#gtp{version = v2, type = create_session_request, tei = 0, seq_no = SeqNo, ie =
IEs}.
%% 7.2.9 Delete Session Request
-gen_delete_session_request(#gtp_session{remote_control_tei = RemoteCtlTEI,
- bearer = Bearer},
+gen_delete_session_request(#gtp_session{remote_control_tei = RemoteCtlTEI} = Sess,
#gtp_state{laddr = LocalAddr,
seq_no = SeqNo}) ->
+ Bearer = gtp_session_default_bearer(Sess),
IEs = [#v2_eps_bearer_id{eps_bearer_id = Bearer#gtp_bearer.ebi},
#v2_fully_qualified_tunnel_endpoint_identifier{
instance = Bearer#gtp_bearer.ebi,
--
To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/35885?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: I0ccb05a03e808122db085df73c6f0c56cec1b523
Gerrit-Change-Number: 35885
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: newchange