diff options
author | Aravind Sirsikar <Arvind.sirsikar@radisys.com> | 2016-05-19 21:21:02 +0530 |
---|---|---|
committer | Aravind Sirsikar <Arvind.sirsikar@radisys.com> | 2016-05-19 21:21:02 +0530 |
commit | 459e856b70a8e26a90db20953a18410c588a6279 (patch) | |
tree | d1dd4cf0a1a806eef417230bb37cfa0b16f2c2ce | |
parent | ebebf5d175e6e6311229c2d61914c575a6c001fd (diff) |
Add test cases for Header Type 2 in EGPRS UL
Updates the test suite to add test cases for Header type 2 parsing
in EGPRS UL.
-rw-r--r-- | tests/edge/EdgeTest.cpp | 127 | ||||
-rw-r--r-- | tests/edge/EdgeTest.ok | 2 |
2 files changed, 128 insertions, 1 deletions
diff --git a/tests/edge/EdgeTest.cpp b/tests/edge/EdgeTest.cpp index 96ea0c1..a4fd416 100644 --- a/tests/edge/EdgeTest.cpp +++ b/tests/edge/EdgeTest.cpp @@ -26,7 +26,7 @@ #include "encoding.h" #include "rlc.h" #include "llc.h" - +#include "bts.h" extern "C" { #include "pcu_vty.h" @@ -1101,6 +1101,130 @@ const struct log_info debug_log_info = { ARRAY_SIZE(default_categories), }; +static void setup_bts(BTS *the_bts, uint8_t ts_no, uint8_t cs = 1) +{ + gprs_rlcmac_bts *bts; + gprs_rlcmac_trx *trx; + + bts = the_bts->bts_data(); + bts->egprs_enabled = true; + bts->alloc_algorithm = alloc_algorithm_a; + bts->initial_cs_dl = cs; + bts->initial_cs_ul = cs; + trx = &bts->trx[0]; + trx->pdch[ts_no].enable(); +} +static void uplink_header_type_2_parsing_test(BTS *the_bts, + uint8_t ts_no, uint32_t tlli, uint32_t *fn, uint16_t qta, + uint8_t ms_class) +{ + GprsMs *ms; + struct pcu_l1_meas meas; + int tfi = 0; + gprs_rlcmac_bts *bts; + RlcMacUplink_t ulreq = {0}; + uint8_t data[79] = {0}; + struct gprs_rlc_ul_header_egprs_2 *egprs2 = NULL; + + egprs2 = (struct gprs_rlc_ul_header_egprs_2 *) data; + bts = the_bts->bts_data(); + + tfi = 1; + + struct gprs_rlc_data_info rlc; + GprsCodingScheme cs; + int rc, offs; + + /*without padding*/ + cs = GprsCodingScheme::MCS5; + egprs2 = (struct gprs_rlc_ul_header_egprs_2 *) data; + egprs2->r = 1; + egprs2->si = 1; + egprs2->cv = 7; + egprs2->tfi_a = tfi & 0x03; + egprs2->tfi_b = (tfi & 0x1c) >> 2; + egprs2->bsn1_a = 0; + egprs2->bsn1_b = 0; + egprs2->cps_a = 3; + egprs2->cps_b = 0; + egprs2->rsb = 0; + egprs2->pi = 0; + data[4] = 0x20; /* Setting E field */ + rc = Decoding::rlc_parse_ul_data_header(&rlc, data, cs); + offs = rlc.data_offs_bits[0] / 8; + OSMO_ASSERT(offs == 4); + OSMO_ASSERT(rlc.tfi == 1); + OSMO_ASSERT(rlc.num_data_blocks == 1); + OSMO_ASSERT(rlc.block_info[0].e == 1); + OSMO_ASSERT(rlc.block_info[0].ti == 0); + OSMO_ASSERT(rlc.block_info[0].bsn == 0); + + /* with padding case */ + cs = GprsCodingScheme::MCS6; + egprs2 = (struct gprs_rlc_ul_header_egprs_2 *) data; + egprs2->r = 1; + egprs2->si = 1; + egprs2->cv = 7; + egprs2->tfi_a = tfi & 0x03; + egprs2->tfi_b = (tfi & 0x1c) >> 2; + egprs2->bsn1_a = 0; + egprs2->bsn1_b = 0; + egprs2->cps_a = 3; + egprs2->cps_b = 0; + egprs2->rsb = 0; + egprs2->pi = 0; + data[10] = 0x20; /* Setting E field */ + rc = Decoding::rlc_parse_ul_data_header(&rlc, data, cs); + offs = rlc.data_offs_bits[0] / 8; + OSMO_ASSERT(offs == 10); + OSMO_ASSERT(rlc.num_data_blocks == 1); + OSMO_ASSERT(rlc.tfi == 1); + OSMO_ASSERT(rlc.block_info[0].e == 1); + OSMO_ASSERT(rlc.block_info[0].ti == 0); + OSMO_ASSERT(rlc.block_info[0].bsn == 0); + + egprs2->r = 1; + egprs2->si = 1; + egprs2->cv = 7; + egprs2->tfi_a = tfi & 0x03; + egprs2->tfi_b = (tfi & 0x1c) >> 2; + egprs2->bsn1_a = 1; + egprs2->bsn1_b = 0; + egprs2->cps_a = 2; + egprs2->cps_b = 0; + egprs2->rsb = 0; + egprs2->pi = 0; + data[10] = 0x20; /* Setting E field */ + rc = Decoding::rlc_parse_ul_data_header(&rlc, data, cs); + offs = rlc.data_offs_bits[0] / 8; + OSMO_ASSERT(offs == 10); + OSMO_ASSERT(rlc.tfi == 1); + OSMO_ASSERT(rlc.num_data_blocks == 1); + OSMO_ASSERT(rlc.block_info[0].e == 1); + OSMO_ASSERT(rlc.block_info[0].ti == 0); + OSMO_ASSERT(rlc.block_info[0].bsn == 1); +} + +static void uplink_header_type2_test(void) +{ + BTS the_bts; + int ts_no = 7; + uint32_t fn = 2654218; + uint16_t qta = 31; + uint32_t tlli = 0xf1223344; + const char *imsi = "0011223344"; + uint8_t ms_class = 1; + gprs_rlcmac_ul_tbf *ul_tbf; + GprsMs *ms; + + printf("=== start %s ===\n", __func__); + setup_bts(&the_bts, ts_no, 10); + + uplink_header_type_2_parsing_test(&the_bts, ts_no, + tlli, &fn, qta, ms_class); + printf("=== end %s ===\n", __func__); +} + int main(int argc, char **argv) { struct vty_app_info pcu_vty_info = {0}; @@ -1123,6 +1247,7 @@ int main(int argc, char **argv) test_rlc_unaligned_copy(); test_rlc_unit_encoder(); + uplink_header_type2_test(); if (getenv("TALLOC_REPORT_FULL")) talloc_report_full(tall_pcu_ctx, stderr); return EXIT_SUCCESS; diff --git a/tests/edge/EdgeTest.ok b/tests/edge/EdgeTest.ok index 9554df3..95ca60b 100644 --- a/tests/edge/EdgeTest.ok +++ b/tests/edge/EdgeTest.ok @@ -6,3 +6,5 @@ === end test_rlc_unit_decoder === === start test_rlc_unit_encoder === === end test_rlc_unit_encoder === +=== start uplink_header_type2_test === +=== end uplink_header_type2_test === |