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
f3a502d5
Commit
f3a502d5
authored
Aug 26, 2018
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rrc_eNB.c compiles
rrc_eNB_S1AP.c doesn't
parent
99968378
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
359 additions
and
427 deletions
+359
-427
openair2/RRC/LTE/rrc_eNB.c
openair2/RRC/LTE/rrc_eNB.c
+339
-407
openair2/RRC/LTE/rrc_eNB_S1AP.c
openair2/RRC/LTE/rrc_eNB_S1AP.c
+20
-20
No files found.
openair2/RRC/LTE/rrc_eNB.c
View file @
f3a502d5
...
...
@@ -5847,6 +5847,10 @@ rrc_eNB_decode_ccch(
RC
.
rrc
[
ctxt_pP
->
module_id
],
ctxt_pP
->
rnti
);
if
(
ue_context_p
!=
NULL
)
{
// erase content
rrc_eNB_free_mem_UE_context
(
ctxt_pP
,
ue_context_p
);
MSC_LOG_RX_DISCARDED_MESSAGE
(
MSC_RRC_ENB
,
...
...
@@ -5857,7 +5861,7 @@ rrc_eNB_decode_ccch(
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
dec_rval
.
consumed
);
}
else
{
}
else
{
rrcConnectionRequest
=
&
ul_ccch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionRequest
.
criticalExtensions
.
choice
.
rrcConnectionRequest_r8
;
{
if
(
InitialUE_Identity_PR_randomValue
==
rrcConnectionRequest
->
ue_Identity
.
present
)
{
...
...
@@ -5914,50 +5918,38 @@ rrc_eNB_decode_ccch(
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
mme_code
=
mme_code
;
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
m_tmsi
=
m_tmsi
;
}
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
);
// 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
,
random_value
);
if
(
ue_context_p
==
NULL
)
LOG_E
(
RRC
,
"%s:%d:%s: rrc_eNB_get_next_free_ue_context returned NULL
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
if
(
ue_context_p
!=
NULL
)
{
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
presence
=
TRUE
;
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
mme_code
=
mme_code
;
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
m_tmsi
=
m_tmsi
;
}
else
{
/* TODO: do we have to break here? */
//break;
}
}
MSC_LOG_RX_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
Srb_info
->
Rx_buffer
.
Payload
,
dec_rval
.
consumed
,
MSC_AS_TIME_FMT
" RRCConnectionRequest UE %x size %u (s-TMSI mmec %u m_TMSI %u random UE id (0x%"
PRIx64
")"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
dec_rval
.
consumed
,
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
mme_code
,
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
m_tmsi
,
ue_context_p
->
ue_context
.
random_ue_identity
);
}
else
{
LOG_E
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RRCConnectionRequest without random UE identity or S-TMSI not supported, let's reject the UE
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
));
rrc_eNB_generate_RRCConnectionReject
(
ctxt_pP
,
rrc_eNB_get_ue_context
(
RC
.
rrc
[
ctxt_pP
->
module_id
],
ctxt_pP
->
rnti
),
CC_id
);
break
;
}
}
LOG_D
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" UE context: %p
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
ue_context_p
);
/* TODO: do we have to break here? */
//break;
}
}
MSC_LOG_RX_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
Srb_info
->
Rx_buffer
.
Payload
,
dec_rval
.
consumed
,
MSC_AS_TIME_FMT
" RRCConnectionRequest UE %x size %u (s-TMSI mmec %u m_TMSI %u random UE id (0x%"
PRIx64
")"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
dec_rval
.
consumed
,
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
mme_code
,
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
m_tmsi
,
ue_context_p
->
ue_context
.
random_ue_identity
);
}
else
{
LOG_E
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RRCConnectionRequest without random UE identity or S-TMSI not supported, let's reject the UE
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
));
rrc_eNB_generate_RRCConnectionReject
(
ctxt_pP
,
rrc_eNB_get_ue_context
(
RC
.
rrc
[
ctxt_pP
->
module_id
],
ctxt_pP
->
rnti
),
CC_id
);
break
;
}
}
LOG_D
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" UE context: %p
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
ue_context_p
);
if
(
ue_context_p
!=
NULL
)
{
#if defined(ENABLE_ITTI)
ue_context_p
->
ue_context
.
establishment_cause
=
rrcConnectionRequest
->
establishmentCause
;
...
...
@@ -6087,25 +6079,28 @@ rrc_eNB_decode_ccch(
//-----------------------------------------------------------------------------
int
rrc_eNB_decode_dcch
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
const
protocol_ctxt_t
*
const
ctxt_pP
,
const
rb_id_t
Srb_id
,
const
uint8_t
*
const
Rx_sdu
,
const
uint8_t
*
const
Rx_sdu
,
const
sdu_size_t
sdu_sizeP
)
//-----------------------------------------------------------------------------
{
asn_dec_rval_t
dec_rval
;
//UL_DCCH_Message_t uldcchmsg;
UL_DCCH_Message_t
*
ul_dcch_msg
=
NULL
;
//&uldcchmsg;
int
i
;
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
NULL
;
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
NULL
;
#if defined(ENABLE_ITTI)
# if defined(ENABLE_USE_MME)
MessageDef
*
msg_delete_tunnels_p
=
NULL
;
MessageDef
*
msg_delete_tunnels_p
=
NULL
;
uint8_t
xid
;
#endif
#endif
int
dedicated_DRB
=
0
;
int
dedicated_DRB
=
0
;
T
(
T_ENB_RRC_UL_DCCH_DATA_IN
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
...
...
@@ -6118,21 +6113,21 @@ rrc_eNB_decode_dcch(
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
Srb_id
);
}
//memset(ul_dcch_msg,0,sizeof(UL_DCCH_Message_t));
LOG_D
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" Decoding UL-DCCH Message
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
));
dec_rval
=
uper_decode
(
NULL
,
&
asn_DEF_UL_DCCH_Message
,
(
void
**
)
&
ul_dcch_msg
,
(
void
**
)
&
ul_dcch_msg
,
Rx_sdu
,
sdu_sizeP
,
0
,
0
);
/*
#if defined(ENABLE_ITTI)
# if defined(DISABLE_ITTI_XER_PRINT)
#if defined(ENABLE_ITTI)
# if defined(DISABLE_ITTI_XER_PRINT)
{
MessageDef *message_p;
...
...
@@ -6141,7 +6136,7 @@ rrc_eNB_decode_dcch(
itti_send_msg_to_task(TASK_UNKNOWN, ctxt_pP->instance, message_p);
}
# else
# else
{
char message_string[10000];
size_t message_string_size;
...
...
@@ -6157,8 +6152,8 @@ rrc_eNB_decode_dcch(
itti_send_msg_to_task(TASK_UNKNOWN, ctxt_pP->instance, msg_p);
}
}
# endif
#endif
# endif
#endif
*/
{
for
(
i
=
0
;
i
<
sdu_sizeP
;
i
++
)
{
...
...
@@ -6180,12 +6175,13 @@ rrc_eNB_decode_dcch(
ctxt_pP
->
rnti
);
if
(
ul_dcch_msg
->
message
.
present
==
UL_DCCH_MessageType_PR_c1
)
{
switch
(
ul_dcch_msg
->
message
.
choice
.
c1
.
present
)
{
case
UL_DCCH_MessageType__c1_PR_NOTHING
:
/* No components present */
break
;
case
UL_DCCH_MessageType__c1_PR_NOTHING
:
/* No components present */
break
;
case
UL_DCCH_MessageType__c1_PR_csfbParametersRequestCDMA2000
:
break
;
case
UL_DCCH_MessageType__c1_PR_csfbParametersRequestCDMA2000
:
break
;
case
UL_DCCH_MessageType__c1_PR_measurementReport
:
// to avoid segmentation fault
...
...
@@ -6213,59 +6209,11 @@ rrc_eNB_decode_dcch(
break
;
}
#ifdef RRC_MSG_PRINT
LOG_F
(
RRC
,
"[MSG] RRC Connection Reconfiguration Complete
\n
"
);
LOG_F
(
RRC
,
"[MSG] RRC Connection Reconfiguration Complete
\n
"
);
for
(
i
=
0
;
i
<
sdu_sizeP
;
i
++
)
{
LOG_F
(
RRC
,
"%02x "
,
((
uint8_t
*
)
Rx_sdu
)[
i
]);
}
LOG_F
(
RRC
,
"
\n
"
);
#endif
MSC_LOG_RX_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
Rx_sdu
,
sdu_sizeP
,
MSC_AS_TIME_FMT
" RRCConnectionReconfigurationComplete UE %x size %u"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
sdu_sizeP
);
LOG_D
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RLC RB %02d --- RLC_DATA_IND %d bytes "
"(RRCConnectionReconfigurationComplete) ---> RRC_eNB]
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
DCCH
,
sdu_sizeP
);
if
(
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReconfigurationComplete
.
criticalExtensions
.
present
==
RRCConnectionReconfigurationComplete__criticalExtensions_PR_rrcConnectionReconfigurationComplete_r8
)
{
/*NN: revise the condition */
if
(
ue_context_p
->
ue_context
.
Status
==
RRC_RECONFIGURED
)
{
dedicated_DRB
=
1
;
LOG_I
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld)
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReconfigurationComplete
.
rrc_TransactionIdentifier
);
}
else
{
dedicated_DRB
=
0
;
ue_context_p
->
ue_context
.
Status
=
RRC_RECONFIGURED
;
LOG_I
(
RRC
,
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
);
}
rrc_eNB_process_RRCConnectionReconfigurationComplete
(
ctxt_pP
,
ue_context_p
,
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReconfigurationComplete
.
rrc_TransactionIdentifier
);
//WARNING:Inform the controller about the UE activation. Should be moved to RRC agent in the future
if
(
rrc_agent_registered
[
ctxt_pP
->
module_id
])
{
agent_rrc_xface
[
ctxt_pP
->
eNB_index
]
->
flexran_agent_notify_ue_state_change
(
ctxt_pP
->
module_id
,
ue_context_p
->
ue_id_rnti
,
PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_UPDATED
);
}
}
for
(
i
=
0
;
i
<
sdu_sizeP
;
i
++
)
{
LOG_F
(
RRC
,
"%02x "
,
((
uint8_t
*
)
Rx_sdu
)[
i
]);
}
LOG_F
(
RRC
,
"
\n
"
);
#endif
...
...
@@ -6342,46 +6290,44 @@ rrc_eNB_decode_dcch(
}
#if defined(ENABLE_ITTI)
# if defined(ENABLE_USE_MME)
if
(
EPC_MODE_ENABLED
==
1
)
{
if
(
dedicated_DRB
==
1
){
// rrc_eNB_send_S1AP_E_RAB_SETUP_RESP(ctxt_pP,
// ue_context_p,
// ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
if
(
ue_context_p
->
ue_context
.
nb_of_modify_e_rabs
>
0
)
{
rrc_eNB_send_S1AP_E_RAB_MODIFY_RESP
(
ctxt_pP
,
ue_context_p
,
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReconfigurationComplete
.
rrc_TransactionIdentifier
);
if
(
EPC_MODE_ENABLED
==
1
)
{
if
(
dedicated_DRB
==
1
)
{
// rrc_eNB_send_S1AP_E_RAB_SETUP_RESP(ctxt_pP,
// ue_context_p,
// ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
if
(
ue_context_p
->
ue_context
.
nb_of_modify_e_rabs
>
0
)
{
rrc_eNB_send_S1AP_E_RAB_MODIFY_RESP
(
ctxt_pP
,
ue_context_p
,
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReconfigurationComplete
.
rrc_TransactionIdentifier
);
ue_context_p
->
ue_context
.
nb_of_modify_e_rabs
=
0
;
ue_context_p
->
ue_context
.
nb_of_failed_e_rabs
=
0
;
memset
(
ue_context_p
->
ue_context
.
modify_e_rab
,
0
,
sizeof
(
ue_context_p
->
ue_context
.
modify_e_rab
));
for
(
int
i
=
0
;
i
<
NB_RB_MAX
;
i
++
)
{
ue_context_p
->
ue_context
.
modify_e_rab
[
i
].
xid
=
-
1
;
}
}
else
if
(
ue_context_p
->
ue_context
.
e_rab_release_command_flag
==
1
)
{
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
,
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
;
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
];
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
;
}
}
ue_context_p
->
ue_context
.
nb_of_modify_e_rabs
=
0
;
ue_context_p
->
ue_context
.
nb_of_failed_e_rabs
=
0
;
memset
(
ue_context_p
->
ue_context
.
modify_e_rab
,
0
,
sizeof
(
ue_context_p
->
ue_context
.
modify_e_rab
));
for
(
int
i
=
0
;
i
<
NB_RB_MAX
;
i
++
)
{
ue_context_p
->
ue_context
.
modify_e_rab
[
i
].
xid
=
-
1
;
}
itti_send_msg_to_task
(
TASK_GTPV1_U
,
ctxt_pP
->
instance
,
msg_delete_tunnels_p
);
//S1AP_E_RAB_RELEASE_RESPONSE
rrc_eNB_send_S1AP_E_RAB_RELEASE_RESPONSE
(
ctxt_pP
,
ue_context_p
,
xid
);
}
else
{
}
else
if
(
ue_context_p
->
ue_context
.
e_rab_release_command_flag
==
1
){
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
,
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
;
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
];
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
);
//S1AP_E_RAB_RELEASE_RESPONSE
rrc_eNB_send_S1AP_E_RAB_RELEASE_RESPONSE
(
ctxt_pP
,
ue_context_p
,
xid
);
}
else
{
rrc_eNB_send_S1AP_E_RAB_SETUP_RESP
(
ctxt_pP
,
ue_context_p
,
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReconfigurationComplete
.
rrc_TransactionIdentifier
);
...
...
@@ -6391,18 +6337,12 @@ rrc_eNB_decode_dcch(
rrc_eNB_send_S1AP_INITIAL_CONTEXT_SETUP_RESP
(
ctxt_pP
,
ue_context_p
);
}
else
{
if
(
ue_context_p
->
ue_context
.
reestablishment_cause
==
ReestablishmentCause_spare1
)
{
rrc_eNB_send_S1AP_INITIAL_CONTEXT_SETUP_RESP
(
ctxt_pP
,
ue_context_p
);
}
else
{
ue_context_p
->
ue_context
.
reestablishment_cause
=
ReestablishmentCause_spare1
;
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
;
}
ue_context_p
->
ue_context
.
reestablishment_cause
=
ReestablishmentCause_spare1
;
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
;
}
}
}
...
...
@@ -6417,25 +6357,25 @@ rrc_eNB_decode_dcch(
}
}
#else // establish a dedicated bearer
if
(
dedicated_DRB
==
0
)
{
// ue_context_p->ue_context.e_rab[0].status = E_RAB_STATUS_ESTABLISHED;
rrc_eNB_reconfigure_DRBs
(
ctxt_pP
,
ue_context_p
);
}
#endif
if
(
dedicated_DRB
==
0
)
{
// ue_context_p->ue_context.e_rab[0].status = E_RAB_STATUS_ESTABLISHED;
rrc_eNB_reconfigure_DRBs
(
ctxt_pP
,
ue_context_p
);
}
#endif
break
;
#endif
break
;
case
UL_DCCH_MessageType__c1_PR_rrcConnectionReestablishmentComplete
:
T
(
T_ENB_RRC_CONNECTION_REESTABLISHMENT_COMPLETE
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
case
UL_DCCH_MessageType__c1_PR_rrcConnectionReestablishmentComplete
:
T
(
T_ENB_RRC_CONNECTION_REESTABLISHMENT_COMPLETE
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
#ifdef RRC_MSG_PRINT
LOG_F
(
RRC
,
"[MSG] RRC Connection Reestablishment Complete
\n
"
);
LOG_F
(
RRC
,
"[MSG] RRC Connection Reestablishment Complete
\n
"
);
for
(
i
=
0
;
i
<
sdu_sizeP
;
i
++
)
{
LOG_F
(
RRC
,
"%02x "
,
((
uint8_t
*
)
Rx_sdu
)[
i
]);
}
for
(
i
=
0
;
i
<
sdu_sizeP
;
i
++
)
{
LOG_F
(
RRC
,
"%02x "
,
((
uint8_t
*
)
Rx_sdu
)[
i
]);
}
LOG_F
(
RRC
,
"
\n
"
);
#endif
...
...
@@ -6470,6 +6410,9 @@ rrc_eNB_decode_dcch(
reestablish_rnti_map
[
i
][
1
]
=
0
;
break
;
}
}
LOG_D
(
RRC
,
"reestablish_rnti_map[%d] [0] %x, [1] %x
\n
"
,
i
,
reestablish_rnti_map
[
i
][
0
],
reestablish_rnti_map
[
i
][
1
]);
if
(
!
ue_context_p
)
{
LOG_E
(
RRC
,
...
...
@@ -6488,33 +6431,25 @@ rrc_eNB_decode_dcch(
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
(
!
ue_context_p
)
{
LOG_E
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RRCConnectionReestablishmentComplete without UE context, falt
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
));
break
;
}
if
(
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReestablishmentComplete
.
criticalExtensions
.
present
==
RRCConnectionReestablishmentComplete__criticalExtensions_PR_rrcConnectionReestablishmentComplete_r8
)
{
rrc_eNB_process_RRCConnectionReestablishmentComplete
(
ctxt_pP
,
reestablish_rnti
,
ue_context_p
,
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReestablishmentComplete
.
rrc_TransactionIdentifier
,
&
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReestablishmentComplete
.
criticalExtensions
.
choice
.
rrcConnectionReestablishmentComplete_r8
);
if
(
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReestablishmentComplete
.
criticalExtensions
.
present
==
RRCConnectionReestablishmentComplete__criticalExtensions_PR_rrcConnectionReestablishmentComplete_r8
)
{
rrc_eNB_process_RRCConnectionReestablishmentComplete
(
ctxt_pP
,
reestablish_rnti
,
ue_context_p
,
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReestablishmentComplete
.
rrc_TransactionIdentifier
,
&
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionReestablishmentComplete
.
criticalExtensions
.
choice
.
rrcConnectionReestablishmentComplete_r8
);
//WARNING:Inform the controller about the UE activation. Should be moved to RRC agent in the future
if
(
mac_agent_registered
[
ctxt_pP
->
module_id
])
{
agent_rrc_xface
[
ctxt_pP
->
eNB_index
]
->
flexran_agent_notify_ue_state_change
(
ctxt_pP
->
module_id
,
ue_context_p
->
ue_id_rnti
,
PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_ACTIVATED
);
}
//WARNING:Inform the controller about the UE activation. Should be moved to RRC agent in the future
if
(
mac_agent_registered
[
ctxt_pP
->
module_id
])
{
agent_rrc_xface
[
ctxt_pP
->
eNB_index
]
->
flexran_agent_notify_ue_state_change
(
ctxt_pP
->
module_id
,
ue_context_p
->
ue_id_rnti
,
PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_ACTIVATED
);
}
//ue_context_p->ue_context.ue_release_timer = 0;
ue_context_p
->
ue_context
.
ue_reestablishment_timer
=
1
;
// remove UE after 100 frames after RRCConnectionReestablishmentRelease is triggered
ue_context_p
->
ue_context
.
ue_reestablishment_timer_thres
=
1000
;
}
break
;
//ue_context_p->ue_context.ue_release_timer = 0;
ue_context_p
->
ue_context
.
ue_reestablishment_timer
=
1
;
// remove UE after 100 frames after RRCConnectionReestablishmentRelease is triggered
ue_context_p
->
ue_context
.
ue_reestablishment_timer_thres
=
1000
;
}
break
;
case
UL_DCCH_MessageType__c1_PR_rrcConnectionSetupComplete
:
// to avoid segmentation fault
...
...
@@ -6523,51 +6458,56 @@ rrc_eNB_decode_dcch(
break
;
}
#ifdef RRC_MSG_PRINT
LOG_F
(
RRC
,
"[MSG] RRC Connection SetupComplete
\n
"
);
LOG_F
(
RRC
,
"[MSG] RRC Connection SetupComplete
\n
"
);
for
(
i
=
0
;
i
<
sdu_sizeP
;
i
++
)
{
LOG_F
(
RRC
,
"%02x "
,
((
uint8_t
*
)
Rx_sdu
)[
i
]);
}
for
(
i
=
0
;
i
<
sdu_sizeP
;
i
++
)
{
LOG_F
(
RRC
,
"%02x "
,
((
uint8_t
*
)
Rx_sdu
)[
i
]);
}
LOG_F
(
RRC
,
"
\n
"
);
LOG_F
(
RRC
,
"
\n
"
);
#endif
MSC_LOG_RX_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
Rx_sdu
,
sdu_sizeP
,
MSC_AS_TIME_FMT
" RRCConnectionSetupComplete UE %x size %u"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
sdu_sizeP
);
LOG_D
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RLC RB %02d --- RLC_DATA_IND %d bytes "
"(RRCConnectionSetupComplete) ---> RRC_eNB
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
DCCH
,
sdu_sizeP
);
if
(
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionSetupComplete
.
criticalExtensions
.
present
==
RRCConnectionSetupComplete__criticalExtensions_PR_c1
)
{
if
(
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionSetupComplete
.
criticalExtensions
.
choice
.
c1
.
present
==
RRCConnectionSetupComplete__criticalExtensions__c1_PR_rrcConnectionSetupComplete_r8
)
{
rrc_eNB_process_RRCConnectionSetupComplete
(
ctxt_pP
,
ue_context_p
,
&
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionSetupComplete
.
criticalExtensions
.
choice
.
c1
.
choice
.
rrcConnectionSetupComplete_r8
);
ue_context_p
->
ue_context
.
Status
=
RRC_CONNECTED
;
LOG_I
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" UE State = RRC_CONNECTED
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
));
MSC_LOG_RX_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
Rx_sdu
,
sdu_sizeP
,
MSC_AS_TIME_FMT
" RRCConnectionSetupComplete UE %x size %u"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
sdu_sizeP
);
//WARNING:Inform the controller about the UE activation. Should be moved to RRC agent in the future
if
(
rrc_agent_registered
[
ctxt_pP
->
module_id
])
{
agent_rrc_xface
[
ctxt_pP
->
eNB_index
]
->
flexran_agent_notify_ue_state_change
(
ctxt_pP
->
module_id
,
ue_context_p
->
ue_id_rnti
,
PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_ACTIVATED
);
}
}
LOG_D
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RLC RB %02d --- RLC_DATA_IND %d bytes "
"(RRCConnectionSetupComplete) ---> RRC_eNB
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
DCCH
,
sdu_sizeP
);
if
(
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionSetupComplete
.
criticalExtensions
.
present
==
RRCConnectionSetupComplete__criticalExtensions_PR_c1
)
{
if
(
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionSetupComplete
.
criticalExtensions
.
choice
.
c1
.
present
==
RRCConnectionSetupComplete__criticalExtensions__c1_PR_rrcConnectionSetupComplete_r8
)
{
rrc_eNB_process_RRCConnectionSetupComplete
(
ctxt_pP
,
ue_context_p
,
&
ul_dcch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionSetupComplete
.
criticalExtensions
.
choice
.
c1
.
choice
.
rrcConnectionSetupComplete_r8
);
ue_context_p
->
ue_context
.
Status
=
RRC_CONNECTED
;
LOG_I
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" UE State = RRC_CONNECTED
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
));
//WARNING:Inform the controller about the UE activation. Should be moved to RRC agent in the future
if
(
rrc_agent_registered
[
ctxt_pP
->
module_id
])
{
agent_rrc_xface
[
ctxt_pP
->
eNB_index
]
->
flexran_agent_notify_ue_state_change
(
ctxt_pP
->
module_id
,
ue_context_p
->
ue_id_rnti
,
PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_ACTIVATED
);
}
}
}
ue_context_p
->
ue_context
.
ue_release_timer
=
0
;
break
;
case
UL_DCCH_MessageType__c1_PR_securityModeComplete
:
T
(
T_ENB_RRC_SECURITY_MODE_COMPLETE
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
...
...
@@ -6578,72 +6518,78 @@ rrc_eNB_decode_dcch(
break
;
}
#ifdef RRC_MSG_PRINT
LOG_F
(
RRC
,
"[MSG] RRC Security Mode Complete
\n
"
);
LOG_F
(
RRC
,
"[MSG] RRC Security Mode Complete
\n
"
);
for
(
i
=
0
;
i
<
sdu_sizeP
;
i
++
)
eNB
->
pusch_vars
[
UE_id
]
{
LOG_F
(
RRC
,
"%02x "
,
((
uint8_t
*
)
Rx_sdu
)[
i
]);
}
LOG_F
(
RRC
,
"
\n
"
);
for
(
i
=
0
;
i
<
sdu_sizeP
;
i
++
)
eNB
->
pusch_vars
[
UE_id
]{
LOG_F
(
RRC
,
"%02x "
,
((
uint8_t
*
)
Rx_sdu
)[
i
]);
}
LOG_F
(
RRC
,
"
\n
"
);
#endif
MSC_LOG_RX_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
Rx_sdu
,
sdu_sizeP
,
MSC_AS_TIME_FMT
" securityModeComplete UE %x size %u"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
sdu_sizeP
);
LOG_I
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" received securityModeComplete on UL-DCCH %d from UE
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
DCCH
);
LOG_D
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RLC RB %02d --- RLC_DATA_IND %d bytes "
"(securityModeComplete) ---> RRC_eNB
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
DCCH
,
sdu_sizeP
);
MSC_LOG_RX_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
Rx_sdu
,
sdu_sizeP
,
MSC_AS_TIME_FMT
" securityModeComplete UE %x size %u"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
sdu_sizeP
);
LOG_I
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" received securityModeComplete on UL-DCCH %d from UE
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
DCCH
);
LOG_D
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RLC RB %02d --- RLC_DATA_IND %d bytes "
"(securityModeComplete) ---> RRC_eNB
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
DCCH
,
sdu_sizeP
);
#ifdef XER_PRINT
xer_fprint
(
stdout
,
&
asn_DEF_UL_DCCH_Message
,
(
void
*
)
ul_dcch_msg
);
xer_fprint
(
stdout
,
&
asn_DEF_UL_DCCH_Message
,
(
void
*
)
ul_dcch_msg
);
#endif
// confirm with PDCP about the security mode for DCCH
//rrc_pdcp_config_req (enb_mod_idP, frameP, 1,CONFIG_ACTION_SET_SECURITY_MODE, (ue_mod_idP * NB_RB_MAX) + DCCH, 0x77);
// continue the procedure
rrc_eNB_generate_UECapabilityEnquiry
(
ctxt_pP
,
ue_context_p
);
break
;
// confirm with PDCP about the security mode for DCCH
//rrc_pdcp_config_req (enb_mod_idP, frameP, 1,CONFIG_ACTION_SET_SECURITY_MODE, (ue_mod_idP * NB_RB_MAX) + DCCH, 0x77);
// continue the procedure
rrc_eNB_generate_UECapabilityEnquiry
(
ctxt_pP
,
ue_context_p
);
break
;
case
UL_DCCH_MessageType__c1_PR_securityModeFailure
:
T
(
T_ENB_RRC_SECURITY_MODE_FAILURE
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
case
UL_DCCH_MessageType__c1_PR_securityModeFailure
:
T
(
T_ENB_RRC_SECURITY_MODE_FAILURE
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
#ifdef RRC_MSG_PRINT
LOG_F
(
RRC
,
"[MSG] RRC Security Mode Failure
\n
"
);
LOG_F
(
RRC
,
"[MSG] RRC Security Mode Failure
\n
"
);
for
(
i
=
0
;
i
<
sdu_sizeP
;
i
++
)
{
LOG_F
(
RRC
,
"%02x "
,
((
uint8_t
*
)
Rx_sdu
)[
i
]);
}
for
(
i
=
0
;
i
<
sdu_sizeP
;
i
++
)
{
LOG_F
(
RRC
,
"%02x "
,
((
uint8_t
*
)
Rx_sdu
)[
i
]);
}
LOG_F
(
RRC
,
"
\n
"
);
LOG_F
(
RRC
,
"
\n
"
);
#endif
MSC_LOG_RX_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
Rx_sdu
,
sdu_sizeP
,
MSC_AS_TIME_FMT
" securityModeFailure UE %x size %u"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
sdu_sizeP
);
LOG_W
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RLC RB %02d --- RLC_DATA_IND %d bytes "
"(securityModeFailure) ---> RRC_eNB
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
DCCH
,
sdu_sizeP
);
MSC_LOG_RX_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
Rx_sdu
,
sdu_sizeP
,
MSC_AS_TIME_FMT
" securityModeFailure UE %x size %u"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
sdu_sizeP
);
LOG_W
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RLC RB %02d --- RLC_DATA_IND %d bytes "
"(securityModeFailure) ---> RRC_eNB
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
DCCH
,
sdu_sizeP
);
#ifdef XER_PRINT
xer_fprint
(
stdout
,
&
asn_DEF_UL_DCCH_Message
,
(
void
*
)
ul_dcch_msg
);
xer_fprint
(
stdout
,
&
asn_DEF_UL_DCCH_Message
,
(
void
*
)
ul_dcch_msg
);
#endif
// cancel the security mode in PDCP
...
...
@@ -6661,33 +6607,35 @@ rrc_eNB_decode_dcch(
break
;
}
#ifdef RRC_MSG_PRINT
LOG_F
(
RRC
,
"[MSG] RRC UECapablility Information
\n
"
);
LOG_F
(
RRC
,
"[MSG] RRC UECapablility Information
\n
"
);
for
(
i
=
0
;
i
<
sdu_sizeP
;
i
++
)
{
LOG_F
(
RRC
,
"%02x "
,
((
uint8_t
*
)
Rx_sdu
)[
i
]);
}
for
(
i
=
0
;
i
<
sdu_sizeP
;
i
++
)
{
LOG_F
(
RRC
,
"%02x "
,
((
uint8_t
*
)
Rx_sdu
)[
i
]);
}
LOG_F
(
RRC
,
"
\n
"
);
LOG_F
(
RRC
,
"
\n
"
);
#endif
MSC_LOG_RX_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
Rx_sdu
,
sdu_sizeP
,
MSC_AS_TIME_FMT
" ueCapabilityInformation UE %x size %u"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
sdu_sizeP
);
LOG_I
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" received ueCapabilityInformation on UL-DCCH %d from UE
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
DCCH
);
LOG_D
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RLC RB %02d --- RLC_DATA_IND %d bytes "
"(UECapabilityInformation) ---> RRC_eNB
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
DCCH
,
sdu_sizeP
);
MSC_LOG_RX_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
Rx_sdu
,
sdu_sizeP
,
MSC_AS_TIME_FMT
" ueCapabilityInformation UE %x size %u"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
sdu_sizeP
);
LOG_I
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" received ueCapabilityInformation on UL-DCCH %d from UE
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
DCCH
);
LOG_D
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RLC RB %02d --- RLC_DATA_IND %d bytes "
"(UECapabilityInformation) ---> RRC_eNB
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
DCCH
,
sdu_sizeP
);
#ifdef XER_PRINT
xer_fprint
(
stdout
,
&
asn_DEF_UL_DCCH_Message
,
(
void
*
)
ul_dcch_msg
);
#endif
...
...
@@ -6708,7 +6656,7 @@ rrc_eNB_decode_dcch(
choice
.
c1
.
choice
.
ueCapabilityInformation_r8
.
ue_CapabilityRAT_ContainerList
.
list
.
array
[
0
]
->
ueCapabilityRAT_Container
.
size
,
0
,
0
);
#ifdef XER_PRINT
xer_fprint
(
stdout
,
&
asn_DEF_UE_EUTRA_Capability
,
ue_context_p
->
ue_context
.
UE_Capability
);
xer_fprint
(
stdout
,
&
asn_DEF_UE_EUTRA_Capability
,
ue_context_p
->
ue_context
.
UE_Capability
);
#endif
if
((
dec_rval
.
code
!=
RC_OK
)
&&
(
dec_rval
.
consumed
==
0
))
{
...
...
@@ -6722,27 +6670,31 @@ rrc_eNB_decode_dcch(
#if defined(ENABLE_USE_MME)
if
(
EPC_MODE_ENABLED
==
1
)
{
rrc_eNB_send_S1AP_UE_CAPABILITIES_IND
(
ctxt_pP
,
ue_context_p
,
ul_dcch_msg
);
}
if
(
EPC_MODE_ENABLED
==
1
)
{
rrc_eNB_send_S1AP_UE_CAPABILITIES_IND
(
ctxt_pP
,
ue_context_p
,
ul_dcch_msg
);
}
#else
ue_context_p
->
ue_context
.
nb_of_e_rabs
=
1
;
for
(
i
=
0
;
i
<
ue_context_p
->
ue_context
.
nb_of_e_rabs
;
i
++
){
ue_context_p
->
ue_context
.
e_rab
[
i
].
status
=
E_RAB_STATUS_NEW
;
ue_context_p
->
ue_context
.
e_rab
[
i
].
param
.
e_rab_id
=
1
+
i
;
ue_context_p
->
ue_context
.
e_rab
[
i
].
param
.
qos
.
qci
=
9
;
}
ue_context_p
->
ue_context
.
setup_e_rabs
=
ue_context_p
->
ue_context
.
nb_of_e_rabs
;
#endif
#else
ue_context_p
->
ue_context
.
nb_of_e_rabs
=
1
;
rrc_eNB_generate_defaultRRCConnectionReconfiguration
(
ctxt_pP
,
ue_context_p
,
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
HO_flag
);
break
;
for
(
i
=
0
;
i
<
ue_context_p
->
ue_context
.
nb_of_e_rabs
;
i
++
)
{
ue_context_p
->
ue_context
.
e_rab
[
i
].
status
=
E_RAB_STATUS_NEW
;
ue_context_p
->
ue_context
.
e_rab
[
i
].
param
.
e_rab_id
=
1
+
i
;
ue_context_p
->
ue_context
.
e_rab
[
i
].
param
.
qos
.
qci
=
9
;
}
case
UL_DCCH_MessageType__c1_PR_ulHandoverPreparationTransfer
:
T
(
T_ENB_RRC_UL_HANDOVER_PREPARATION_TRANSFER
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
ue_context_p
->
ue_context
.
setup_e_rabs
=
ue_context_p
->
ue_context
.
nb_of_e_rabs
;
#endif
rrc_eNB_generate_defaultRRCConnectionReconfiguration
(
ctxt_pP
,
ue_context_p
,
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
HO_flag
);
break
;
break
;
case
UL_DCCH_MessageType__c1_PR_ulInformationTransfer
:
T
(
T_ENB_RRC_UL_INFORMATION_TRANSFER
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
...
...
@@ -6753,38 +6705,44 @@ rrc_eNB_decode_dcch(
break
;
}
case
UL_DCCH_MessageType__c1_PR_ulInformationTransfer
:
T
(
T_ENB_RRC_UL_INFORMATION_TRANSFER
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
LOG_D
(
RRC
,
"[MSG] RRC UL Information Transfer
\n
"
);
LOG_D
(
RRC
,
"[MSG] RRC UL Information Transfer
\n
"
);
#ifdef RRC_MSG_PRINT
LOG_F
(
RRC
,
"[MSG] RRC UL Information Transfer
\n
"
);
LOG_F
(
RRC
,
"[MSG] RRC UL Information Transfer
\n
"
);
for
(
i
=
0
;
i
<
sdu_sizeP
;
i
++
)
{
LOG_F
(
RRC
,
"%02x "
,
((
uint8_t
*
)
Rx_sdu
)[
i
]);
}
for
(
i
=
0
;
i
<
sdu_sizeP
;
i
++
)
{
LOG_F
(
RRC
,
"%02x "
,
((
uint8_t
*
)
Rx_sdu
)[
i
]);
}
LOG_F
(
RRC
,
"
\n
"
);
LOG_F
(
RRC
,
"
\n
"
);
#endif
MSC_LOG_RX_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
Rx_sdu
,
sdu_sizeP
,
MSC_AS_TIME_FMT
" ulInformationTransfer UE %x size %u"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
sdu_sizeP
);
MSC_LOG_RX_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
Rx_sdu
,
sdu_sizeP
,
MSC_AS_TIME_FMT
" ulInformationTransfer UE %x size %u"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
sdu_sizeP
);
#if defined(ENABLE_USE_MME)
if
(
EPC_MODE_ENABLED
==
1
)
{
rrc_eNB_send_S1AP_UPLINK_NAS
(
ctxt_pP
,
ue_context_p
,
ul_dcch_msg
);
}
if
(
EPC_MODE_ENABLED
==
1
)
{
rrc_eNB_send_S1AP_UPLINK_NAS
(
ctxt_pP
,
ue_context_p
,
ul_dcch_msg
);
}
#endif
break
;
break
;
case
UL_DCCH_MessageType__c1_PR_counterCheckResponse
:
T
(
T_ENB_RRC_COUNTER_CHECK_RESPONSE
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
break
;
#if (RRC_VERSION >= MAKE_VERSION(9, 0, 0))
...
...
@@ -6808,34 +6766,27 @@ rrc_eNB_decode_dcch(
break
;
case
UL_DCCH_MessageType__c1_PR_proximityIndication_r9
:
T
(
T_ENB_RRC_PROXIMITY_INDICATION_R9
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
break
;
case
UL_DCCH_MessageType__c1_PR_mbmsCountingResponse_r10
:
T
(
T_ENB_RRC_MBMS_COUNTING_RESPONSE_R10
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
case
UL_DCCH_MessageType__c1_PR_rnReconfigurationComplete_r10
:
T
(
T_ENB_RRC_RECONFIGURATION_COMPLETE_R10
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
break
;
break
;
case
UL_DCCH_MessageType__c1_PR_mbmsCountingResponse_r10
:
T
(
T_ENB_RRC_MBMS_COUNTING_RESPONSE_R10
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
break
;
case
UL_DCCH_MessageType__c1_PR_interFreqRSTDMeasurementIndication_r10
:
T
(
T_ENB_RRC_INTER_FREQ_RSTD_MEASUREMENT_INDICATION
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
case
UL_DCCH_MessageType__c1_PR_interFreqRSTDMeasurementIndication_r10
:
T
(
T_ENB_RRC_INTER_FREQ_RSTD_MEASUREMENT_INDICATION
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
break
;
break
;
#endif
default:
T
(
T_ENB_RRC_UNKNOW_MESSAGE
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
LOG_E
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" Unknown message %s:%u
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
__FILE__
,
__LINE__
);
return
-
1
;
default:
T
(
T_ENB_RRC_UNKNOW_MESSAGE
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
LOG_E
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" Unknown message %s:%u
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
__FILE__
,
__LINE__
);
return
-
1
;
}
return
0
;
...
...
@@ -6892,6 +6843,7 @@ rrc_eNB_decode_dcch(
__FILE__
,
__LINE__
);
return
-
1
;
}
return
0
;
}
...
...
@@ -7021,26 +6973,6 @@ rrc_enb_task(
}
break
;
/* Messages from PDCP */
case
RRC_DCCH_DATA_IND
:
PROTOCOL_CTXT_SET_BY_INSTANCE
(
&
ctxt
,
instance
,
ENB_FLAG_YES
,
RRC_DCCH_DATA_IND
(
msg_p
).
rnti
,
msg_p
->
ittiMsgHeader
.
lte_time
.
frame
,
msg_p
->
ittiMsgHeader
.
lte_time
.
slot
);
LOG_I
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" Received on DCCH %d %s
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
&
ctxt
),
RRC_DCCH_DATA_IND
(
msg_p
).
dcch_index
,
msg_name_p
);
rrc_eNB_decode_dcch
(
&
ctxt
,
RRC_DCCH_DATA_IND
(
msg_p
).
dcch_index
,
RRC_DCCH_DATA_IND
(
msg_p
).
sdu_p
,
RRC_DCCH_DATA_IND
(
msg_p
).
sdu_size
);
// Message buffer has been processed, free it now.
result
=
itti_free
(
ITTI_MSG_ORIGIN_ID
(
msg_p
),
RRC_DCCH_DATA_IND
(
msg_p
).
sdu_p
);
AssertFatal
(
result
==
EXIT_SUCCESS
,
"Failed to free memory (%d)!
\n
"
,
result
);
break
;
# if defined(ENABLE_USE_MME)
/* Messages from S1AP */
...
...
openair2/RRC/LTE/rrc_eNB_S1AP.c
View file @
f3a502d5
...
...
@@ -1636,36 +1636,36 @@ int rrc_eNB_process_S1AP_E_RAB_RELEASE_COMMAND(MessageDef *msg_p, const char *ms
b_existed
=
1
;
break
;
}
}
if
(
b_existed
==
0
)
{
//no e_rab_id
ue_context_p
->
ue_context
.
e_rabs_release_failed
[
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
].
e_rab_id
=
e_rab_release_params
[
erab
].
e_rab_id
;
ue_context_p
->
ue_context
.
e_rabs_release_failed
[
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
].
cause
=
S1AP_CAUSE_RADIO_NETWORK
;
ue_context_p
->
ue_context
.
e_rabs_release_failed
[
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
].
cause_value
=
30
;
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
++
;
}
else
{
if
(
ue_context_p
->
ue_context
.
e_rab
[
i
].
status
==
E_RAB_STATUS_FAILED
){
if
(
b_existed
==
0
)
{
//no e_rab_id
ue_context_p
->
ue_context
.
e_rabs_release_failed
[
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
].
e_rab_id
=
e_rab_release_params
[
erab
].
e_rab_id
;
ue_context_p
->
ue_context
.
e_rabs_release_failed
[
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
].
cause
=
S1AP_CAUSE_RADIO_NETWORK
;
ue_context_p
->
ue_context
.
e_rabs_release_failed
[
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
].
cause_value
=
30
;
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
++
;
}
else
{
if
(
ue_context_p
->
ue_context
.
e_rab
[
i
].
status
==
E_RAB_STATUS_FAILED
){
ue_context_p
->
ue_context
.
e_rab
[
i
].
xid
=
xid
;
continue
;
}
else
if
(
ue_context_p
->
ue_context
.
e_rab
[
i
].
status
==
E_RAB_STATUS_ESTABLISHED
){
}
else
if
(
ue_context_p
->
ue_context
.
e_rab
[
i
].
status
==
E_RAB_STATUS_ESTABLISHED
){
ue_context_p
->
ue_context
.
e_rab
[
i
].
status
=
E_RAB_STATUS_TORELEASE
;
ue_context_p
->
ue_context
.
e_rab
[
i
].
xid
=
xid
;
e_rab_release_drb
++
;
}
else
{
}
else
{
//e_rab_id status NG
ue_context_p
->
ue_context
.
e_rabs_release_failed
[
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
].
e_rab_id
=
e_rab_release_params
[
erab
].
e_rab_id
;
ue_context_p
->
ue_context
.
e_rabs_release_failed
[
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
].
cause
=
S1AP_CAUSE_RADIO_NETWORK
;
ue_context_p
->
ue_context
.
e_rabs_release_failed
[
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
].
cause_value
=
0
;
ue_context_p
->
ue_context
.
nb_release_of_e_rabs
++
;
}
}
}
}
if
(
is_existed
==
1
)
{
//e_rab_id is existed
continue
;
}
}
}
}
if
(
is_existed
==
1
)
{
//e_rab_id is existed
continue
;
}
for
(
i
=
0
;
i
<
NB_RB_MAX
;
i
++
)
{
if
(
e_rab_release_params
[
erab
].
e_rab_id
==
ue_context_p
->
ue_context
.
e_rab
[
i
].
param
.
e_rab_id
)
{
...
...
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