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
wangjie
OpenXG-RAN
Commits
cb14cd7b
Commit
cb14cd7b
authored
7 years ago
by
Xu Bo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix RRCConnectionReestablishment issue
parent
89ea5ed9
No related merge requests found
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
113 additions
and
37 deletions
+113
-37
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+2
-2
openair2/LAYER2/MAC/eNB_scheduler.c
openair2/LAYER2/MAC/eNB_scheduler.c
+15
-9
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+21
-6
openair2/LAYER2/MAC/proto.h
openair2/LAYER2/MAC/proto.h
+1
-1
openair2/RRC/LITE/defs.h
openair2/RRC/LITE/defs.h
+1
-0
openair2/RRC/LITE/rrc_eNB.c
openair2/RRC/LITE/rrc_eNB.c
+73
-19
No files found.
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
cb14cd7b
...
@@ -834,10 +834,10 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
...
@@ -834,10 +834,10 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
if
(
uci
->
type
==
SR
)
{
if
(
uci
->
type
==
SR
)
{
if
(
SR_payload
==
1
)
{
if
(
SR_payload
==
1
)
{
fill_sr_indication
(
eNB
,
uci
->
rnti
,
frame
,
subframe
,
metric_SR
);
fill_sr_indication
(
eNB
,
uci
->
rnti
,
frame
,
subframe
,
metric_SR
);
continue
;
break
;
}
}
else
{
else
{
continue
;
break
;
}
}
}
}
case
HARQ
:
case
HARQ
:
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/MAC/eNB_scheduler.c
View file @
cb14cd7b
...
@@ -713,15 +713,21 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP,
...
@@ -713,15 +713,21 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP,
if
(
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
i
].
ue_reestablishment_reject_timer
>=
if
(
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
i
].
ue_reestablishment_reject_timer
>=
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
i
].
ue_reestablishment_reject_timer_thres
)
{
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
i
].
ue_reestablishment_reject_timer_thres
)
{
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
i
].
ue_reestablishment_reject_timer
=
0
;
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
i
].
ue_reestablishment_reject_timer
=
0
;
for
(
int
ue_id_l
=
0
;
ue_id_l
<
NUMBER_OF_UE_MAX
;
ue_id_l
++
)
{
//clear reestablish_rnti_map
if
(
reestablish_rnti_map
[
ue_id_l
][
0
]
==
rnti
)
{
if
(
RC
.
mac
[
module_idP
]
->
UE_list
.
UE_sched_ctrl
[
i
].
ue_reestablishment_reject_timer_thres
>
20
){
// clear currentC-RNTI from map
for
(
int
ue_id_l
=
0
;
ue_id_l
<
NUMBER_OF_UE_MAX
;
ue_id_l
++
)
{
reestablish_rnti_map
[
ue_id_l
][
0
]
=
0
;
if
(
reestablish_rnti_map
[
ue_id_l
][
0
]
==
rnti
)
{
reestablish_rnti_map
[
ue_id_l
][
1
]
=
0
;
// clear currentC-RNTI from map
break
;
reestablish_rnti_map
[
ue_id_l
][
0
]
=
0
;
}
reestablish_rnti_map
[
ue_id_l
][
1
]
=
0
;
}
break
;
}
}
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
module_idP
,
ENB_FLAG_YES
,
rnti
,
0
,
0
,
module_idP
);
rrc_rlc_remove_ue
(
&
ctxt
);
pdcp_remove_UE
(
&
ctxt
);
}
for
(
int
ii
=
0
;
ii
<
NUMBER_OF_UE_MAX
;
ii
++
)
{
for
(
int
ii
=
0
;
ii
<
NUMBER_OF_UE_MAX
;
ii
++
)
{
LTE_eNB_ULSCH_t
*
ulsch
=
NULL
;
LTE_eNB_ULSCH_t
*
ulsch
=
NULL
;
ulsch
=
RC
.
eNB
[
module_idP
][
CC_id
]
->
ulsch
[
ii
];
ulsch
=
RC
.
eNB
[
module_idP
][
CC_id
]
->
ulsch
[
ii
];
...
@@ -801,7 +807,7 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP,
...
@@ -801,7 +807,7 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP,
// Allocate CCEs for good after scheduling is done
// Allocate CCEs for good after scheduling is done
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
allocate_CCEs
(
module_idP
,
CC_id
,
subframeP
,
0
);
allocate_CCEs
(
module_idP
,
CC_id
,
frameP
,
subframeP
,
2
);
stop_meas
(
&
RC
.
mac
[
module_idP
]
->
eNB_scheduler
);
stop_meas
(
&
RC
.
mac
[
module_idP
]
->
eNB_scheduler
);
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
View file @
cb14cd7b
...
@@ -3085,7 +3085,7 @@ get_nCCE_max(COMMON_channels_t * cc, int num_pdcch_symbols, int subframe)
...
@@ -3085,7 +3085,7 @@ get_nCCE_max(COMMON_channels_t * cc, int num_pdcch_symbols, int subframe)
// Allocate the CCEs
// Allocate the CCEs
int
int
allocate_CCEs(int module_idP, int CC_idP,
in
t subframeP, int test_onlyP)
allocate_CCEs(int module_idP, int CC_idP,
frame_t frameP, sub_frame_
t subframeP, int test_onlyP)
{
{
int *CCE_table = RC.mac[module_idP]->CCE_table[CC_idP];
int *CCE_table = RC.mac[module_idP]->CCE_table[CC_idP];
nfapi_dl_config_request_body_t *DL_req =
nfapi_dl_config_request_body_t *DL_req =
...
@@ -3103,6 +3103,11 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP)
...
@@ -3103,6 +3103,11 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP)
int i, j, idci;
int i, j, idci;
int nCCE = 0;
int nCCE = 0;
eNB_MAC_INST *eNB = RC.mac[module_idP];
COMMON_channels_t *cc = &eNB->common_channels[CC_idP];
int ackNAK_absSF = get_pucch1_absSF(cc, (frameP*10+subframeP));
nfapi_ul_config_request_body_t *ul_req = &eNB->UL_req_tmp[CC_idP][ackNAK_absSF % 10].ul_config_request_body;
LOG_D(MAC,
LOG_D(MAC,
"Allocate CCEs subframe %d, test %d : (DL PDU %d, DL DCI %d, UL %d)\n",
"Allocate CCEs subframe %d, test %d : (DL PDU %d, DL DCI %d, UL %d)\n",
subframeP, test_onlyP, DL_req->number_pdu, DL_req->number_dci,
subframeP, test_onlyP, DL_req->number_pdu, DL_req->number_dci,
...
@@ -3198,7 +3203,7 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP)
...
@@ -3198,7 +3203,7 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP)
dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.
dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.
aggregation_level;
aggregation_level;
LOG_D(MAC, "Allocating at nCCE %d\n", fCCE);
LOG_D(MAC, "Allocating at nCCE %d\n", fCCE);
if (
test_onlyP
== 0) {
if (
(test_onlyP%2)
== 0) {
dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.cce_idx = fCCE;
dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.cce_idx = fCCE;
LOG_D(MAC,
LOG_D(MAC,
"Allocate COMMON DCI CCEs subframe %d, test %d => L %d fCCE %d\n",
"Allocate COMMON DCI CCEs subframe %d, test %d => L %d fCCE %d\n",
...
@@ -3292,7 +3297,7 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP)
...
@@ -3292,7 +3297,7 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP)
// the allocation is feasible, rnti rule passes
// the allocation is feasible, rnti rule passes
nCCE += hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.aggregation_level;
nCCE += hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.aggregation_level;
LOG_D(MAC, "Allocating at nCCE %d\n", fCCE);
LOG_D(MAC, "Allocating at nCCE %d\n", fCCE);
if (
test_onlyP
== 0) {
if (
(test_onlyP%2)
== 0) {
hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.cce_index = fCCE;
hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.cce_index = fCCE;
LOG_D(MAC, "Allocate CCEs subframe %d, test %d\n",
LOG_D(MAC, "Allocate CCEs subframe %d, test %d\n",
subframeP, test_onlyP);
subframeP, test_onlyP);
...
@@ -3387,11 +3392,21 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP)
...
@@ -3387,11 +3392,21 @@ allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP)
dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.
dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.
aggregation_level;
aggregation_level;
LOG_D(MAC, "Allocating at nCCE %d\n", fCCE);
LOG_D(MAC, "Allocating at nCCE %d\n", fCCE);
if (
test_onlyP
== 0) {
if (
(test_onlyP%2)
== 0) {
dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.cce_idx = fCCE;
dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.cce_idx = fCCE;
LOG_D(MAC, "Allocate CCEs subframe %d, test %d\n",
LOG_D(MAC, "Allocate CCEs subframe %d, test %d\n",
subframeP, test_onlyP);
subframeP, test_onlyP);
}
}
if ((test_onlyP/2) == 1) {
for(int ack_int = 0;ack_int < ul_req->number_of_pdus; ack_int++){
if(((ul_req->ul_config_pdu_list[ack_int].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE) ||
(ul_req->ul_config_pdu_list[ack_int].pdu_type == NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE)) &&
(ul_req->ul_config_pdu_list[ack_int].uci_harq_pdu.ue_information.ue_information_rel8.rnti == dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti)){
ul_req->ul_config_pdu_list[ack_int].uci_harq_pdu.harq_information.harq_information_rel9_fdd.n_pucch_1_0 =
cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + fCCE;
}
}
}
idci++;
idci++;
}
}
} // for i = 0 ... num_DL_DCIs
} // for i = 0 ... num_DL_DCIs
...
@@ -3568,7 +3583,7 @@ CCE_allocation_infeasible(int module_idP,
...
@@ -3568,7 +3583,7 @@ CCE_allocation_infeasible(int module_idP,
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.
aggregation_level,
aggregation_level,
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type);
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type);
ret = allocate_CCEs(module_idP, CC_idP, subframe, 0);
ret = allocate_CCEs(module_idP, CC_idP,
0,
subframe, 0);
if (ret == -1)
if (ret == -1)
res = TRUE;
res = TRUE;
DL_req->number_pdu--;
DL_req->number_pdu--;
...
@@ -3585,7 +3600,7 @@ CCE_allocation_infeasible(int module_idP,
...
@@ -3585,7 +3600,7 @@ CCE_allocation_infeasible(int module_idP,
hi_dci0_pdu->dci_pdu.dci_pdu_rel8.aggregation_level =
hi_dci0_pdu->dci_pdu.dci_pdu_rel8.aggregation_level =
aggregation;
aggregation;
HI_DCI0_req->number_of_dci++;
HI_DCI0_req->number_of_dci++;
ret = allocate_CCEs(module_idP, CC_idP, subframe, 0);
ret = allocate_CCEs(module_idP, CC_idP,
0,
subframe, 0);
if (ret == -1)
if (ret == -1)
res = TRUE;
res = TRUE;
HI_DCI0_req->number_of_dci--;
HI_DCI0_req->number_of_dci--;
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/MAC/proto.h
View file @
cb14cd7b
...
@@ -414,7 +414,7 @@ int get_nCCE_offset(int *CCE_table,
...
@@ -414,7 +414,7 @@ int get_nCCE_offset(int *CCE_table,
const
unsigned
short
rnti
,
const
unsigned
short
rnti
,
const
unsigned
char
subframe
);
const
unsigned
char
subframe
);
int
allocate_CCEs
(
int
module_idP
,
int
CC_idP
,
int
subframe
,
int
test_only
);
int
allocate_CCEs
(
int
module_idP
,
int
CC_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
int
test_only
);
boolean_t
CCE_allocation_infeasible
(
int
module_idP
,
boolean_t
CCE_allocation_infeasible
(
int
module_idP
,
int
CC_idP
,
int
CC_idP
,
...
...
This diff is collapsed.
Click to expand it.
openair2/RRC/LITE/defs.h
View file @
cb14cd7b
...
@@ -458,6 +458,7 @@ typedef struct eNB_RRC_UE_s {
...
@@ -458,6 +458,7 @@ typedef struct eNB_RRC_UE_s {
uint32_t
ue_reestablishment_timer
;
uint32_t
ue_reestablishment_timer
;
uint32_t
ue_reestablishment_timer_thres
;
uint32_t
ue_reestablishment_timer_thres
;
uint8_t
e_rab_release_command_flag
;
uint8_t
e_rab_release_command_flag
;
int8_t
reestablishment_xid
;
}
eNB_RRC_UE_t
;
}
eNB_RRC_UE_t
;
typedef
uid_t
ue_uid_t
;
typedef
uid_t
ue_uid_t
;
...
...
This diff is collapsed.
Click to expand it.
openair2/RRC/LITE/rrc_eNB.c
View file @
cb14cd7b
...
@@ -1190,15 +1190,21 @@ rrc_eNB_generate_RRCConnectionReestablishment(
...
@@ -1190,15 +1190,21 @@ rrc_eNB_generate_RRCConnectionReestablishment(
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
Srb0
.
Tx_buffer
.
payload_size
);
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
Srb0
.
Tx_buffer
.
payload_size
);
// activate release timer, if RRCComplete not received after 10 frames, remove UE
//ue_context_pP->ue_context.ue_release_timer = 1;
// remove UE after 10 frames after RRCConnectionReestablishmentRelease is triggered
//ue_context_pP->ue_context.ue_release_timer_thres = 100;
// activate release timer, if RRCComplete not received after 100 frames, remove UE
int
UE_id
=
find_UE_id
(
ctxt_pP
->
module_id
,
ctxt_pP
->
rnti
);
int
UE_id
=
find_UE_id
(
ctxt_pP
->
module_id
,
ctxt_pP
->
rnti
);
RC
.
mac
[
ctxt_pP
->
module_id
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
].
ue_reestablishment_reject_timer
=
1
;
if
(
UE_id
!=
-
1
){
// activate release timer, if RRCComplete not received after 100 frames, remove UE
RC
.
mac
[
ctxt_pP
->
module_id
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
].
ue_reestablishment_reject_timer
=
1
;
// remove UE after 100 frames after RRCConnectionReestablishmentRelease is triggered
RC
.
mac
[
ctxt_pP
->
module_id
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
].
ue_reestablishment_reject_timer_thres
=
1000
;
}
else
{
LOG_E
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" Generating RRCConnectionReestablishment without UE_id(MAC) rnti %x
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
ctxt_pP
->
rnti
);
}
// activate release timer, if RRCComplete not received after 100 frames, remove UE
ue_context_pP
->
ue_context
.
ue_reestablishment_timer
=
1
;
// remove UE after 100 frames after RRCConnectionReestablishmentRelease is triggered
// remove UE after 100 frames after RRCConnectionReestablishmentRelease is triggered
RC
.
mac
[
ctxt_pP
->
module_id
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
].
ue_reestablishment_rejec
t_timer_thres
=
1000
;
ue_context_pP
->
ue_context
.
ue_reestablishmen
t_timer_thres
=
1000
;
}
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
...
@@ -1252,6 +1258,7 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete(
...
@@ -1252,6 +1258,7 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete(
uint8_t
next_xid
=
rrc_eNB_get_next_transaction_identifier
(
ctxt_pP
->
module_id
);
uint8_t
next_xid
=
rrc_eNB_get_next_transaction_identifier
(
ctxt_pP
->
module_id
);
ue_context_pP
->
ue_context
.
Status
=
RRC_CONNECTED
;
ue_context_pP
->
ue_context
.
Status
=
RRC_CONNECTED
;
ue_context_pP
->
ue_context
.
reestablishment_xid
=
next_xid
;
SRB_configList2
=
&
ue_context_pP
->
ue_context
.
SRB_configList2
[
xid
];
SRB_configList2
=
&
ue_context_pP
->
ue_context
.
SRB_configList2
[
xid
];
// get old configuration of SRB2
// get old configuration of SRB2
...
@@ -1830,8 +1837,14 @@ rrc_eNB_generate_RRCConnectionReestablishmentReject(
...
@@ -1830,8 +1837,14 @@ rrc_eNB_generate_RRCConnectionReestablishmentReject(
int
cnt
;
int
cnt
;
#endif
#endif
int
UE_id
=
find_UE_id
(
ctxt_pP
->
module_id
,
ctxt_pP
->
rnti
);
int
UE_id
=
find_UE_id
(
ctxt_pP
->
module_id
,
ctxt_pP
->
rnti
);
RC
.
mac
[
ctxt_pP
->
module_id
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
].
ue_reestablishment_reject_timer
=
1
;
if
(
UE_id
!=
-
1
){
RC
.
mac
[
ctxt_pP
->
module_id
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
].
ue_reestablishment_reject_timer_thres
=
20
;
RC
.
mac
[
ctxt_pP
->
module_id
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
].
ue_reestablishment_reject_timer
=
1
;
RC
.
mac
[
ctxt_pP
->
module_id
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
].
ue_reestablishment_reject_timer_thres
=
20
;
}
else
{
LOG_E
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" Generating RRCConnectionReestablishmentReject without UE_id(MAC) rnti %x
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
ctxt_pP
->
rnti
);
}
T
(
T_ENB_RRC_CONNECTION_REESTABLISHMENT_REJECT
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T
(
T_ENB_RRC_CONNECTION_REESTABLISHMENT_REJECT
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
...
@@ -5484,26 +5497,57 @@ rrc_eNB_decode_ccch(
...
@@ -5484,26 +5497,57 @@ rrc_eNB_decode_ccch(
break
;
break
;
}
}
int
UE_id
=
find_UE_id
(
ctxt_pP
->
module_id
,
c_rnti
);
int
UE_id
=
find_UE_id
(
ctxt_pP
->
module_id
,
c_rnti
);
if
(
ue_context_p
->
ue_context
.
ue_reestablishment_timer
>
0
||
RC
.
mac
[
ctxt_pP
->
module_id
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
].
ue_reestablishment_reject_timer
>
0
){
if
(
UE_id
==
-
1
){
LOG_
I
(
RRC
,
LOG_
E
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RRCConnectionReestablishment
(Previous) don't complete
, let's reject the UE
\n
"
,
PROTOCOL_RRC_CTXT_UE_FMT
" RRCConnectionReestablishment
Request without UE_id(MAC) rnti %x
, let's reject the UE
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
));
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
)
,
c_rnti
);
rrc_eNB_generate_RRCConnectionReestablishmentReject
(
ctxt_pP
,
ue_context_p
,
CC_id
);
rrc_eNB_generate_RRCConnectionReestablishmentReject
(
ctxt_pP
,
ue_context_p
,
CC_id
);
break
;
break
;
}
}
if
((
RC
.
mac
[
ctxt_pP
->
module_id
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
].
ue_reestablishment_reject_timer
>
0
)
&&
(
RC
.
mac
[
ctxt_pP
->
module_id
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
].
ue_reestablishment_reject_timer_thres
>
20
)){
LOG_E
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RCConnectionReestablishmentComplete(Previous) don't receive, delete the Previous UE
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
));
RC
.
mac
[
ctxt_pP
->
module_id
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
].
ue_reestablishment_reject_timer
=
1000
;
ue_context_p
->
ue_context
.
ue_reestablishment_timer
=
0
;
}
if
(
ue_context_p
->
ue_context
.
ue_reestablishment_timer
>
0
){
LOG_E
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RRRCConnectionReconfigurationComplete(Previous) don't receive, delete the Previous UE
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
));
ue_context_p
->
ue_context
.
Status
=
RRC_RECONFIGURED
;
protocol_ctxt_t
ctxt_old_p
;
PROTOCOL_CTXT_SET_BY_INSTANCE
(
&
ctxt_old_p
,
ctxt_pP
->
instance
,
ENB_FLAG_YES
,
c_rnti
,
ctxt_pP
->
frame
,
ctxt_pP
->
subframe
);
rrc_eNB_process_RRCConnectionReconfigurationComplete
(
&
ctxt_old_p
,
ue_context_p
,
ue_context_p
->
ue_context
.
reestablishment_xid
);
for
(
uint8_t
e_rab
=
0
;
e_rab
<
ue_context_p
->
ue_context
.
nb_of_e_rabs
;
e_rab
++
)
{
if
(
ue_context_p
->
ue_context
.
e_rab
[
e_rab
].
status
==
E_RAB_STATUS_DONE
)
{
ue_context_p
->
ue_context
.
e_rab
[
e_rab
].
status
=
E_RAB_STATUS_ESTABLISHED
;
}
else
{
ue_context_p
->
ue_context
.
e_rab
[
e_rab
].
status
=
E_RAB_STATUS_FAILED
;
}
}
}
LOG_D
(
RRC
,
LOG_D
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" UE context: %p
\n
"
,
PROTOCOL_RRC_CTXT_UE_FMT
" UE context: %p
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
ue_context_p
);
ue_context_p
);
/* reset timers */
ue_context_p
->
ue_context
.
ul_failure_timer
=
0
;
ue_context_p
->
ue_context
.
ul_failure_timer
=
0
;
ue_context_p
->
ue_context
.
ue_release_timer
=
0
;
ue_context_p
->
ue_context
.
ue_release_timer
=
0
;
ue_context_p
->
ue_context
.
ue_reestablishment_timer
=
0
;
ue_context_p
->
ue_context
.
ue_reestablishment_timer
=
0
;
ue_context_p
->
ue_context
.
ue_release_timer_s1
=
0
;
ue_context_p
->
ue_context
.
ue_release_timer_s1
=
0
;
ue_context_p
->
ue_context
.
ue_release_timer_rrc
=
0
;
ue_context_p
->
ue_context
.
ue_release_timer_rrc
=
0
;
ue_context_p
->
ue_context
.
reestablishment_xid
=
-
1
;
/* reset timers */
ue_context_p
->
ue_context
.
ul_failure_timer
=
0
;
ue_context_p
->
ue_context
.
ue_release_timer
=
0
;
// insert C-RNTI to map
// insert C-RNTI to map
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
...
@@ -5679,6 +5723,7 @@ rrc_eNB_decode_ccch(
...
@@ -5679,6 +5723,7 @@ rrc_eNB_decode_ccch(
ue_context_p
->
ue_context
.
ue_reestablishment_timer
=
0
;
ue_context_p
->
ue_context
.
ue_reestablishment_timer
=
0
;
ue_context_p
->
ue_context
.
ue_release_timer_s1
=
0
;
ue_context_p
->
ue_context
.
ue_release_timer_s1
=
0
;
ue_context_p
->
ue_context
.
ue_release_timer_rrc
=
0
;
ue_context_p
->
ue_context
.
ue_release_timer_rrc
=
0
;
ue_context_p
->
ue_context
.
reestablishment_xid
=
-
1
;
}
else
{
}
else
{
LOG_I
(
RRC
,
" S-TMSI doesn't exist, setting Initialue_identity_s_TMSI.m_tmsi to %p => %x
\n
"
,
ue_context_p
,
m_tmsi
);
LOG_I
(
RRC
,
" S-TMSI doesn't exist, setting Initialue_identity_s_TMSI.m_tmsi to %p => %x
\n
"
,
ue_context_p
,
m_tmsi
);
// ue_context_p = rrc_eNB_get_next_free_ue_context(ctxt_pP, NOT_A_RANDOM_UE_IDENTITY);
// ue_context_p = rrc_eNB_get_next_free_ue_context(ctxt_pP, NOT_A_RANDOM_UE_IDENTITY);
...
@@ -6009,6 +6054,7 @@ rrc_eNB_decode_dcch(
...
@@ -6009,6 +6054,7 @@ rrc_eNB_decode_dcch(
PROTOCOL_RRC_CTXT_UE_FMT
" UE State = RRC_RECONFIGURED (default DRB, xid %ld)
\n
"
,
PROTOCOL_RRC_CTXT_UE_FMT
" UE State = RRC_RECONFIGURED (default DRB, xid %ld)
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReconfigurationComplete
.
rrc_TransactionIdentifier
);
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReconfigurationComplete
.
rrc_TransactionIdentifier
);
}
}
ue_context_p
->
ue_context
.
reestablishment_xid
=
-
1
;
rrc_eNB_process_RRCConnectionReconfigurationComplete
(
rrc_eNB_process_RRCConnectionReconfigurationComplete
(
ctxt_pP
,
ctxt_pP
,
ue_context_p
,
ue_context_p
,
...
@@ -6124,8 +6170,6 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
...
@@ -6124,8 +6170,6 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
DCCH
,
DCCH
,
sdu_sizeP
);
sdu_sizeP
);
{
{
int
UE_id
=
find_UE_id
(
ctxt_pP
->
module_id
,
ctxt_pP
->
rnti
);
RC
.
mac
[
ctxt_pP
->
module_id
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
].
ue_reestablishment_reject_timer
=
0
;
rnti_t
reestablish_rnti
=
0
;
rnti_t
reestablish_rnti
=
0
;
// select C-RNTI from map
// select C-RNTI from map
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
...
@@ -6149,6 +6193,16 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
...
@@ -6149,6 +6193,16 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
));
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
));
break
;
break
;
}
}
//clear
int
UE_id
=
find_UE_id
(
ctxt_pP
->
module_id
,
ctxt_pP
->
rnti
);
if
(
UE_id
==
-
1
){
LOG_E
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RRCConnectionReestablishmentComplete without UE_id(MAC) rnti %x, fault
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
ctxt_pP
->
rnti
);
break
;
}
RC
.
mac
[
ctxt_pP
->
module_id
]
->
UE_list
.
UE_sched_ctrl
[
UE_id
].
ue_reestablishment_reject_timer
=
0
;
ue_context_p
->
ue_context
.
ue_reestablishment_timer
=
0
;
if
(
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReestablishmentComplete
.
criticalExtensions
.
present
==
if
(
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReestablishmentComplete
.
criticalExtensions
.
present
==
RRCConnectionReestablishmentComplete__criticalExtensions_PR_rrcConnectionReestablishmentComplete_r8
)
{
RRCConnectionReestablishmentComplete__criticalExtensions_PR_rrcConnectionReestablishmentComplete_r8
)
{
...
...
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