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
常顺宇
OpenXG-RAN
Commits
4082f549
Commit
4082f549
authored
Jan 19, 2015
by
Lionel Gauthier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
git-svn-id:
http://svn.eurecom.fr/openair4G/trunk@6414
818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent
ad9fa37d
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
417 additions
and
417 deletions
+417
-417
openair2/RRC/LITE/L2_interface.c
openair2/RRC/LITE/L2_interface.c
+417
-417
No files found.
openair2/RRC/LITE/L2_interface.c
View file @
4082f549
...
...
@@ -25,16 +25,16 @@
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
*******************************************************************************/
*******************************************************************************/
/*! \file l2_interface.c
* \brief layer 2 interface, used to support different RRC sublayer
* \author Raymond Knopp and Navid Nikaein
* \date 2010-2014
* \version 1.0
* \company Eurecom
* \email: raymond.knopp@eurecom.fr
*/
* \brief layer 2 interface, used to support different RRC sublayer
* \author Raymond Knopp and Navid Nikaein
* \date 2010-2014
* \version 1.0
* \company Eurecom
* \email: raymond.knopp@eurecom.fr
*/
#include "platform_types.h"
//#include "openair_defs.h"
...
...
@@ -65,278 +65,278 @@ mui_t mui=0;
//-------------------------------------------------------------------------------------------//
int8_t
mac_rrc_lite_data_req
(
module_id_t
Mod_idP
,
frame_t
frameP
,
uint16_t
Srb_id
,
uint8_t
Nb_tb
,
uint8_t
*
buffer_pP
,
eNB_flag_t
enb_flagP
,
uint8_t
eNB_index
,
uint8_t
mbsfn_sync_area
)
{
//-------------------------------------------------------------------------------------------//
SRB_INFO
*
Srb_info
;
uint8_t
Sdu_size
=
0
;
uint8_t
mbsfn_sync_area
)
{
//-------------------------------------------------------------------------------------------//
SRB_INFO
*
Srb_info
;
uint8_t
Sdu_size
=
0
;
#ifdef DEBUG_RRC
int
i
;
LOG_D
(
RRC
,
"[eNB %d] mac_rrc_data_req to SRB ID=%d
\n
"
,
Mod_idP
,
Srb_id
);
int
i
;
LOG_D
(
RRC
,
"[eNB %d] mac_rrc_data_req to SRB ID=%d
\n
"
,
Mod_idP
,
Srb_id
);
#endif
if
(
enb_flagP
==
ENB_FLAG_YES
){
if
(
enb_flagP
==
ENB_FLAG_YES
){
if
((
Srb_id
&
RAB_OFFSET
)
==
BCCH
){
if
(
eNB_rrc_inst
[
Mod_idP
].
SI
.
Active
==
0
)
return
0
;
if
((
Srb_id
&
RAB_OFFSET
)
==
BCCH
){
if
(
eNB_rrc_inst
[
Mod_idP
].
SI
.
Active
==
0
)
return
0
;
// All even frames transmit SIB in SF 5
if
(
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB1
==
255
)
{
LOG_E
(
RRC
,
"[eNB %d] MAC Request for SIB1 and SIB1 not initialized
\n
"
,
Mod_idP
);
mac_xface
->
macphy_exit
(
""
);
}
if
((
frameP
%
2
)
==
0
)
{
memcpy
(
&
buffer_pP
[
0
],
eNB_rrc_inst
[
Mod_idP
].
SIB1
,
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB1
);
// All even frames transmit SIB in SF 5
if
(
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB1
==
255
)
{
LOG_E
(
RRC
,
"[eNB %d] MAC Request for SIB1 and SIB1 not initialized
\n
"
,
Mod_idP
);
mac_xface
->
macphy_exit
(
""
);
}
if
((
frameP
%
2
)
==
0
)
{
memcpy
(
&
buffer_pP
[
0
],
eNB_rrc_inst
[
Mod_idP
].
SIB1
,
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB1
);
#if defined(ENABLE_ITTI)
{
MessageDef
*
message_p
;
int
sib1_size
=
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB1
;
int
sdu_size
=
sizeof
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
);
if
(
sib1_size
>
sdu_size
)
{
LOG_E
(
RRC
,
"SIB1 SDU larger than BCCH SDU buffer size (%d, %d)"
,
sib1_size
,
sdu_size
);
sib1_size
=
sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_RRC_ENB
,
RRC_MAC_BCCH_DATA_REQ
);
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
frame
=
frameP
;
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu_size
=
sib1_size
;
memset
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
,
eNB_rrc_inst
[
Mod_idP
].
SIB1
,
sib1_size
);
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
enb_index
=
eNB_index
;
itti_send_msg_to_task
(
TASK_MAC_ENB
,
Mod_idP
,
message_p
);
}
{
MessageDef
*
message_p
;
int
sib1_size
=
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB1
;
int
sdu_size
=
sizeof
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
);
if
(
sib1_size
>
sdu_size
)
{
LOG_E
(
RRC
,
"SIB1 SDU larger than BCCH SDU buffer size (%d, %d)"
,
sib1_size
,
sdu_size
);
sib1_size
=
sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_RRC_ENB
,
RRC_MAC_BCCH_DATA_REQ
);
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
frame
=
frameP
;
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu_size
=
sib1_size
;
memset
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
,
eNB_rrc_inst
[
Mod_idP
].
SIB1
,
sib1_size
);
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
enb_index
=
eNB_index
;
itti_send_msg_to_task
(
TASK_MAC_ENB
,
Mod_idP
,
message_p
);
}
#endif
#ifdef DEBUG_RRC
LOG_D
(
RRC
,
"[eNB %d] Frame %d : BCCH request => SIB 1
\n
"
,
Mod_idP
,
frameP
);
for
(
i
=
0
;
i
<
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB1
;
i
++
)
LOG_T
(
RRC
,
"%x."
,
buffer_pP
[
i
]);
LOG_T
(
RRC
,
"
\n
"
);
LOG_D
(
RRC
,
"[eNB %d] Frame %d : BCCH request => SIB 1
\n
"
,
Mod_idP
,
frameP
);
for
(
i
=
0
;
i
<
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB1
;
i
++
)
LOG_T
(
RRC
,
"%x."
,
buffer_pP
[
i
]);
LOG_T
(
RRC
,
"
\n
"
);
#endif
return
(
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB1
);
}
// All RFN mod 8 transmit SIB2-3 in SF 5
else
if
((
frameP
%
8
)
==
1
){
memcpy
(
&
buffer_pP
[
0
],
eNB_rrc_inst
[
Mod_idP
].
SIB23
,
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB23
);
return
(
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB1
);
}
// All RFN mod 8 transmit SIB2-3 in SF 5
else
if
((
frameP
%
8
)
==
1
){
memcpy
(
&
buffer_pP
[
0
],
eNB_rrc_inst
[
Mod_idP
].
SIB23
,
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB23
);
#if defined(ENABLE_ITTI)
{
MessageDef
*
message_p
;
int
sib23_size
=
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB23
;
int
sdu_size
=
sizeof
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
);
if
(
sib23_size
>
sdu_size
)
{
LOG_E
(
RRC
,
"SIB23 SDU larger than BCCH SDU buffer size (%d, %d)"
,
sib23_size
,
sdu_size
);
sib23_size
=
sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_RRC_ENB
,
RRC_MAC_BCCH_DATA_REQ
);
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
frame
=
frameP
;
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu_size
=
sib23_size
;
memset
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
,
eNB_rrc_inst
[
Mod_idP
].
SIB23
,
sib23_size
);
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
enb_index
=
eNB_index
;
itti_send_msg_to_task
(
TASK_MAC_ENB
,
Mod_idP
,
message_p
);
}
{
MessageDef
*
message_p
;
int
sib23_size
=
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB23
;
int
sdu_size
=
sizeof
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
);
if
(
sib23_size
>
sdu_size
)
{
LOG_E
(
RRC
,
"SIB23 SDU larger than BCCH SDU buffer size (%d, %d)"
,
sib23_size
,
sdu_size
);
sib23_size
=
sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_RRC_ENB
,
RRC_MAC_BCCH_DATA_REQ
);
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
frame
=
frameP
;
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu_size
=
sib23_size
;
memset
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
,
eNB_rrc_inst
[
Mod_idP
].
SIB23
,
sib23_size
);
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
enb_index
=
eNB_index
;
itti_send_msg_to_task
(
TASK_MAC_ENB
,
Mod_idP
,
message_p
);
}
#endif
#ifdef DEBUG_RRC
LOG_D
(
RRC
,
"[eNB %d] Frame %d BCCH request => SIB 2-3
\n
"
,
Mod_idP
,
frameP
);
for
(
i
=
0
;
i
<
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB23
;
i
++
)
LOG_T
(
RRC
,
"%x."
,
buffer_pP
[
i
]);
LOG_T
(
RRC
,
"
\n
"
);
LOG_D
(
RRC
,
"[eNB %d] Frame %d BCCH request => SIB 2-3
\n
"
,
Mod_idP
,
frameP
);
for
(
i
=
0
;
i
<
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB23
;
i
++
)
LOG_T
(
RRC
,
"%x."
,
buffer_pP
[
i
]);
LOG_T
(
RRC
,
"
\n
"
);
#endif
return
(
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB23
);
}
else
return
(
0
);
}
return
(
eNB_rrc_inst
[
Mod_idP
].
sizeof_SIB23
);
}
else
return
(
0
);
}
if
(
(
Srb_id
&
RAB_OFFSET
)
==
CCCH
){
LOG_D
(
RRC
,
"[eNB %d] Frame %d CCCH request (Srb_id %d)
\n
"
,
Mod_idP
,
frameP
,
Srb_id
);
if
(
(
Srb_id
&
RAB_OFFSET
)
==
CCCH
){
LOG_D
(
RRC
,
"[eNB %d] Frame %d CCCH request (Srb_id %d)
\n
"
,
Mod_idP
,
frameP
,
Srb_id
);
if
(
eNB_rrc_inst
[
Mod_idP
].
Srb0
.
Active
==
0
)
{
LOG_E
(
RRC
,
"[eNB %d] CCCH Not active
\n
"
,
Mod_idP
);
return
-
1
;
}
Srb_info
=&
eNB_rrc_inst
[
Mod_idP
].
Srb0
;
if
(
eNB_rrc_inst
[
Mod_idP
].
Srb0
.
Active
==
0
)
{
LOG_E
(
RRC
,
"[eNB %d] CCCH Not active
\n
"
,
Mod_idP
);
return
-
1
;
}
Srb_info
=&
eNB_rrc_inst
[
Mod_idP
].
Srb0
;
// check if data is there for MAC
if
(
Srb_info
->
Tx_buffer
.
payload_size
>
0
){
//Fill buffer
LOG_D
(
RRC
,
"[eNB %d] CCCH (%p) has %d bytes (dest: %p, src %p)
\n
"
,
Mod_idP
,
Srb_info
,
Srb_info
->
Tx_buffer
.
payload_size
,
buffer_pP
,
Srb_info
->
Tx_buffer
.
Payload
);
// check if data is there for MAC
if
(
Srb_info
->
Tx_buffer
.
payload_size
>
0
){
//Fill buffer
LOG_D
(
RRC
,
"[eNB %d] CCCH (%p) has %d bytes (dest: %p, src %p)
\n
"
,
Mod_idP
,
Srb_info
,
Srb_info
->
Tx_buffer
.
payload_size
,
buffer_pP
,
Srb_info
->
Tx_buffer
.
Payload
);
#if defined(ENABLE_ITTI)
{
MessageDef
*
message_p
;
int
ccch_size
=
Srb_info
->
Tx_buffer
.
payload_size
;
int
sdu_size
=
sizeof
(
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
sdu
);
if
(
ccch_size
>
sdu_size
)
{
LOG_E
(
RRC
,
"SDU larger than CCCH SDU buffer size (%d, %d)"
,
ccch_size
,
sdu_size
);
ccch_size
=
sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_RRC_ENB
,
RRC_MAC_CCCH_DATA_REQ
);
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
frame
=
frameP
;
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
sdu_size
=
ccch_size
;
memset
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
sdu
,
Srb_info
->
Tx_buffer
.
Payload
,
ccch_size
);
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
enb_index
=
eNB_index
;
itti_send_msg_to_task
(
TASK_MAC_ENB
,
Mod_idP
,
message_p
);
}
{
MessageDef
*
message_p
;
int
ccch_size
=
Srb_info
->
Tx_buffer
.
payload_size
;
int
sdu_size
=
sizeof
(
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
sdu
);
if
(
ccch_size
>
sdu_size
)
{
LOG_E
(
RRC
,
"SDU larger than CCCH SDU buffer size (%d, %d)"
,
ccch_size
,
sdu_size
);
ccch_size
=
sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_RRC_ENB
,
RRC_MAC_CCCH_DATA_REQ
);
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
frame
=
frameP
;
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
sdu_size
=
ccch_size
;
memset
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
sdu
,
Srb_info
->
Tx_buffer
.
Payload
,
ccch_size
);
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
enb_index
=
eNB_index
;
itti_send_msg_to_task
(
TASK_MAC_ENB
,
Mod_idP
,
message_p
);
}
#endif
memcpy
(
buffer_pP
,
Srb_info
->
Tx_buffer
.
Payload
,
Srb_info
->
Tx_buffer
.
payload_size
);
Sdu_size
=
Srb_info
->
Tx_buffer
.
payload_size
;
Srb_info
->
Tx_buffer
.
payload_size
=
0
;
}
memcpy
(
buffer_pP
,
Srb_info
->
Tx_buffer
.
Payload
,
Srb_info
->
Tx_buffer
.
payload_size
);
Sdu_size
=
Srb_info
->
Tx_buffer
.
payload_size
;
Srb_info
->
Tx_buffer
.
payload_size
=
0
;
}
return
(
Sdu_size
);
}
return
(
Sdu_size
);
}
#ifdef Rel10
if
((
Srb_id
&
RAB_OFFSET
)
==
MCCH
){
if
(
eNB_rrc_inst
[
Mod_idP
].
MCCH_MESS
[
mbsfn_sync_area
].
Active
==
0
)
return
0
;
// this parameter is set in function init_mcch in rrc_eNB.c
// this part not needed as it is done in init_mcch
/* if (eNB_rrc_inst[Mod_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area] == 255) {
if
((
Srb_id
&
RAB_OFFSET
)
==
MCCH
){
if
(
eNB_rrc_inst
[
Mod_idP
].
MCCH_MESS
[
mbsfn_sync_area
].
Active
==
0
)
return
0
;
// this parameter is set in function init_mcch in rrc_eNB.c
// this part not needed as it is done in init_mcch
/* if (eNB_rrc_inst[Mod_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area] == 255) {
LOG_E(RRC,"[eNB %d] MAC Request for MCCH MESSAGE and MCCH MESSAGE is not initialized\n",Mod_id);
mac_xface->macphy_exit("");
}*/
#if defined(ENABLE_ITTI)
{
MessageDef
*
message_p
;
int
mcch_size
=
eNB_rrc_inst
[
Mod_idP
].
sizeof_MCCH_MESSAGE
[
mbsfn_sync_area
];
int
sdu_size
=
sizeof
(
RRC_MAC_MCCH_DATA_REQ
(
message_p
).
sdu
);
if
(
mcch_size
>
sdu_size
)
{
LOG_E
(
RRC
,
"SDU larger than MCCH SDU buffer size (%d, %d)"
,
mcch_size
,
sdu_size
);
mcch_size
=
sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_RRC_ENB
,
RRC_MAC_MCCH_DATA_REQ
);
RRC_MAC_MCCH_DATA_REQ
(
message_p
).
frame
=
frameP
;
RRC_MAC_MCCH_DATA_REQ
(
message_p
).
sdu_size
=
mcch_size
;
memset
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_MCCH_DATA_REQ
(
message_p
).
sdu
,
eNB_rrc_inst
[
Mod_idP
].
MCCH_MESSAGE
[
mbsfn_sync_area
],
mcch_size
);
RRC_MAC_MCCH_DATA_REQ
(
message_p
).
enb_index
=
eNB_index
;
RRC_MAC_MCCH_DATA_REQ
(
message_p
).
mbsfn_sync_area
=
mbsfn_sync_area
;
itti_send_msg_to_task
(
TASK_MAC_ENB
,
Mod_idP
,
message_p
);
}
{
MessageDef
*
message_p
;
int
mcch_size
=
eNB_rrc_inst
[
Mod_idP
].
sizeof_MCCH_MESSAGE
[
mbsfn_sync_area
];
int
sdu_size
=
sizeof
(
RRC_MAC_MCCH_DATA_REQ
(
message_p
).
sdu
);
if
(
mcch_size
>
sdu_size
)
{
LOG_E
(
RRC
,
"SDU larger than MCCH SDU buffer size (%d, %d)"
,
mcch_size
,
sdu_size
);
mcch_size
=
sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_RRC_ENB
,
RRC_MAC_MCCH_DATA_REQ
);
RRC_MAC_MCCH_DATA_REQ
(
message_p
).
frame
=
frameP
;
RRC_MAC_MCCH_DATA_REQ
(
message_p
).
sdu_size
=
mcch_size
;
memset
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_MCCH_DATA_REQ
(
message_p
).
sdu
,
eNB_rrc_inst
[
Mod_idP
].
MCCH_MESSAGE
[
mbsfn_sync_area
],
mcch_size
);
RRC_MAC_MCCH_DATA_REQ
(
message_p
).
enb_index
=
eNB_index
;
RRC_MAC_MCCH_DATA_REQ
(
message_p
).
mbsfn_sync_area
=
mbsfn_sync_area
;
itti_send_msg_to_task
(
TASK_MAC_ENB
,
Mod_idP
,
message_p
);
}
#endif
memcpy
(
&
buffer_pP
[
0
],
eNB_rrc_inst
[
Mod_idP
].
MCCH_MESSAGE
[
mbsfn_sync_area
],
eNB_rrc_inst
[
Mod_idP
].
sizeof_MCCH_MESSAGE
[
mbsfn_sync_area
]);
memcpy
(
&
buffer_pP
[
0
],
eNB_rrc_inst
[
Mod_idP
].
MCCH_MESSAGE
[
mbsfn_sync_area
],
eNB_rrc_inst
[
Mod_idP
].
sizeof_MCCH_MESSAGE
[
mbsfn_sync_area
]);
#ifdef DEBUG_RRC
LOG_D
(
RRC
,
"[eNB %d] Frame %d : MCCH request => MCCH_MESSAGE
\n
"
,
Mod_idP
,
frameP
);
for
(
i
=
0
;
i
<
eNB_rrc_inst
[
Mod_idP
].
sizeof_MCCH_MESSAGE
[
mbsfn_sync_area
];
i
++
)
LOG_T
(
RRC
,
"%x."
,
buffer_pP
[
i
]);
LOG_T
(
RRC
,
"
\n
"
);
LOG_D
(
RRC
,
"[eNB %d] Frame %d : MCCH request => MCCH_MESSAGE
\n
"
,
Mod_idP
,
frameP
);
for
(
i
=
0
;
i
<
eNB_rrc_inst
[
Mod_idP
].
sizeof_MCCH_MESSAGE
[
mbsfn_sync_area
];
i
++
)
LOG_T
(
RRC
,
"%x."
,
buffer_pP
[
i
]);
LOG_T
(
RRC
,
"
\n
"
);
#endif
return
(
eNB_rrc_inst
[
Mod_idP
].
sizeof_MCCH_MESSAGE
[
mbsfn_sync_area
]);
// }
//else
//return(0);
return
(
eNB_rrc_inst
[
Mod_idP
].
sizeof_MCCH_MESSAGE
[
mbsfn_sync_area
]);
// }
//else
//return(0);
}
#endif //Rel10
}
#endif //Rel10
}
else
{
//This is an UE
else
{
//This is an UE
#ifdef DEBUG_RRC
LOG_D
(
RRC
,
"[UE %d] Frame %d Filling CCCH SRB_ID %d
\n
"
,
Mod_idP
,
frameP
,
Srb_id
);
LOG_D
(
RRC
,
"[UE %d] Frame %d buffer_pP status %d,
\n
"
,
Mod_idP
,
frameP
,
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
].
Tx_buffer
.
payload_size
);
LOG_D
(
RRC
,
"[UE %d] Frame %d Filling CCCH SRB_ID %d
\n
"
,
Mod_idP
,
frameP
,
Srb_id
);
LOG_D
(
RRC
,
"[UE %d] Frame %d buffer_pP status %d,
\n
"
,
Mod_idP
,
frameP
,
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
].
Tx_buffer
.
payload_size
);
#endif
if
(
(
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
].
Tx_buffer
.
payload_size
>
0
)
)
{
if
(
(
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
].
Tx_buffer
.
payload_size
>
0
)
)
{
#if defined(ENABLE_ITTI)
{
MessageDef
*
message_p
;
int
ccch_size
=
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
].
Tx_buffer
.
payload_size
;
int
sdu_size
=
sizeof
(
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
sdu
);
if
(
ccch_size
>
sdu_size
)
{
LOG_E
(
RRC
,
"SDU larger than CCCH SDU buffer size (%d, %d)"
,
ccch_size
,
sdu_size
);
ccch_size
=
sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_RRC_UE
,
RRC_MAC_CCCH_DATA_REQ
);
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
frame
=
frameP
;
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
sdu_size
=
ccch_size
;
memset
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
sdu
,
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
].
Tx_buffer
.
Payload
,
ccch_size
);
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
enb_index
=
eNB_index
;
itti_send_msg_to_task
(
TASK_MAC_UE
,
Mod_idP
+
NB_eNB_INST
,
message_p
);
}
{
MessageDef
*
message_p
;
int
ccch_size
=
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
].
Tx_buffer
.
payload_size
;
int
sdu_size
=
sizeof
(
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
sdu
);
if
(
ccch_size
>
sdu_size
)
{
LOG_E
(
RRC
,
"SDU larger than CCCH SDU buffer size (%d, %d)"
,
ccch_size
,
sdu_size
);
ccch_size
=
sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_RRC_UE
,
RRC_MAC_CCCH_DATA_REQ
);
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
frame
=
frameP
;
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
sdu_size
=
ccch_size
;
memset
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_BCCH_DATA_REQ
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
sdu
,
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
].
Tx_buffer
.
Payload
,
ccch_size
);
RRC_MAC_CCCH_DATA_REQ
(
message_p
).
enb_index
=
eNB_index
;
itti_send_msg_to_task
(
TASK_MAC_UE
,
Mod_idP
+
NB_eNB_INST
,
message_p
);
}
#endif
memcpy
(
&
buffer_pP
[
0
],
&
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
].
Tx_buffer
.
Payload
[
0
],
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
].
Tx_buffer
.
payload_size
);
uint8_t
Ret_size
=
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
].
Tx_buffer
.
payload_size
;
// UE_rrc_inst[Mod_id].Srb0[eNB_index].Tx_buffer.payload_size=0;
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
T300_active
=
1
;
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
T300_cnt
=
0
;
// msg("[RRC][UE %d] Sending rach\n",Mod_id);
return
(
Ret_size
);
}
else
{
return
0
;
memcpy
(
&
buffer_pP
[
0
],
&
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
].
Tx_buffer
.
Payload
[
0
],
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
].
Tx_buffer
.
payload_size
);
uint8_t
Ret_size
=
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
].
Tx_buffer
.
payload_size
;
// UE_rrc_inst[Mod_id].Srb0[eNB_index].Tx_buffer.payload_size=0;
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
T300_active
=
1
;
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
T300_cnt
=
0
;
// msg("[RRC][UE %d] Sending rach\n",Mod_id);
return
(
Ret_size
);
}
else
{
return
0
;
}
}
}
return
(
0
);
return
(
0
);
}
//-------------------------------------------------------------------------------------------//
int8_t
mac_rrc_lite_data_ind
(
module_id_t
Mod_idP
,
frame_t
frameP
,
rb_id_t
Srb_id
,
uint8_t
*
Sdu
,
sdu_size_t
sdu_size
,
eNB_flag_t
enb_flagP
,
uint8_t
eNB_index
,
uint8_t
mbsfn_sync_area
){
//-------------------------------------------------------------------------------------------//
SRB_INFO
*
Srb_info
;
/*
//-------------------------------------------------------------------------------------------//
SRB_INFO
*
Srb_info
;
/*
int si_window;
*/
*/
if
(
enb_flagP
==
ENB_FLAG_NO
){
if
(
enb_flagP
==
ENB_FLAG_NO
){
if
(
Srb_id
==
BCCH
){
LOG_T
(
RRC
,
"[UE %d] Received SDU for BCCH on SRB %d from eNB %d
\n
"
,
Mod_idP
,
Srb_id
,
eNB_index
);
if
(
Srb_id
==
BCCH
){
#if defined(ENABLE_ITTI)
{
MessageDef
*
message_p
;
int
msg_sdu_size
=
sizeof
(
RRC_MAC_BCCH_DATA_IND
(
message_p
).
sdu
);
LOG_T
(
RRC
,
"[UE %d] Received SDU for BCCH on SRB %d from eNB %d
\n
"
,
Mod_idP
,
Srb_id
,
eNB_index
);
if
(
sdu_size
>
msg_sdu_size
)
{
LOG_E
(
RRC
,
"SDU larger than BCCH SDU buffer size (%d, %d)"
,
sdu_size
,
msg_sdu_size
);
sdu_size
=
msg_sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_MAC_UE
,
RRC_MAC_BCCH_DATA_IND
);
RRC_MAC_BCCH_DATA_IND
(
message_p
).
frame
=
frameP
;
RRC_MAC_BCCH_DATA_IND
(
message_p
).
sdu_size
=
sdu_size
;
memset
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_BCCH_DATA_IND
(
message_p
).
sdu
,
Sdu
,
sdu_size
);
RRC_MAC_BCCH_DATA_IND
(
message_p
).
enb_index
=
eNB_index
;
RRC_MAC_BCCH_DATA_IND
(
message_p
).
rsrq
=
30
/* TODO change phy to report rspq */
;
RRC_MAC_BCCH_DATA_IND
(
message_p
).
rsrp
=
45
/* TODO change phy to report rspp */
;
itti_send_msg_to_task
(
TASK_RRC_UE
,
Mod_idP
+
NB_eNB_INST
,
message_p
);
}
#if defined(ENABLE_ITTI)
{
MessageDef
*
message_p
;
int
msg_sdu_size
=
sizeof
(
RRC_MAC_BCCH_DATA_IND
(
message_p
).
sdu
);
if
(
sdu_size
>
msg_sdu_size
)
{
LOG_E
(
RRC
,
"SDU larger than BCCH SDU buffer size (%d, %d)"
,
sdu_size
,
msg_sdu_size
);
sdu_size
=
msg_sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_MAC_UE
,
RRC_MAC_BCCH_DATA_IND
);
RRC_MAC_BCCH_DATA_IND
(
message_p
).
frame
=
frameP
;
RRC_MAC_BCCH_DATA_IND
(
message_p
).
sdu_size
=
sdu_size
;
memset
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_BCCH_DATA_IND
(
message_p
).
sdu
,
Sdu
,
sdu_size
);
RRC_MAC_BCCH_DATA_IND
(
message_p
).
enb_index
=
eNB_index
;
RRC_MAC_BCCH_DATA_IND
(
message_p
).
rsrq
=
30
/* TODO change phy to report rspq */
;
RRC_MAC_BCCH_DATA_IND
(
message_p
).
rsrp
=
45
/* TODO change phy to report rspp */
;
itti_send_msg_to_task
(
TASK_RRC_UE
,
Mod_idP
+
NB_eNB_INST
,
message_p
);
}
#else
decode_BCCH_DLSCH_Message
(
Mod_idP
,
frameP
,
eNB_index
,
Sdu
,
sdu_size
,
0
,
0
);
/*
decode_BCCH_DLSCH_Message
(
Mod_idP
,
frameP
,
eNB_index
,
Sdu
,
sdu_size
,
0
,
0
);
/*
if ((frameP %2) == 0) {
if (UE_rrc_inst[Mod_id].Info[eNB_index].SIB1Status == 0) {
LOG_D(RRC,"[UE %d] Frame %d : Received SIB1 from eNB %d (%d bytes)\n",Mod_id,frameP,eNB_index,sdu_size);
...
...
@@ -364,7 +364,7 @@ int8_t mac_rrc_lite_data_ind(module_id_t Mod_idP, frame_t frameP, rb_id_t Srb_id
}
}
...
...
@@ -375,280 +375,280 @@ int8_t mac_rrc_lite_data_ind(module_id_t Mod_idP, frame_t frameP, rb_id_t Srb_id
UE_rrc_inst[Mod_id].Info[eNB_index].State = RRC_SI_RECEIVED;
}
}
*/
*/
#endif
}
}
if
((
Srb_id
&
RAB_OFFSET
)
==
CCCH
){
if
(
sdu_size
>
0
)
{
LOG_T
(
RRC
,
"[UE %d] Received SDU for CCCH on SRB %d from eNB %d
\n
"
,
Mod_idP
,
Srb_id
&
RAB_OFFSET
,
eNB_index
);
if
((
Srb_id
&
RAB_OFFSET
)
==
CCCH
){
if
(
sdu_size
>
0
)
{
LOG_T
(
RRC
,
"[UE %d] Received SDU for CCCH on SRB %d from eNB %d
\n
"
,
Mod_idP
,
Srb_id
&
RAB_OFFSET
,
eNB_index
);
#if defined(ENABLE_ITTI)
{
MessageDef
*
message_p
;
int
msg_sdu_size
=
sizeof
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
);
if
(
sdu_size
>
msg_sdu_size
)
{
LOG_E
(
RRC
,
"SDU larger than CCCH SDU buffer size (%d, %d)"
,
sdu_size
,
msg_sdu_size
);
sdu_size
=
msg_sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_MAC_UE
,
RRC_MAC_CCCH_DATA_IND
);
RRC_MAC_CCCH_DATA_IND
(
message_p
).
frame
=
frameP
;
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu_size
=
sdu_size
;
memset
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
,
Sdu
,
sdu_size
);
RRC_MAC_CCCH_DATA_IND
(
message_p
).
enb_index
=
eNB_index
;
itti_send_msg_to_task
(
TASK_RRC_UE
,
Mod_idP
+
NB_eNB_INST
,
message_p
);
}
{
MessageDef
*
message_p
;
int
msg_sdu_size
=
sizeof
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
);
if
(
sdu_size
>
msg_sdu_size
)
{
LOG_E
(
RRC
,
"SDU larger than CCCH SDU buffer size (%d, %d)"
,
sdu_size
,
msg_sdu_size
);
sdu_size
=
msg_sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_MAC_UE
,
RRC_MAC_CCCH_DATA_IND
);
RRC_MAC_CCCH_DATA_IND
(
message_p
).
frame
=
frameP
;
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu_size
=
sdu_size
;
memset
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
,
Sdu
,
sdu_size
);
RRC_MAC_CCCH_DATA_IND
(
message_p
).
enb_index
=
eNB_index
;
itti_send_msg_to_task
(
TASK_RRC_UE
,
Mod_idP
+
NB_eNB_INST
,
message_p
);
}
#else
Srb_info
=
&
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
];
Srb_info
=
&
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
];
memcpy
(
Srb_info
->
Rx_buffer
.
Payload
,
Sdu
,
sdu_size
);
Srb_info
->
Rx_buffer
.
payload_size
=
sdu_size
;
rrc_ue_decode_ccch
(
Mod_idP
,
frameP
,
Srb_info
,
eNB_index
);
memcpy
(
Srb_info
->
Rx_buffer
.
Payload
,
Sdu
,
sdu_size
);
Srb_info
->
Rx_buffer
.
payload_size
=
sdu_size
;
rrc_ue_decode_ccch
(
Mod_idP
,
frameP
,
Srb_info
,
eNB_index
);
#endif
}
}
#ifdef Rel10
if
((
Srb_id
&
RAB_OFFSET
)
==
MCCH
)
{
LOG_T
(
RRC
,
"[UE %d] Frame %d: Received SDU on MBSFN sync area %d for MCCH on SRB %d from eNB %d
\n
"
,
Mod_idP
,
frameP
,
mbsfn_sync_area
,
Srb_id
&
RAB_OFFSET
,
eNB_index
);
#if defined(ENABLE_ITTI)
{
MessageDef
*
message_p
;
int
msg_sdu_size
=
sizeof
(
RRC_MAC_MCCH_DATA_IND
(
message_p
).
sdu
);
if
(
sdu_size
>
msg_sdu_size
)
{
LOG_E
(
RRC
,
"SDU larger than MCCH SDU buffer size (%d, %d)"
,
sdu_size
,
msg_sdu_size
);
sdu_size
=
msg_sdu_size
;
}
}
message_p
=
itti_alloc_new_message
(
TASK_MAC_UE
,
RRC_MAC_MCCH_DATA_IND
);
RRC_MAC_MCCH_DATA_IND
(
message_p
).
frame
=
frameP
;
RRC_MAC_MCCH_DATA_IND
(
message_p
).
sdu_size
=
sdu_size
;
memset
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_MCCH_DATA_IND
(
message_p
).
sdu
,
Sdu
,
sdu_size
);
RRC_MAC_MCCH_DATA_IND
(
message_p
).
enb_index
=
eNB_index
;
RRC_MAC_MCCH_DATA_IND
(
message_p
).
mbsfn_sync_area
=
mbsfn_sync_area
;
#ifdef Rel10
if
((
Srb_id
&
RAB_OFFSET
)
==
MCCH
)
{
LOG_T
(
RRC
,
"[UE %d] Frame %d: Received SDU on MBSFN sync area %d for MCCH on SRB %d from eNB %d
\n
"
,
Mod_idP
,
frameP
,
mbsfn_sync_area
,
Srb_id
&
RAB_OFFSET
,
eNB_index
);
itti_send_msg_to_task
(
TASK_RRC_UE
,
Mod_idP
+
NB_eNB_INST
,
message_p
);
}
#if defined(ENABLE_ITTI)
{
MessageDef
*
message_p
;
int
msg_sdu_size
=
sizeof
(
RRC_MAC_MCCH_DATA_IND
(
message_p
).
sdu
);
if
(
sdu_size
>
msg_sdu_size
)
{
LOG_E
(
RRC
,
"SDU larger than MCCH SDU buffer size (%d, %d)"
,
sdu_size
,
msg_sdu_size
);
sdu_size
=
msg_sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_MAC_UE
,
RRC_MAC_MCCH_DATA_IND
);
RRC_MAC_MCCH_DATA_IND
(
message_p
).
frame
=
frameP
;
RRC_MAC_MCCH_DATA_IND
(
message_p
).
sdu_size
=
sdu_size
;
memset
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_MCCH_DATA_IND
(
message_p
).
sdu
,
Sdu
,
sdu_size
);
RRC_MAC_MCCH_DATA_IND
(
message_p
).
enb_index
=
eNB_index
;
RRC_MAC_MCCH_DATA_IND
(
message_p
).
mbsfn_sync_area
=
mbsfn_sync_area
;
itti_send_msg_to_task
(
TASK_RRC_UE
,
Mod_idP
+
NB_eNB_INST
,
message_p
);
}
#else
decode_MCCH_Message
(
Mod_idP
,
frameP
,
eNB_index
,
Sdu
,
sdu_size
,
mbsfn_sync_area
);
decode_MCCH_Message
(
Mod_idP
,
frameP
,
eNB_index
,
Sdu
,
sdu_size
,
mbsfn_sync_area
);
#endif
}
}
#endif // Rel10
}
}
else
{
// This is an eNB
Srb_info
=
&
eNB_rrc_inst
[
Mod_idP
].
Srb0
;
LOG_T
(
RRC
,
"[eNB %d] Received SDU for CCCH on SRB %d
\n
"
,
Mod_idP
,
Srb_info
->
Srb_id
);
else
{
// This is an eNB
Srb_info
=
&
eNB_rrc_inst
[
Mod_idP
].
Srb0
;
LOG_T
(
RRC
,
"[eNB %d] Received SDU for CCCH on SRB %d
\n
"
,
Mod_idP
,
Srb_info
->
Srb_id
);
#if defined(ENABLE_ITTI)
{
MessageDef
*
message_p
;
int
msg_sdu_size
=
sizeof
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
);
if
(
sdu_size
>
msg_sdu_size
)
{
LOG_E
(
RRC
,
"SDU larger than CCCH SDU buffer size (%d, %d)"
,
sdu_size
,
msg_sdu_size
);
sdu_size
=
msg_sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_MAC_ENB
,
RRC_MAC_CCCH_DATA_IND
);
RRC_MAC_CCCH_DATA_IND
(
message_p
).
frame
=
frameP
;
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu_size
=
sdu_size
;
memset
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
,
Sdu
,
sdu_size
);
itti_send_msg_to_task
(
TASK_RRC_ENB
,
Mod_idP
,
message_p
);
}
MessageDef
*
message_p
;
int
msg_sdu_size
=
sizeof
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
);
if
(
sdu_size
>
msg_sdu_size
)
{
LOG_E
(
RRC
,
"SDU larger than CCCH SDU buffer size (%d, %d)"
,
sdu_size
,
msg_sdu_size
);
sdu_size
=
msg_sdu_size
;
}
message_p
=
itti_alloc_new_message
(
TASK_MAC_ENB
,
RRC_MAC_CCCH_DATA_IND
);
RRC_MAC_CCCH_DATA_IND
(
message_p
).
frame
=
frameP
;
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu_size
=
sdu_size
;
memset
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
,
0
,
sizeof
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
));
memcpy
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
,
Sdu
,
sdu_size
);
itti_send_msg_to_task
(
TASK_RRC_ENB
,
Mod_idP
,
message_p
);
}
#else
// msg("\n******INST %d Srb_info %p, Srb_id=%d****\n\n",Mod_id,Srb_info,Srb_info->Srb_id);
if
(
sdu_size
>
0
)
{
memcpy
(
Srb_info
->
Rx_buffer
.
Payload
,
Sdu
,
sdu_size
);
Srb_info
->
Rx_buffer
.
payload_size
=
sdu_size
;
rrc_eNB_decode_ccch
(
Mod_idP
,
frameP
,
Srb_info
);
}
// msg("\n******INST %d Srb_info %p, Srb_id=%d****\n\n",Mod_id,Srb_info,Srb_info->Srb_id);
if
(
sdu_size
>
0
)
{
memcpy
(
Srb_info
->
Rx_buffer
.
Payload
,
Sdu
,
sdu_size
);
Srb_info
->
Rx_buffer
.
payload_size
=
sdu_size
;
rrc_eNB_decode_ccch
(
Mod_idP
,
frameP
,
Srb_info
);
}
#endif
}
}
return
(
0
);
return
(
0
);
}
//-------------------------------------------------------------------------------------------//
// this function is Not USED anymore
void
mac_lite_sync_ind
(
module_id_t
Mod_idP
,
uint8_t
Status
){
//-------------------------------------------------------------------------------------------//
//-------------------------------------------------------------------------------------------//
}
//-------------------------------------------------------------------------------------------//
uint8_t
rrc_lite_data_req
(
module_id_t
enb_mod_idP
,
module_id_t
ue_mod_idP
,
frame_t
frameP
,
eNB_flag_t
enb_flagP
,
rb_id_t
rb_idP
,
mui_t
muiP
,
uint32_t
confirmP
,
sdu_size_t
sdu_size
,
uint8_t
*
buffer_pP
,
pdcp_transmission_mode_t
mode
)
{
//-------------------------------------------------------------------------------------------//
sdu_size_t
sdu_size
,
uint8_t
*
buffer_pP
,
pdcp_transmission_mode_t
mode
)
{
//-------------------------------------------------------------------------------------------//
#if defined(ENABLE_ITTI)
{
MessageDef
*
message_p
;
// Uses a new buffer to avoid issue with PDCP buffer content that could be changed by PDCP (asynchronous message handling).
uint8_t
*
message_buffer
;
message_buffer
=
itti_malloc
(
enb_flagP
?
TASK_RRC_ENB
:
TASK_RRC_UE
,
enb_flagP
?
TASK_PDCP_ENB
:
TASK_PDCP_UE
,
sdu_size
);
memcpy
(
message_buffer
,
buffer_pP
,
sdu_size
);
message_p
=
itti_alloc_new_message
(
enb_flagP
?
TASK_RRC_ENB
:
TASK_RRC_UE
,
RRC_DCCH_DATA_REQ
);
RRC_DCCH_DATA_REQ
(
message_p
).
frame
=
frameP
;
RRC_DCCH_DATA_REQ
(
message_p
).
enb_flag
=
enb_flagP
;
RRC_DCCH_DATA_REQ
(
message_p
).
rb_id
=
rb_idP
;
RRC_DCCH_DATA_REQ
(
message_p
).
muip
=
muiP
;
RRC_DCCH_DATA_REQ
(
message_p
).
confirmp
=
confirmP
;
RRC_DCCH_DATA_REQ
(
message_p
).
sdu_size
=
sdu_size
;
RRC_DCCH_DATA_REQ
(
message_p
).
sdu_p
=
message_buffer
;
RRC_DCCH_DATA_REQ
(
message_p
).
mode
=
mode
;
RRC_DCCH_DATA_REQ
(
message_p
).
eNB_index
=
enb_mod_idP
;
RRC_DCCH_DATA_REQ
(
message_p
).
ue_index
=
ue_mod_idP
;
itti_send_msg_to_task
(
enb_flagP
?
TASK_PDCP_ENB
:
TASK_PDCP_UE
,
enb_flagP
?
enb_mod_idP
:
NB_eNB_INST
+
ue_mod_idP
,
message_p
);
return
TRUE
;
// TODO should be changed to a CNF message later, currently RRC lite does not used the returned value anyway.
}
{
MessageDef
*
message_p
;
// Uses a new buffer to avoid issue with PDCP buffer content that could be changed by PDCP (asynchronous message handling).
uint8_t
*
message_buffer
;
message_buffer
=
itti_malloc
(
enb_flagP
?
TASK_RRC_ENB
:
TASK_RRC_UE
,
enb_flagP
?
TASK_PDCP_ENB
:
TASK_PDCP_UE
,
sdu_size
);
memcpy
(
message_buffer
,
buffer_pP
,
sdu_size
);
message_p
=
itti_alloc_new_message
(
enb_flagP
?
TASK_RRC_ENB
:
TASK_RRC_UE
,
RRC_DCCH_DATA_REQ
);
RRC_DCCH_DATA_REQ
(
message_p
).
frame
=
frameP
;
RRC_DCCH_DATA_REQ
(
message_p
).
enb_flag
=
enb_flagP
;
RRC_DCCH_DATA_REQ
(
message_p
).
rb_id
=
rb_idP
;
RRC_DCCH_DATA_REQ
(
message_p
).
muip
=
muiP
;
RRC_DCCH_DATA_REQ
(
message_p
).
confirmp
=
confirmP
;
RRC_DCCH_DATA_REQ
(
message_p
).
sdu_size
=
sdu_size
;
RRC_DCCH_DATA_REQ
(
message_p
).
sdu_p
=
message_buffer
;
RRC_DCCH_DATA_REQ
(
message_p
).
mode
=
mode
;
RRC_DCCH_DATA_REQ
(
message_p
).
eNB_index
=
enb_mod_idP
;
RRC_DCCH_DATA_REQ
(
message_p
).
ue_index
=
ue_mod_idP
;
itti_send_msg_to_task
(
enb_flagP
?
TASK_PDCP_ENB
:
TASK_PDCP_UE
,
enb_flagP
?
enb_mod_idP
:
NB_eNB_INST
+
ue_mod_idP
,
message_p
);
return
TRUE
;
// TODO should be changed to a CNF message later, currently RRC lite does not used the returned value anyway.
}
#else
protocol_ctxt_t
ctxt
;
ctxt
.
enb_module_id
=
enb_mod_idP
;
ctxt
.
ue_module_id
=
ue_mod_idP
;
ctxt
.
frame
=
frameP
;
ctxt
.
enb_flag
=
enb_flagP
;
protocol_ctxt_t
ctxt
;
ctxt
.
enb_module_id
=
enb_mod_idP
;
ctxt
.
ue_module_id
=
ue_mod_idP
;
ctxt
.
frame
=
frameP
;
ctxt
.
enb_flag
=
enb_flagP
;
return
pdcp_data_req
(
&
ctxt
,
SRB_FLAG_YES
,
rb_idP
,
muiP
,
confirmP
,
sdu_size
,
buffer_pP
,
mode
);
return
pdcp_data_req
(
&
ctxt
,
SRB_FLAG_YES
,
rb_idP
,
muiP
,
confirmP
,
sdu_size
,
buffer_pP
,
mode
);
#endif
}
//-------------------------------------------------------------------------------------------//
void
rrc_lite_data_ind
(
module_id_t
enb_mod_idP
,
module_id_t
ue_mod_idP
,
frame_t
frameP
,
eNB_flag_t
enb_flagP
,
rb_id_t
Srb_id
,
sdu_size_t
sdu_sizeP
,
uint8_t
*
buffer_pP
){
//-------------------------------------------------------------------------------------------//
rb_id_t
DCCH_index
=
Srb_id
;
//-------------------------------------------------------------------------------------------//
rb_id_t
DCCH_index
=
Srb_id
;
#if defined(ENABLE_ITTI)
instance_t
instance
;
instance_t
instance
;
#endif
if
(
enb_flagP
==
ENB_FLAG_NO
)
{
if
(
enb_flagP
==
ENB_FLAG_NO
)
{
#if defined(ENABLE_ITTI)
instance
=
ue_mod_idP
+
NB_eNB_INST
;
instance
=
ue_mod_idP
+
NB_eNB_INST
;
#endif
LOG_N
(
RRC
,
"[UE %d] Frame %d: received a DCCH %d message on SRB %d with Size %d from eNB %d
\n
"
,
ue_mod_idP
,
frameP
,
DCCH_index
,
Srb_id
-
1
,
sdu_sizeP
,
enb_mod_idP
);
}
else
{
LOG_N
(
RRC
,
"[UE %d] Frame %d: received a DCCH %d message on SRB %d with Size %d from eNB %d
\n
"
,
ue_mod_idP
,
frameP
,
DCCH_index
,
Srb_id
-
1
,
sdu_sizeP
,
enb_mod_idP
);
}
else
{
#if defined(ENABLE_ITTI)
instance
=
enb_mod_idP
;
instance
=
enb_mod_idP
;
#endif
LOG_N
(
RRC
,
"[eNB %d] Frame %d: received a DCCH %d message on SRB %d with Size %d from UE %d
\n
"
,
enb_mod_idP
,
frameP
,
DCCH_index
,
Srb_id
-
1
,
sdu_sizeP
,
ue_mod_idP
);
}
LOG_N
(
RRC
,
"[eNB %d] Frame %d: received a DCCH %d message on SRB %d with Size %d from UE %d
\n
"
,
enb_mod_idP
,
frameP
,
DCCH_index
,
Srb_id
-
1
,
sdu_sizeP
,
ue_mod_idP
);
}
#if defined(ENABLE_ITTI)
{
MessageDef
*
message_p
;
// Uses a new buffer to avoid issue with PDCP buffer content that could be changed by PDCP (asynchronous message handling).
uint8_t
*
message_buffer
;
message_buffer
=
itti_malloc
(
enb_flagP
?
TASK_PDCP_ENB
:
TASK_PDCP_UE
,
enb_flagP
?
TASK_RRC_ENB
:
TASK_RRC_UE
,
sdu_sizeP
);
memcpy
(
message_buffer
,
buffer_pP
,
sdu_sizeP
);
message_p
=
itti_alloc_new_message
(
enb_flagP
?
TASK_PDCP_ENB
:
TASK_PDCP_UE
,
RRC_DCCH_DATA_IND
);
RRC_DCCH_DATA_IND
(
message_p
).
frame
=
frameP
;
RRC_DCCH_DATA_IND
(
message_p
).
dcch_index
=
DCCH_index
;
RRC_DCCH_DATA_IND
(
message_p
).
sdu_size
=
sdu_sizeP
;
RRC_DCCH_DATA_IND
(
message_p
).
sdu_p
=
message_buffer
;
RRC_DCCH_DATA_IND
(
message_p
).
ue_index
=
ue_mod_idP
;
RRC_DCCH_DATA_IND
(
message_p
).
eNB_index
=
enb_mod_idP
;
itti_send_msg_to_task
(
enb_flagP
?
TASK_RRC_ENB
:
TASK_RRC_UE
,
instance
,
message_p
);
}
{
MessageDef
*
message_p
;
// Uses a new buffer to avoid issue with PDCP buffer content that could be changed by PDCP (asynchronous message handling).
uint8_t
*
message_buffer
;
message_buffer
=
itti_malloc
(
enb_flagP
?
TASK_PDCP_ENB
:
TASK_PDCP_UE
,
enb_flagP
?
TASK_RRC_ENB
:
TASK_RRC_UE
,
sdu_sizeP
);
memcpy
(
message_buffer
,
buffer_pP
,
sdu_sizeP
);
message_p
=
itti_alloc_new_message
(
enb_flagP
?
TASK_PDCP_ENB
:
TASK_PDCP_UE
,
RRC_DCCH_DATA_IND
);
RRC_DCCH_DATA_IND
(
message_p
).
frame
=
frameP
;
RRC_DCCH_DATA_IND
(
message_p
).
dcch_index
=
DCCH_index
;
RRC_DCCH_DATA_IND
(
message_p
).
sdu_size
=
sdu_sizeP
;
RRC_DCCH_DATA_IND
(
message_p
).
sdu_p
=
message_buffer
;
RRC_DCCH_DATA_IND
(
message_p
).
ue_index
=
ue_mod_idP
;
RRC_DCCH_DATA_IND
(
message_p
).
eNB_index
=
enb_mod_idP
;
itti_send_msg_to_task
(
enb_flagP
?
TASK_RRC_ENB
:
TASK_RRC_UE
,
instance
,
message_p
);
}
#else
if
(
enb_flagP
==
ENB_FLAG_YES
)
{
rrc_eNB_decode_dcch
(
enb_mod_idP
,
frameP
,
DCCH_index
,
ue_mod_idP
,
buffer_pP
,
sdu_sizeP
);
}
else
{
rrc_ue_decode_dcch
(
ue_mod_idP
,
frameP
,
DCCH_index
,
buffer_pP
,
enb_mod_idP
);
}
if
(
enb_flagP
==
ENB_FLAG_YES
)
{
rrc_eNB_decode_dcch
(
enb_mod_idP
,
frameP
,
DCCH_index
,
ue_mod_idP
,
buffer_pP
,
sdu_sizeP
);
}
else
{
rrc_ue_decode_dcch
(
ue_mod_idP
,
frameP
,
DCCH_index
,
buffer_pP
,
enb_mod_idP
);
}
#endif
}
//-------------------------------------------------------------------------------------------//
void
rrc_lite_in_sync_ind
(
module_id_t
Mod_idP
,
frame_t
frameP
,
uint16_t
eNB_index
)
{
//-------------------------------------------------------------------------------------------//
//-------------------------------------------------------------------------------------------//
#if defined(ENABLE_ITTI)
{
MessageDef
*
message_p
;
{
MessageDef
*
message_p
;
message_p
=
itti_alloc_new_message
(
TASK_MAC_UE
,
RRC_MAC_IN_SYNC_IND
);
RRC_MAC_IN_SYNC_IND
(
message_p
).
frame
=
frameP
;
RRC_MAC_IN_SYNC_IND
(
message_p
).
enb_index
=
eNB_index
;
message_p
=
itti_alloc_new_message
(
TASK_MAC_UE
,
RRC_MAC_IN_SYNC_IND
);
RRC_MAC_IN_SYNC_IND
(
message_p
).
frame
=
frameP
;
RRC_MAC_IN_SYNC_IND
(
message_p
).
enb_index
=
eNB_index
;
itti_send_msg_to_task
(
TASK_RRC_UE
,
Mod_idP
+
NB_eNB_INST
,
message_p
);
}
itti_send_msg_to_task
(
TASK_RRC_UE
,
Mod_idP
+
NB_eNB_INST
,
message_p
);
}
#else
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
N310_cnt
=
0
;
if
(
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
T310_active
==
1
)
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
N311_cnt
++
;
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
N310_cnt
=
0
;
if
(
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
T310_active
==
1
)
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
N311_cnt
++
;
#endif
}
//-------------------------------------------------------------------------------------------//
void
rrc_lite_out_of_sync_ind
(
module_id_t
Mod_idP
,
frame_t
frameP
,
uint16_t
eNB_index
){
//-------------------------------------------------------------------------------------------//
LOG_I
(
RRC
,
"[UE %d] Frame %d: OUT OF SYNC FROM eNB %d (T310 %d, N310 %d, N311 %d)
\n
"
,
Mod_idP
,
frameP
,
eNB_index
,
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
T310_cnt
,
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
N310_cnt
,
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
N311_cnt
);
//-------------------------------------------------------------------------------------------//
LOG_I
(
RRC
,
"[UE %d] Frame %d: OUT OF SYNC FROM eNB %d (T310 %d, N310 %d, N311 %d)
\n
"
,
Mod_idP
,
frameP
,
eNB_index
,
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
T310_cnt
,
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
N310_cnt
,
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
N311_cnt
);
#if defined(ENABLE_ITTI)
{
MessageDef
*
message_p
;
{
MessageDef
*
message_p
;
message_p
=
itti_alloc_new_message
(
TASK_MAC_UE
,
RRC_MAC_OUT_OF_SYNC_IND
);
RRC_MAC_OUT_OF_SYNC_IND
(
message_p
).
frame
=
frameP
;
RRC_MAC_OUT_OF_SYNC_IND
(
message_p
).
enb_index
=
eNB_index
;
message_p
=
itti_alloc_new_message
(
TASK_MAC_UE
,
RRC_MAC_OUT_OF_SYNC_IND
);
RRC_MAC_OUT_OF_SYNC_IND
(
message_p
).
frame
=
frameP
;
RRC_MAC_OUT_OF_SYNC_IND
(
message_p
).
enb_index
=
eNB_index
;
itti_send_msg_to_task
(
TASK_RRC_UE
,
Mod_idP
+
NB_eNB_INST
,
message_p
);
}
itti_send_msg_to_task
(
TASK_RRC_UE
,
Mod_idP
+
NB_eNB_INST
,
message_p
);
}
#else
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
N310_cnt
++
;
UE_rrc_inst
[
Mod_idP
].
Info
[
eNB_index
].
N310_cnt
++
;
#endif
}
//-------------------------------------------------------------------------------------------//
int
mac_get_rrc_lite_status
(
module_id_t
Mod_idP
,
eNB_flag_t
enb_flagP
,
uint8_t
index
){
//-------------------------------------------------------------------------------------------//
if
(
enb_flagP
==
ENB_FLAG_YES
)
return
(
eNB_rrc_inst
[
Mod_idP
].
Info
.
UE
[
index
].
Status
);
else
return
(
UE_rrc_inst
[
Mod_idP
].
Info
[
index
].
State
);
//-------------------------------------------------------------------------------------------//
if
(
enb_flagP
==
ENB_FLAG_YES
)
return
(
eNB_rrc_inst
[
Mod_idP
].
Info
.
UE
[
index
].
Status
);
else
return
(
UE_rrc_inst
[
Mod_idP
].
Info
[
index
].
State
);
}
//-------------------------------------------------------------------------------------------//
int
mac_ue_ccch_success_ind
(
module_id_t
Mod_idP
,
uint8_t
eNB_index
)
{
//-------------------------------------------------------------------------------------------//
//-------------------------------------------------------------------------------------------//
#if defined(ENABLE_ITTI)
{
MessageDef
*
message_p
;
{
MessageDef
*
message_p
;
message_p
=
itti_alloc_new_message
(
TASK_MAC_UE
,
RRC_MAC_CCCH_DATA_CNF
);
RRC_MAC_CCCH_DATA_CNF
(
message_p
).
enb_index
=
eNB_index
;
message_p
=
itti_alloc_new_message
(
TASK_MAC_UE
,
RRC_MAC_CCCH_DATA_CNF
);
RRC_MAC_CCCH_DATA_CNF
(
message_p
).
enb_index
=
eNB_index
;
itti_send_msg_to_task
(
TASK_RRC_UE
,
Mod_idP
+
NB_eNB_INST
,
message_p
);
}
itti_send_msg_to_task
(
TASK_RRC_UE
,
Mod_idP
+
NB_eNB_INST
,
message_p
);
}
#else
// reset the tx buffer to indicate RRC that ccch was successfully transmitted (for example if contention resolution succeeds)
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
].
Tx_buffer
.
payload_size
=
0
;
// reset the tx buffer to indicate RRC that ccch was successfully transmitted (for example if contention resolution succeeds)
UE_rrc_inst
[
Mod_idP
].
Srb0
[
eNB_index
].
Tx_buffer
.
payload_size
=
0
;
#endif
return
0
;
return
0
;
}
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