Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
canghaiwuhen
OpenXG-RAN
Commits
4b5c4211
Commit
4b5c4211
authored
Feb 05, 2019
by
Konstantinos Alexandris
Committed by
Cedric Roux
Mar 05, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bugfix: Path switch request ack (manage re-established/released E-RABs)
parent
ca199532
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
48 additions
and
30 deletions
+48
-30
openair2/RRC/LTE/rrc_eNB_S1AP.c
openair2/RRC/LTE/rrc_eNB_S1AP.c
+48
-30
No files found.
openair2/RRC/LTE/rrc_eNB_S1AP.c
View file @
4b5c4211
...
...
@@ -1958,7 +1958,7 @@ int rrc_eNB_send_PATH_SWITCH_REQ(const protocol_ctxt_t *const ctxt_pP,
S1AP_PATH_SWITCH_REQ
(
msg_p
).
e_rabs_tobeswitched
[
e_rab
].
eNB_addr
=
create_tunnel_resp
.
enb_addr
;
LOG_I
(
RRC
,
"enb_gtp_addr (msg index %d, e_rab index %d, status %d): nb_of_e_rabs %d, e_rab_id %d, teid: %u, addr: %d.%d.%d.%d
\n
"
,
e_rabs_done
,
e_rab
,
ue_context_pP
->
ue_context
.
e_rab
[
inde_list
[
e_rab
]].
status
,
ue_context_pP
->
ue_context
.
nb_of_e_rabs
,
S1AP_PATH_SWITCH_REQ
(
msg_p
)
.
nb_of_e_rabs
,
S1AP_PATH_SWITCH_REQ
(
msg_p
).
e_rabs_tobeswitched
[
e_rab
].
e_rab_id
,
S1AP_PATH_SWITCH_REQ
(
msg_p
).
e_rabs_tobeswitched
[
e_rab
].
gtp_teid
,
S1AP_PATH_SWITCH_REQ
(
msg_p
).
e_rabs_tobeswitched
[
e_rab
].
eNB_addr
.
buffer
[
0
],
...
...
@@ -1970,7 +1970,7 @@ int rrc_eNB_send_PATH_SWITCH_REQ(const protocol_ctxt_t *const ctxt_pP,
// NN: add conditions for e_rabs_failed
if
(
e_rabs_done
>
0
)
{
LOG_I
(
RRC
,
"S1AP_PATH_SWITCH_REQ: sending the message: nb_of_erabstobeswitched %d, total e_rabs %d, index %d
\n
"
,
ue_context_pP
->
ue_context
.
nb_of_e_rabs
,
ue_context_pP
->
ue_context
.
setup_e_rabs
,
e_rab
);
S1AP_PATH_SWITCH_REQ
(
msg_p
)
.
nb_of_e_rabs
,
ue_context_pP
->
ue_context
.
setup_e_rabs
,
e_rab
);
MSC_LOG_TX_MESSAGE
(
MSC_RRC_ENB
,
MSC_S1AP_ENB
,
...
...
@@ -2017,46 +2017,64 @@ int rrc_eNB_process_S1AP_PATH_SWITCH_REQ_ACK (MessageDef *msg_p, const char *msg
ue_context_p
->
ue_context
.
mme_ue_s1ap_id
=
S1AP_PATH_SWITCH_REQ_ACK
(
msg_p
).
mme_ue_s1ap_id
;
/* Save e RAB information for later */
{
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
=
S1AP_PATH_SWITCH_REQ_ACK
(
msg_p
).
nb_e_rabs_tobereleased
;
for
(
i
=
0
;
i
<
ue_context_p
->
ue_context
.
setup_e_rabs
;
// go over total number of e_rabs received through x2_ho_req msg
i
++
)
{
// assume that we are releasing all the DRBs
ue_context_p
->
ue_context
.
e_rab
[
i
].
status
=
E_RAB_STATUS_TORELEASE
;
ue_context_p
->
ue_context
.
e_rab
[
i
].
status
=
E_RAB_STATUS_REESTABLISHED
;
if
(
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
==
0
)
{
LOG_I
(
RRC
,
"Bearer re-established with ID: %d
\n
"
,
ue_context_p
->
ue_context
.
e_rab
[
i
].
param
.
e_rab_id
);
}
}
//memset(&create_tunnel_req, 0 , sizeof(create_tunnel_req));
//
uint8_t nb_e_rabs_tobeswitched = S1AP_PATH_SWITCH_REQ_ACK (msg_p).nb_e_rabs_tobeswitched;
uint8_t
nb_e_rabs_tobeswitched
=
S1AP_PATH_SWITCH_REQ_ACK
(
msg_p
).
nb_e_rabs_tobeswitched
;
// keep the previous bearer
// the index for the rec
if
(
nb_e_rabs_tobeswitched
>
0
)
{
int
e_rab_switch_index
=
0
;
for
(
i
=
0
;
i
<
1
;
//nb_e_rabs_tobeswitched
; // go over total number of e_rabs received through x2_ho_req msg
i
<
ue_context_p
->
ue_context
.
setup_e_rabs
;
// go over total number of e_rabs received through x2_ho_req msg
i
++
)
{
LOG_I
(
RRC
,
"Bearer re-established with ID: %d
\n
"
,
ue_context_p
->
ue_context
.
e_rab
[
i
].
param
.
e_rab_id
);
/* Harmonize with enb_gtp_teid, enb_gtp_addrs, and enb_gtp_rbi vars in the top level structure */
ue_context_p
->
ue_context
.
e_rab
[
i
].
status
=
E_RAB_STATUS_REESTABLISHED
;
//ue_context_p->ue_context.e_rab[i].param.e_rab_id = S1AP_PATH_SWITCH_REQ_ACK (msg_p).e_rabs_tobeswitched[i].e_rab_id;
//ue_context_p->ue_context.e_rab[i].param.sgw_addr= S1AP_PATH_SWITCH_REQ_ACK (msg_p).e_rabs_tobeswitched[i].sgw_addr;
//ue_context_p->ue_context.e_rab[i].param.gtp_teid = S1AP_PATH_SWITCH_REQ_ACK (msg_p).e_rabs_tobeswitched[i].gtp_teid;
/* Tunnel must have been already created in X2_HO_REQ procedure */
if
(
ue_context_p
->
ue_context
.
e_rab
[
i
].
param
.
e_rab_id
==
S1AP_PATH_SWITCH_REQ_ACK
(
msg_p
).
e_rabs_tobeswitched
[
e_rab_switch_index
].
e_rab_id
)
{
ue_context_p
->
ue_context
.
e_rab
[
i
].
param
.
e_rab_id
=
S1AP_PATH_SWITCH_REQ_ACK
(
msg_p
).
e_rabs_tobeswitched
[
e_rab_switch_index
].
e_rab_id
;
ue_context_p
->
ue_context
.
e_rab
[
i
].
param
.
sgw_addr
=
S1AP_PATH_SWITCH_REQ_ACK
(
msg_p
).
e_rabs_tobeswitched
[
e_rab_switch_index
].
sgw_addr
;
ue_context_p
->
ue_context
.
e_rab
[
i
].
param
.
gtp_teid
=
S1AP_PATH_SWITCH_REQ_ACK
(
msg_p
).
e_rabs_tobeswitched
[
e_rab_switch_index
].
gtp_teid
;
e_rab_switch_index
++
;
}
}
}
ue_context_p
->
ue_context
.
setup_e_rabs
=
i
;
ue_context_p
->
ue_context
.
nb_of_e_rabs
=
i
;
}
ue_context_p
->
ue_context
.
ue_ambr
=
S1AP_PATH_SWITCH_REQ_ACK
(
msg_p
).
ue_ambr
;
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
=
S1AP_PATH_SWITCH_REQ_ACK
(
msg_p
).
nb_e_rabs_tobereleased
;
memset
(
&
delete_tunnel_req
,
0
,
sizeof
(
delete_tunnel_req
));
ue_context_p
->
ue_context
.
setup_e_rabs
=
ue_context_p
->
ue_context
.
setup_e_rabs
-
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
;
ue_context_p
->
ue_context
.
nb_of_e_rabs
=
ue_context_p
->
ue_context
.
nb_of_e_rabs
-
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
;
memset
(
&
delete_tunnel_req
,
0
,
sizeof
(
delete_tunnel_req
));
if
(
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
>
0
)
{
int
e_rab_release_index
=
0
;
for
(
i
=
0
;
i
<
ue_context_p
->
ue_context
.
nb_release_of
_e_rabs
;
i
<
ue_context_p
->
ue_context
.
setup
_e_rabs
;
i
++
)
{
if
(
ue_context_p
->
ue_context
.
e_rab
[
i
].
param
.
e_rab_id
==
S1AP_PATH_SWITCH_REQ_ACK
(
msg_p
).
e_rabs_tobereleased
[
e_rab_release_index
].
e_rab_id
)
{
LOG_I
(
RRC
,
"Bearer released with ID: %d
\n
"
,
ue_context_p
->
ue_context
.
e_rab
[
i
].
param
.
e_rab_id
);
ue_context_p
->
ue_context
.
e_rabs_tobereleased
[
i
]
=
S1AP_PATH_SWITCH_REQ_ACK
(
msg_p
).
e_rabs_tobereleased
[
i
].
e_rab_id
;
delete_tunnel_req
.
eps_bearer_id
[
i
]
=
S1AP_PATH_SWITCH_REQ_ACK
(
msg_p
).
e_rabs_tobereleased
[
i
].
e_rab_id
;
ue_context_p
->
ue_context
.
e_rab
[
i
].
status
=
E_RAB_STATUS_TORELEASE
;
ue_context_p
->
ue_context
.
e_rabs_tobereleased
[
e_rab_release_index
]
=
S1AP_PATH_SWITCH_REQ_ACK
(
msg_p
).
e_rabs_tobereleased
[
e_rab_release_index
].
e_rab_id
;
delete_tunnel_req
.
eps_bearer_id
[
e_rab_release_index
]
=
S1AP_PATH_SWITCH_REQ_ACK
(
msg_p
).
e_rabs_tobereleased
[
e_rab_release_index
].
e_rab_id
;
e_rab_release_index
++
;
}
else
{
LOG_I
(
RRC
,
"Bearer re-established with ID: %d
\n
"
,
ue_context_p
->
ue_context
.
e_rab
[
i
].
param
.
e_rab_id
);
}
}
}
if
(
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
>
0
)
{
if
(
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
>
0
){
delete_tunnel_req
.
rnti
=
ue_context_p
->
ue_context
.
rnti
;
delete_tunnel_req
.
num_erab
=
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
;
/* this could also be done through ITTI message */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment