Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
canghaiwuhen
OpenXG-RAN
Commits
4593a2a3
Commit
4593a2a3
authored
Sep 28, 2014
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
git-svn-id:
http://svn.eurecom.fr/openair4G/trunk@5811
818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent
59a5663d
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
154 additions
and
175 deletions
+154
-175
openair2/LAYER2/MAC/defs.h
openair2/LAYER2/MAC/defs.h
+2
-0
openair2/LAYER2/MAC/eNB_scheduler_RA.c
openair2/LAYER2/MAC/eNB_scheduler_RA.c
+0
-53
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+94
-56
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+10
-9
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+44
-43
openair2/LAYER2/MAC/main.c
openair2/LAYER2/MAC/main.c
+0
-1
openair2/LAYER2/MAC/proto.h
openair2/LAYER2/MAC/proto.h
+3
-9
openair2/PHY_INTERFACE/defs.h
openair2/PHY_INTERFACE/defs.h
+1
-4
No files found.
openair2/LAYER2/MAC/defs.h
View file @
4593a2a3
...
...
@@ -478,6 +478,8 @@ typedef struct{
uint8_t
oldNDI_UL
[
8
];
/// Flag to indicate UL has been scheduled at least once
boolean_t
ul_active
;
/// Flag to indicate UE has been configured (ACK from RRCConnectionSetup received)
boolean_t
configured
;
// PHY interface info
...
...
openair2/LAYER2/MAC/eNB_scheduler_RA.c
View file @
4593a2a3
...
...
@@ -484,56 +484,3 @@ void cancel_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP, rnti_t rn
}
}
void
terminate_ra_proc
(
module_id_t
module_idP
,
int
CC_id
,
frame_t
frameP
,
rnti_t
rnti
,
unsigned
char
*
msg3
,
uint16_t
msg3_len
)
{
unsigned
char
rx_ces
[
MAX_NUM_CE
],
num_ce
,
num_sdu
,
i
,
*
payload_ptr
;
unsigned
char
rx_lcids
[
NB_RB_MAX
];
uint16_t
rx_lengths
[
NB_RB_MAX
];
int8_t
UE_id
;
RA_TEMPLATE
*
RA_template
=
(
RA_TEMPLATE
*
)
&
eNB_mac_inst
[
module_idP
].
common_channels
[
CC_id
].
RA_template
[
0
];
LOG_I
(
MAC
,
"[eNB %d][RAPROC] Frame %d, Received msg3 %x.%x.%x.%x.%x.%x, Terminating RA procedure for UE rnti %x
\n
"
,
module_idP
,
frameP
,
msg3
[
3
],
msg3
[
4
],
msg3
[
5
],
msg3
[
6
],
msg3
[
7
],
msg3
[
8
],
rnti
);
for
(
i
=
0
;
i
<
NB_RA_PROC_MAX
;
i
++
)
{
LOG_D
(
MAC
,
"[RAPROC] Checking proc %d : rnti (%x, %x), active %d
\n
"
,
i
,
RA_template
[
i
].
rnti
,
rnti
,
RA_template
[
i
].
RA_active
);
if
((
RA_template
[
i
].
rnti
==
rnti
)
&&
(
RA_template
[
i
].
RA_active
==
TRUE
))
{
payload_ptr
=
parse_ulsch_header
(
msg3
,
&
num_ce
,
&
num_sdu
,
rx_ces
,
rx_lcids
,
rx_lengths
,
msg3_len
);
LOG_D
(
MAC
,
"[eNB %d][RAPROC] Frame %d Received CCCH: length %d, offset %d
\n
"
,
module_idP
,
frameP
,
rx_lengths
[
0
],
payload_ptr
-
msg3
);
if
(
/*(num_ce == 0) &&*/
(
num_sdu
==
1
)
&&
(
rx_lcids
[
0
]
==
CCCH
))
{
// This is an RRCConnectionRequest/Restablishment
memcpy
(
&
RA_template
[
i
].
cont_res_id
[
0
],
payload_ptr
,
6
);
LOG_D
(
MAC
,
"[eNB %d][RAPROC] Frame %d Received CCCH: length %d, offset %d
\n
"
,
module_idP
,
frameP
,
rx_lengths
[
0
],
payload_ptr
-
msg3
);
UE_id
=
add_new_ue
(
module_idP
,
CC_id
,
RA_template
[
i
].
rnti
);
if
(
UE_id
==-
1
)
{
mac_xface
->
macphy_exit
(
"[MAC][eNB] Max user count reached
\n
"
);
}
else
{
LOG_I
(
MAC
,
"[eNB %d][RAPROC] Frame %d Added user with rnti %x => UE %d
\n
"
,
module_idP
,
frameP
,
RA_template
[
i
].
rnti
,
UE_id
);
}
if
(
Is_rrc_registered
==
1
)
mac_rrc_data_ind
(
module_idP
,
frameP
,
CCCH
,(
uint8_t
*
)
payload_ptr
,
rx_lengths
[
0
],
1
,
module_idP
,
0
);
// add_user. This is needed to have the rnti for configuring UE (PHY). The UE is removed if RRC
// doesn't provide a CCCH SDU
}
else
if
(
num_ce
>
0
)
{
// handle msg3 which is not RRCConnectionRequest
// process_ra_message(msg3,num_ce,rx_lcids,rx_ces);
}
RA_template
[
i
].
generate_Msg4
=
1
;
RA_template
[
i
].
wait_ack_Msg4
=
0
;
return
;
}
// if process is active
}
// loop on RA processes
}
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
View file @
4593a2a3
...
...
@@ -164,7 +164,7 @@ unsigned char generate_dlsch_header(unsigned char *mac_header,
last_size
=
1
;
// msg("last_size %d,mac_header_ptr %p\n",last_size,mac_header_ptr);
((
TIMING_ADVANCE_CMD
*
)
ce_ptr
)
->
R
=
0
;
((
TIMING_ADVANCE_CMD
*
)
ce_ptr
)
->
TA
=
timing_advance_cmd
&
0x3f
;
((
TIMING_ADVANCE_CMD
*
)
ce_ptr
)
->
TA
=
(
timing_advance_cmd
+
31
)
&
0x3f
;
LOG_I
(
MAC
,
"timing advance =%d (%d)
\n
"
,
timing_advance_cmd
,((
TIMING_ADVANCE_CMD
*
)
ce_ptr
)
->
TA
);
ce_ptr
+=
sizeof
(
TIMING_ADVANCE_CMD
);
//msg("offset %d\n",ce_ptr-mac_header_control_elements);
...
...
@@ -290,6 +290,82 @@ unsigned char generate_dlsch_header(unsigned char *mac_header,
}
void
set_ul_DAI
(
int
module_idP
,
int
UE_idP
,
int
CC_idP
,
int
frameP
,
int
subframeP
,
LTE_DL_FRAME_PARMS
*
frame_parms
[
MAX_NUM_CCs
])
{
eNB_MAC_INST
*
eNB
=
&
eNB_mac_inst
[
module_idP
];
UE_list_t
*
UE_list
=
&
eNB
->
UE_list
;
unsigned
char
DAI
;
if
(
frame_parms
[
CC_idP
]
->
frame_type
==
TDD
)
{
DAI
=
(
UE_list
->
UE_template
[
CC_idP
][
UE_idP
].
DAI
-
1
)
&
3
;
LOG_D
(
MAC
,
"[eNB %d] Frame %d, subframe %d: DAI %d for UE %d
\n
"
,
module_idP
,
frameP
,
subframeP
,
DAI
,
UE_idP
);
// Save DAI for Format 0 DCI
switch
(
frame_parms
[
CC_idP
]
->
tdd_config
)
{
case
0
:
// if ((subframeP==0)||(subframeP==1)||(subframeP==5)||(subframeP==6))
break
;
case
1
:
switch
(
subframeP
)
{
case
1
:
UE_list
->
UE_template
[
CC_idP
][
UE_idP
].
DAI_ul
[
7
]
=
DAI
;
break
;
case
4
:
UE_list
->
UE_template
[
CC_idP
][
UE_idP
].
DAI_ul
[
8
]
=
DAI
;
break
;
case
6
:
UE_list
->
UE_template
[
CC_idP
][
UE_idP
].
DAI_ul
[
2
]
=
DAI
;
break
;
case
9
:
UE_list
->
UE_template
[
CC_idP
][
UE_idP
].
DAI_ul
[
3
]
=
DAI
;
break
;
}
case
2
:
// if ((subframeP==3)||(subframeP==8))
// UE_list->UE_template[CC_idP][UE_idP].DAI_ul = DAI;
break
;
case
3
:
//if ((subframeP==6)||(subframeP==8)||(subframeP==0)) {
// LOG_D(MAC,"schedule_ue_spec: setting UL DAI to %d for subframeP %d => %d\n",DAI,subframeP, ((subframeP+8)%10)>>1);
// UE_list->UE_template[CC_idP][UE_idP].DAI_ul[((subframeP+8)%10)>>1] = DAI;
//}
switch
(
subframeP
)
{
case
5
:
case
6
:
case
1
:
UE_list
->
UE_template
[
CC_idP
][
UE_idP
].
DAI_ul
[
2
]
=
DAI
;
break
;
case
7
:
case
8
:
UE_list
->
UE_template
[
CC_idP
][
UE_idP
].
DAI_ul
[
3
]
=
DAI
;
break
;
case
9
:
case
0
:
UE_list
->
UE_template
[
CC_idP
][
UE_idP
].
DAI_ul
[
4
]
=
DAI
;
break
;
default:
break
;
}
break
;
case
4
:
// if ((subframeP==8)||(subframeP==9))
// UE_list->UE_template[CC_idP][UE_idP].DAI_ul = DAI;
break
;
case
5
:
// if (subframeP==8)
// UE_list->UE_template[CC_idP][UE_idP].DAI_ul = DAI;
break
;
case
6
:
// if ((subframeP==1)||(subframeP==4)||(subframeP==6)||(subframeP==9))
// UE_list->UE_template[CC_idP][UE_idP].DAI_ul = DAI;
break
;
default:
break
;
}
}
}
void
schedule_ue_spec
(
module_id_t
module_idP
,
frame_t
frameP
,
...
...
@@ -393,6 +469,18 @@ void schedule_ue_spec(module_id_t module_idP,
// else
// break;
}
if
(
frame_parms
[
CC_id
]
->
frame_type
==
TDD
)
{
set_ue_dai
(
subframeP
,
frame_parms
[
CC_id
]
->
tdd_config
,
UE_id
,
CC_id
,
UE_list
);
// update UL DAI after DLSCH scheduling
set_ul_DAI
(
module_idP
,
UE_id
,
CC_id
,
frameP
,
subframeP
,
frame_parms
);
}
if
(
continue_flag
==
1
){
add_ue_dlsch_info
(
module_idP
,
CC_id
,
...
...
@@ -401,13 +489,7 @@ void schedule_ue_spec(module_id_t module_idP,
S_DL_NONE
);
continue
;
}
if
(
frame_parms
[
CC_id
]
->
frame_type
==
TDD
)
set_ue_dai
(
subframeP
,
frame_parms
[
CC_id
]
->
tdd_config
,
UE_id
,
CC_id
,
UE_list
);
nb_available_rb
=
pre_nb_available_rbs
[
CC_id
][
UE_id
];
UE_list
->
eNB_UE_stats
[
CC_id
][
UE_id
].
crnti
=
rnti
;
UE_list
->
eNB_UE_stats
[
CC_id
][
UE_id
].
rrc_status
=
mac_get_rrc_status
(
module_idP
,
1
,
UE_id
);
...
...
@@ -1064,54 +1146,7 @@ void schedule_ue_spec(module_id_t module_idP,
}
}
if
(
frame_parms
[
CC_id
]
->
frame_type
==
TDD
)
{
DAI
=
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
DAI
-
1
)
&
3
;
LOG_D
(
MAC
,
"[eNB %d] Frame %d: DAI %d for UE %d
\n
"
,
module_idP
,
frameP
,
DAI
,
UE_id
);
// Save DAI for Format 0 DCI
switch
(
frame_parms
[
CC_id
]
->
tdd_config
)
{
case
0
:
// if ((subframeP==0)||(subframeP==1)||(subframeP==5)||(subframeP==6))
break
;
case
1
:
switch
(
subframeP
)
{
case
1
:
UE_list
->
UE_template
[
CC_id
][
UE_id
].
DAI_ul
[
7
]
=
DAI
;
break
;
case
4
:
UE_list
->
UE_template
[
CC_id
][
UE_id
].
DAI_ul
[
8
]
=
DAI
;
break
;
case
6
:
UE_list
->
UE_template
[
CC_id
][
UE_id
].
DAI_ul
[
2
]
=
DAI
;
break
;
case
9
:
UE_list
->
UE_template
[
CC_id
][
UE_id
].
DAI_ul
[
3
]
=
DAI
;
break
;
}
case
2
:
// if ((subframeP==3)||(subframeP==8))
// UE_list->UE_template[CC_id][UE_id].DAI_ul = DAI;
break
;
case
3
:
if
((
subframeP
==
6
)
||
(
subframeP
==
8
)
||
(
subframeP
==
0
))
{
LOG_D
(
MAC
,
"schedule_ue_spec: setting UL DAI to %d for subframeP %d => %d
\n
"
,
DAI
,
subframeP
,
((
subframeP
+
8
)
%
10
)
>>
1
);
UE_list
->
UE_template
[
CC_id
][
UE_id
].
DAI_ul
[((
subframeP
+
8
)
%
10
)
>>
1
]
=
DAI
;
}
break
;
case
4
:
// if ((subframeP==8)||(subframeP==9))
// UE_list->UE_template[CC_id][UE_id].DAI_ul = DAI;
break
;
case
5
:
// if (subframeP==8)
// UE_list->UE_template[CC_id][UE_id].DAI_ul = DAI;
break
;
case
6
:
// if ((subframeP==1)||(subframeP==4)||(subframeP==6)||(subframeP==9))
// UE_list->UE_template[CC_id][UE_id].DAI_ul = DAI;
break
;
default:
break
;
}
set_ul_DAI
(
module_idP
,
UE_id
,
CC_id
,
frameP
,
subframeP
,
frame_parms
);
}
}
}
...
...
@@ -1701,6 +1736,9 @@ void fill_DLSCH_dci(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP
LOG_I
(
MAC
,
"[eNB %d][RAPROC] Frame %d, subframeP %d : Msg4 acknowledged
\n
"
,
module_idP
,
frameP
,
subframeP
);
RA_template
->
wait_ack_Msg4
=
0
;
RA_template
->
RA_active
=
FALSE
;
UE_id
=
find_UE_id
(
module_idP
,
RA_template
->
rnti
);
eNB_mac_inst
[
module_idP
].
UE_list
.
UE_template
[
UE_PCCID
(
module_idP
,
UE_id
)][
UE_id
].
configured
=
TRUE
;
}
}
}
...
...
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
View file @
4593a2a3
...
...
@@ -203,7 +203,7 @@ void dump_ue_list(UE_list_t *listP) {
}
}
int
add_new_ue
(
module_id_t
mod_idP
,
int
cc_idP
,
rnti_t
rntiP
)
{
int
add_new_ue
(
module_id_t
mod_idP
,
int
cc_idP
,
rnti_t
rntiP
,
int
harq_pidP
)
{
int
UE_id
;
int
j
;
...
...
@@ -218,18 +218,19 @@ int add_new_ue(module_id_t mod_idP, int cc_idP, rnti_t rntiP) {
UE_list
->
next
[
UE_id
]
=
UE_list
->
head
;
UE_list
->
head
=
UE_id
;
UE_list
->
UE_template
[
cc_idP
][
UE_id
].
rnti
=
rntiP
;
UE_list
->
numactiveCCs
[
UE_id
]
=
1
;
UE_list
->
numactiveULCCs
[
UE_id
]
=
1
;
UE_list
->
pCC_id
[
UE_id
]
=
cc_idP
;
UE_list
->
ordered_CCids
[
0
][
UE_id
]
=
cc_idP
;
UE_list
->
ordered_ULCCids
[
0
][
UE_id
]
=
cc_idP
;
UE_list
->
UE_template
[
cc_idP
][
UE_id
].
rnti
=
rntiP
;
UE_list
->
UE_template
[
cc_idP
][
UE_id
].
configured
=
FALSE
;
UE_list
->
numactiveCCs
[
UE_id
]
=
1
;
UE_list
->
numactiveULCCs
[
UE_id
]
=
1
;
UE_list
->
pCC_id
[
UE_id
]
=
cc_idP
;
UE_list
->
ordered_CCids
[
0
][
UE_id
]
=
cc_idP
;
UE_list
->
ordered_ULCCids
[
0
][
UE_id
]
=
cc_idP
;
UE_list
->
num_UEs
++
;
UE_list
->
active
[
UE_id
]
=
TRUE
;
UE_list
->
active
[
UE_id
]
=
TRUE
;
for
(
j
=
0
;
j
<
8
;
j
++
)
{
UE_list
->
UE_template
[
cc_idP
][
UE_id
].
oldNDI
[
j
]
=
(
j
==
0
)
?
1
:
0
;
// 1 because first transmission is with format1A (Msg4) for harq_pid 0
UE_list
->
UE_template
[
cc_idP
][
UE_id
].
oldNDI_UL
[
j
]
=
0
;
UE_list
->
UE_template
[
cc_idP
][
UE_id
].
oldNDI_UL
[
j
]
=
(
j
==
harq_pidP
)
?
0
:
1
;
// 1st transmission is with Msg3
;
}
eNB_ulsch_info
[
mod_idP
][
UE_id
].
status
=
S_UL_WAITING
;
eNB_dlsch_info
[
mod_idP
][
UE_id
].
status
=
S_UL_WAITING
;
...
...
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
View file @
4593a2a3
...
...
@@ -73,7 +73,7 @@
// This table holds the allowable PRB sizes for ULSCH transmissions
uint8_t
rb_table
[
33
]
=
{
1
,
2
,
3
,
4
,
5
,
6
,
8
,
9
,
10
,
12
,
15
,
16
,
18
,
20
,
24
,
25
,
27
,
30
,
32
,
36
,
40
,
45
,
48
,
50
,
54
,
60
,
72
,
75
,
80
,
81
,
90
,
96
,
100
};
void
rx_sdu
(
module_id_t
enb_mod_idP
,
int
CC_id
,
frame_t
frameP
,
rnti_t
rntiP
,
uint8_t
*
sdu
,
uint16_t
sdu_len
)
{
void
rx_sdu
(
module_id_t
enb_mod_idP
,
int
CC_id
P
,
frame_t
frameP
,
rnti_t
rntiP
,
uint8_t
*
sduP
,
uint16_t
sdu_lenP
,
int
harq_pidP
)
{
unsigned
char
rx_ces
[
MAX_NUM_CE
],
num_ce
,
num_sdu
,
i
,
*
payload_ptr
;
unsigned
char
rx_lcids
[
NB_RB_MAX
];
...
...
@@ -91,7 +91,7 @@ void rx_sdu(module_id_t enb_mod_idP,int CC_id,frame_t frameP,rnti_t rntiP,uint8_
vcd_signal_dumper_dump_function_by_name
(
VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU
,
1
);
LOG_D
(
MAC
,
"[eNB %d] Received ULSCH sdu from PHY (rnti %x, UE_id %d), parsing header
\n
"
,
enb_mod_idP
,
rntiP
,
UE_id
);
payload_ptr
=
parse_ulsch_header
(
sdu
,
&
num_ce
,
&
num_sdu
,
rx_ces
,
rx_lcids
,
rx_lengths
,
sdu_len
);
payload_ptr
=
parse_ulsch_header
(
sdu
P
,
&
num_ce
,
&
num_sdu
,
rx_ces
,
rx_lcids
,
rx_lengths
,
sdu_lenP
);
// control element
for
(
i
=
0
;
i
<
num_ce
;
i
++
)
{
...
...
@@ -99,8 +99,8 @@ void rx_sdu(module_id_t enb_mod_idP,int CC_id,frame_t frameP,rnti_t rntiP,uint8_
switch
(
rx_ces
[
i
])
{
// implement and process BSR + CRNTI +
case
POWER_HEADROOM
:
if
(
UE_id
!=
UE_INDEX_INVALID
){
UE_list
->
UE_template
[
CC_id
][
UE_id
].
phr_info
=
(
payload_ptr
[
0
]
&
0x3f
)
-
PHR_MAPPING_OFFSET
;
LOG_D
(
MAC
,
"[eNB] MAC CE_LCID %d : Received PHR PH = %d (db)
\n
"
,
rx_ces
[
i
],
UE_list
->
UE_template
[
CC_id
][
UE_id
].
phr_info
);
UE_list
->
UE_template
[
CC_id
P
][
UE_id
].
phr_info
=
(
payload_ptr
[
0
]
&
0x3f
)
-
PHR_MAPPING_OFFSET
;
LOG_D
(
MAC
,
"[eNB] MAC CE_LCID %d : Received PHR PH = %d (db)
\n
"
,
rx_ces
[
i
],
UE_list
->
UE_template
[
CC_id
P
][
UE_id
].
phr_info
);
}
payload_ptr
+=
sizeof
(
POWER_HEADROOM_CMD
);
break
;
...
...
@@ -115,25 +115,25 @@ void rx_sdu(module_id_t enb_mod_idP,int CC_id,frame_t frameP,rnti_t rntiP,uint8_
lcgid
=
(
payload_ptr
[
0
]
>>
6
);
LOG_D
(
MAC
,
"[eNB] MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d
\n
"
,
rx_ces
[
i
],
lcgid
,
payload_ptr
[
0
]
&
0x3f
);
UE_list
->
UE_template
[
CC_id
][
UE_id
].
bsr_info
[
lcgid
]
=
(
payload_ptr
[
0
]
&
0x3f
);
UE_list
->
UE_template
[
CC_id
P
][
UE_id
].
bsr_info
[
lcgid
]
=
(
payload_ptr
[
0
]
&
0x3f
);
}
payload_ptr
+=
1
;
//sizeof(SHORT_BSR); // fixme
}
break
;
case
LONG_BSR
:
if
(
UE_id
!=
UE_INDEX_INVALID
){
UE_list
->
UE_template
[
CC_id
][
UE_id
].
bsr_info
[
LCGID0
]
=
((
payload_ptr
[
0
]
&
0xFC
)
>>
2
);
UE_list
->
UE_template
[
CC_id
][
UE_id
].
bsr_info
[
LCGID1
]
=
UE_list
->
UE_template
[
CC_id
P
][
UE_id
].
bsr_info
[
LCGID0
]
=
((
payload_ptr
[
0
]
&
0xFC
)
>>
2
);
UE_list
->
UE_template
[
CC_id
P
][
UE_id
].
bsr_info
[
LCGID1
]
=
((
payload_ptr
[
0
]
&
0x03
)
<<
4
)
|
((
payload_ptr
[
1
]
&
0xF0
)
>>
4
);
UE_list
->
UE_template
[
CC_id
][
UE_id
].
bsr_info
[
LCGID2
]
=
UE_list
->
UE_template
[
CC_id
P
][
UE_id
].
bsr_info
[
LCGID2
]
=
((
payload_ptr
[
1
]
&
0x0F
)
<<
2
)
|
((
payload_ptr
[
2
]
&
0xC0
)
>>
6
);
UE_list
->
UE_template
[
CC_id
][
UE_id
].
bsr_info
[
LCGID3
]
=
(
payload_ptr
[
2
]
&
0x3F
);
UE_list
->
UE_template
[
CC_id
P
][
UE_id
].
bsr_info
[
LCGID3
]
=
(
payload_ptr
[
2
]
&
0x3F
);
LOG_D
(
MAC
,
"[eNB] MAC CE_LCID %d: Received long BSR LCGID0 = %u LCGID1 = "
"%u LCGID2 = %u LCGID3 = %u
\n
"
,
rx_ces
[
i
],
UE_list
->
UE_template
[
CC_id
][
UE_id
].
bsr_info
[
LCGID0
],
UE_list
->
UE_template
[
CC_id
][
UE_id
].
bsr_info
[
LCGID1
],
UE_list
->
UE_template
[
CC_id
][
UE_id
].
bsr_info
[
LCGID2
],
UE_list
->
UE_template
[
CC_id
][
UE_id
].
bsr_info
[
LCGID3
]);
UE_list
->
UE_template
[
CC_id
P
][
UE_id
].
bsr_info
[
LCGID0
],
UE_list
->
UE_template
[
CC_id
P
][
UE_id
].
bsr_info
[
LCGID1
],
UE_list
->
UE_template
[
CC_id
P
][
UE_id
].
bsr_info
[
LCGID2
],
UE_list
->
UE_template
[
CC_id
P
][
UE_id
].
bsr_info
[
LCGID3
]);
}
payload_ptr
+=
3
;
////sizeof(LONG_BSR);
break
;
...
...
@@ -154,26 +154,26 @@ void rx_sdu(module_id_t enb_mod_idP,int CC_id,frame_t frameP,rnti_t rntiP,uint8_
for
(
ii
=
0
;
ii
<
NB_RA_PROC_MAX
;
ii
++
)
{
LOG_D
(
MAC
,
"[RAPROC] Checking proc %d : rnti (%x, %x), active %d
\n
"
,
ii
,
eNB
->
common_channels
[
CC_id
].
RA_template
[
ii
].
rnti
,
rntiP
,
eNB
->
common_channels
[
CC_id
].
RA_template
[
ii
].
RA_active
);
eNB
->
common_channels
[
CC_id
P
].
RA_template
[
ii
].
rnti
,
rntiP
,
eNB
->
common_channels
[
CC_id
P
].
RA_template
[
ii
].
RA_active
);
if
((
eNB
->
common_channels
[
CC_id
].
RA_template
[
ii
].
rnti
==
rntiP
)
&&
(
eNB
->
common_channels
[
CC_id
].
RA_template
[
ii
].
RA_active
==
TRUE
))
{
if
((
eNB
->
common_channels
[
CC_id
P
].
RA_template
[
ii
].
rnti
==
rntiP
)
&&
(
eNB
->
common_channels
[
CC_id
P
].
RA_template
[
ii
].
RA_active
==
TRUE
))
{
//payload_ptr = parse_ulsch_header(msg3,&num_ce,&num_sdu,rx_ces,rx_lcids,rx_lengths,msg3_len);
if
(
UE_id
<
0
)
{
memcpy
(
&
eNB
->
common_channels
[
CC_id
].
RA_template
[
ii
].
cont_res_id
[
0
],
payload_ptr
,
6
);
memcpy
(
&
eNB
->
common_channels
[
CC_id
P
].
RA_template
[
ii
].
cont_res_id
[
0
],
payload_ptr
,
6
);
LOG_I
(
MAC
,
"[eNB %d][RAPROC] Frame %d CCCH: Received RRCConnectionRequest: length %d, offset %d
\n
"
,
enb_mod_idP
,
frameP
,
rx_lengths
[
ii
],
payload_ptr
-
sdu
);
if
((
UE_id
=
add_new_ue
(
enb_mod_idP
,
CC_id
,
eNB
->
common_channels
[
CC_id
].
RA_template
[
ii
].
rnti
))
==
-
1
)
enb_mod_idP
,
frameP
,
rx_lengths
[
ii
],
payload_ptr
-
sdu
P
);
if
((
UE_id
=
add_new_ue
(
enb_mod_idP
,
CC_id
P
,
eNB
->
common_channels
[
CC_idP
].
RA_template
[
ii
].
rnti
,
harq_pidP
))
==
-
1
)
mac_xface
->
macphy_exit
(
"[MAC][eNB] Max user count reached
\n
"
);
else
LOG_I
(
MAC
,
"[eNB %d][RAPROC] Frame %d Added user with rnti %x => UE %d
\n
"
,
enb_mod_idP
,
frameP
,
eNB
->
common_channels
[
CC_id
].
RA_template
[
ii
].
rnti
,
UE_id
);
enb_mod_idP
,
frameP
,
eNB
->
common_channels
[
CC_id
P
].
RA_template
[
ii
].
rnti
,
UE_id
);
}
else
{
LOG_I
(
MAC
,
"[eNB %d][RAPROC] Frame %d CCCH: Received RRCConnectionReestablishment from UE %d: length %d, offset %d
\n
"
,
enb_mod_idP
,
frameP
,
UE_id
,
rx_lengths
[
ii
],
payload_ptr
-
sdu
);
enb_mod_idP
,
frameP
,
UE_id
,
rx_lengths
[
ii
],
payload_ptr
-
sdu
P
);
}
if
(
Is_rrc_registered
==
1
)
...
...
@@ -184,8 +184,8 @@ void rx_sdu(module_id_t enb_mod_idP,int CC_id,frame_t frameP,rnti_t rntiP,uint8_
// process_ra_message(msg3,num_ce,rx_lcids,rx_ces);
}
eNB
->
common_channels
[
CC_id
].
RA_template
[
ii
].
generate_Msg4
=
1
;
eNB
->
common_channels
[
CC_id
].
RA_template
[
ii
].
wait_ack_Msg4
=
0
;
eNB
->
common_channels
[
CC_id
P
].
RA_template
[
ii
].
generate_Msg4
=
1
;
eNB
->
common_channels
[
CC_id
P
].
RA_template
[
ii
].
wait_ack_Msg4
=
0
;
}
// if process is active
...
...
@@ -195,10 +195,10 @@ void rx_sdu(module_id_t enb_mod_idP,int CC_id,frame_t frameP,rnti_t rntiP,uint8_
break
;
case
DCCH
:
case
DCCH1
:
// if(eNB_mac_inst[module_idP][CC_id].Dcch_lchan[UE_id].Active==1){
// if(eNB_mac_inst[module_idP][CC_id
P
].Dcch_lchan[UE_id].Active==1){
#if defined(ENABLE_MAC_PAYLOAD_DEBUG)
LOG_T
(
MAC
,
"offset: %d
\n
"
,(
unsigned
char
)((
unsigned
char
*
)
payload_ptr
-
sdu
));
LOG_T
(
MAC
,
"offset: %d
\n
"
,(
unsigned
char
)((
unsigned
char
*
)
payload_ptr
-
sdu
P
));
for
(
j
=
0
;
j
<
32
;
j
++
)
LOG_T
(
MAC
,
"%x "
,
payload_ptr
[
j
]);
LOG_T
(
MAC
,
"
\n
"
);
...
...
@@ -215,17 +215,17 @@ void rx_sdu(module_id_t enb_mod_idP,int CC_id,frame_t frameP,rnti_t rntiP,uint8_
rx_lengths
[
i
],
1
,
NULL
);
//(unsigned int*)crc_status);
UE_list
->
eNB_UE_stats
[
CC_id
][
UE_id
].
num_pdu_rx
[
rx_lcids
[
i
]]
+=
1
;
UE_list
->
eNB_UE_stats
[
CC_id
][
UE_id
].
num_bytes_rx
[
rx_lcids
[
i
]]
+=
rx_lengths
[
i
];
UE_list
->
eNB_UE_stats
[
CC_id
P
][
UE_id
].
num_pdu_rx
[
rx_lcids
[
i
]]
+=
1
;
UE_list
->
eNB_UE_stats
[
CC_id
P
][
UE_id
].
num_bytes_rx
[
rx_lcids
[
i
]]
+=
rx_lengths
[
i
];
}
// }
break
;
case
DTCH
:
// default DRB
// if(eNB_mac_inst[module_idP][CC_id].Dcch_lchan[UE_id].Active==1){
// if(eNB_mac_inst[module_idP][CC_id
P
].Dcch_lchan[UE_id].Active==1){
#if defined(ENABLE_MAC_PAYLOAD_DEBUG)
LOG_T
(
MAC
,
"offset: %d
\n
"
,(
unsigned
char
)((
unsigned
char
*
)
payload_ptr
-
sdu
));
LOG_T
(
MAC
,
"offset: %d
\n
"
,(
unsigned
char
)((
unsigned
char
*
)
payload_ptr
-
sdu
P
));
for
(
j
=
0
;
j
<
32
;
j
++
)
LOG_T
(
MAC
,
"%x "
,
payload_ptr
[
j
]);
LOG_T
(
MAC
,
"
\n
"
);
...
...
@@ -241,14 +241,14 @@ void rx_sdu(module_id_t enb_mod_idP,int CC_id,frame_t frameP,rnti_t rntiP,uint8_
rx_lengths
[
i
],
1
,
NULL
);
//(unsigned int*)crc_status);
UE_list
->
eNB_UE_stats
[
CC_id
][
UE_id
].
num_pdu_rx
[
rx_lcids
[
i
]]
+=
1
;
UE_list
->
eNB_UE_stats
[
CC_id
][
UE_id
].
num_bytes_rx
[
rx_lcids
[
i
]]
+=
rx_lengths
[
i
];
UE_list
->
eNB_UE_stats
[
CC_id
P
][
UE_id
].
num_pdu_rx
[
rx_lcids
[
i
]]
+=
1
;
UE_list
->
eNB_UE_stats
[
CC_id
P
][
UE_id
].
num_bytes_rx
[
rx_lcids
[
i
]]
+=
rx_lengths
[
i
];
}
// }
break
;
default
:
//if (rx_lcids[i] >= DTCH) {
UE_list
->
eNB_UE_stats
[
CC_id
][
UE_id
].
num_errors_rx
+=
1
;
UE_list
->
eNB_UE_stats
[
CC_id
P
][
UE_id
].
num_errors_rx
+=
1
;
LOG_E
(
MAC
,
"[eNB %d] received unsupported or unknown LCID %d from UE %d "
,
rx_lcids
[
i
],
UE_id
);
break
;
}
...
...
@@ -256,8 +256,8 @@ void rx_sdu(module_id_t enb_mod_idP,int CC_id,frame_t frameP,rnti_t rntiP,uint8_
}
UE_list
->
eNB_UE_stats
[
CC_id
][
UE_id
].
total_pdu_bytes_rx
+=
sdu_len
;
UE_list
->
eNB_UE_stats
[
CC_id
][
UE_id
].
total_num_pdus_rx
+=
1
;
UE_list
->
eNB_UE_stats
[
CC_id
P
][
UE_id
].
total_pdu_bytes_rx
+=
sdu_lenP
;
UE_list
->
eNB_UE_stats
[
CC_id
P
][
UE_id
].
total_num_pdus_rx
+=
1
;
vcd_signal_dumper_dump_function_by_name
(
VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU
,
0
);
stop_meas
(
&
eNB
->
rx_ulsch_sdu
);
...
...
@@ -499,7 +499,7 @@ void schedule_ulsch_rnti(module_id_t module_idP,
UE_list_t
*
UE_list
=&
eNB
->
UE_list
;
UE_TEMPLATE
*
UE_template
;
int
rvidx_tab
[
4
]
=
{
0
,
3
,
1
,
2
};
int
rvidx_tab
[
4
]
=
{
0
,
2
,
3
,
1
};
// loop over all active UEs
...
...
@@ -571,8 +571,7 @@ void schedule_ulsch_rnti(module_id_t module_idP,
UE_template
->
oldNDI_UL
[
harq_pid
]
=
ndi
;
mcs
=
openair_daq_vars
.
target_ue_ul_mcs
;
}
LOG_D
(
MAC
,
"[eNB %d] ULSCH scheduler: Ndi %d, mcs %d
\n
"
,
module_idP
,
ndi
,
mcs
);
LOG_D
(
MAC
,
"[eNB %d] ULSCH scheduler: harq_pid %d, Ndi %d, mcs %d
\n
"
,
module_idP
,
harq_pid
,
ndi
,
mcs
);
/* if((cooperation_flag > 0) && (UE_id == 1)) { // Allocation on same set of RBs
// RIV:resource indication value // function in openair1/PHY/LTE_TRANSPORT/dci_tools.c
...
...
@@ -623,11 +622,13 @@ void schedule_ulsch_rnti(module_id_t module_idP,
}
//rb_table_index = 8;
LOG_I
(
MAC
,
"[eNB %d][PUSCH %d/%x] Frame %d subframeP %d Scheduled UE (mcs %d, first rb %d, nb_rb %d, rb_table_index %d, TBS %d, harq_pid %d)
\n
"
,
module_idP
,
harq_pid
,
rnti
,
frameP
,
subframeP
,
mcs
,
*
first_rb
,
rb_table
[
rb_table_index
],
rb_table_index
,
mac_xface
->
get_TBS_UL
(
mcs
,
rb_table
[
rb_table_index
]),
harq_pid
);
LOG_I
(
MAC
,
"[eNB %d][PUSCH %d/%x] Frame %d subframeP %d Scheduled UE (mcs %d, first rb %d, nb_rb %d, rb_table_index %d, TBS %d, harq_pid %d,DAI %d)
\n
"
,
module_idP
,
harq_pid
,
rnti
,
frameP
,
subframeP
,
mcs
,
*
first_rb
,
rb_table
[
rb_table_index
],
rb_table_index
,
mac_xface
->
get_TBS_UL
(
mcs
,
rb_table
[
rb_table_index
]),
harq_pid
,
UE_template
->
DAI_ul
[
sched_subframe
]);
rballoc
=
mac_xface
->
computeRIV
(
mac_xface
->
lte_frame_parms
->
N_RB_UL
,
*
first_rb
,
...
...
openair2/LAYER2/MAC/main.c
View file @
4593a2a3
...
...
@@ -417,7 +417,6 @@ int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, uint8_t cba_group_
mac_xface
->
eNB_dlsch_ulsch_scheduler
=
eNB_dlsch_ulsch_scheduler
;
mac_xface
->
get_dci_sdu
=
get_dci_sdu
;
mac_xface
->
fill_rar
=
fill_rar
;
mac_xface
->
terminate_ra_proc
=
terminate_ra_proc
;
mac_xface
->
initiate_ra_proc
=
initiate_ra_proc
;
mac_xface
->
cancel_ra_proc
=
cancel_ra_proc
;
mac_xface
->
SR_indication
=
SR_indication
;
...
...
openair2/LAYER2/MAC/proto.h
View file @
4593a2a3
...
...
@@ -258,13 +258,6 @@ uint16_t fill_rar(module_id_t module_idP,
uint16_t
N_RB_UL
,
uint8_t
input_buffer_length
);
/* \brief This function indicates the end of RA procedure and provides the l3msg received on ULSCH.
@param Mod_id Instance ID of eNB
@param rnti RNTI of UE transmitting l3msg
@param l3msg Pointer to received l3msg
*/
void
terminate_ra_proc
(
module_id_t
module_idP
,
int
CC_id
,
frame_t
frameP
,
rnti_t
rnti
,
uint8_t
*
l3msg
,
uint16_t
l3msg_len
);
/* \brief Function to indicate a failed RA response. It removes all temporary variables related to the initial connection of a UE
@param Mod_id Instance ID of eNB
@param preamble_index index of the received RA request.
...
...
@@ -275,8 +268,9 @@ void cancel_ra_proc(module_id_t module_idP,int CC_id,frame_t frameP, uint16_t pr
@param Mod_id Instance ID of eNB
@param rnti RNTI of UE transmitting the SR
@param sdu Pointer to received SDU
@param harq_pid Index of harq process corresponding to this sdu
*/
void
rx_sdu
(
module_id_t
module_idP
,
int
CC_id
,
frame_t
frameP
,
rnti_t
rnti
,
uint8_t
*
sdu
,
uint16_t
sdu_len
);
void
rx_sdu
(
module_id_t
module_idP
,
int
CC_id
,
frame_t
frameP
,
rnti_t
rnti
,
uint8_t
*
sdu
,
uint16_t
sdu_len
,
int
harq_pid
);
/* \brief Function to indicate a scheduled schduling request (SR) was received by eNB.
@param Mod_id Instance ID of eNB
...
...
@@ -476,7 +470,7 @@ uint8_t *parse_ulsch_header(uint8_t *mac_header,
int
l2_init
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
int
eMBMS_active
,
uint8_t
cba_group_active
,
uint8_t
HO_active
);
int
mac_init
(
void
);
int
add_new_ue
(
module_id_t
Mod_id
,
int
CC_id
,
rnti_t
rnti
);
int
add_new_ue
(
module_id_t
Mod_id
,
int
CC_id
,
rnti_t
rnti
,
int
harq_pid
);
int
mac_remove_ue
(
module_id_t
Mod_id
,
int
UE_id
);
void
swap_UEs
(
UE_list_t
*
listP
,
int
nodeiP
,
int
nodejP
);
...
...
openair2/PHY_INTERFACE/defs.h
View file @
4593a2a3
...
...
@@ -75,9 +75,6 @@ typedef struct
/// Fill random access response sdu, passing timing advance
uint16_t
(
*
fill_rar
)(
module_id_t
Mod_id
,
int
CC_id
,
frame_t
frameP
,
uint8_t
*
dlsch_buffer
,
uint16_t
N_RB_UL
,
uint8_t
input_buffer_length
);
/// Terminate the RA procedure upon reception of l3msg on ulsch
void
(
*
terminate_ra_proc
)(
module_id_t
Mod_id
,
int
CC_id
,
frame_t
frameP
,
uint16_t
UE_id
,
uint8_t
*
l3msg
,
uint16_t
l3msg_len
);
/// Initiate the RA procedure upon reception (hypothetical) of a valid preamble
void
(
*
initiate_ra_proc
)(
module_id_t
Mod_id
,
int
CC_id
,
frame_t
frameP
,
uint16_t
preamble
,
int16_t
timing_offset
,
uint8_t
sect_id
,
sub_frame_t
subframe
,
uint8_t
f_id
);
...
...
@@ -91,7 +88,7 @@ typedef struct
uint8_t
*
(
*
get_dlsch_sdu
)(
module_id_t
Mod_id
,
int
CC_id
,
frame_t
frameP
,
rnti_t
rnti
,
uint8_t
TB_index
);
/// Send ULSCH sdu to MAC for given rnti
void
(
*
rx_sdu
)(
module_id_t
Mod_id
,
int
CC_id
,
frame_t
frameP
,
rnti_t
rnti
,
uint8_t
*
sdu
,
uint16_t
sdu_len
);
void
(
*
rx_sdu
)(
module_id_t
Mod_id
,
int
CC_id
,
frame_t
frameP
,
rnti_t
rnti
,
uint8_t
*
sdu
,
uint16_t
sdu_len
,
int
harq_pid
);
/// Indicate failure to synch to external source
void
(
*
mrbch_phy_sync_failure
)
(
module_id_t
Mod_id
,
frame_t
frameP
,
uint8_t
free_eNB_index
);
...
...
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