pespin has submitted this change. ( 
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(-)

Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, approved




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 <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to