X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?p=o-du%2Fphy.git;a=blobdiff_plain;f=fhi_lib%2Ftest%2Ftest_xran%2Fu_plane_functional.cc;h=5dba3885ff2fd2679ad98b47e343676dc761f576;hp=e9057f16d0b642172842a1fdc578af22d34d2248;hb=2fbf70096f64af622da983e88c5a64e90ad9bdbd;hpb=9e108bb6d4caf2f6d4e920c640882fa49c15684c diff --git a/fhi_lib/test/test_xran/u_plane_functional.cc b/fhi_lib/test/test_xran/u_plane_functional.cc index e9057f1..5dba388 100644 --- a/fhi_lib/test/test_xran/u_plane_functional.cc +++ b/fhi_lib/test/test_xran/u_plane_functional.cc @@ -1,183 +1,183 @@ -/****************************************************************************** -* -* Copyright (c) 2019 Intel. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -*******************************************************************************/ - - -#include "common.hpp" -#include "xran_common.h" -#include "xran_up_api.h" -#include "xran_fh_o_du.h" -#include "ethernet.h" - -#include - -const std::string module_name = "u-plane"; - -class U_planeCheck : public KernelTests -{ -protected: - struct rte_mbuf *test_buffer; - char * iq_offset; - struct rte_mempool *test_eth_mbuf_pool; - - void SetUp() override - { - init_test("u_plane_functional"); - test_buffer = (struct rte_mbuf*)rte_pktmbuf_alloc(_eth_mbuf_pool); - - if(test_buffer == NULL) { - std::cout << __func__ << ":" << __LINE__ << " Failed to allocatte a packet buffer!" << std::endl; - return; - } - iq_offset = rte_pktmbuf_mtod(test_buffer, char * ); - iq_offset = iq_offset + sizeof(struct ether_hdr) + - sizeof (struct xran_ecpri_hdr) + - sizeof (struct radio_app_common_hdr) + - sizeof(struct data_section_hdr); - } - - /* It's called after an execution of the each test case.*/ - void TearDown() override - { - rte_pktmbuf_free(test_buffer); - } -}; - -/* simple test of DL and UL functionality */ -TEST_P(U_planeCheck, Test_DLUL) -{ - enum xran_pkt_dir direction = XRAN_DIR_DL; - uint16_t section_id = 7; - enum xran_input_byte_order iq_buf_byte_order = XRAN_CPU_LE_BYTE_ORDER; - uint8_t frame_id = 99; - uint8_t subframe_id = 9; - uint8_t slot_id = 10; - uint8_t symbol_no = 7; - int prb_start = 0; - int prb_num = 66; - uint8_t CC_ID = 0; - uint8_t RU_Port_ID = 0; - uint8_t seq_id =0; - uint32_t do_copy = 0; - uint8_t compMeth = 0; - uint8_t iqWidth = 16; - - int32_t prep_bytes; - struct xran_ecpri_hdr *ecpri_hdr = NULL; - struct radio_app_common_hdr *app_hdr = NULL; - struct data_section_hdr *section_hdr = NULL; - - char *pChar = NULL; - uint16_t payl_size = 0; - struct data_section_hdr res_sect; - - prep_bytes = prepare_symbol_ex(direction, - section_id, - test_buffer, - (struct rb_map *)iq_offset, - compMeth, - iqWidth, - iq_buf_byte_order, - frame_id, - subframe_id, - slot_id, - symbol_no, - prb_start, - prb_num, - CC_ID, - RU_Port_ID, - seq_id, - do_copy); - - ASSERT_EQ(prep_bytes, 3168); - - pChar = rte_pktmbuf_mtod(test_buffer, char*); - - ecpri_hdr = (struct xran_ecpri_hdr *)(pChar + sizeof(struct ether_hdr)); - app_hdr = (struct radio_app_common_hdr *)(pChar + sizeof(struct ether_hdr) - + sizeof (struct xran_ecpri_hdr)); - section_hdr = (struct data_section_hdr *)(pChar + sizeof(struct ether_hdr) + - sizeof (struct xran_ecpri_hdr) + - sizeof(struct radio_app_common_hdr)); - - ASSERT_EQ (ecpri_hdr->cmnhdr.ecpri_mesg_type, ECPRI_IQ_DATA); - payl_size = rte_be_to_cpu_16(ecpri_hdr->cmnhdr.ecpri_payl_size); - ASSERT_EQ (payl_size, 3180); - - ASSERT_EQ(app_hdr->data_direction, direction); - ASSERT_EQ(app_hdr->frame_id, frame_id); - - res_sect.fields.all_bits = rte_be_to_cpu_32(section_hdr->fields.all_bits); - ASSERT_EQ(res_sect.fields.num_prbu, prb_num); - ASSERT_EQ(res_sect.fields.sect_id, section_id); - - { - /* UL direction */ - void *iq_samp_buf; - struct ecpri_seq_id seq; - int num_bytes = 0; - - uint8_t CC_ID = 0; - uint8_t Ant_ID = 0; - uint8_t frame_id = 0; - uint8_t subframe_id = 0; - uint8_t slot_id = 0; - uint8_t symb_id = 0; - - uint8_t compMeth = 0; - uint8_t iqWidth = 0; - - - uint16_t num_prbu; - uint16_t start_prbu; - uint16_t sym_inc; - uint16_t rb; - uint16_t sect_id; - - int32_t prep_bytes; - - char *pChar = NULL; - - - num_bytes = xran_extract_iq_samples(test_buffer, - &iq_samp_buf, - &CC_ID, - &Ant_ID, - &frame_id, - &subframe_id, - &slot_id, - &symb_id, - &seq, - &num_prbu, - &start_prbu, - &sym_inc, - &rb, - §_id, - 0, - &compMeth, - &iqWidth); - - ASSERT_EQ(num_bytes, 3182); - ASSERT_EQ(prb_num, 66); - ASSERT_EQ(CC_ID, 0); - } -} - -INSTANTIATE_TEST_CASE_P(UnitTest, U_planeCheck, - testing::ValuesIn(get_sequence(U_planeCheck::get_number_of_cases("u_plane_functional")))); - - +/****************************************************************************** +* +* Copyright (c) 2019 Intel. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + + +#include "common.hpp" +#include "xran_common.h" +#include "xran_up_api.h" +#include "xran_fh_o_du.h" +#include "ethernet.h" + +#include + +const std::string module_name = "u-plane"; + +class U_planeCheck : public KernelTests +{ +protected: + struct rte_mbuf *test_buffer; + char * iq_offset; + struct rte_mempool *test_eth_mbuf_pool; + + void SetUp() override + { + init_test("u_plane_functional"); + test_buffer = (struct rte_mbuf*)rte_pktmbuf_alloc(_eth_mbuf_pool); + + if(test_buffer == NULL) { + std::cout << __func__ << ":" << __LINE__ << " Failed to allocatte a packet buffer!" << std::endl; + return; + } + iq_offset = rte_pktmbuf_mtod(test_buffer, char * ); + iq_offset = iq_offset + sizeof(struct ether_hdr) + + sizeof (struct xran_ecpri_hdr) + + sizeof (struct radio_app_common_hdr) + + sizeof(struct data_section_hdr); + } + + /* It's called after an execution of the each test case.*/ + void TearDown() override + { + rte_pktmbuf_free(test_buffer); + } +}; + +/* simple test of DL and UL functionality */ +TEST_P(U_planeCheck, Test_DLUL) +{ + enum xran_pkt_dir direction = XRAN_DIR_DL; + uint16_t section_id = 7; + enum xran_input_byte_order iq_buf_byte_order = XRAN_CPU_LE_BYTE_ORDER; + uint8_t frame_id = 99; + uint8_t subframe_id = 9; + uint8_t slot_id = 10; + uint8_t symbol_no = 7; + int prb_start = 0; + int prb_num = 66; + uint8_t CC_ID = 0; + uint8_t RU_Port_ID = 0; + uint8_t seq_id =0; + uint32_t do_copy = 0; + uint8_t compMeth = 0; + uint8_t iqWidth = 16; + + int32_t prep_bytes; + struct xran_ecpri_hdr *ecpri_hdr = NULL; + struct radio_app_common_hdr *app_hdr = NULL; + struct data_section_hdr *section_hdr = NULL; + + char *pChar = NULL; + uint16_t payl_size = 0; + struct data_section_hdr res_sect; + + prep_bytes = prepare_symbol_ex(direction, + section_id, + test_buffer, + (struct rb_map *)iq_offset, + compMeth, + iqWidth, + iq_buf_byte_order, + frame_id, + subframe_id, + slot_id, + symbol_no, + prb_start, + prb_num, + CC_ID, + RU_Port_ID, + seq_id, + do_copy); + + ASSERT_EQ(prep_bytes, 3168); + + pChar = rte_pktmbuf_mtod(test_buffer, char*); + + ecpri_hdr = (struct xran_ecpri_hdr *)(pChar + sizeof(struct ether_hdr)); + app_hdr = (struct radio_app_common_hdr *)(pChar + sizeof(struct ether_hdr) + + sizeof (struct xran_ecpri_hdr)); + section_hdr = (struct data_section_hdr *)(pChar + sizeof(struct ether_hdr) + + sizeof (struct xran_ecpri_hdr) + + sizeof(struct radio_app_common_hdr)); + + ASSERT_EQ (ecpri_hdr->cmnhdr.ecpri_mesg_type, ECPRI_IQ_DATA); + payl_size = rte_be_to_cpu_16(ecpri_hdr->cmnhdr.ecpri_payl_size); + ASSERT_EQ (payl_size, 3180); + + ASSERT_EQ(app_hdr->data_direction, direction); + ASSERT_EQ(app_hdr->frame_id, frame_id); + + res_sect.fields.all_bits = rte_be_to_cpu_32(section_hdr->fields.all_bits); + ASSERT_EQ(res_sect.fields.num_prbu, prb_num); + ASSERT_EQ(res_sect.fields.sect_id, section_id); + + { + /* UL direction */ + void *iq_samp_buf; + struct ecpri_seq_id seq; + int num_bytes = 0; + + uint8_t CC_ID = 0; + uint8_t Ant_ID = 0; + uint8_t frame_id = 0; + uint8_t subframe_id = 0; + uint8_t slot_id = 0; + uint8_t symb_id = 0; + + uint8_t compMeth = 0; + uint8_t iqWidth = 0; + + + uint16_t num_prbu; + uint16_t start_prbu; + uint16_t sym_inc; + uint16_t rb; + uint16_t sect_id; + + int32_t prep_bytes; + + char *pChar = NULL; + + + num_bytes = xran_extract_iq_samples(test_buffer, + &iq_samp_buf, + &CC_ID, + &Ant_ID, + &frame_id, + &subframe_id, + &slot_id, + &symb_id, + &seq, + &num_prbu, + &start_prbu, + &sym_inc, + &rb, + §_id, + 0, + &compMeth, + &iqWidth); + + ASSERT_EQ(num_bytes, 3182); + ASSERT_EQ(prb_num, 66); + ASSERT_EQ(CC_ID, 0); + } +} + +INSTANTIATE_TEST_CASE_P(UnitTest, U_planeCheck, + testing::ValuesIn(get_sequence(U_planeCheck::get_number_of_cases("u_plane_functional")))); + +