astyle --recursive --indent=spaces=2 --style=kr --indent-col1-comments --break-blocks --convert-tabs --max-code-length=200

This is done for better merging branch/LG_PRE_RELEASE_0.3 into trunk (same process is applied on this branch)

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7073 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
Lionel Gauthier
2015-04-09 09:29:12 +00:00
parent f0a8a0b3b5
commit 059a0a3fdc
2044 changed files with 1182666 additions and 1145123 deletions
+32 -22
View File
@@ -12,39 +12,39 @@
#include "test_pdcp.h"
/*
* These are the PDCP entities that will be utilised
* These are the PDCP entities that will be utilised
* throughout the test
*
* For pdcp_data_req() and pdcp_data_ind() these
* For pdcp_data_req() and pdcp_data_ind() these
* are passed and used
*/
pdcp_t pdcp_array[2];
/*
* TX list is the one we use to receive PDUs created by pdcp_data_req() and
* TX list is the one we use to receive PDUs created by pdcp_data_req() and
* RX list is the one we use to pass these PDUs to pdcp_data_ind(). In test_pdcp_data_req()
* method every PDU created by pdcp_data_req() are first validated and then added to RX
* method every PDU created by pdcp_data_req() are first validated and then added to RX
* list after it's removed from TX list
*/
list_t test_pdu_tx_list;
list_t test_pdu_rx_list;
/*
* This is used by a number of methods to determine how
* This is used by a number of methods to determine how
* many times a packet should be generated/a test run
*/
#define NUMBER_OF_TEST_PACKETS 10000
/*
* This is determined by the size of Sequence Number
* This is determined by the size of Sequence Number
* field and used to check sequence number synchronisation
*/
#define WINDOW_SIZE 4096 // 12-bit SN
/*
* Test configuration is STATEFUL. If you want to run DATA_REQUEST after TX_WINDOW
* Test configuration is STATEFUL. If you want to run DATA_REQUEST after TX_WINDOW
* then you have to reset/reinitialize PDCP entity state!
*
* TEST_RX_AND_TX_WINDOW Tests TX window code by repetitively asking for new TX
*
* TEST_RX_AND_TX_WINDOW Tests TX window code by repetitively asking for new TX
* sequence numbers without generating any packets
* And tests RX window code by supplying sequenced RX sequence
* numbers and asking RX window code to validate, without
@@ -52,10 +52,10 @@ list_t test_pdu_rx_list;
*/
#define TEST_RX_AND_TX_WINDOW 0
/*
* TEST_PDCP_DATA_REQUEST_AND_INDICATION Tests pdcp_data_req() method by repetitively asking it
* to create a PDCP PDU out of supplied SDU and parsing
* TEST_PDCP_DATA_REQUEST_AND_INDICATION Tests pdcp_data_req() method by repetitively asking it
* to create a PDCP PDU out of supplied SDU and parsing
* particular fields of relevant PDU lateron
* Afterwards, those PDUs created by pdcp_data_req() are
* Afterwards, those PDUs created by pdcp_data_req() are
* passed to pdcp_data_ind()
*/
#define TEST_PDCP_DATA_REQUEST_AND_INDICATION 1
@@ -66,7 +66,8 @@ list_t test_pdu_rx_list;
#define DUMMY_BUFFER ((unsigned char*)"123456789")
#define DUMMY_BUFFER_SIZE 10
int main(int argc, char **argv) {
int main(int argc, char **argv)
{
unsigned char index = 0;
unsigned char test_result = 0;
@@ -96,6 +97,7 @@ int main(int argc, char **argv) {
}
#if TEST_RX_AND_TX_WINDOW
/* Test TX window */
if (test_tx_window() == FALSE)
test_result = 1;
@@ -103,9 +105,11 @@ int main(int argc, char **argv) {
/* Test RX window */
if (test_rx_window() == FALSE)
test_result = 1;
#endif
#if TEST_PDCP_DATA_REQUEST_AND_INDICATION
/* Test pdcp_data_req() method in pdcp.c */
if (test_pdcp_data_req() == FALSE)
test_result = 1;
@@ -113,6 +117,7 @@ int main(int argc, char **argv) {
/* Test pdcp_data_ind() method in pdcp.c */
if (test_pdcp_data_ind() == FALSE)
test_result = 1;
#endif
if (test_result) {
@@ -154,6 +159,7 @@ BOOL test_tx_window()
for (index = 0; index < NUMBER_OF_TEST_PACKETS; ++index) {
u16 pseudo_tx_sn = pdcp_get_next_tx_seq_number(&pdcp_array[0]);
if (pseudo_tx_sn == index % WINDOW_SIZE)
msg("TX packet # %07lu seq # %04d hfn # %04d\n", index, pseudo_tx_sn, pdcp_array[0].tx_hfn);
else {
@@ -171,6 +177,7 @@ BOOL test_rx_window()
for (index = 0; index < NUMBER_OF_TEST_PACKETS; ++index) {
u16 pseudo_rx_sn = (index == 0) ? 0 : index % WINDOW_SIZE;
if (pdcp_is_rx_seq_number_valid(pseudo_rx_sn, &pdcp_array[1]) == TRUE) {
msg("RX packet # %07lu seq # %04d last-submitted # %04d hfn # %04d\n", \
index, pdcp_array[1].next_pdcp_rx_sn, pdcp_array[1].last_submitted_pdcp_rx_sn, pdcp_array[1].rx_hfn);
@@ -193,6 +200,7 @@ BOOL test_pdcp_data_req()
* Create an unsigned char buffer out of mem_block_t
*/
pdcp_test_pdu_buffer = (unsigned char*) calloc(1, pdcp_test_pdu_buffer_size);
if (pdcp_test_pdu_buffer == NULL) {
msg("Cannot allocate a buffer for test!\n");
return FALSE;
@@ -216,19 +224,21 @@ BOOL test_pdcp_data_req()
msg("[TEST] Starting to dissect PDU created by PDCP...\n");
/*
* XXX mem_block_t doesn't hold buffer size, how do we keep the size
* XXX mem_block_t doesn't hold buffer size, how do we keep the size
* information if we pass mem_block_ts via a linked list?
*/
#if 0
if (pdcp_test_pdu_buffer_size == 0 || pdcp_test_pdu_buffer == NULL) {
msg("[TEST] PDU created by pdcp_data_req() is invalid!\n");
return FALSE;
}
#endif
/*
* Serialize incoming mem_block_t into an unsigned character array
* and add removed PDU to RX list in order to use it in the next test
* and add removed PDU to RX list in order to use it in the next test
* (test_pdcp_data_ind())
*/
mem_block_t* pdcp_test_pdu = list_remove_head(&test_pdu_tx_list);
@@ -236,7 +246,7 @@ BOOL test_pdcp_data_req()
list_add_tail_eurecom(pdcp_test_pdu, &test_pdu_rx_list);
/*
* Verify that this is a data packet by checking
* Verify that this is a data packet by checking
* if the first bit is 0x00 (PDCP_DATA_PDU)
*/
if (pdcp_test_pdu_buffer[0] & 0x80) {
@@ -281,15 +291,15 @@ BOOL test_pdcp_data_req()
BOOL test_pdcp_data_ind()
{
/*
* This is the list that pdcp_data_ind() takes to put pdcp_data_ind_header_t
* This is the list that pdcp_data_ind() takes to put pdcp_data_ind_header_t
* packets after it receives/validates PDUs and preprends them with pdcp_data_ind_header_t
* structure. Here, after this list is filled by pdcp_data_ind() we parse/validate
* structure. Here, after this list is filled by pdcp_data_ind() we parse/validate
* every single element in the list
*/
list_t test_pdu_indication_list;
mem_block_t* test_sdu = NULL;
/*
* pdcp_data_req() method prepended PDU header in front of DUMMY_BUFFER so
* pdcp_data_req() method prepended PDU header in front of DUMMY_BUFFER so
* the size should be 12 bytes
*/
unsigned char test_sdu_size = PDCP_USER_PLANE_DATA_PDU_LONG_SN_HEADER_SIZE + DUMMY_BUFFER_SIZE;
@@ -342,7 +352,7 @@ BOOL test_pdcp_data_ind()
msg("[TEST] Radio bearer ID is correct\n");
} else {
msg("[TEST] Radio bearer ID is not correct! (expected: 0, parsed: %d)\n", indication_header->rb_id);
return FALSE;
return FALSE;
}
/*
@@ -352,9 +362,9 @@ BOOL test_pdcp_data_ind()
msg("[TEST] SDU size is correct\n");
} else {
msg("[TEST] SDU size is not correct! (expected: %d, parsed: %d)\n", DUMMY_BUFFER_SIZE, indication_header->data_size);
return FALSE;
return FALSE;
}
/*
* XXX Verify `indication_header->inst` when you know what it is
*/
+12 -3
View File
@@ -17,9 +17,18 @@
* /homes/demiray/workspace/openair4G/trunk/openair2/LAYER2/PDCP_v10.1.0/pdcp.c:270: undefined reference to `pdcp_fifo_read_input_sdus'
* /homes/demiray/workspace/openair4G/trunk/openair2/LAYER2/PDCP_v10.1.0/pdcp.c:273: undefined reference to `pdcp_fifo_flush_sdus'
*/
int pdcp_fifo_flush_sdus () { return 0; }
int pdcp_fifo_read_input_sdus_remaining_bytes () { return 0; }
int pdcp_fifo_read_input_sdus () { return 0; }
int pdcp_fifo_flush_sdus ()
{
return 0;
}
int pdcp_fifo_read_input_sdus_remaining_bytes ()
{
return 0;
}
int pdcp_fifo_read_input_sdus ()
{
return 0;
}
BOOL init_pdcp_entity(pdcp_t *pdcp_entity);
BOOL test_tx_window();
+4 -1
View File
@@ -11,7 +11,7 @@
#include "LAYER2/PDCP_v10.1.0/pdcp.h"
/*
* Prints binary representation of given octet prepending
* Prints binary representation of given octet prepending
* passed log message
*
* @param Octet as an unsigned character
@@ -31,6 +31,7 @@ void print_binary_representation(unsigned char* message, unsigned char byte)
mask /= 2;
}
printf("\n");
}
@@ -45,9 +46,11 @@ void print_byte_stream(char* message, unsigned char* buffer, unsigned long size)
unsigned long index = 0lu;
printf("%s", message);
for (index = 0; index < size; ++index) {
msg("%x ", buffer[index]);
}
msg("\n");
}
+113 -106
View File
@@ -43,44 +43,44 @@ static int g_send_id_write_index[2];
static int g_send_id_read_index[2];
static s8_t *g_sdus[] = {"En dépit de son volontarisme affiché, le premier ministre est de plus en plus décrié pour son incompétence. La tension politique et dans l'opinion publique est encore montée d'un cran au Japon, sur fond d'inquiétantes nouvelles, avec du plutonium détecté dans le sol autour de la centrale de Fukushima. Le premier ministre Naoto Kan a solennellement déclaré que son gouvernement était «en état d'alerte maximum». Tout en reconnaissant que la situation restait «imprévisible». Ce volontarisme affiché par le premier ministre - que Nicolas Sarkozy rencontrera demain lors d'une visite au Japon - ne l'a pas empêché d'être la cible de violentes critiques de la part de parlementaires sur sa gestion de la crise. Attaqué sur le manque de transparence, il a assuré qu'il rendait publiques toutes les informations en sa possession. Un député de l'opposition, Yosuke Isozaki, a aussi reproché à Naoto Kan de ne pas avoir ordonné l'évacuation des populations dans la zone comprise entre 20 et 30 km autour de la centrale. «Peut-il y avoir quelque chose de plus irresponsable que cela ?», a-t-il lancé. Pour l'heure, la zone d'évacuation est limitée à un rayon de 20 km, seul le confinement étant recommandé pour les 10 km suivants. Sur ce sujet, les autorités japonaises ont été fragilisées mardi par les déclarations de Greenpeace, affirmant que ses experts avaient détecté une radioactivité dangereuse à 40 km de la centrale. L'organisation écologiste a appelé à une extension de la zone d'évacuation, exhortant Tokyo à «cesser de privilégier la politique aux dépens de la science». L'Agence japonaise de sûreté nucléaire a balayé ces critiques.",
"La pâquerette (Bellis perennis) est une plante vivace des prés, des pelouses, des bords de chemins et des prairies, haute de dix à vingt centimètres, de la famille des Astéracées, dont les fleurs naissent sur des inflorescences appelées capitules : celles du pourtour, que l'on croit à tort être des pétales, appelées fleurs ligulées, parce qu'elles ont la forme d'une languette, ou demi-fleurons, sont des fleurs femelles, dont la couleur varie du blanc au rose plus ou moins prononcé ; celles du centre, jaunes, appelées fleurs tubuleuses, parce que leur corolle forme un tube, ou fleurons, sont hermaphrodites. Ainsi, contrairement à l'opinion populaire, ce qu'on appelle une « fleur » de pâquerette n'est en réalité pas « une » fleur mais un capitule portant des fleurs très nombreuses.Leurs fruits s'envolent grâce au vent et dégagent des odeurs qui attirent les insectes.Une variété muricole peut pousser sur des murs humides verticaux.Les pâquerettes sont des fleurs rustiques et très communes en Europe, sur les gazons, les prairies, les chemins et les zones d'herbe rase.Elles ont la particularité, comme certaines autres fleurs de plantes herbacées, de se fermer la nuit et de s'ouvrir le matin pour s'épanouir au soleil ; elles peuvent aussi se fermer pendant les averses, voire un peu avant, ce qui permet dans les campagnes de prédire la pluie légèrement à l'avance.",
"La pâquerette (Bellis perennis) est une plante vivace des prés, des pelouses, des bords de chemins et des prairies, haute de dix à vingt centimètres, de la famille des Astéracées, dont les fleurs naissent sur des inflorescences appelées capitules : celles du pourtour, que l'on croit à tort être des pétales, appelées fleurs ligulées, parce qu'elles ont la forme d'une languette, ou demi-fleurons, sont des fleurs femelles, dont la couleur varie du blanc au rose plus ou moins prononcé ; celles du centre, jaunes, appelées fleurs tubuleuses, parce que leur corolle forme un tube, ou fleurons, sont hermaphrodites. Ainsi, contrairement à l'opinion populaire, ce qu'on appelle une « fleur » de pâquerette n'est en réalité pas « une » fleur mais un capitule portant des fleurs très nombreuses.Leurs fruits s'envolent grâce au vent et dégagent des odeurs qui attirent les insectes.Une variété muricole peut pousser sur des murs humides verticaux.Les pâquerettes sont des fleurs rustiques et très communes en Europe, sur les gazons, les prairies, les chemins et les zones d'herbe rase.Elles ont la particularité, comme certaines autres fleurs de plantes herbacées, de se fermer la nuit et de s'ouvrir le matin pour s'épanouir au soleil ; elles peuvent aussi se fermer pendant les averses, voire un peu avant, ce qui permet dans les campagnes de prédire la pluie légèrement à l'avance.",
"La pâquerette",
" (Bellis perennis)",
" est une plante vivace des prés,",
" des pelouses,",
" des bords de chemins et des prairies,",
"haute de dix à",
" vingt centimètres",
", de la",
" famille des",
" Astéracées",
", dont",
" les",
" fleurs",
" naissent",
" sur",
" des",
" inflorescences",
" appelées",
" capitules",
" : celles",
" du pourtour",
", que l'on",
" croit à",
" tort",
" être",
" des pétales",
", appelées",
" fleurs ligulées",
", parce qu'elles",
" ont la forme d'une languette, ou demi-fleurons, sont",
" des fleurs femelles,",
" dont la couleur varie du blanc au rose plus ou moins prononcé ; celles du centre, jaunes,",
" appelées ",
"fleurs tubuleuses",
", parce que leur corolle forme un tube, ou fleurons, sont hermaphrodites."
};
"La pâquerette",
" (Bellis perennis)",
" est une plante vivace des prés,",
" des pelouses,",
" des bords de chemins et des prairies,",
"haute de dix à",
" vingt centimètres",
", de la",
" famille des",
" Astéracées",
", dont",
" les",
" fleurs",
" naissent",
" sur",
" des",
" inflorescences",
" appelées",
" capitules",
" : celles",
" du pourtour",
", que l'on",
" croit à",
" tort",
" être",
" des pétales",
", appelées",
" fleurs ligulées",
", parce qu'elles",
" ont la forme d'une languette, ou demi-fleurons, sont",
" des fleurs femelles,",
" dont la couleur varie du blanc au rose plus ou moins prononcé ; celles du centre, jaunes,",
" appelées ",
"fleurs tubuleuses",
", parce que leur corolle forme un tube, ou fleurons, sont hermaphrodites."
};
@@ -91,51 +91,58 @@ int pdcp_fifo_read_input_sdus () {}
BOOL init_pdcp_entity(pdcp_t *pdcp_entity);
//-----------------------------------------------------------------------------
void pdcp_rlc_test_mac_rlc_loop (struct mac_data_ind *data_indP, struct mac_data_req *data_requestP, int* drop_countP, int *tx_packetsP, int* dropped_tx_packetsP) //-----------------------------------------------------------------------------
void pdcp_rlc_test_mac_rlc_loop (struct mac_data_ind *data_indP, struct mac_data_req *data_requestP, int* drop_countP, int *tx_packetsP,
int* dropped_tx_packetsP) //-----------------------------------------------------------------------------
{
mem_block_t* tb_src;
mem_block_t* tb_dst;
unsigned int tb_size;
mem_block_t* tb_src;
mem_block_t* tb_dst;
unsigned int tb_size;
data_indP->no_tb = 0;
while (data_requestP->data.nb_elements > 0) {
tb_src = list_remove_head (&data_requestP->data);
if (tb_src != NULL) {
tb_size = ((struct mac_tb_req *) (tb_src->data))->tb_size_in_bits >> 3;
printf("[RLC-LOOP] FOUND TB SIZE IN BITS %d IN BYTES %d sizeof (mac_rlc_max_rx_header_size_t) %d\n",
((struct mac_tb_req *) (tb_src->data))->tb_size_in_bits,
tb_size, sizeof (mac_rlc_max_rx_header_size_t));
data_indP->no_tb = 0;
*tx_packetsP = *tx_packetsP + 1;
if (*drop_countP == 0) {
tb_dst = get_free_mem_block(sizeof (mac_rlc_max_rx_header_size_t) + tb_size);
if (tb_dst != NULL) {
((struct mac_tb_ind *) (tb_dst->data))->first_bit = 0;
((struct mac_tb_ind *) (tb_dst->data))->data_ptr = &tb_dst->data[sizeof (mac_rlc_max_rx_header_size_t)];
((struct mac_tb_ind *) (tb_dst->data))->size = tb_size;
((struct mac_tb_ind *) (tb_dst->data))->error_indication = 0;
while (data_requestP->data.nb_elements > 0) {
tb_src = list_remove_head (&data_requestP->data);
memcpy(((struct mac_tb_ind *) (tb_dst->data))->data_ptr,
&((struct mac_tb_req *) (tb_src->data))->data_ptr[0],
tb_size);
if (tb_src != NULL) {
tb_size = ((struct mac_tb_req *) (tb_src->data))->tb_size_in_bits >> 3;
printf("[RLC-LOOP] FOUND TB SIZE IN BITS %d IN BYTES %d sizeof (mac_rlc_max_rx_header_size_t) %d\n",
((struct mac_tb_req *) (tb_src->data))->tb_size_in_bits,
tb_size, sizeof (mac_rlc_max_rx_header_size_t));
list_add_tail_eurecom(tb_dst, &data_indP->data);
data_indP->no_tb += 1;
} else {
printf("Out of memory error\n");
exit(-1);
}
} else {
printf("[RLC-LOOP] DROPPING 1 TB\n");
*drop_countP = *drop_countP - 1;
*dropped_tx_packetsP = *dropped_tx_packetsP + 1;
}
free_mem_block(tb_src);
if (data_indP->no_tb > 0) {
printf("[RLC-LOOP] Exchange %d TBs\n",data_indP->no_tb);
}
*tx_packetsP = *tx_packetsP + 1;
if (*drop_countP == 0) {
tb_dst = get_free_mem_block(sizeof (mac_rlc_max_rx_header_size_t) + tb_size);
if (tb_dst != NULL) {
((struct mac_tb_ind *) (tb_dst->data))->first_bit = 0;
((struct mac_tb_ind *) (tb_dst->data))->data_ptr = &tb_dst->data[sizeof (mac_rlc_max_rx_header_size_t)];
((struct mac_tb_ind *) (tb_dst->data))->size = tb_size;
((struct mac_tb_ind *) (tb_dst->data))->error_indication = 0;
memcpy(((struct mac_tb_ind *) (tb_dst->data))->data_ptr,
&((struct mac_tb_req *) (tb_src->data))->data_ptr[0],
tb_size);
list_add_tail_eurecom(tb_dst, &data_indP->data);
data_indP->no_tb += 1;
} else {
printf("Out of memory error\n");
exit(-1);
}
} else {
printf("[RLC-LOOP] DROPPING 1 TB\n");
*drop_countP = *drop_countP - 1;
*dropped_tx_packetsP = *dropped_tx_packetsP + 1;
}
free_mem_block(tb_src);
if (data_indP->no_tb > 0) {
printf("[RLC-LOOP] Exchange %d TBs\n",data_indP->no_tb);
}
}
}
}
//-----------------------------------------------------------------------------
void pdcp_rlc_test_exchange_pdus(rlc_um_entity_t *um_txP,
@@ -144,48 +151,48 @@ void pdcp_rlc_test_exchange_pdus(rlc_um_entity_t *um_txP,
u16_t bytes_rxP)
//-----------------------------------------------------------------------------
{
struct mac_data_req data_request_tx;
struct mac_data_req data_request_rx;
struct mac_data_ind data_ind_tx;
struct mac_data_ind data_ind_rx;
struct mac_status_ind tx_status;
struct mac_status_resp mac_rlc_status_resp_tx;
struct mac_status_resp mac_rlc_status_resp_rx;
struct mac_data_req data_request_tx;
struct mac_data_req data_request_rx;
struct mac_data_ind data_ind_tx;
struct mac_data_ind data_ind_rx;
struct mac_status_ind tx_status;
struct mac_status_resp mac_rlc_status_resp_tx;
struct mac_status_resp mac_rlc_status_resp_rx;
memset(&data_request_tx, 0, sizeof(struct mac_data_req));
memset(&data_request_rx, 0, sizeof(struct mac_data_req));
memset(&data_ind_tx, 0, sizeof(struct mac_data_ind));
memset(&data_ind_rx, 0, sizeof(struct mac_data_ind));
memset(&tx_status, 0, sizeof(struct mac_status_ind));
memset(&mac_rlc_status_resp_tx, 0, sizeof(struct mac_status_resp));
memset(&mac_rlc_status_resp_rx, 0, sizeof(struct mac_status_resp));
memset(&data_request_tx, 0, sizeof(struct mac_data_req));
memset(&data_request_rx, 0, sizeof(struct mac_data_req));
memset(&data_ind_tx, 0, sizeof(struct mac_data_ind));
memset(&data_ind_rx, 0, sizeof(struct mac_data_ind));
memset(&tx_status, 0, sizeof(struct mac_status_ind));
memset(&mac_rlc_status_resp_tx, 0, sizeof(struct mac_status_resp));
memset(&mac_rlc_status_resp_rx, 0, sizeof(struct mac_status_resp));
mac_rlc_status_resp_tx = rlc_um_mac_status_indication(um_txP, bytes_txP, tx_status);
data_request_tx = rlc_um_mac_data_request(um_txP);
mac_rlc_status_resp_rx = rlc_um_mac_status_indication(um_rxP, bytes_rxP, tx_status);
data_request_rx = rlc_um_mac_data_request(um_rxP);
mac_rlc_status_resp_tx = rlc_um_mac_status_indication(um_txP, bytes_txP, tx_status);
data_request_tx = rlc_um_mac_data_request(um_txP);
mac_rlc_status_resp_rx = rlc_um_mac_status_indication(um_rxP, bytes_rxP, tx_status);
data_request_rx = rlc_um_mac_data_request(um_rxP);
pdcp_rlc_test_mac_rlc_loop(&data_ind_rx, &data_request_tx, &g_drop_tx, &g_tx_packets, &g_dropped_tx_packets);
pdcp_rlc_test_mac_rlc_loop(&data_ind_tx, &data_request_rx, &g_drop_rx, &g_rx_packets, &g_dropped_rx_packets);
rlc_um_mac_data_indication(um_rxP, data_ind_rx);
rlc_um_mac_data_indication(um_txP, data_ind_tx);
mac_xface->frame += 1;
pdcp_rlc_test_mac_rlc_loop(&data_ind_rx, &data_request_tx, &g_drop_tx, &g_tx_packets, &g_dropped_tx_packets);
pdcp_rlc_test_mac_rlc_loop(&data_ind_tx, &data_request_rx, &g_drop_rx, &g_rx_packets, &g_dropped_rx_packets);
rlc_um_mac_data_indication(um_rxP, data_ind_rx);
rlc_um_mac_data_indication(um_txP, data_ind_tx);
mac_xface->frame += 1;
//rlc_um_tx_buffer_display(um_txP,NULL);
//assert(um_txP->t_status_prohibit.time_out != 1);
//assert(um_rxP->t_status_prohibit.time_out != 1);
//assert(!((um_txP->vt_a == 954) && (um_txP->vt_us == 53)));
//assert(mac_xface->frame <= 151);
//check_mem_area(NULL);
//display_mem_load();
//rlc_um_tx_buffer_display(um_txP,NULL);
//assert(um_txP->t_status_prohibit.time_out != 1);
//assert(um_rxP->t_status_prohibit.time_out != 1);
//assert(!((um_txP->vt_a == 954) && (um_txP->vt_us == 53)));
//assert(mac_xface->frame <= 151);
//check_mem_area(NULL);
//display_mem_load();
}
//-----------------------------------------------------------------------------
void pdcp_rlc_test_send_sdu(module_id_t module_idP, rb_id_t rab_idP, int sdu_indexP)
//-----------------------------------------------------------------------------
{
pdcp_data_req(module_idP, rab_idP, strlen(g_sdus[sdu_indexP]) + 1, g_sdus[sdu_indexP]);
pdcp_data_req(module_idP, rab_idP, strlen(g_sdus[sdu_indexP]) + 1, g_sdus[sdu_indexP]);
}
//-----------------------------------------------------------------------------
int main(int argc, char **argv)