+ if (p_dev_ctx != NULL)
+ {
+ staticEn = p_dev_ctx->fh_cfg.ru_conf.xranCompHdrType;
+
+ hdr_len = sizeof(struct xran_ecpri_hdr)
+ + sizeof(struct radio_app_common_hdr)
+ + sizeof(struct data_section_hdr);
+ if ((compMeth != XRAN_COMPMETHOD_NONE)&&(staticEn == XRAN_COMP_HDR_TYPE_DYNAMIC))
+ hdr_len += sizeof(struct data_section_compression_hdr);
+
+ switch(compMeth) {
+ case XRAN_COMPMETHOD_BLKFLOAT: parm_size = 1; break;
+ case XRAN_COMPMETHOD_MODULATION: parm_size = 0; break;
+ default:
+ parm_size = 0;
+ }
+ int prb_num_pre_sec = (prb_num+2)/3;
+ int prb_offset = 0;
+ int data_offset = 0;
+ int prb_num_sec;
+ rte_iova_t ext_buff_iova = 0;
+
+ struct rte_mbuf *send_mb;
+ char *p_sec_iq = NULL;
+ char *ext_buff = NULL;
+ uint16_t ext_buff_len = 0;
+ struct rte_mbuf_ext_shared_info * p_share_data = NULL;
+ struct rte_mbuf *eth_oran_hdr = NULL;
+ struct rte_mbuf *tmp = NULL;
+ for (loop = 0; loop < 3;loop++)
+ {
+ seq_id = xran_get_upul_seqid(handle, CC_ID, RU_Port_ID);
+
+ prb_num_sec = ((loop+1)*prb_num_pre_sec > prb_num) ? (prb_num - loop*prb_num_pre_sec) : prb_num_pre_sec;
+ n_bytes = (3 * iqWidth + parm_size) * prb_num_sec;
+ char * pChar = NULL;
+
+ send_mb = xran_ethdi_mbuf_alloc(); /* will be freede by ETH */
+ if(send_mb == NULL) {
+ MLogPrint(NULL);
+ errx(1, "out of mbufs after %d packets", 1);
+ }
+
+ pChar = rte_pktmbuf_append(send_mb, hdr_len + n_bytes);
+ if(pChar == NULL) {
+ MLogPrint(NULL);
+ errx(1, "incorrect mbuf size %d packets", 1);
+ }
+ pChar = rte_pktmbuf_prepend(send_mb, sizeof(struct rte_ether_hdr));
+ if(pChar == NULL) {
+ MLogPrint(NULL);
+ errx(1, "incorrect mbuf size %d packets", 1);
+ }
+ do_copy = 1; /* new mbuf hence copy of IQs */
+ pChar = rte_pktmbuf_mtod(send_mb, char*);
+ char *pdata_start = (pChar + sizeof(struct rte_ether_hdr) + hdr_len);
+ memcpy(pdata_start,data + data_offset,n_bytes);
+
+
+ sent = prepare_symbol_ex(direction,
+ section_id,
+ send_mb,
+ data + data_offset,
+ compMeth,
+ iqWidth,
+ iq_buf_byte_order,
+ frame_id,
+ subframe_id,
+ slot_id,
+ symbol_no,
+ prb_start+prb_offset,
+ prb_num_sec,
+ CC_ID,
+ RU_Port_ID,
+ seq_id,
+ do_copy,
+ staticEn,
+ 1,
+ 0); /*Send a single section */
+ prb_offset += prb_num_sec;
+ data_offset += n_bytes;
+ if(sent) {
+ pCnt->tx_counter++;
+ pCnt->tx_bytes_counter += rte_pktmbuf_pkt_len(send_mb);
+ p_dev_ctx->send_upmbuf2ring(send_mb, ETHER_TYPE_ECPRI, xran_map_ecpriPcid_to_vf(p_dev_ctx, direction, CC_ID, RU_Port_ID));
+ }
+
+ }
+
+#ifdef DEBUG
+ printf("Symbol %2d sent (%d packets, %d bytes)\n", symbol_no, i, n_bytes);
+#endif
+ }
+ return sent;
+}