34 const uint8_t
m_bitmask[] = { 0x00, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff };
41 uint8_t cc_id, uint8_t ant_id, uint8_t seq_id)
43 rte_pktmbuf_reset(mbuf);
118 m_numSections = get_input_parameter<int>(
"num_sections");
119 ASSERT_FALSE(m_numSections == 0);
121 m_dirStr = get_input_parameter<std::string>(
"direction");
124 else if(!m_dirStr.compare(
"UL")) m_dir =
XRAN_DIR_UL;
125 else FAIL() <<
"Invalid direction!";
127 m_sectionType = get_input_parameter<uint8_t>(
"section_type");
128 m_ccId = get_input_parameter<uint8_t>(
"cc_id");
129 m_antId = get_input_parameter<uint8_t>(
"ant_id");
130 m_seqId = get_input_parameter<uint16_t>(
"seq_id");
132 m_frameId = get_input_parameter<uint8_t>(
"frame_id");
133 m_subframeId = get_input_parameter<uint8_t>(
"subframe_id");
134 m_slotId = get_input_parameter<uint8_t>(
"slot_id");
135 m_symStart = get_input_parameter<uint8_t>(
"symbol_start");
136 m_compMethod = get_input_parameter<uint8_t>(
"comp_method");
137 m_iqWidth = get_input_parameter<uint8_t>(
"iq_width");
139 m_sectionId = get_input_parameter<uint8_t>(
"section_id");
140 m_symNum = get_input_parameter<uint8_t>(
"symbol_num");
141 m_beamId = get_input_parameter<uint16_t>(
"beam_id");
144 std::vector<int> prbstart = get_input_parameter<std::vector<int>>(
"prb_start");
145 std::vector<int> prbnum = get_input_parameter<std::vector<int>>(
"prb_num");
147 ASSERT_TRUE((m_numSections == prbstart.size())
148 && (m_numSections == prbnum.size())
149 && (prbstart.size() == prbnum.size()));
154 m_prbStart[i] = prbstart[i];
155 m_prbNum[i] = prbnum[i];
158 switch(m_sectionType) {
164 m_filterIndex = get_input_parameter<uint8_t>(
"filter_index");
165 m_timeOffset = get_input_parameter<uint16_t>(
"time_offset");
166 m_fftSize = get_input_parameter<uint8_t>(
"fft_size");
167 m_scs = get_input_parameter<uint8_t>(
"scs");
168 m_cpLength = get_input_parameter<uint16_t>(
"cp_length");
169 m_freqOffset = get_input_parameter<int>(
"freq_offset");
173 FAIL() <<
"Invalid Section Type - " << m_sectionType <<
"\n";
178 ASSERT_NE(m_pSectGenInfo,
nullptr);
182 ASSERT_NE(m_pSectResult,
nullptr);
185 m_ext1_dst_len = 9600;
187 m_p_bfw_iq_src =
new int16_t [9600/2];
192 ASSERT_FALSE(m_pTestBuffer == NULL);
199 if(m_pTestBuffer != NULL)
200 rte_pktmbuf_free(m_pTestBuffer);
214 delete[] m_pSectGenInfo;
217 delete[] m_pSectResult;
264 for(i=0; i<N*4; i++) {
421 FAIL() <<
"Invalid Section Type - " <<
m_sectionType <<
"\n";
445 FAIL() <<
"Invalid Section Type - " <<
m_sectionType <<
"\n";
459 int iq_size, parm_size, N;
482 parm_size = N>>3;
if(N%8) parm_size++; parm_size *= 8;
489 parm_size = iq_size>>3;
490 if(iq_size%8) parm_size++;
491 EXPECT_TRUE(std::memcmp(ext1_result->
p_bfwIQ, ext1_params->
p_bfwIQ, parm_size));
505 EXPECT_TRUE(ext2_result->
bfAzPt == ext2_params->
bfAzPt);
510 EXPECT_TRUE(ext2_result->
bfZePt == ext2_params->
bfZePt);
521 EXPECT_TRUE(ext2_result->
bfAzSI == ext2_params->
bfAzSI);
522 EXPECT_TRUE(ext2_result->
bfZeSI == ext2_params->
bfZeSI);
533 EXPECT_TRUE(ext4_result->
csf == ext4_params->
csf);
546 for(idx=0; idx < ext5_params->
num_sets; idx++) {
547 EXPECT_TRUE(ext5_result->
mc[idx].
csf == ext5_params->
mc[idx].
csf);
572 int32_t nAntElm = 32;
575 int8_t *p_ext1_dst = NULL;
576 int16_t *bfw_payload = NULL;
577 int32_t expected_len = (3+1)*nRbs + nAntElm*nRbs*4;
585 FAIL() <<
"Invalid Section configuration\n";
589 for (idRb =0; idRb < nRbs*nAntElm*2; idRb++){
602 ASSERT_TRUE(len == expected_len);
608 bfw_payload = (int16_t*)(p_ext1+1);
613 ASSERT_TRUE(idRb == nRbs);
627 loc_pSectGenInfo->
info.
ef = 1;
648 int32_t nAntElm = 32;
651 int8_t *p_ext1_dst = NULL;
652 int16_t *bfw_payload = NULL;
653 int32_t expected_len = ((nAntElm/16*4*iqWidth)+1)*nRbs +
662 FAIL() <<
"Invalid Section configuration\n";
666 for (idRb =0; idRb < nRbs*nAntElm*2; idRb++){
679 ASSERT_TRUE(len == expected_len);
685 bfw_payload = (int16_t*)(p_ext1+1);
690 ASSERT_TRUE(idRb == nRbs);
704 loc_pSectGenInfo->
info.
ef = 1;
728 FAIL() <<
"Invalid Section configuration\n";
749 FAIL() <<
"Invalid Section configuration\n";
770 FAIL() <<
"Invalid Section configuration\n";
782 FAIL() <<
"Invalid Section configuration\n";
struct rte_mbuf * xran_ethdi_mbuf_alloc(void)
struct xran_recv_packet_info m_pktInfo
uint8_t compBitWidthShift
#define XRAN_STATUS_SUCCESS
const uint8_t m_bitmask[]
uint8_t activeBeamspaceCoeffMask[XRAN_MAX_BFW_N]
static unsigned get_number_of_cases(const std::string &type)
void cput_fh_rx_prach_callback(void *pCallbackTag, xran_status_t status)
void performance(const std::string &isa, const std::string &module_name, F function, Args ... args)
Run performance test case for a given function.
struct xran_sectionext5_info::@1 mc[XRAN_MAX_MODCOMP_ADDPARMS]
void cput_fh_rx_callback(void *pCallbackTag, xran_status_t status)
struct xran_section_info info
void verify_sections(void)
int16_t m_bfwIQ[XRAN_MAX_BFW_N *2]
This file has all definitions for the Ethernet Data Interface Layer.
int xran_parse_cp_pkt(struct rte_mbuf *mbuf, struct xran_cp_gen_params *result, struct xran_recv_packet_info *pkt_info)
Parse a C-Plane packet (for RU emulation) Transport layer fragmentation is not supported.
#define XRAN_SECTIONEXT_ALIGN
struct xran_sectionext1_info m_ext1
struct xran_sectionext4_info m_ext4
INSTANTIATE_TEST_CASE_P(UnitTest, C_plane, testing::ValuesIn(get_sequence(C_plane::get_number_of_cases("C_Plane"))))
TEST_P(C_plane, Section_Ext1)
void init_test(const std::string &type)
Defines section in the conf.json that is used to load parameters from.
struct xran_cp_header_params hdr
struct rte_mbuf * m_pTestBuffer
This file has all definitions for the Ethernet Data Interface Layer.
struct xran_cp_gen_params m_params
XRAN layer common functionality for both lls-CU and RU as well as C-plane and U-plane.
int prepare_extensions(int sect_num)
union xran_sectionext1_info::@0 bfwCompParam
const std::string module_name
int32_t xran_cp_populate_section_ext_1(int8_t *p_ext1_dst, uint16_t ext1_dst_len, int16_t *p_bfw_iq_src, uint16_t rbNumber, uint16_t bfwNumber, uint8_t bfwiqWidth, uint8_t bfwCompMeth)
int prepare_sections(bool extflag)
int xran_prepare_ctrl_pkt(struct rte_mbuf *mbuf, struct xran_cp_gen_params *params, uint8_t CC_ID, uint8_t Ant_ID, uint8_t seq_id)
Create a C-Plane packet Transport layer fragmentation is not supported.
#define XRAN_CONVERT_IQWIDTH(x)
This file provides public interface to xRAN Front Haul layer implementation as defined in the ORAN-WG...
struct xran_sectionext5_info m_ext5
struct xran_cp_gen_params m_result
struct xran_section_gen_info * sections
struct xran_section_gen_info::@2 exData[XRAN_MAX_NUM_EXTENSIONS]
int xran_ut_prepare_cp(struct rte_mbuf *mbuf, struct xran_cp_gen_params *params, uint8_t cc_id, uint8_t ant_id, uint8_t seq_id)
std::vector< unsigned > get_sequence(const unsigned number)
For a given number return sequence of number from 0 to number - 1.
This file provides the definitions for Control Plane Messages APIs.
struct xran_sectionext2_info m_ext2
This file provides the definitions for Transport layer (eCPRI) API.