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
2eb799c3
Commit
2eb799c3
authored
Jun 18, 2020
by
laurent
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix pdcp race condition
parent
4747f287
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
55 additions
and
71 deletions
+55
-71
openair2/LAYER2/PDCP_v10.1.0/pdcp.c
openair2/LAYER2/PDCP_v10.1.0/pdcp.c
+22
-29
openair2/LAYER2/PDCP_v10.1.0/pdcp.h
openair2/LAYER2/PDCP_v10.1.0/pdcp.h
+1
-1
openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
+32
-41
No files found.
openair2/LAYER2/PDCP_v10.1.0/pdcp.c
View file @
2eb799c3
...
@@ -503,8 +503,6 @@ pdcp_data_ind(
...
@@ -503,8 +503,6 @@ pdcp_data_ind(
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
{
{
pdcp_t
*
pdcp_p
=
NULL
;
pdcp_t
*
pdcp_p
=
NULL
;
list_t
*
sdu_list_p
=
NULL
;
mem_block_t
*
new_sdu_p
=
NULL
;
uint8_t
pdcp_header_len
=
0
;
uint8_t
pdcp_header_len
=
0
;
uint8_t
pdcp_tailer_len
=
0
;
uint8_t
pdcp_tailer_len
=
0
;
pdcp_sn_t
sequence_number
=
0
;
pdcp_sn_t
sequence_number
=
0
;
...
@@ -576,7 +574,6 @@ pdcp_data_ind(
...
@@ -576,7 +574,6 @@ pdcp_data_ind(
}
}
}
}
sdu_list_p
=
&
pdcp_sdu_list
;
if
(
sdu_buffer_sizeP
==
0
)
{
if
(
sdu_buffer_sizeP
==
0
)
{
LOG_W
(
PDCP
,
"SDU buffer size is zero! Ignoring this chunk!
\n
"
);
LOG_W
(
PDCP
,
"SDU buffer size is zero! Ignoring this chunk!
\n
"
);
...
@@ -974,9 +971,8 @@ pdcp_data_ind(
...
@@ -974,9 +971,8 @@ pdcp_data_ind(
#endif
#endif
if
(
FALSE
==
packet_forwarded
)
{
if
(
FALSE
==
packet_forwarded
)
{
n
ew_sdu_p
=
get_free_mem_block
(
sdu_buffer_sizeP
-
payload_offset
+
sizeof
(
pdcp_data_ind_header_t
),
__func__
);
n
otifiedFIFO_elt_t
*
new_sdu_p
=
newNotifiedFIFO_elt
(
sdu_buffer_sizeP
-
payload_offset
+
sizeof
(
pdcp_data_ind_header_t
),
0
,
NULL
,
NULL
);
if
(
new_sdu_p
)
{
if
((
MBMS_flagP
==
0
)
&&
(
pdcp_p
->
rlc_mode
==
RLC_MODE_AM
))
{
if
((
MBMS_flagP
==
0
)
&&
(
pdcp_p
->
rlc_mode
==
RLC_MODE_AM
))
{
pdcp_p
->
last_submitted_pdcp_rx_sn
=
sequence_number
;
pdcp_p
->
last_submitted_pdcp_rx_sn
=
sequence_number
;
}
}
...
@@ -984,14 +980,15 @@ pdcp_data_ind(
...
@@ -984,14 +980,15 @@ pdcp_data_ind(
/*
/*
* Prepend PDCP indication header which is going to be removed at pdcp_fifo_flush_sdus()
* Prepend PDCP indication header which is going to be removed at pdcp_fifo_flush_sdus()
*/
*/
memset
(
new_sdu_p
->
data
,
0
,
sizeof
(
pdcp_data_ind_header_t
));
pdcp_data_ind_header_t
*
pdcpHead
=
(
pdcp_data_ind_header_t
*
)
NotifiedFifoData
(
new_sdu_p
);
((
pdcp_data_ind_header_t
*
)
new_sdu_p
->
data
)
->
data_size
=
sdu_buffer_sizeP
-
payload_offset
;
memset
(
pdcpHead
,
0
,
sizeof
(
pdcp_data_ind_header_t
));
pdcpHead
->
data_size
=
sdu_buffer_sizeP
-
payload_offset
;
AssertFatal
((
sdu_buffer_sizeP
-
payload_offset
>=
0
),
"invalid PDCP SDU size!"
);
AssertFatal
((
sdu_buffer_sizeP
-
payload_offset
>=
0
),
"invalid PDCP SDU size!"
);
// Here there is no virtualization possible
// Here there is no virtualization possible
// set ((pdcp_data_ind_header_t *) new_sdu_p->data)->inst for IP layer here
// set ((pdcp_data_ind_header_t *) new_sdu_p->data)->inst for IP layer here
if
(
ctxt_pP
->
enb_flag
==
ENB_FLAG_NO
)
{
if
(
ctxt_pP
->
enb_flag
==
ENB_FLAG_NO
)
{
((
pdcp_data_ind_header_t
*
)
new_sdu_p
->
data
)
->
rb_id
=
rb_id
;
pdcpHead
->
rb_id
=
rb_id
;
if
(
EPC_MODE_ENABLED
)
{
if
(
EPC_MODE_ENABLED
)
{
/* for the UE compiled in S1 mode, we need 1 here
/* for the UE compiled in S1 mode, we need 1 here
...
@@ -1002,45 +999,40 @@ pdcp_data_ind(
...
@@ -1002,45 +999,40 @@ pdcp_data_ind(
#ifdef UESIM_EXPANSION
#ifdef UESIM_EXPANSION
if
(
UE_NAS_USE_TUN
)
{
if
(
UE_NAS_USE_TUN
)
{
((
pdcp_data_ind_header_t
*
)
new_sdu_p
->
data
)
->
inst
=
ctxt_pP
->
module_id
;
pdcpHead
->
inst
=
ctxt_pP
->
module_id
;
}
else
{
}
else
{
((
pdcp_data_ind_header_t
*
)
new_sdu_p
->
data
)
->
inst
=
0
;
pdcpHead
->
inst
=
0
;
}
}
#else
#else
((
pdcp_data_ind_header_t
*
)
new_sdu_p
->
data
)
->
inst
=
ctxt_pP
->
module_id
;
pdcpHead
->
inst
=
ctxt_pP
->
module_id
;
#endif
#endif
}
else
{
// nfapi_mode
}
else
{
// nfapi_mode
if
(
UE_NAS_USE_TUN
)
{
if
(
UE_NAS_USE_TUN
)
{
((
pdcp_data_ind_header_t
*
)
new_sdu_p
->
data
)
->
inst
=
ctxt_pP
->
module_id
;
pdcpHead
->
inst
=
ctxt_pP
->
module_id
;
}
else
{
}
else
{
((
pdcp_data_ind_header_t
*
)
new_sdu_p
->
data
)
->
inst
=
1
;
pdcpHead
->
inst
=
1
;
}
}
}
// nfapi_mode
}
// nfapi_mode
}
}
}
else
{
}
else
{
((
pdcp_data_ind_header_t
*
)
new_sdu_p
->
data
)
->
rb_id
=
rb_id
+
(
ctxt_pP
->
module_id
*
LTE_maxDRB
);
pdcpHead
->
rb_id
=
rb_id
+
(
ctxt_pP
->
module_id
*
LTE_maxDRB
);
((
pdcp_data_ind_header_t
*
)
new_sdu_p
->
data
)
->
inst
=
ctxt_pP
->
module_id
;
pdcpHead
->
inst
=
ctxt_pP
->
module_id
;
}
}
if
(
LOG_DEBUGFLAG
(
DEBUG_PDCP
)
)
{
if
(
LOG_DEBUGFLAG
(
DEBUG_PDCP
)
)
{
static
uint32_t
pdcp_inst
=
0
;
static
uint32_t
pdcp_inst
=
0
;
((
pdcp_data_ind_header_t
*
)
new_sdu_p
->
data
)
->
inst
=
pdcp_inst
++
;
pdcpHead
->
inst
=
pdcp_inst
++
;
LOG_D
(
PDCP
,
"inst=%d size=%d
\n
"
,
((
pdcp_data_ind_header_t
*
)
new_sdu_p
->
data
)
->
inst
,
((
pdcp_data_ind_header_t
*
)
new_sdu_p
->
data
)
->
data_size
);
LOG_D
(
PDCP
,
"inst=%d size=%d
\n
"
,
pdcpHead
->
inst
,
pdcpHead
->
data_size
);
}
}
memcpy
(
&
new_sdu_p
->
data
[
sizeof
(
pdcp_data_ind_header_t
)]
,
memcpy
(
pdcpHead
+
1
,
&
sdu_buffer_pP
->
data
[
payload_offset
],
&
sdu_buffer_pP
->
data
[
payload_offset
],
sdu_buffer_sizeP
-
payload_offset
);
sdu_buffer_sizeP
-
payload_offset
);
if
(
LOG_DEBUGFLAG
(
DEBUG_PDCP
)
)
#if defined(ENABLE_PDCP_PAYLOAD_DEBUG)
log_dump
(
PDCP
,
pdcpHead
+
1
,
min
(
sdu_buffer_sizeP
-
payload_offset
,
30
)
,
LOG_DUMP_CHAR
,
LOG_I
(
PDCP
,
"Printing first bytes of PDCP SDU before adding it to the list:
\n
"
);
"Printing first bytes of PDCP SDU before adding it to the list:
\n
"
);
for
(
int
i
=
0
;
i
<
30
;
i
++
){
pushNotifiedFIFO
(
&
pdcp_sdu_list
,
new_sdu_p
);
LOG_I
(
PDCP
,
"%x"
,
sdu_buffer_pP
->
data
[
i
]);
}
#endif
list_add_tail_eurecom
(
new_sdu_p
,
sdu_list_p
);
}
/* Print octets of incoming data in hexadecimal form */
/* Print octets of incoming data in hexadecimal form */
LOG_D
(
PDCP
,
"Following content has been received from RLC (%d,%d)(PDCP header has already been removed):
\n
"
,
LOG_D
(
PDCP
,
"Following content has been received from RLC (%d,%d)(PDCP header has already been removed):
\n
"
,
...
@@ -2467,7 +2459,7 @@ void pdcp_layer_init(void)
...
@@ -2467,7 +2459,7 @@ void pdcp_layer_init(void)
/*
/*
* Initialize SDU list
* Initialize SDU list
*/
*/
list_init
(
&
pdcp_sdu_list
,
NULL
);
initNotifiedFIFO
(
&
pdcp_sdu_list
);
pdcp_coll_p
=
hashtable_create
((
LTE_maxDRB
+
2
)
*
NUMBER_OF_UE_MAX
,
NULL
,
pdcp_free
);
pdcp_coll_p
=
hashtable_create
((
LTE_maxDRB
+
2
)
*
NUMBER_OF_UE_MAX
,
NULL
,
pdcp_free
);
AssertFatal
(
pdcp_coll_p
!=
NULL
,
"UNRECOVERABLE error, PDCP hashtable_create failed"
);
AssertFatal
(
pdcp_coll_p
!=
NULL
,
"UNRECOVERABLE error, PDCP hashtable_create failed"
);
...
@@ -2540,7 +2532,8 @@ void pdcp_layer_init(void)
...
@@ -2540,7 +2532,8 @@ void pdcp_layer_init(void)
void
pdcp_layer_cleanup
(
void
)
void
pdcp_layer_cleanup
(
void
)
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
{
{
list_free
(
&
pdcp_sdu_list
);
//list_free (&pdcp_sdu_list);
while
(
pollNotifiedFIFO
(
&
pdcp_sdu_list
))
{};
hashtable_destroy
(
&
pdcp_coll_p
);
hashtable_destroy
(
&
pdcp_coll_p
);
#ifdef MBMS_MULTICAST_OUT
#ifdef MBMS_MULTICAST_OUT
...
...
openair2/LAYER2/PDCP_v10.1.0/pdcp.h
View file @
2eb799c3
...
@@ -522,7 +522,7 @@ pdcp_mbms_t pdcp_mbms_array_eNB[NUMBER_OF_eNB_MAX][LTE_maxServiceC
...
@@ -522,7 +522,7 @@ pdcp_mbms_t pdcp_mbms_array_eNB[NUMBER_OF_eNB_MAX][LTE_maxServiceC
sdu_size_t
pdcp_output_sdu_bytes_to_write
;
sdu_size_t
pdcp_output_sdu_bytes_to_write
;
sdu_size_t
pdcp_output_header_bytes_to_write
;
sdu_size_t
pdcp_output_header_bytes_to_write
;
list_t
pdcp_sdu_list
;
notifiedFIFO_t
pdcp_sdu_list
;
int
pdcp_sent_a_sdu
;
int
pdcp_sent_a_sdu
;
pdcp_data_req_header_t
pdcp_input_header
;
pdcp_data_req_header_t
pdcp_input_header
;
unsigned
char
pdcp_input_sdu_buffer
[
MAX_IP_PACKET_SIZE
];
unsigned
char
pdcp_input_sdu_buffer
[
MAX_IP_PACKET_SIZE
];
...
...
openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
View file @
2eb799c3
...
@@ -111,69 +111,59 @@ void debug_pdcp_pc5s_sdu(sidelink_pc5s_element *sl_pc5s_msg, char *title) {
...
@@ -111,69 +111,59 @@ void debug_pdcp_pc5s_sdu(sidelink_pc5s_element *sl_pc5s_msg, char *title) {
}
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
int
pdcp_fifo_flush_sdus
(
const
protocol_ctxt_t
*
const
ctxt_pP
)
{
int
pdcp_fifo_flush_sdus
(
const
protocol_ctxt_t
*
const
ctxt_pP
)
{
mem_block_t
*
sdu_p
;
notifiedFIFO_elt_t
*
sdu_p
;
int
pdcp_nb_sdu_sent
=
0
;
int
pdcp_nb_sdu_sent
=
0
;
int
ret
=
0
;
int
ret
=
0
;
while
((
sdu_p
=
pollNotifiedFIFO
(
&
pdcp_sdu_list
))
!=
NULL
)
{
pdcp_data_ind_header_t
*
pdcpHead
=
(
pdcp_data_ind_header_t
*
)
NotifiedFifoData
(
sdu_p
);
AssertFatal
(
pdcpHead
->
inst
==
ctxt_pP
->
module_id
,
"To implement correctly multi module id
\n
"
);
while
((
sdu_p
=
list_get_head
(
&
pdcp_sdu_list
))
!=
NULL
&&
((
pdcp_data_ind_header_t
*
)(
sdu_p
->
data
))
->
inst
==
ctxt_pP
->
module_id
)
{
int
rb_id
=
pdcpHead
->
rb_id
;
((
pdcp_data_ind_header_t
*
)(
sdu_p
->
data
))
->
inst
=
0
;
int
rb_id
=
((
pdcp_data_ind_header_t
*
)(
sdu_p
->
data
))
->
rb_id
;
int
sizeToWrite
=
sizeof
(
pdcp_data_ind_header_t
)
+
int
sizeToWrite
=
sizeof
(
pdcp_data_ind_header_t
)
+
((
pdcp_data_ind_header_t
*
)
sdu_p
->
data
)
->
data_size
;
pdcpHead
->
data_size
;
void
*
pdcpData
=
(
void
*
)(
pdcpHead
+
1
);
if
(
rb_id
==
10
)
{
//hardcoded for PC5-Signaling
if
(
rb_id
==
10
)
{
//hardcoded for PC5-Signaling
if
(
LOG_DEBUGFLAG
(
DEBUG_PDCP
)
)
{
if
(
LOG_DEBUGFLAG
(
DEBUG_PDCP
)
)
{
debug_pdcp_pc5s_sdu
((
sidelink_pc5s_element
*
)
&
(
sdu_p
->
data
[
sizeof
(
pdcp_data_ind_header_t
)])
,
debug_pdcp_pc5s_sdu
((
sidelink_pc5s_element
*
)
pdcpData
,
"pdcp_fifo_flush_sdus sends a aPC5S message"
);
"pdcp_fifo_flush_sdus sends a aPC5S message"
);
}
}
ret
=
sendto
(
pdcp_pc5_sockfd
,
&
(
sdu_p
->
data
[
sizeof
(
pdcp_data_ind_header_t
)])
,
ret
=
sendto
(
pdcp_pc5_sockfd
,
pdcpData
,
sizeof
(
sidelink_pc5s_element
),
0
,
(
struct
sockaddr
*
)
&
prose_pdcp_addr
,
sizeof
(
prose_pdcp_addr
)
);
sizeof
(
sidelink_pc5s_element
),
0
,
(
struct
sockaddr
*
)
&
prose_pdcp_addr
,
sizeof
(
prose_pdcp_addr
)
);
}
else
if
(
UE_NAS_USE_TUN
)
{
}
else
if
(
UE_NAS_USE_TUN
)
{
//ret = write(nas_sock_fd[ctxt_pP->module_id], &(sdu_p->data[sizeof(pdcp_data_ind_header_t)]),sizeToWrite );
//ret = write(nas_sock_fd[ctxt_pP->module_id], &(sdu_p->data[sizeof(pdcp_data_ind_header_t)]),sizeToWrite );
if
(
rb_id
==
mbms_rab_id
){
if
(
rb_id
==
mbms_rab_id
){
ret
=
write
(
nas_sock_mbms_fd
,
&
(
sdu_p
->
data
[
sizeof
(
pdcp_data_ind_header_t
)]),
sizeToWrite
);
ret
=
write
(
nas_sock_mbms_fd
,
pdcpData
,
sizeToWrite
);
LOG_I
(
PDCP
,
"[PDCP_FIFOS] ret %d TRIED TO PUSH MBMS DATA TO rb_id %d handle %d sizeToWrite %d
\n
"
,
ret
,
rb_id
,
nas_sock_fd
[
ctxt_pP
->
module_id
],
sizeToWrite
);
LOG_I
(
PDCP
,
"[PDCP_FIFOS] ret %d TRIED TO PUSH MBMS DATA TO rb_id %d handle %d sizeToWrite %d
\n
"
,
ret
,
rb_id
,
nas_sock_fd
[
ctxt_pP
->
module_id
],
sizeToWrite
);
}
}
else
else
{
{
#if defined(ENABLE_PDCP_PAYLOAD_DEBUG)
if
(
LOG_DEBUGFLAG
(
DEBUG_PDCP
)
)
LOG_I
(
PHY
,
"PDCP output to be sent to TUN interface:
\n
"
);
log_dump
(
PDCP
,
pdcpData
,
sizeToWrite
,
LOG_DUMP_CHAR
,
"PDCP output to be sent to TUN interface:
\n
"
);
for
(
int
i
=
sizeof
(
pdcp_data_ind_header_t
);
i
<
sizeToWrite
;
i
++
)
{
ret
=
write
(
nas_sock_fd
[
ctxt_pP
->
module_id
],
pdcpData
,
sizeToWrite
);
printf
(
"%02x "
,(
unsigned
char
)
sdu_p
->
data
[
i
]);
LOG_T
(
PDCP
,
"[UE PDCP_FIFOS] ret %d TRIED TO PUSH DATA TO rb_id %d handle %d sizeToWrite %d
\n
"
,
}
ret
,
rb_id
,
nas_sock_fd
[
ctxt_pP
->
module_id
],
sizeToWrite
);
printf
(
"
\n
"
);
#endif
ret
=
write
(
nas_sock_fd
[
ctxt_pP
->
module_id
],
&
(
sdu_p
->
data
[
sizeof
(
pdcp_data_ind_header_t
)]),
sizeToWrite
);
//LOG_I(PDCP,"[PDCP_FIFOS] ret %d TRIED TO PUSH DATA TO rb_id %d handle %d sizeToWrite %d\n",ret,rb_id,nas_sock_fd[ctxt_pP->module_id],sizeToWrite);
}
}
}
else
if
(
ENB_NAS_USE_TUN
)
{
}
else
if
(
ENB_NAS_USE_TUN
)
{
#if defined(ENABLE_PDCP_PAYLOAD_DEBUG)
if
(
LOG_DEBUGFLAG
(
DEBUG_PDCP
)
)
LOG_I
(
PHY
,
"PDCP output to be sent to TUN interface:
\n
"
);
log_dump
(
PDCP
,
pdcpData
,
sizeToWrite
,
LOG_DUMP_CHAR
,
"PDCP output to be sent to TUN interface:
\n
"
);
for
(
int
i
=
sizeof
(
pdcp_data_ind_header_t
);
i
<
sizeToWrite
;
i
++
)
{
ret
=
write
(
nas_sock_fd
[
0
],
pdcpData
,
sizeToWrite
);
printf
(
"%02x "
,(
unsigned
char
)
sdu_p
->
data
[
i
]);
LOG_T
(
PDCP
,
"[NB PDCP_FIFOS] ret %d TRIED TO PUSH DATA TO rb_id %d handle %d sizeToWrite %d
\n
"
,
ret
,
rb_id
,
nas_sock_fd
[
0
],
sizeToWrite
);
}
printf
(
"
\n
"
);
#endif
ret
=
write
(
nas_sock_fd
[
0
],
&
(
sdu_p
->
data
[
sizeof
(
pdcp_data_ind_header_t
)]),
sizeToWrite
);
}
else
if
(
PDCP_USE_NETLINK
)
{
}
else
if
(
PDCP_USE_NETLINK
)
{
memcpy
(
NLMSG_DATA
(
nas_nlh_tx
),
(
uint8_t
*
)
sdu_p
->
data
,
sizeToWrite
);
memcpy
(
NLMSG_DATA
(
nas_nlh_tx
),
(
uint8_t
*
)
pdcpHead
,
sizeToWrite
);
nas_nlh_tx
->
nlmsg_len
=
sizeToWrite
;
nas_nlh_tx
->
nlmsg_len
=
sizeToWrite
;
ret
=
sendmsg
(
nas_sock_fd
[
0
],
&
nas_msg_tx
,
0
);
ret
=
sendmsg
(
nas_sock_fd
[
0
],
&
nas_msg_tx
,
0
);
}
// PDCP_USE_NETLINK
}
// PDCP_USE_NETLINK
AssertFatal
(
ret
>=
0
,
"[PDCP_FIFOS] pdcp_fifo_flush_sdus (errno: %d %s), nas_sock_fd[0]: %d
\n
"
,
errno
,
strerror
(
errno
),
nas_sock_fd
[
0
]);
AssertFatal
(
ret
>=
0
,
"[PDCP_FIFOS] pdcp_fifo_flush_sdus (errno: %d %s), nas_sock_fd[0]: %d
\n
"
,
errno
,
strerror
(
errno
),
nas_sock_fd
[
0
]);
#if defined(ENABLE_PDCP_PAYLOAD_DEBUG)
if
(
LOG_DEBUGFLAG
(
DEBUG_PDCP
)
)
LOG_I
(
PDCP
,
"Printing first bytes of PDCP SDU before removing it from the list:
\n
"
);
log_dump
(
PDCP
,
pdcpData
,
min
(
sizeToWrite
,
30
)
,
LOG_DUMP_CHAR
,
for
(
int
i
=
0
;
i
<
30
;
i
++
){
"Printing first bytes of PDCP SDU before removing it from the list:
\n
"
);
LOG_I
(
PDCP
,
"%x"
,
sdu_p
->
data
[
i
]);
delNotifiedFIFO_elt
(
sdu_p
);
}
#endif
list_remove_head
(
&
pdcp_sdu_list
);
free_mem_block
(
sdu_p
,
__func__
);
pdcp_nb_sdu_sent
++
;
pdcp_nb_sdu_sent
++
;
}
}
...
@@ -181,12 +171,13 @@ int pdcp_fifo_flush_sdus(const protocol_ctxt_t *const ctxt_pP) {
...
@@ -181,12 +171,13 @@ int pdcp_fifo_flush_sdus(const protocol_ctxt_t *const ctxt_pP) {
}
}
int
pdcp_fifo_flush_mbms_sdus
(
const
protocol_ctxt_t
*
const
ctxt_pP
)
{
int
pdcp_fifo_flush_mbms_sdus
(
const
protocol_ctxt_t
*
const
ctxt_pP
)
{
mem_block
_t
*
sdu_p
;
notifiedFIFO_elt
_t
*
sdu_p
;
int
pdcp_nb_sdu_sent
=
0
;
int
pdcp_nb_sdu_sent
=
0
;
//int ret=0;
//int ret=0;
while
((
sdu_p
=
list_get_head
(
&
pdcp_sdu_list
))
!=
NULL
&&
((
pdcp_data_ind_header_t
*
)(
sdu_p
->
data
))
->
inst
==
ctxt_pP
->
module_id
)
{
while
((
sdu_p
=
pollNotifiedFIFO
(
&
pdcp_sdu_list
))
!=
NULL
)
{
((
pdcp_data_ind_header_t
*
)(
sdu_p
->
data
))
->
inst
=
0
;
pdcp_data_ind_header_t
*
pdcpHead
=
(
pdcp_data_ind_header_t
*
)
NotifiedFifoData
(
sdu_p
);
AssertFatal
(
pdcpHead
->
inst
==
ctxt_pP
->
module_id
,
"To implement correctly multi module id
\n
"
);
//int rb_id = ((pdcp_data_ind_header_t *)(sdu_p->data))->rb_id;
//int rb_id = ((pdcp_data_ind_header_t *)(sdu_p->data))->rb_id;
//int sizeToWrite= sizeof (pdcp_data_ind_header_t) +
//int sizeToWrite= sizeof (pdcp_data_ind_header_t) +
//((pdcp_data_ind_header_t *) sdu_p->data)->data_size;
//((pdcp_data_ind_header_t *) sdu_p->data)->data_size;
...
@@ -212,8 +203,8 @@ int pdcp_fifo_flush_mbms_sdus(const protocol_ctxt_t *const ctxt_pP) {
...
@@ -212,8 +203,8 @@ int pdcp_fifo_flush_mbms_sdus(const protocol_ctxt_t *const ctxt_pP) {
//} // PDCP_USE_NETLINK
//} // PDCP_USE_NETLINK
//AssertFatal(ret >= 0,"[PDCP_FIFOS] pdcp_fifo_flush_sdus (errno: %d %s)\n", errno, strerror(errno));
//AssertFatal(ret >= 0,"[PDCP_FIFOS] pdcp_fifo_flush_sdus (errno: %d %s)\n", errno, strerror(errno));
list_remove_head
(
&
pdcp_sdu_list
);
//AssertFatal(ret >= 0,"[PDCP_FIFOS] pdcp_fifo_flush_sdus (errno: %d %s)\n", errno, strerror(errno)
);
free_mem_block
(
sdu_p
,
__func__
);
delNotifiedFIFO_elt
(
sdu_p
);
pdcp_nb_sdu_sent
++
;
pdcp_nb_sdu_sent
++
;
}
}
...
...
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