* @param CC_ID Component Carrier ID for ecpriRtcid/ecpriPcid
* @param Ant_ID Antenna ID for ecpriRtcid/ecpriPcid
* @param seq_id Message identifier for eCPRI message
+ * @param comp_meth Compression method
* @return int int 0 on success, non zero on failure
*/
static int xran_build_ecpri_hdr_ex(struct rte_mbuf *mbuf,
int payl_size,
uint8_t CC_ID,
uint8_t Ant_ID,
- uint8_t seq_id)
+ uint8_t seq_id,
+ uint8_t comp_meth)
{
char *pChar = rte_pktmbuf_mtod(mbuf, char*);
struct xran_ecpri_hdr *ecpri_hdr = (struct xran_ecpri_hdr *)(pChar + sizeof(struct ether_hdr));
+ uint16_t ecpri_payl_size = payl_size
+ + sizeof(struct data_section_hdr)
+ + sizeof(struct radio_app_common_hdr)
+ + xran_get_ecpri_hdr_size();
+
+ if (comp_meth != XRAN_COMPMETHOD_NONE)
+ ecpri_payl_size += sizeof(struct data_section_compression_hdr);
if (NULL == ecpri_hdr)
return 1;
ecpri_hdr->cmnhdr.ecpri_resv = 0; // should be zero
ecpri_hdr->cmnhdr.ecpri_concat = 0;
ecpri_hdr->cmnhdr.ecpri_mesg_type = ecpri_mesg_type;
- ecpri_hdr->cmnhdr.ecpri_payl_size = rte_cpu_to_be_16(payl_size
- + sizeof(struct data_section_hdr)
- + sizeof(struct radio_app_common_hdr)
- + xran_get_ecpri_hdr_size());
+ ecpri_hdr->cmnhdr.ecpri_payl_size = rte_cpu_to_be_16(ecpri_payl_size);
/* one to one lls-CU to RU only and band sector is the same */
ecpri_hdr->ecpri_xtc_id = xran_compose_cid(0, 0, CC_ID, Ant_ID);
for (idx = 0; idx < iq_data_num_bytes/sizeof(int16_t); idx++){
pdst[idx] = (psrc[idx]>>8) | (psrc[idx]<<8); //rte_cpu_to_be_16(psrc[idx]);
}
- }else if(iq_buf_byte_order == XRAN_NE_BE_BYTE_ORDER){
- if(do_copy)
+ }
+
+#if 0
+ /* do not expect to do copy anymore */
+ else if(iq_buf_byte_order == XRAN_NE_BE_BYTE_ORDER){
+ if(do_copy) {
rte_memcpy(iq_sam_buf, (uint8_t *)iq_data_start, iq_data_num_bytes);
+ }
}
+#endif
return iq_data_num_bytes;
}
struct rte_mbuf *mbuf,
const struct data_section_compression_hdr *compr_hdr)
{
- struct data_section_compression_hdr *compression_hdr =
- (struct data_section_compression_hdr *)
- rte_pktmbuf_append(mbuf, sizeof(*compression_hdr));
+ char *pChar = rte_pktmbuf_mtod(mbuf, char*);
+ struct data_section_compression_hdr *compression_hdr = (struct data_section_compression_hdr *)
+ (pChar + sizeof(struct ether_hdr) + sizeof (struct xran_ecpri_hdr) + sizeof(struct radio_app_common_hdr)
+ + sizeof(struct data_section_hdr));
if (NULL == compression_hdr)
return 1;
return 0;
}
-/**
- * @brief Function for starting preparion of IQ samples portions
- * to be sent in xRAN packet
- *
- * @param mbuf Initialized rte_mbuf packet.
- * @param iq_data_start Address of the first element in IQ data array.
- * @param iq_data_num_bytes Size of the IQ data array.
- * @param iq_data_offset IQ data bytes already sent.
- * @param alignment Size of IQ data alignment.
- * @param pkt_gen_params Struct with parameters used for building packet
- * @return int Number of bytes that have been appended
- to the packet within a single data section appended.
- */
-int xran_prepare_iq_symbol_portion(
- struct rte_mbuf *mbuf,
- const void *iq_data_start,
- const uint32_t iq_data_num_bytes,
- uint32_t *iq_data_offset,
- uint8_t alignment,
- struct xran_up_pkt_gen_params *params,
- int sub_seq_id)
-{
- uint8_t i = 0;
- uint16_t iq_sam_bytes_sent = 0;
-
- if (build_ecpri_hdr(mbuf, iq_data_num_bytes, *iq_data_offset, alignment))
- return 0;
-
- if (build_application_layer(mbuf, &(params->app_params)) != 0)
- return 0;
-
- if (build_section_hdr(mbuf, &(params->sec_hdr)) != 0)
- return 0;
-
- if(params->compr_hdr_param.ud_comp_hdr.ud_comp_meth != XRAN_COMPMETHOD_NONE) {
- if (build_compression_hdr(mbuf, &(params->compr_hdr_param)) !=0)
- return 0;
-
- if(append_comp_param(mbuf, &(params->compr_param)) !=0)
- return 0;
- }
-
- return append_iq_samples(mbuf, iq_data_start, iq_data_num_bytes,
- (*iq_data_offset), alignment);
-}
-
/**
* @brief Function for extracting all IQ samples from xRAN packet
* holding a single data section
* @return int Size of remaining mbuf filled with IQ samples
zero on failure
*/
-int xran_extract_iq_samples(struct rte_mbuf *mbuf,
+int32_t xran_extract_iq_samples(struct rte_mbuf *mbuf,
void **iq_data_start,
uint8_t *CC_ID,
uint8_t *Ant_ID,
uint16_t *start_prbu,
uint16_t *sym_inc,
uint16_t *rb,
- uint16_t *sect_id)
+ uint16_t *sect_id,
+ int8_t expect_comp,
+ uint8_t *compMeth,
+ uint8_t *iqWidth)
{
#if XRAN_MLOG_VAR
uint32_t mlogVar[10];
*rb = data_hdr->fields.rb;
*sect_id = data_hdr->fields.sect_id;
-#ifdef COMPRESSION
- const struct data_section_compression_hdr *data_compr_hdr =
- (void *) rte_pktmbuf_adj(mbuf, sizeof(*data_hdr));
+ if(expect_comp) {
+ const struct data_section_compression_hdr *data_compr_hdr =
+ (void *) rte_pktmbuf_adj(mbuf, sizeof(*data_hdr));
- const uint8_t *compr_param =
- (void *)rte_pktmbuf_adj(mbuf, sizeof(*data_compr_hdr));
+ if (data_compr_hdr == NULL)
+ return 0;
- *iq_data_start = rte_pktmbuf_adj(mbuf, sizeof(*compr_param));
+ *compMeth = data_compr_hdr->ud_comp_hdr.ud_comp_meth;
+ *iqWidth = data_compr_hdr->ud_comp_hdr.ud_iq_width;
+
+ const uint8_t *compr_param =
+ (void *)rte_pktmbuf_adj(mbuf, sizeof(*data_compr_hdr));
+
+ *iq_data_start = (void *)compr_param; /*rte_pktmbuf_adj(mbuf, sizeof(*compr_param))*/;
+ } else {
+ *iq_data_start = rte_pktmbuf_adj(mbuf, sizeof(*data_hdr));
+ }
-#else
- *iq_data_start = rte_pktmbuf_adj(mbuf, sizeof(*data_hdr));
-#endif
if (*iq_data_start == NULL)
return 0;
* @return int Number of bytes that have been appended
to the packet within all appended sections.
*/
-int xran_prepare_iq_symbol_portion_no_comp(
+int32_t xran_prepare_iq_symbol_portion(
struct rte_mbuf *mbuf,
const void *iq_data_start,
const enum xran_input_byte_order iq_buf_byte_order,
const uint32_t iq_data_num_bytes,
- struct xran_up_pkt_gen_no_compression_params *params,
+ struct xran_up_pkt_gen_params *params,
uint8_t CC_ID,
uint8_t Ant_ID,
uint8_t seq_id,
iq_data_num_bytes,
CC_ID,
Ant_ID,
- seq_id)){
+ seq_id,
+ params->compr_hdr_param.ud_comp_hdr.ud_comp_meth)){
print_err("xran_build_ecpri_hdr_ex return 0\n");
return 0;
}
return 0;
}
+
+ if(params->compr_hdr_param.ud_comp_hdr.ud_comp_meth != XRAN_COMPMETHOD_NONE) {
+ if (build_compression_hdr(mbuf, &(params->compr_hdr_param)) !=0)
+ return 0;
+
+ /* payload expected to start with udCompParam */
+
+ /*if(append_comp_param(mbuf, &(params->compr_param)) !=0)
+ return 0;*/
+ }
+
+
return append_iq_samples_ex(mbuf, iq_data_start, iq_data_num_bytes, iq_buf_byte_order, do_copy);
}