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
lizhongxiao
OpenXG-RAN
Commits
4861a362
Commit
4861a362
authored
Aug 19, 2022
by
Vaibhav Shrivastava
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
DRB Uplink Path Code Changes
parent
8c6a71a7
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
51 additions
and
23 deletions
+51
-23
openair2/COMMON/ss_messages_types.h
openair2/COMMON/ss_messages_types.h
+2
-0
openair2/LAYER2/PDCP_v10.1.0/pdcp.c
openair2/LAYER2/PDCP_v10.1.0/pdcp.c
+43
-19
openair3/SS/ss_eNB_drb_task.c
openair3/SS/ss_eNB_drb_task.c
+6
-4
No files found.
openair2/COMMON/ss_messages_types.h
View file @
4861a362
...
@@ -169,6 +169,8 @@ typedef struct ss_drb_pdu_ind_s {
...
@@ -169,6 +169,8 @@ typedef struct ss_drb_pdu_ind_s {
uint8_t
drb_id
;
uint8_t
drb_id
;
uint32_t
sdu_size
;
uint32_t
sdu_size
;
uint8_t
sdu
[
SDU_SIZE
];
uint8_t
sdu
[
SDU_SIZE
];
frame_t
frame
;
/*!< \brief LTE frame number.*/
sub_frame_t
subframe
;
/*!< \brief LTE sub frame number.*/
}
ss_drb_pdu_ind_t
;
}
ss_drb_pdu_ind_t
;
typedef
enum
carrierBandwidthEUTRA_dl_Bandwidth_e
{
typedef
enum
carrierBandwidthEUTRA_dl_Bandwidth_e
{
...
...
openair2/LAYER2/PDCP_v10.1.0/pdcp.c
View file @
4861a362
...
@@ -1049,30 +1049,54 @@ pdcp_data_ind(
...
@@ -1049,30 +1049,54 @@ pdcp_data_ind(
* from its second byte (skipping 0th and 1st octets, i.e.
* from its second byte (skipping 0th and 1st octets, i.e.
* PDCP header)
* PDCP header)
*/
*/
if
(
RC
.
ss
.
mode
>=
SS_SOFTMODEM
)
{
if
(
LINK_ENB_PDCP_TO_GTPV1U
)
{
if
((
TRUE
==
ctxt_pP
->
enb_flag
)
&&
(
FALSE
==
srb_flagP
))
{
if
((
TRUE
==
ctxt_pP
->
enb_flag
)
&&
(
FALSE
==
srb_flagP
))
{
LOG_
D
(
PDCP
,
"Sending packet to GTP, Calling GTPV1U_ENB_TUNNEL_DATA_REQ ue %x rab
%ld len %u
\n
"
,
LOG_
A
(
PDCP
,
"Sending packet to SS, Calling SS_DRB_PDU_IND ue %x drb id
%ld len %u
\n
"
,
ctxt_pP
->
rnti
,
ctxt_pP
->
rnti
,
rb_id
+
4
,
rb_id
,
sdu_buffer_sizeP
-
payload_offset
);
sdu_buffer_sizeP
-
payload_offset
);
//LOG_T(PDCP,"Sending to GTPV1U %d bytes\n", sdu_buffer_sizeP - payload_offset);
gtpu_buffer_p
=
itti_malloc
(
TASK_PDCP_ENB
,
TASK_GTPV1_U
,
MessageDef
*
message_p
=
itti_alloc_new_message
(
TASK_SS_DRB
,
0
,
SS_DRB_PDU_IND
);
sdu_buffer_sizeP
-
payload_offset
+
GTPU_HEADER_OVERHEAD_MAX
);
if
(
message_p
)
{
AssertFatal
(
gtpu_buffer_p
!=
NULL
,
"OUT OF MEMORY"
);
/* Populate the message to SS */
memcpy
(
&
gtpu_buffer_p
[
GTPU_HEADER_OVERHEAD_MAX
],
&
sdu_buffer_pP
->
data
[
payload_offset
],
sdu_buffer_sizeP
-
payload_offset
);
SS_DRB_PDU_IND
(
message_p
).
sdu_size
=
sdu_buffer_sizeP
-
payload_offset
;
message_p
=
itti_alloc_new_message
(
TASK_PDCP_ENB
,
0
,
GTPV1U_ENB_TUNNEL_DATA_REQ
);
SS_DRB_PDU_IND
(
message_p
).
drb_id
=
rb_id
;
AssertFatal
(
message_p
!=
NULL
,
"OUT OF MEMORY"
);
memset
(
SS_DRB_PDU_IND
(
message_p
).
sdu
,
0
,
SS_DRB_PDU_IND
(
message_p
).
sdu_size
);
GTPV1U_ENB_TUNNEL_DATA_REQ
(
message_p
).
buffer
=
gtpu_buffer_p
;
memcpy
(
&
SS_DRB_PDU_IND
(
message_p
).
sdu
,
&
sdu_buffer_pP
->
data
[
payload_offset
],
SS_DRB_PDU_IND
(
message_p
).
sdu_size
);
GTPV1U_ENB_TUNNEL_DATA_REQ
(
message_p
).
length
=
sdu_buffer_sizeP
-
payload_offset
;
SS_DRB_PDU_IND
(
message_p
).
frame
=
ctxt_pP
->
frame
;
GTPV1U_ENB_TUNNEL_DATA_REQ
(
message_p
).
offset
=
GTPU_HEADER_OVERHEAD_MAX
;
SS_DRB_PDU_IND
(
message_p
).
subframe
=
ctxt_pP
->
subframe
;
GTPV1U_ENB_TUNNEL_DATA_REQ
(
message_p
).
rnti
=
ctxt_pP
->
rnti
;
GTPV1U_ENB_TUNNEL_DATA_REQ
(
message_p
).
rab_id
=
rb_id
+
4
;
int
send_res
=
itti_send_msg_to_task
(
TASK_SS_DRB
,
INSTANCE_DEFAULT
,
message_p
);
itti_send_msg_to_task
(
TASK_GTPV1_U
,
INSTANCE_DEFAULT
,
message_p
);
if
(
send_res
<
0
)
{
packet_forwarded
=
TRUE
;
LOG_E
(
RRC
,
"Error in itti_send_msg_to_task"
);
}
}
}
}
}
else
{
}
else
{
packet_forwarded
=
FALSE
;
if
(
LINK_ENB_PDCP_TO_GTPV1U
)
{
if
((
TRUE
==
ctxt_pP
->
enb_flag
)
&&
(
FALSE
==
srb_flagP
))
{
LOG_D
(
PDCP
,
"Sending packet to GTP, Calling GTPV1U_ENB_TUNNEL_DATA_REQ ue %x rab %ld len %u
\n
"
,
ctxt_pP
->
rnti
,
rb_id
+
4
,
sdu_buffer_sizeP
-
payload_offset
);
//LOG_T(PDCP,"Sending to GTPV1U %d bytes\n", sdu_buffer_sizeP - payload_offset);
gtpu_buffer_p
=
itti_malloc
(
TASK_PDCP_ENB
,
TASK_GTPV1_U
,
sdu_buffer_sizeP
-
payload_offset
+
GTPU_HEADER_OVERHEAD_MAX
);
AssertFatal
(
gtpu_buffer_p
!=
NULL
,
"OUT OF MEMORY"
);
memcpy
(
&
gtpu_buffer_p
[
GTPU_HEADER_OVERHEAD_MAX
],
&
sdu_buffer_pP
->
data
[
payload_offset
],
sdu_buffer_sizeP
-
payload_offset
);
message_p
=
itti_alloc_new_message
(
TASK_PDCP_ENB
,
0
,
GTPV1U_ENB_TUNNEL_DATA_REQ
);
AssertFatal
(
message_p
!=
NULL
,
"OUT OF MEMORY"
);
GTPV1U_ENB_TUNNEL_DATA_REQ
(
message_p
).
buffer
=
gtpu_buffer_p
;
GTPV1U_ENB_TUNNEL_DATA_REQ
(
message_p
).
length
=
sdu_buffer_sizeP
-
payload_offset
;
GTPV1U_ENB_TUNNEL_DATA_REQ
(
message_p
).
offset
=
GTPU_HEADER_OVERHEAD_MAX
;
GTPV1U_ENB_TUNNEL_DATA_REQ
(
message_p
).
rnti
=
ctxt_pP
->
rnti
;
GTPV1U_ENB_TUNNEL_DATA_REQ
(
message_p
).
rab_id
=
rb_id
+
4
;
itti_send_msg_to_task
(
TASK_GTPV1_U
,
INSTANCE_DEFAULT
,
message_p
);
packet_forwarded
=
TRUE
;
}
}
else
{
packet_forwarded
=
FALSE
;
}
}
}
#ifdef MBMS_MULTICAST_OUT
#ifdef MBMS_MULTICAST_OUT
...
...
openair3/SS/ss_eNB_drb_task.c
View file @
4861a362
...
@@ -90,13 +90,13 @@ static void ss_send_drb_data(ss_drb_pdu_ind_t *pdu_ind){
...
@@ -90,13 +90,13 @@ static void ss_send_drb_data(ss_drb_pdu_ind_t *pdu_ind){
//Populated the Timing Info
//Populated the Timing Info
ind
.
Common
.
TimingInfo
.
d
=
TimingInfo_Type_SubFrame
;
ind
.
Common
.
TimingInfo
.
d
=
TimingInfo_Type_SubFrame
;
ind
.
Common
.
TimingInfo
.
v
.
SubFrame
.
SFN
.
d
=
SystemFrameNumberInfo_Type_Number
;
ind
.
Common
.
TimingInfo
.
v
.
SubFrame
.
SFN
.
d
=
SystemFrameNumberInfo_Type_Number
;
ind
.
Common
.
TimingInfo
.
v
.
SubFrame
.
SFN
.
v
.
Number
=
0
;
//Need to check what value needs to be sent
ind
.
Common
.
TimingInfo
.
v
.
SubFrame
.
SFN
.
v
.
Number
=
pdu_ind
->
frame
;
ind
.
Common
.
TimingInfo
.
v
.
SubFrame
.
Subframe
.
d
=
SubFrameInfo_Type_Number
;
ind
.
Common
.
TimingInfo
.
v
.
SubFrame
.
Subframe
.
d
=
SubFrameInfo_Type_Number
;
ind
.
Common
.
TimingInfo
.
v
.
SubFrame
.
Subframe
.
v
.
Number
=
0
;
//Need to check what value needs to be sent
ind
.
Common
.
TimingInfo
.
v
.
SubFrame
.
Subframe
.
v
.
Number
=
pdu_ind
->
subframe
;
ind
.
Common
.
TimingInfo
.
v
.
SubFrame
.
HSFN
.
d
=
SystemFrameNumberInfo_Type_Number
;
ind
.
Common
.
TimingInfo
.
v
.
SubFrame
.
HSFN
.
d
=
SystemFrameNumberInfo_Type_Number
;
ind
.
Common
.
TimingInfo
.
v
.
SubFrame
.
HSFN
.
v
.
Number
=
0
;
//Need to check what value needs to be sent
ind
.
Common
.
TimingInfo
.
v
.
SubFrame
.
HSFN
.
v
.
Number
=
0
;
ind
.
Common
.
TimingInfo
.
v
.
SubFrame
.
Slot
.
d
=
SlotTimingInfo_Type_Any
;
ind
.
Common
.
TimingInfo
.
v
.
SubFrame
.
Slot
.
d
=
SlotTimingInfo_Type_Any
;
ind
.
Common
.
TimingInfo
.
v
.
SubFrame
.
Slot
.
v
.
Any
=
true
;
ind
.
Common
.
TimingInfo
.
v
.
SubFrame
.
Slot
.
v
.
Any
=
true
;
...
@@ -114,8 +114,10 @@ static void ss_send_drb_data(ss_drb_pdu_ind_t *pdu_ind){
...
@@ -114,8 +114,10 @@ static void ss_send_drb_data(ss_drb_pdu_ind_t *pdu_ind){
ind
.
U_Plane
.
SubframeData
.
PduSduList
.
v
.
PdcpSdu
.
d
=
1
;
ind
.
U_Plane
.
SubframeData
.
PduSduList
.
v
.
PdcpSdu
.
d
=
1
;
LOG_A
(
ENB_APP
,
"[SS_DRB][DRB_COMMON_IND] PDCP SDU Count: %d
\n
"
,
ind
.
U_Plane
.
SubframeData
.
PduSduList
.
v
.
PdcpSdu
.
d
);
LOG_A
(
ENB_APP
,
"[SS_DRB][DRB_COMMON_IND] PDCP SDU Count: %d
\n
"
,
ind
.
U_Plane
.
SubframeData
.
PduSduList
.
v
.
PdcpSdu
.
d
);
for
(
int
i
=
0
;
i
<
ind
.
U_Plane
.
SubframeData
.
PduSduList
.
v
.
PdcpSdu
.
d
;
i
++
){
for
(
int
i
=
0
;
i
<
ind
.
U_Plane
.
SubframeData
.
PduSduList
.
v
.
PdcpSdu
.
d
;
i
++
){
ind
.
U_Plane
.
SubframeData
.
PduSduList
.
v
.
PdcpSdu
.
v
[
i
].
d
=
pdu_ind
->
sdu_size
;
ind
.
U_Plane
.
SubframeData
.
PduSduList
.
v
.
PdcpSdu
.
v
=
CALLOC
(
1
,(
ind
.
U_Plane
.
SubframeData
.
PduSduList
.
v
.
PdcpSdu
.
d
)
*
(
sizeof
(
PDCP_SDU_Type
)))
;
DevAssert
(
ind
.
U_Plane
.
SubframeData
.
PduSduList
.
v
.
PdcpSdu
.
v
!=
NULL
);
DevAssert
(
ind
.
U_Plane
.
SubframeData
.
PduSduList
.
v
.
PdcpSdu
.
v
!=
NULL
);
ind
.
U_Plane
.
SubframeData
.
PduSduList
.
v
.
PdcpSdu
.
v
[
i
].
d
=
pdu_ind
->
sdu_size
;
ind
.
U_Plane
.
SubframeData
.
PduSduList
.
v
.
PdcpSdu
.
v
[
i
].
v
=
CALLOC
(
1
,
ind
.
U_Plane
.
SubframeData
.
PduSduList
.
v
.
PdcpSdu
.
v
[
i
].
d
);
memcpy
(
ind
.
U_Plane
.
SubframeData
.
PduSduList
.
v
.
PdcpSdu
.
v
[
i
].
v
,
pdu_ind
->
sdu
,
pdu_ind
->
sdu_size
);
memcpy
(
ind
.
U_Plane
.
SubframeData
.
PduSduList
.
v
.
PdcpSdu
.
v
[
i
].
v
,
pdu_ind
->
sdu
,
pdu_ind
->
sdu_size
);
}
}
...
...
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