Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
Michael Black
OpenXG UE
Commits
77d247b1
Commit
77d247b1
authored
3 years ago
by
Laurent THOMAS
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix 4G ue release context cleaning
parent
3eee0365
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
46 additions
and
37 deletions
+46
-37
openair2/RRC/LTE/rrc_eNB.c
openair2/RRC/LTE/rrc_eNB.c
+14
-20
openair2/RRC/LTE/rrc_eNB_GTPV1U.c
openair2/RRC/LTE/rrc_eNB_GTPV1U.c
+16
-6
openair2/RRC/LTE/rrc_eNB_GTPV1U.h
openair2/RRC/LTE/rrc_eNB_GTPV1U.h
+1
-1
openair2/RRC/LTE/rrc_eNB_S1AP.c
openair2/RRC/LTE/rrc_eNB_S1AP.c
+15
-10
No files found.
openair2/RRC/LTE/rrc_eNB.c
View file @
77d247b1
...
...
@@ -538,7 +538,7 @@ init_MCCH(
RC
.
rrc
[
enb_mod_idP
]
->
carrier
[
CC_id
].
sizeof_MCCH_MESSAGE
[
sync_area
]
=
do_MBSFNAreaConfig
(
enb_mod_idP
,
sync_area
,
(
uint8_t
*
)
RC
.
rrc
[
enb_mod_idP
]
->
carrier
[
CC_id
].
MCCH_MESSAGE
[
sync_area
],
100
,
/* TODO: what is the actual size of .MCCH_MESSAGE[sync_area]? */
32
,
/* TODO: what is the actual size of .MCCH_MESSAGE[sync_area]? */
&
RC
.
rrc
[
enb_mod_idP
]
->
carrier
[
CC_id
].
mcch
,
&
RC
.
rrc
[
enb_mod_idP
]
->
carrier
[
CC_id
].
mcch_message
);
LOG_I
(
RRC
,
"mcch message pointer %p for sync area %d
\n
"
,
...
...
@@ -1225,7 +1225,7 @@ rrc_eNB_generate_SecurityModeCommand(
)
//-----------------------------------------------------------------------------
{
uint8_t
buffer
[
100
];
uint8_t
buffer
[
100
]
=
{
0
}
;
uint8_t
size
;
T
(
T_ENB_RRC_SECURITY_MODE_COMMAND
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
...
...
@@ -2201,10 +2201,9 @@ rrc_eNB_generate_RRCConnectionRelease(
)
//-----------------------------------------------------------------------------
{
uint8_t
buffer
[
RRC_BUF_SIZE
];
uint8_t
buffer
[
RRC_BUF_SIZE
]
=
{
0
}
;
uint16_t
size
=
0
;
int
release_num
;
memset
(
buffer
,
0
,
sizeof
(
buffer
));
T
(
T_ENB_RRC_CONNECTION_RELEASE
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
#if 0
...
...
@@ -4993,19 +4992,17 @@ void rrc_eNB_handover_ue_context_release(
struct
rrc_eNB_ue_context_s
*
ue_context_p
)
{
int
e_rab
=
0
;
//MessageDef *msg_release_p = NULL;
MessageDef
*
msg_delete_tunnels_p
=
NULL
;
uint32_t
eNB_ue_s1ap_id
=
ue_context_p
->
ue_context
.
eNB_ue_s1ap_id
;
//msg_release_p = itti_alloc_new_message(TASK_RRC_ENB, 0, S1AP_UE_CONTEXT_RELEASE);
//itti_send_msg_to_task(TASK_S1AP, ctxt_pP->module_id, msg_release_p);
s1ap_ue_context_release
(
ctxt_pP
->
instance
,
ue_context_p
->
ue_context
.
eNB_ue_s1ap_id
);
//MSC_LOG_TX_MESSAGE(MSC_RRC_ENB, MSC_GTPU_ENB, NULL,0, "0 GTPV1U_ENB_DELETE_TUNNEL_REQ rnti %x ", eNB_ue_s1ap_id);
msg_delete_tunnels_p
=
itti_alloc_new_message
(
TASK_RRC_ENB
,
0
,
GTPV1U_ENB_DELETE_TUNNEL_REQ
);
memset
(
&
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
),
0
,
sizeof
(
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
)));
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
).
rnti
=
ue_context_p
->
ue_context
.
rnti
;
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
).
from_gnb
=
0
;
gtpv1u_enb_delete_tunnel_req_t
delete_tunnels
=
{
0
};
delete_tunnels
.
rnti
=
ue_context_p
->
ue_context
.
rnti
;
delete_tunnels
.
from_gnb
=
0
;
for
(
e_rab
=
0
;
e_rab
<
ue_context_p
->
ue_context
.
nb_of_e_rabs
;
e_rab
++
)
{
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
).
eps_bearer_id
[
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
)
.
num_erab
++
]
=
delete_tunnels
.
eps_bearer_id
[
delete_tunnels
.
num_erab
++
]
=
ue_context_p
->
ue_context
.
enb_gtp_ebi
[
e_rab
];
// erase data
ue_context_p
->
ue_context
.
enb_gtp_teid
[
e_rab
]
=
0
;
...
...
@@ -5013,7 +5010,7 @@ void rrc_eNB_handover_ue_context_release(
ue_context_p
->
ue_context
.
enb_gtp_ebi
[
e_rab
]
=
0
;
}
itti_send_msg_to_task
(
TASK_VARIABLE
,
ctxt_pP
->
module_id
,
msg_delete_tunnels_p
);
gtpv1u_delete_s1u_tunnel
(
ctxt_pP
->
module_id
,
&
delete_tunnels
);
struct
rrc_ue_s1ap_ids_s
*
rrc_ue_s1ap_ids
=
NULL
;
rrc_ue_s1ap_ids
=
rrc_eNB_S1AP_get_ue_ids
(
RC
.
rrc
[
ctxt_pP
->
module_id
],
0
,
eNB_ue_s1ap_id
);
...
...
@@ -5166,7 +5163,7 @@ check_handovers(
msg
=
itti_alloc_new_message
(
TASK_RRC_ENB
,
0
,
X2AP_HANDOVER_REQ_ACK
);
rrc_eNB_generate_HO_RRCConnectionReconfiguration
(
ctxt_pP
,
ue_context_p
,
X2AP_HANDOVER_REQ_ACK
(
msg
).
rrc_buffer
,
RRC_BUF_SIZE
,
// TODO: supposed to be size of the .rrc_buffer. Is this right?
sizeof
(
X2AP_HANDOVER_REQ_ACK
(
msg
).
rrc_buffer
),
&
X2AP_HANDOVER_REQ_ACK
(
msg
).
rrc_buffer_size
);
rrc_eNB_configure_rbs_handover
(
ue_context_p
,
ctxt_pP
);
X2AP_HANDOVER_REQ_ACK
(
msg
).
rnti
=
ue_context_p
->
ue_context
.
rnti
;
...
...
@@ -7869,7 +7866,6 @@ rrc_eNB_decode_dcch(
LTE_UL_DCCH_Message_t
*
ul_dcch_msg
=
NULL
;
//&uldcchmsg;
int
i
;
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
NULL
;
MessageDef
*
msg_delete_tunnels_p
=
NULL
;
uint8_t
xid
;
int
dedicated_DRB
=
0
;
T
(
T_ENB_RRC_UL_DCCH_DATA_IN
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
...
...
@@ -8107,21 +8103,19 @@ rrc_eNB_decode_dcch(
xid
=
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReconfigurationComplete
.
rrc_TransactionIdentifier
;
ue_context_p
->
ue_context
.
e_rab_release_command_flag
=
0
;
//gtp tunnel delete
msg_delete_tunnels_p
=
itti_alloc_new_message
(
TASK_RRC_ENB
,
0
,
GTPV1U_ENB_DELETE_TUNNEL_REQ
);
memset
(
&
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
),
0
,
sizeof
(
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
)));
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
).
rnti
=
ue_context_p
->
ue_context
.
rnti
;
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
).
from_gnb
=
0
;
gtpv1u_enb_delete_tunnel_req_t
delete_tunnels
=
{
0
};
delete_tunnels
.
rnti
=
ue_context_p
->
ue_context
.
rnti
;
delete_tunnels
.
from_gnb
=
0
;
for
(
i
=
0
;
i
<
NB_RB_MAX
;
i
++
)
{
if
(
xid
==
ue_context_p
->
ue_context
.
e_rab
[
i
].
xid
)
{
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
).
eps_bearer_id
[
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
)
.
num_erab
++
]
=
ue_context_p
->
ue_context
.
enb_gtp_ebi
[
i
];
delete_tunnels
.
eps_bearer_id
[
delete_tunnels
.
num_erab
++
]
=
ue_context_p
->
ue_context
.
enb_gtp_ebi
[
i
];
ue_context_p
->
ue_context
.
enb_gtp_teid
[
i
]
=
0
;
memset
(
&
ue_context_p
->
ue_context
.
enb_gtp_addrs
[
i
],
0
,
sizeof
(
ue_context_p
->
ue_context
.
enb_gtp_addrs
[
i
]));
ue_context_p
->
ue_context
.
enb_gtp_ebi
[
i
]
=
0
;
}
}
itti_send_msg_to_task
(
TASK_GTPV1_U
,
ctxt_pP
->
instance
,
msg_delete_tunnels_p
);
gtpv1u_delete_s1u_tunnel
(
ctxt_pP
->
instance
,
&
delete_tunnels
);
//S1AP_E_RAB_RELEASE_RESPONSE
rrc_eNB_send_S1AP_E_RAB_RELEASE_RESPONSE
(
ctxt_pP
,
ue_context_p
,
...
...
This diff is collapsed.
Click to expand it.
openair2/RRC/LTE/rrc_eNB_GTPV1U.c
View file @
77d247b1
...
...
@@ -261,23 +261,33 @@ boolean_t gtpv_data_req_new (
void
rrc_eNB_send_GTPV1U_ENB_DELETE_TUNNEL_REQ
(
module_id_t
enb_mod_idP
,
const
rrc_eNB_ue_context_t
*
const
ue_context_pP
rrc_eNB_ue_context_t
*
ue_context_pP
)
{
if
(
!
ue_context_pP
)
{
LOG_W
(
RRC
,
"[eNB] In %s: invalid UE
\n
"
,
__func__
);
return
;
}
eNB_RRC_UE_t
*
ue
=
&
ue_context_pP
->
ue_context
;
gtpv1u_enb_delete_tunnel_req_t
tmp
=
{
0
};
tmp
.
rnti
=
ue
_context_pP
->
ue_context
.
rnti
;
tmp
.
rnti
=
ue
->
rnti
;
tmp
.
from_gnb
=
0
;
tmp
.
num_erab
=
ue
_context_pP
->
ue_context
.
nb_of_e_rabs
;
for
(
int
e_rab
=
0
;
e_rab
<
ue
_context_pP
->
ue_context
.
nb_of_e_rabs
;
e_rab
++
)
{
const
rb_id_t
gtp_ebi
=
ue
_context_pP
->
ue_context
.
enb_gtp_ebi
[
e_rab
];
tmp
.
num_erab
=
ue
->
nb_of_e_rabs
;
for
(
int
e_rab
=
0
;
e_rab
<
ue
->
nb_of_e_rabs
;
e_rab
++
)
{
const
rb_id_t
gtp_ebi
=
ue
->
enb_gtp_ebi
[
e_rab
];
tmp
.
eps_bearer_id
[
e_rab
]
=
gtp_ebi
;
}
gtpv1u_delete_s1u_tunnel
(
enb_mod_idP
,
&
tmp
);
gtpv1u_delete_s1u_tunnel
(
enb_mod_idP
,
&
tmp
);
if
(
ue
->
ue_release_timer_rrc
>
0
&&
(
ue
->
handover_info
==
NULL
||
(
ue
->
handover_info
->
state
!=
HO_RELEASE
&&
ue
->
handover_info
->
state
!=
HO_CANCEL
)
)
)
ue
->
ue_release_timer_rrc
=
ue
->
ue_release_timer_thres_rrc
;
}
This diff is collapsed.
Click to expand it.
openair2/RRC/LTE/rrc_eNB_GTPV1U.h
View file @
77d247b1
...
...
@@ -57,7 +57,7 @@ rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(
*/
void
rrc_eNB_send_GTPV1U_ENB_DELETE_TUNNEL_REQ
(
module_id_t
enb_mod_idP
,
const
rrc_eNB_ue_context_t
*
const
ue_context_pP
rrc_eNB_ue_context_t
*
ue_context_pP
);
boolean_t
...
...
This diff is collapsed.
Click to expand it.
openair2/RRC/LTE/rrc_eNB_S1AP.c
View file @
77d247b1
...
...
@@ -1695,7 +1695,6 @@ int rrc_eNB_process_S1AP_E_RAB_RELEASE_COMMAND(MessageDef *msg_p, const char *ms
uint8_t
b_existed
,
is_existed
;
uint8_t
xid
;
uint8_t
e_rab_release_drb
;
MessageDef
*
msg_delete_tunnels_p
=
NULL
;
e_rab_release_drb
=
0
;
memcpy
(
&
e_rab_release_params
[
0
],
&
(
S1AP_E_RAB_RELEASE_COMMAND
(
msg_p
).
e_rab_release_params
[
0
]),
sizeof
(
e_rab_release_t
)
*
S1AP_MAX_E_RAB
);
eNB_ue_s1ap_id
=
S1AP_E_RAB_RELEASE_COMMAND
(
msg_p
).
eNB_ue_s1ap_id
;
...
...
@@ -1763,21 +1762,19 @@ int rrc_eNB_process_S1AP_E_RAB_RELEASE_COMMAND(MessageDef *msg_p, const char *ms
rrc_eNB_generate_dedicatedRRCConnectionReconfiguration_release
(
&
ctxt
,
ue_context_p
,
xid
,
S1AP_E_RAB_RELEASE_COMMAND
(
msg_p
).
nas_pdu
.
length
,
S1AP_E_RAB_RELEASE_COMMAND
(
msg_p
).
nas_pdu
.
buffer
);
}
else
{
//gtp tunnel delete
msg_delete_tunnels_p
=
itti_alloc_new_message
(
TASK_RRC_ENB
,
0
,
GTPV1U_ENB_DELETE_TUNNEL_REQ
);
memset
(
&
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
),
0
,
sizeof
(
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
)));
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
).
rnti
=
ue_context_p
->
ue_context
.
rnti
;
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
).
from_gnb
=
0
;
gtpv1u_enb_delete_tunnel_req_t
delete_tunnels
=
{
0
};
delete_tunnels
.
rnti
=
ue_context_p
->
ue_context
.
rnti
;
delete_tunnels
.
from_gnb
=
0
;
for
(
i
=
0
;
i
<
NB_RB_MAX
;
i
++
)
{
if
(
xid
==
ue_context_p
->
ue_context
.
e_rab
[
i
].
xid
)
{
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
).
eps_bearer_id
[
GTPV1U_ENB_DELETE_TUNNEL_REQ
(
msg_delete_tunnels_p
)
.
num_erab
++
]
=
ue_context_p
->
ue_context
.
enb_gtp_ebi
[
i
];
delete_tunnels
.
eps_bearer_id
[
delete_tunnels
.
num_erab
++
]
=
ue_context_p
->
ue_context
.
enb_gtp_ebi
[
i
];
ue_context_p
->
ue_context
.
enb_gtp_teid
[
i
]
=
0
;
memset
(
&
ue_context_p
->
ue_context
.
enb_gtp_addrs
[
i
],
0
,
sizeof
(
ue_context_p
->
ue_context
.
enb_gtp_addrs
[
i
]));
ue_context_p
->
ue_context
.
enb_gtp_ebi
[
i
]
=
0
;
}
}
itti_send_msg_to_task
(
TASK_VARIABLE
,
instance
,
msg_delete_tunnels_p
);
gtpv1u_delete_s1u_tunnel
(
instance
,
&
delete_tunnels
);
//S1AP_E_RAB_RELEASE_RESPONSE
rrc_eNB_send_S1AP_E_RAB_RELEASE_RESPONSE
(
&
ctxt
,
ue_context_p
,
xid
);
}
...
...
@@ -2242,8 +2239,16 @@ int rrc_eNB_process_S1AP_PATH_SWITCH_REQ_ACK (MessageDef *msg_p,
&
delete_tunnel_req
);
/* TBD: release the DRB not admitted */
//rrc_eNB_generate_dedicatedRRCConnectionReconfiguration(&ctxt, ue_context_p, 0);
}
if
(
ue_context_p
->
ue_context
.
ue_release_timer_rrc
>
0
&&
(
ue_context_p
->
ue_context
.
handover_info
==
NULL
||
(
ue_context_p
->
ue_context
.
handover_info
->
state
!=
HO_RELEASE
&&
ue_context_p
->
ue_context
.
handover_info
->
state
!=
HO_CANCEL
)
)
)
ue_context_p
->
ue_context
.
ue_release_timer_rrc
=
ue_context_p
->
ue_context
.
ue_release_timer_thres_rrc
;
}
/* Security key */
ue_context_p
->
ue_context
.
next_hop_chain_count
=
S1AP_PATH_SWITCH_REQ_ACK
(
msg_p
).
next_hop_chain_count
;
memcpy
(
ue_context_p
->
ue_context
.
next_security_key
,
...
...
This diff is collapsed.
Click to expand it.
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