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
1f211efb
Commit
1f211efb
authored
Mar 28, 2019
by
wanghe
Committed by
Haruki NAOI
Jul 16, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix: GTP/S1AP UE resource release leak issue.
parent
3492f604
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
89 additions
and
9 deletions
+89
-9
openair2/RRC/LTE/rrc_eNB.c
openair2/RRC/LTE/rrc_eNB.c
+29
-1
openair2/RRC/LTE/rrc_eNB_S1AP.c
openair2/RRC/LTE/rrc_eNB_S1AP.c
+31
-2
openair3/GTPV1-U/gtpv1u_eNB.c
openair3/GTPV1-U/gtpv1u_eNB.c
+21
-3
openair3/GTPV1-U/nw-gtpv1u/src/NwGtpv1u.c
openair3/GTPV1-U/nw-gtpv1u/src/NwGtpv1u.c
+8
-3
No files found.
openair2/RRC/LTE/rrc_eNB.c
View file @
1f211efb
...
...
@@ -1630,6 +1630,8 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete(
LTE_C_RNTI_t
*
cba_RNTI
=
NULL
;
int
measurements_enabled
;
uint8_t
next_xid
=
rrc_eNB_get_next_transaction_identifier
(
ctxt_pP
->
module_id
);
int
ret
=
0
;
ue_context_pP
->
ue_context
.
Status
=
RRC_CONNECTED
;
ue_context_pP
->
ue_context
.
ue_rrc_inactivity_timer
=
1
;
// set rrc inactivity when UE goes into RRC_CONNECTED
ue_context_pP
->
ue_context
.
reestablishment_xid
=
next_xid
;
...
...
@@ -1735,10 +1737,36 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete(
create_tunnel_req
.
rnti
=
ctxt_pP
->
rnti
;
// warning put zero above
create_tunnel_req
.
num_tunnels
=
j
;
gtpv1u_update_s1u_tunnel
(
ret
=
gtpv1u_update_s1u_tunnel
(
ctxt_pP
->
instance
,
&
create_tunnel_req
,
reestablish_rnti
);
if
(
ret
!=
0
)
{
LOG_E
(
RRC
,
"gtpv1u_update_s1u_tunnel failed,start to release UE %x
\n
"
,
reestablish_rnti
);
// update s1u tunnel failed,reset rnti?
if
(
eNB_ue_s1ap_id
>
0
)
{
h_rc
=
hashtable_get
(
rrc_instance_p
->
s1ap_id2_s1ap_ids
,
(
hash_key_t
)
eNB_ue_s1ap_id
,
(
void
**
)
&
rrc_ue_s1ap_ids_p
);
if
(
h_rc
==
HASH_TABLE_OK
)
{
rrc_ue_s1ap_ids_p
->
ue_rnti
=
reestablish_rnti
;
}
}
if
(
ue_initial_id
!=
0
)
{
h_rc
=
hashtable_get
(
rrc_instance_p
->
initial_id2_s1ap_ids
,
(
hash_key_t
)
ue_initial_id
,
(
void
**
)
&
rrc_ue_s1ap_ids_p
);
if
(
h_rc
==
HASH_TABLE_OK
)
{
rrc_ue_s1ap_ids_p
->
ue_rnti
=
reestablish_rnti
;
}
}
ue_context_pP
->
ue_context
.
ue_release_timer_s1
=
1
;
ue_context_pP
->
ue_context
.
ue_release_timer_thres_s1
=
100
;
ue_context_pP
->
ue_context
.
ue_release_timer
=
0
;
ue_context_pP
->
ue_context
.
ue_reestablishment_timer
=
0
;
ue_context_pP
->
ue_context
.
ul_failure_timer
=
20000
;
// set ul_failure to 20000 for triggering rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ
rrc_eNB_free_UE
(
ctxt_pP
->
module_id
,
ue_context_pP
);
ue_context_pP
->
ue_context
.
ul_failure_timer
=
0
;
put_UE_in_freelist
(
ctxt_pP
->
module_id
,
ctxt_pP
->
rnti
,
0
);
return
;
}
}
/* EPC_MODE_ENABLED */
/* Update RNTI in ue_context */
...
...
openair2/RRC/LTE/rrc_eNB_S1AP.c
View file @
1f211efb
...
...
@@ -935,6 +935,8 @@ int rrc_eNB_process_S1AP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, const char
gtpv1u_enb_create_tunnel_req_t
create_tunnel_req
;
gtpv1u_enb_create_tunnel_resp_t
create_tunnel_resp
;
uint8_t
inde_list
[
NB_RB_MAX
-
3
]
=
{
0
};
int
ret
;
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
NULL
;
protocol_ctxt_t
ctxt
;
ue_initial_id
=
S1AP_INITIAL_CONTEXT_SETUP_REQ
(
msg_p
).
ue_initial_id
;
...
...
@@ -976,10 +978,23 @@ int rrc_eNB_process_S1AP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, const char
create_tunnel_req
.
rnti
=
ue_context_p
->
ue_context
.
rnti
;
// warning put zero above
// create_tunnel_req.num_tunnels = i;
gtpv1u_create_s1u_tunnel
(
ret
=
gtpv1u_create_s1u_tunnel
(
instance
,
&
create_tunnel_req
,
&
create_tunnel_resp
);
if
(
ret
!=
0
)
{
LOG_E
(
RRC
,
"rrc_eNB_process_S1AP_INITIAL_CONTEXT_SETUP_REQ : gtpv1u_create_s1u_tunnel failed,start to release UE %x
\n
"
,
ue_context_p
->
ue_context
.
rnti
);
ue_context_p
->
ue_context
.
ue_release_timer_s1
=
1
;
ue_context_p
->
ue_context
.
ue_release_timer_thres_s1
=
100
;
ue_context_p
->
ue_context
.
ue_release_timer
=
0
;
ue_context_p
->
ue_context
.
ue_reestablishment_timer
=
0
;
ue_context_p
->
ue_context
.
ul_failure_timer
=
20000
;
// set ul_failure to 20000 for triggering rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ
rrc_eNB_free_UE
(
ctxt
.
module_id
,
ue_context_p
);
ue_context_p
->
ue_context
.
ul_failure_timer
=
0
;
return
(
0
);
}
rrc_eNB_process_GTPV1U_CREATE_TUNNEL_RESP
(
&
ctxt
,
&
create_tunnel_resp
,
...
...
@@ -1252,6 +1267,8 @@ int rrc_eNB_process_S1AP_E_RAB_SETUP_REQ(MessageDef *msg_p, const char *msg_name
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
NULL
;
protocol_ctxt_t
ctxt
;
uint8_t
e_rab_done
;
int
ret
=
0
;
ue_initial_id
=
S1AP_E_RAB_SETUP_REQ
(
msg_p
).
ue_initial_id
;
eNB_ue_s1ap_id
=
S1AP_E_RAB_SETUP_REQ
(
msg_p
).
eNB_ue_s1ap_id
;
ue_context_p
=
rrc_eNB_get_ue_context_from_s1ap_ids
(
instance
,
ue_initial_id
,
eNB_ue_s1ap_id
);
...
...
@@ -1314,10 +1331,22 @@ int rrc_eNB_process_S1AP_E_RAB_SETUP_REQ(MessageDef *msg_p, const char *msg_name
create_tunnel_req
.
rnti
=
ue_context_p
->
ue_context
.
rnti
;
// warning put zero above
create_tunnel_req
.
num_tunnels
=
e_rab_done
;
// NN: not sure if we should create a new tunnel: need to check teid, etc.
gtpv1u_create_s1u_tunnel
(
ret
=
gtpv1u_create_s1u_tunnel
(
instance
,
&
create_tunnel_req
,
&
create_tunnel_resp
);
if
(
ret
!=
0
)
{
LOG_E
(
RRC
,
"rrc_eNB_process_S1AP_E_RAB_SETUP_REQ : gtpv1u_create_s1u_tunnel failed,start to release UE %x
\n
"
,
ue_context_p
->
ue_context
.
rnti
);
ue_context_p
->
ue_context
.
ue_release_timer_s1
=
1
;
ue_context_p
->
ue_context
.
ue_release_timer_thres_s1
=
100
;
ue_context_p
->
ue_context
.
ue_release_timer
=
0
;
ue_context_p
->
ue_context
.
ue_reestablishment_timer
=
0
;
ue_context_p
->
ue_context
.
ul_failure_timer
=
20000
;
// set ul_failure to 20000 for triggering rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ
rrc_eNB_free_UE
(
ctxt
.
module_id
,
ue_context_p
);
ue_context_p
->
ue_context
.
ul_failure_timer
=
0
;
return
(
0
);
}
rrc_eNB_process_GTPV1U_CREATE_TUNNEL_RESP
(
&
ctxt
,
&
create_tunnel_resp
,
...
...
openair3/GTPV1-U/gtpv1u_eNB.c
View file @
1f211efb
...
...
@@ -572,6 +572,10 @@ gtpv1u_create_s1u_tunnel(
int
ip_offset
=
0
;
in_addr_t
in_addr
;
int
addrs_length_in_bytes
=
0
;
int
loop_counter
=
0
;
int
ret
=
0
;
MSC_LOG_RX_MESSAGE
(
MSC_GTPU_ENB
,
MSC_RRC_ENB
,
...
...
@@ -586,6 +590,7 @@ gtpv1u_create_s1u_tunnel(
for
(
i
=
0
;
i
<
create_tunnel_req_pP
->
num_tunnels
;
i
++
)
{
ip_offset
=
0
;
loop_counter
=
0
;
eps_bearer_id
=
create_tunnel_req_pP
->
eps_bearer_id
[
i
];
LOG_D
(
GTPU
,
"Rx GTPV1U_ENB_CREATE_TUNNEL_REQ ue rnti %x eps bearer id %u
\n
"
,
create_tunnel_req_pP
->
rnti
,
eps_bearer_id
);
...
...
@@ -600,7 +605,13 @@ gtpv1u_create_s1u_tunnel(
stack_req
.
apiInfo
.
createTunnelEndPointInfo
.
hStackSession
=
0
;
rc
=
nwGtpv1uProcessUlpReq
(
RC
.
gtpv1u_data_g
->
gtpv1u_stack
,
&
stack_req
);
LOG_D
(
GTPU
,
".
\n
"
);
}
while
(
rc
!=
NW_GTPV1U_OK
);
loop_counter
++
;
}
while
(
rc
!=
NW_GTPV1U_OK
&&
loop_counter
<
10
);
if
(
rc
!=
NW_GTPV1U_OK
&&
loop_counter
==
10
)
{
LOG_E
(
GTPU
,
"NwGtpv1uCreateTunnelEndPoint failed 10 times,start next loop
\n
"
);
ret
=
-
1
;
continue
;
}
//-----------------------
// PDCP->GTPV1U mapping
...
...
@@ -682,7 +693,8 @@ gtpv1u_create_s1u_tunnel(
LOG_D
(
GTPU
,
"Tx GTPV1U_ENB_CREATE_TUNNEL_RESP ue rnti %x status %d
\n
"
,
create_tunnel_req_pP
->
rnti
,
create_tunnel_resp_pP
->
status
);
return
0
;
//return 0;
return
ret
;
}
int
gtpv1u_update_s1u_tunnel
(
...
...
@@ -713,9 +725,15 @@ int gtpv1u_update_s1u_tunnel(
memcpy
(
gtpv1u_ue_data_new_p
,
gtpv1u_ue_data_p
,
sizeof
(
gtpv1u_ue_data_t
));
gtpv1u_ue_data_new_p
->
ue_id
=
create_tunnel_req_pP
->
rnti
;
hash_rc
=
hashtable_insert
(
RC
.
gtpv1u_data_g
->
ue_mapping
,
create_tunnel_req_pP
->
rnti
,
gtpv1u_ue_data_new_p
);
AssertFatal
(
hash_rc
==
HASH_TABLE_OK
,
"Error inserting ue_mapping in GTPV1U hashtable"
);
//AssertFatal(hash_rc == HASH_TABLE_OK, "Error inserting ue_mapping in GTPV1U hashtable");
if
(
hash_rc
!=
HASH_TABLE_OK
)
{
LOG_E
(
GTPU
,
"Failed to insert ue_mapping(rnti=%x) in GTPV1U hashtable
\n
"
,
create_tunnel_req_pP
->
rnti
);
return
-
1
;
}
else
{
LOG_I
(
GTPU
,
"inserting ue_mapping(rnti=%x) in GTPV1U hashtable
\n
"
,
create_tunnel_req_pP
->
rnti
);
}
hash_rc
=
hashtable_remove
(
RC
.
gtpv1u_data_g
->
ue_mapping
,
prior_rnti
);
LOG_I
(
GTPU
,
"hashtable_remove ue_mapping(rnti=%x) in GTPV1U hashtable
\n
"
,
prior_rnti
);
...
...
openair3/GTPV1-U/nw-gtpv1u/src/NwGtpv1u.c
View file @
1f211efb
...
...
@@ -378,10 +378,15 @@ NwGtpv1uCreateTunnelEndPoint( NW_IN NwGtpv1uStackT *thiz,
*
phStackSession
=
(
NwGtpv1uStackSessionHandleT
)
pTunnelEndPoint
;
pTunnelEndPoint
=
RB_FIND
(
NwGtpv1uTunnelEndPointIdentifierMap
,
&
(
thiz
->
teidMap
),
pTunnelEndPoint
);
NW_ASSERT
(
pTunnelEndPoint
);
//NW_ASSERT(pTunnelEndPoint);
if
(
!
pTunnelEndPoint
)
{
GTPU_ERROR
(
"Tunnel end-point cannot be NULL"
);
rc
=
NW_GTPV1U_FAILURE
;
}
else
{
GTPU_DEBUG
(
"Tunnel end-point 0x%p creation successful for teid 0x%x %u(dec)"
,
pTunnelEndPoint
,
(
unsigned
int
)
teid
,
(
unsigned
int
)
teid
);
}
}
}
else
{
*
phStackSession
=
(
NwGtpv1uStackSessionHandleT
)
NULL
;
...
...
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