From 0e7e66ecd8d1a353edcac76a574ba89dac841319 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Thu, 20 Jun 2024 19:05:30 +0200 Subject: [PATCH] add harqid in wireshark traces, refactir the trace_pdu parameters --- openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c | 17 +- openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c | 15 +- openair1/SCHED_NR_UE/phy_procedures_nr_ue.c | 12 +- openair1/SCHED_UE/phy_procedures_lte_ue.c | 11 +- openair2/LAYER2/MAC/eNB_scheduler_RA.c | 28 ++-- openair2/LAYER2/MAC/eNB_scheduler_bch.c | 70 +++++--- openair2/LAYER2/MAC/eNB_scheduler_dlsch.c | 81 +++++----- openair2/LAYER2/MAC/eNB_scheduler_fairRR.c | 14 +- openair2/LAYER2/MAC/eNB_scheduler_mch.c | 52 +++--- openair2/LAYER2/MAC/eNB_scheduler_ulsch.c | 10 +- openair2/LAYER2/MAC/ra_procedures.c | 30 ++-- openair2/LAYER2/MAC/rar_tools.c | 32 ++-- openair2/LAYER2/MAC/rar_tools_ue.c | 12 +- openair2/LAYER2/MAC/ue_procedures.c | 77 +++++---- .../LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c | 15 +- openair2/UTIL/OPT/opt.h | 32 ++-- openair2/UTIL/OPT/probe.c | 151 ++++++++---------- 17 files changed, 396 insertions(+), 263 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c index 55098f33fa..6915701385 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c @@ -276,8 +276,21 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_DLSCH_ENCODING, VCD_FUNCTION_IN); uint32_t A = rel15->TBSize[0]<<3; unsigned char *a=harq->pdu; - if (rel15->rnti != SI_RNTI) - trace_NRpdu(DIRECTION_DOWNLINK, a, rel15->TBSize[0], WS_C_RNTI, rel15->rnti, frame, slot,0, 0); + if (rel15->rnti != SI_RNTI) { + ws_trace_t tmp = {.nr = true, + .direction = DIRECTION_DOWNLINK, + .pdu_buffer = a, + .pdu_buffer_size = rel15->TBSize[0], + .ueid = 0, + .rntiType = WS_C_RNTI, + .rnti = rel15->rnti, + .sysFrame = frame, + .subframe = slot, + .harq_pid = 0, // difficult to find the harq pid here + .oob_event = 0, + .oob_event_value = 0}; + trace_pdu(&tmp); + } NR_gNB_PHY_STATS_t *phy_stats = NULL; if (rel15->rnti != 0xFFFF) diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c index 3425c23289..efd77d8cbe 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c @@ -183,8 +183,19 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, unav_res, mod_order, Nl); - - trace_NRpdu(DIRECTION_UPLINK, harq_process_ul_ue->payload_AB, tb_size, WS_C_RNTI, rnti, frame, slot, 0, 0); + ws_trace_t tmp = {.nr = true, + .direction = DIRECTION_UPLINK, + .pdu_buffer = harq_process_ul_ue->payload_AB, + .pdu_buffer_size = tb_size, + .ueid = 0, + .rntiType = WS_C_RNTI, + .rnti = rnti, + .sysFrame = frame, + .subframe = slot, + .harq_pid = harq_pid, + .oob_event = 0, + .oob_event_value = 0}; + trace_pdu(&tmp); if (nr_ulsch_encoding(UE, ulsch_ue, frame_parms, harq_pid, tb_size, G) == -1) return; diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index 725dc1fe45..a5366f7a33 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -146,7 +146,17 @@ void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind, t = WS_RA_RNTI; if (pdu_type == FAPI_NR_RX_PDU_TYPE_SIB) t = WS_SI_RNTI; - trace_NRpdu(DIRECTION_DOWNLINK, b, rx->pdsch_pdu.pdu_length, t, dlsch0->rnti, proc->frame_rx, proc->nr_slot_rx, 0, 0); + ws_trace_t tmp = {.nr = true, + .direction = DIRECTION_DOWNLINK, + .pdu_buffer = b, + .pdu_buffer_size = rx->pdsch_pdu.pdu_length, + .ueid = 0, + .rntiType = t, + .rnti = dlsch0->rnti, + .sysFrame = proc->frame_rx, + .subframe = proc->nr_slot_rx, + .harq_pid = dlsch0->dlsch_config.harq_process_nbr}; + trace_pdu(&tmp); } } if(dlsch1) { diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c index 7892857051..1b9bdefed6 100644 --- a/openair1/SCHED_UE/phy_procedures_lte_ue.c +++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c @@ -2336,8 +2336,15 @@ if((ue->frame_parms.FeMBMS_active == 0)|| is_fembms_cas_subframe(frame_rx,subfra dummy[0] = ue->pbch_vars[eNB_id]->decoded_output[2]; dummy[1] = ue->pbch_vars[eNB_id]->decoded_output[1]; dummy[2] = ue->pbch_vars[eNB_id]->decoded_output[0]; - trace_pdu( DIRECTION_DOWNLINK, dummy, WS_C_RNTI, ue->Mod_id, 0, 0, - frame_rx, subframe_rx, 0, 0); + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = dummy, + .pdu_buffer_size = sizeof(dummy), + .ueid = ue->Mod_id, + .rntiType = WS_C_RNTI, + .rnti = ue->Mod_id, + .sysFrame = frame_rx, + .subframe = subframe_rx}; + trace_pdu(&tmp); } if (pbch_tx_ant>2) { diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c index 6c04abd104..5ac5a23c4d 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c @@ -893,10 +893,15 @@ generate_Msg4(module_id_t module_idP, ul_req_body->number_of_pdus++; T (T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT (module_idP), T_INT (CC_idP), T_INT (ra->rnti), T_INT (frameP), T_INT (subframeP), T_INT (0 /*harq_pid always 0? */ ), T_BUFFER (&mac->UE_info.DLSCH_pdu[CC_idP][0][UE_id].payload[0], ra->msg4_TBsize)); - trace_pdu (DIRECTION_DOWNLINK, (uint8_t *) mac->UE_info.DLSCH_pdu[CC_idP][0][(unsigned char) UE_id].payload[0], - ra->msg4_rrc_sdu_length, - UE_id, 3, UE_RNTI (module_idP, UE_id), - mac->frame, mac->subframe, 0, 0); + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = mac->UE_info.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0], + .pdu_buffer_size = ra->msg4_rrc_sdu_length, + .ueid = UE_id, + .rntiType = 3, + .rnti = UE_RNTI(module_idP, UE_id), + .sysFrame = mac->frame, + .subframe = mac->subframe}; + trace_pdu(&tmp); } // Msg4 frame/subframe } // rach_resource_type > 0 else { @@ -1074,12 +1079,15 @@ generate_Msg4(module_id_t module_idP, T_INT(subframeP), T_INT(0 /*harq_pid always 0? */ ), T_BUFFER(&mac->UE_info.DLSCH_pdu[CC_idP][0][UE_id]. payload[0], ra->msg4_TBsize)); - trace_pdu(DIRECTION_DOWNLINK, - (uint8_t *) mac-> - UE_info.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0], - rrc_sdu_length, UE_id, WS_C_RNTI, - UE_RNTI(module_idP, UE_id), mac->frame, - mac->subframe, 0, 0); + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = mac->UE_info.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0], + .pdu_buffer_size = rrc_sdu_length, + .ueid = UE_id, + .rntiType = WS_C_RNTI, + .rnti = UE_RNTI(module_idP, UE_id), + .sysFrame = mac->frame, + .subframe = mac->subframe}; + trace_pdu(&tmp); if(RC.mac[module_idP]->scheduler_mode == SCHED_MODE_FAIR_RR) { set_dl_ue_select_msg4(CC_idP, 4, UE_id, ra->rnti); diff --git a/openair2/LAYER2/MAC/eNB_scheduler_bch.c b/openair2/LAYER2/MAC/eNB_scheduler_bch.c index 6aefecbcbc..fac997a663 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_bch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_bch.c @@ -274,10 +274,15 @@ schedule_SIB1_MBMS(module_id_t module_idP, eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG; eNB->TX_req[CC_id].tx_request_body.number_of_pdus++; eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST; - trace_pdu(DIRECTION_DOWNLINK, - &cc->BCCH_BR_pdu[0].payload[0], - bcch_sdu_length, - 0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0); + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = cc->BCCH_BR_pdu[0].payload, + .pdu_buffer_size = bcch_sdu_length, + .ueid = 0xffff, + .rntiType = WS_SI_RNTI, + .rnti = 0xffff, + .sysFrame = eNB->frame, + .subframe = eNB->subframe}; + trace_pdu(&tmp); if (cc->tdd_Config != NULL) { //TDD LOG_D(MAC, @@ -498,10 +503,15 @@ schedule_SIB1_BR(module_id_t module_idP, eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG; eNB->TX_req[CC_id].tx_request_body.number_of_pdus++; eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST; - trace_pdu(DIRECTION_DOWNLINK, - &cc->BCCH_BR_pdu[0].payload[0], - bcch_sdu_length, - 0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0); + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = cc->BCCH_BR_pdu[0].payload, + .pdu_buffer_size = bcch_sdu_length, + .ueid = 0xffff, + .rntiType = WS_SI_RNTI, + .rnti = 0xffff, + .sysFrame = eNB->frame, + .subframe = eNB->subframe}; + trace_pdu(&tmp); if (cc->tdd_Config != NULL) { //TDD LOG_D(MAC, @@ -679,13 +689,15 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP, TX_req->segments[0].segment_length = bcch_sdu_length; TX_req->segments[0].segment_data = cc->BCCH_BR_pdu[i+1].payload; eNB->TX_req[CC_id].tx_request_body.number_of_pdus++; - trace_pdu(DIRECTION_DOWNLINK, - &cc->BCCH_BR_pdu[i + 1].payload[0], - bcch_sdu_length, - 0xffff, - WS_SI_RNTI, - 0xffff, eNB->frame, eNB->subframe, 0, - 0); + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = cc->BCCH_BR_pdu[i + 1].payload, + .pdu_buffer_size = bcch_sdu_length, + .ueid = 0xffff, + .rntiType = WS_SI_RNTI, + .rnti = 0xffff, + .sysFrame = eNB->frame, + .subframe = eNB->subframe}; + trace_pdu(&tmp); if (cc->tdd_Config != NULL) { //TDD LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH-BR %d->DLSCH (TDD) for CC_id %d SI-BR %d bytes\n", @@ -880,11 +892,15 @@ schedule_SI_MBMS(module_id_t module_idP, frame_t frameP, T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(0xffff), T_INT(frameP), T_INT(subframeP), T_INT(0), T_BUFFER(cc->BCCH_MBMS_pdu.payload, bcch_sdu_length)); - trace_pdu(DIRECTION_DOWNLINK, - &cc->BCCH_MBMS_pdu.payload[0], - bcch_sdu_length, - 0xffff, - WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0); + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = cc->BCCH_MBMS_pdu.payload, + .pdu_buffer_size = bcch_sdu_length, + .ueid = 0xffff, + .rntiType = WS_SI_RNTI, + .rnti = 0xffff, + .sysFrame = eNB->frame, + .subframe = eNB->subframe}; + trace_pdu(&tmp); if (0/*cc->tdd_Config != NULL*/) { //TDD not for FeMBMS LOG_D(MAC, @@ -1207,11 +1223,15 @@ schedule_SI(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP) T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(0xffff), T_INT(frameP), T_INT(subframeP), T_INT(0), T_BUFFER(cc->BCCH_pdu.payload, bcch_sdu_length)); - trace_pdu(DIRECTION_DOWNLINK, - &cc->BCCH_pdu.payload[0], - bcch_sdu_length, - 0xffff, - WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0); + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = cc->BCCH_pdu.payload, + .pdu_buffer_size = bcch_sdu_length, + .ueid = 0xffff, + .rntiType = WS_SI_RNTI, + .rnti = 0xffff, + .sysFrame = eNB->frame, + .subframe = eNB->subframe}; + trace_pdu(&tmp); if (cc->tdd_Config != NULL) { //TDD LOG_D(MAC, diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c index 94eaeccaf6..5930c57898 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c @@ -983,18 +983,16 @@ schedule_ue_spec(module_id_t module_idP, for (int j = 0; j < TBS - sdu_length_total - offset; j++) { dlsch_pdu->payload[0][offset + sdu_length_total + j] = 0; } - - trace_pdu(DIRECTION_DOWNLINK, - (uint8_t *) dlsch_pdu->payload[0], - TBS, - module_idP, - WS_C_RNTI, - UE_RNTI(module_idP, - UE_id), - eNB->frame, - eNB->subframe, - 0, - 0); + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = (uint8_t *)dlsch_pdu->payload, + .pdu_buffer_size = TBS, + .ueid = module_idP, + .rntiType = WS_C_RNTI, + .rnti = UE_RNTI(module_idP, UE_id), + .sysFrame = eNB->frame, + .subframe = eNB->subframe, + .harq_pid = harq_pid}; + trace_pdu(&tmp); T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), @@ -1648,16 +1646,16 @@ schedule_ue_spec_br(module_id_t module_idP, UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset + sdu_length_total + j] = (char)(taus()&0xff); } - trace_pdu(DIRECTION_DOWNLINK, - (uint8_t *)UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0], - TBS, - module_idP, - 3, - UE_RNTI(module_idP,UE_id), - mac->frame, - mac->subframe, - 0, - 0); + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0], + .pdu_buffer_size = TBS, + .ueid = module_idP, + .rntiType = 3, + .rnti = UE_RNTI(module_idP, UE_id), + .sysFrame = mac->frame, + .subframe = mac->subframe, + .harq_pid = harq_pid}; + trace_pdu(&tmp); T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), @@ -1850,16 +1848,15 @@ schedule_ue_spec_br(module_id_t module_idP, T_INT (subframeP), T_INT (0 /* harq_pid always 0? */ ), T_BUFFER (&mac->UE_info.DLSCH_pdu[CC_id][0][UE_id].payload[0], TX_req->pdu_length)); - trace_pdu(1, - (uint8_t *) mac->UE_info.DLSCH_pdu[CC_id][0][(unsigned char) UE_id].payload[0], - TX_req->pdu_length, - UE_id, - 3, - rnti, - frameP, - subframeP, - 0, - 0); + ws_trace_t tmp = {.direction = 1, + .pdu_buffer = mac->UE_info.DLSCH_pdu[CC_id][0][UE_id].payload[0], + .pdu_buffer_size = TX_req->pdu_length, + .ueid = UE_id, + .rntiType = 3, + .rnti = rnti, + .sysFrame = frameP, + .subframe = subframeP}; + trace_pdu(&tmp); } // end else if ((subframeP == 7) && (round_DL < 8)) } // end loop on UE_id } @@ -2360,17 +2357,15 @@ schedule_PCH(module_id_t module_idP, subframeP); continue; } - - trace_pdu(DIRECTION_DOWNLINK, - &eNB->common_channels[CC_id].PCCH_pdu.payload[0], - pcch_sdu_length, - 0xffff, - PCCH, - P_RNTI, - eNB->frame, - eNB->subframe, - 0, - 0); + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = eNB->common_channels[CC_id].PCCH_pdu.payload, + .pdu_buffer_size = pcch_sdu_length, + .ueid = 0xffff, + .rntiType = PCCH, + .rnti = P_RNTI, + .sysFrame = eNB->frame, + .subframe = eNB->subframe}; + trace_pdu(&tmp); eNB->eNB_stats[CC_id].total_num_pcch_pdu++; eNB->eNB_stats[CC_id].pcch_buffer = pcch_sdu_length; eNB->eNB_stats[CC_id].total_pcch_buffer += pcch_sdu_length; diff --git a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c index 3d38a55421..7b1e7ec4f9 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c @@ -1910,10 +1910,16 @@ schedule_ue_spec_fairRR(module_id_t module_idP, for (j=0; j<(TBS-sdu_length_total-offset); j++) { UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset+sdu_length_total+j] = (char)(taus()&0xff); } - - trace_pdu(DIRECTION_DOWNLINK, (uint8_t *)UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0], - TBS, module_idP, WS_C_RNTI, UE_RNTI(module_idP, UE_id), - eNB->frame, eNB->subframe,0,0); + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0], + .pdu_buffer_size = TBS, + .ueid = module_idP, + .rntiType = WS_C_RNTI, + .rnti = UE_RNTI(module_idP, UE_id), + .sysFrame = eNB->frame, + .subframe = eNB->subframe, + .harq_pid = harq_pid}; + trace_pdu(&tmp); T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(rnti), T_INT(frameP), T_INT(subframeP), T_INT(harq_pid), T_BUFFER(UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0], TBS)); UE_info->UE_template[CC_id][UE_id].nb_rb[harq_pid] = nb_rb; diff --git a/openair2/LAYER2/MAC/eNB_scheduler_mch.c b/openair2/LAYER2/MAC/eNB_scheduler_mch.c index 1478a98ac6..8147d6bb20 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_mch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_mch.c @@ -1055,16 +1055,22 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP, /* Tracing of PDU is done on UE side */ //if (opt_enabled == 1) { - trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, WS_M_RNTI , 0xfffd, // M_RNTI = 6 in wirehsark - RC.mac[module_idP]->frame, - RC.mac[module_idP]->subframe, 0, 0); - LOG_D(OPT, "[eNB %d][MCH] CC_id %d Frame %d : MAC PDU with size %d\n", - module_idP, CC_id, frameP, TBS); - //} + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = (uint8_t *)cc->MCH_pdu.payload, + .pdu_buffer_size = TBS, + .ueid = module_idP, + .rntiType = WS_M_RNTI, + .rnti = 0xfffd, // M_RNTI = 6 in wireshark + .sysFrame = RC.mac[module_idP]->frame, + .subframe = RC.mac[module_idP]->subframe}; + trace_pdu(&tmp); - eNB_MAC_INST *eNB = RC.mac[module_idP]; - dl_req = &eNB->DL_req[CC_id].dl_config_request_body; - dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG; + LOG_D(OPT, "[eNB %d][MCH] CC_id %d Frame %d : MAC PDU with size %d\n", module_idP, CC_id, frameP, TBS); + //} + + eNB_MAC_INST *eNB = RC.mac[module_idP]; + dl_req = &eNB->DL_req[CC_id].dl_config_request_body; + dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG; fill_nfapi_mch_config( dl_req, TBS, @@ -1830,19 +1836,23 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, /* Tracing of PDU is done on UE side */ //if (opt_enabled == 1) { - trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, WS_M_RNTI , 0xffff, // M_RNTI = 6 in wirehsark - RC.mac[module_idP]->frame, - RC.mac[module_idP]->subframe, 0, 0); - LOG_D(OPT, - "[eNB %d][MCH] CC_id %d Frame %d : MAC PDU with size %d\n", - module_idP, CC_id, frameP, TBS); - //} + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = (uint8_t *)cc->MCH_pdu.payload, + .pdu_buffer_size = TBS, + .ueid = module_idP, + .rntiType = WS_M_RNTI, + .rnti = 0xffff, // M_RNTI = 6 in wireshark + .sysFrame = RC.mac[module_idP]->frame, + .subframe = RC.mac[module_idP]->subframe}; + trace_pdu(&tmp); + LOG_D(OPT, "[eNB %d][MCH] CC_id %d Frame %d : MAC PDU with size %d\n", module_idP, CC_id, frameP, TBS); + //} - /* - for (j=0;jMCH_pdu.payload[j+offset]); - printf(" \n"); */ - return 1; + /* + for (j=0;jMCH_pdu.payload[j+offset]); + printf(" \n"); */ + return 1; } else { cc->MCH_pdu.Pdu_size = 0; cc->MCH_pdu.sync_area = 0; diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c index 058ce4db34..216ab788d3 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c @@ -134,7 +134,15 @@ rx_sdu(const module_id_t enb_mod_idP, memset(rx_lengths, 0, NB_RB_MAX * sizeof(unsigned short)); start_meas(&mac->rx_ulsch_sdu); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU, 1); - trace_pdu(DIRECTION_UPLINK, sduP, sdu_lenP, 0, WS_C_RNTI, current_rnti, frameP, subframeP, 0, 0); + ws_trace_t tmp = {.direction = DIRECTION_UPLINK, + .pdu_buffer = sduP, + .pdu_buffer_size = sdu_lenP, + .ueid = 0, + .rntiType = WS_C_RNTI, + .rnti = current_rnti, + .sysFrame = frameP, + .subframe = subframeP}; + trace_pdu(&tmp); if (UE_id != -1) { UE_scheduling_control = &UE_info->UE_sched_ctrl[UE_id]; diff --git a/openair2/LAYER2/MAC/ra_procedures.c b/openair2/LAYER2/MAC/ra_procedures.c index 0917e0a1bc..b3b712ff0f 100644 --- a/openair2/LAYER2/MAC/ra_procedures.c +++ b/openair2/LAYER2/MAC/ra_procedures.c @@ -253,11 +253,17 @@ Msg1_transmitted(module_id_t module_idP, uint8_t CC_id, "Transmission on secondary CCs is not supported yet\n"); // start contention resolution timer UE_mac_inst[module_idP].RA_attempt_number++; - trace_pdu(DIRECTION_UPLINK, NULL, 0, module_idP, WS_NO_RNTI, - UE_mac_inst[module_idP].RA_prach_resources. - ra_PreambleIndex, UE_mac_inst[module_idP].txFrame, - UE_mac_inst[module_idP].txSubframe, 0, - UE_mac_inst[module_idP].RA_attempt_number); + ws_trace_t tmp = {.direction = DIRECTION_UPLINK, + .pdu_buffer = NULL, + .pdu_buffer_size = 0, + .ueid = module_idP, + .rntiType = WS_NO_RNTI, + .rnti = UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex, + .sysFrame = UE_mac_inst[module_idP].txFrame, + .subframe = UE_mac_inst[module_idP].txSubframe, + .oob_event = 0, + .oob_event_value = UE_mac_inst[module_idP].RA_attempt_number}; + trace_pdu(&tmp); } @@ -272,11 +278,15 @@ Msg3_transmitted(module_id_t module_idP, uint8_t CC_id, module_idP, frameP); UE_mac_inst[module_idP].RA_contention_resolution_cnt = 0; UE_mac_inst[module_idP].RA_contention_resolution_timer_active = 1; - trace_pdu(DIRECTION_UPLINK, &UE_mac_inst[module_idP].CCCH_pdu.payload[0], - UE_mac_inst[module_idP].RA_Msg3_size, module_idP, WS_C_RNTI, - UE_mac_inst[module_idP].crnti, - UE_mac_inst[module_idP].txFrame, - UE_mac_inst[module_idP].txSubframe, 0, 0); + ws_trace_t tmp = {.direction = DIRECTION_UPLINK, + .pdu_buffer = UE_mac_inst[module_idP].CCCH_pdu.payload, + .pdu_buffer_size = UE_mac_inst[module_idP].RA_Msg3_size, + .ueid = module_idP, + .rntiType = WS_C_RNTI, + .rnti = UE_mac_inst[module_idP].crnti, + .sysFrame = UE_mac_inst[module_idP].txFrame, + .subframe = UE_mac_inst[module_idP].txSubframe}; + trace_pdu(&tmp); } diff --git a/openair2/LAYER2/MAC/rar_tools.c b/openair2/LAYER2/MAC/rar_tools.c index b608ea03a1..c81b720326 100644 --- a/openair2/LAYER2/MAC/rar_tools.c +++ b/openair2/LAYER2/MAC/rar_tools.c @@ -93,9 +93,15 @@ fill_rar(const module_id_t module_idP, rar[3] = (((ra->msg3_mcs & 0x7) << 5)) | ((ra->msg3_TPC & 7) << 2) | ((ra->msg3_ULdelay & 1) << 1) | (ra->msg3_cqireq & 1); - trace_pdu(DIRECTION_DOWNLINK, dlsch_buffer, input_buffer_length, module_idP, WS_RA_RNTI, 1, - RC.mac[module_idP]->frame, RC.mac[module_idP]->subframe, - 0, 0); + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = dlsch_buffer, + .pdu_buffer_size = input_buffer_length, + .ueid = module_idP, + .rntiType = WS_RA_RNTI, + .rnti = 1, + .sysFrame = RC.mac[module_idP]->frame, + .subframe = RC.mac[module_idP]->subframe}; + trace_pdu(&tmp); return (ra->rnti); } @@ -186,17 +192,15 @@ unsigned short fill_rar_br(eNB_MAC_INST *eNB, rarh->RAPID, ra->preamble_index, ra->timing_offset); - - trace_pdu(DIRECTION_DOWNLINK, - dlsch_buffer, - input_buffer_length, - eNB->Mod_id, - WS_RA_RNTI, - 1, - eNB->frame, - eNB->subframe, - 0, - 0); + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = dlsch_buffer, + .pdu_buffer_size = input_buffer_length, + .ueid = eNB->Mod_id, + .rntiType = WS_RA_RNTI, + .rnti = 1, + .sysFrame = eNB->frame, + .subframe = eNB->subframe}; + trace_pdu(&tmp); return (ra->rnti); } diff --git a/openair2/LAYER2/MAC/rar_tools_ue.c b/openair2/LAYER2/MAC/rar_tools_ue.c index 1ab9bbd644..6a0dd5c065 100644 --- a/openair2/LAYER2/MAC/rar_tools_ue.c +++ b/openair2/LAYER2/MAC/rar_tools_ue.c @@ -115,9 +115,15 @@ uint16_t ue_process_rar(const module_id_t module_idP, const int CC_id, const fra LOG_D(MAC, "[UE %d][RAPROC] rar->t_crnti %x\n", module_idP, (uint16_t) rar[5] + (rar[4] << 8)); #endif - trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) dlsch_buffer, n_rarh + n_rarpy * 6, - module_idP, WS_RA_RNTI, ra_rnti, UE_mac_inst[module_idP].rxFrame, - UE_mac_inst[module_idP].rxSubframe, 0, 0); + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = dlsch_buffer, + .pdu_buffer_size = n_rarh + n_rarpy * 6, + .ueid = module_idP, + .rntiType = WS_RA_RNTI, + .rnti = ra_rnti, + .sysFrame = UE_mac_inst[module_idP].rxFrame, + .subframe = UE_mac_inst[module_idP].rxSubframe}; + trace_pdu(&tmp); if (preamble_index == rarh->RAPID) { *t_crnti = (uint16_t) rar[5] + (rar[4] << 8); //rar->t_crnti; diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c index 20b4da7b55..fced846a3c 100644 --- a/openair2/LAYER2/MAC/ue_procedures.c +++ b/openair2/LAYER2/MAC/ue_procedures.c @@ -378,8 +378,15 @@ ue_send_sdu(module_id_t module_idP, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU, VCD_FUNCTION_IN); //LOG_D(MAC,"sdu: %x.%x.%x\n",sdu[0],sdu[1],sdu[2]); - trace_pdu(DIRECTION_DOWNLINK, sdu, sdu_len, module_idP, WS_C_RNTI, - UE_mac_inst[module_idP].crnti, frameP, subframeP, 0, 0); + ws_trace_t tmp = {.direction = DIRECTION_DOWNLINK, + .pdu_buffer = sdu, + .pdu_buffer_size = sdu_len, + .ueid = module_idP, + .rntiType = WS_C_RNTI, + .rnti = UE_mac_inst[module_idP].crnti, + .sysFrame = frameP, + .subframe = subframeP}; + trace_pdu(&tmp); payload_ptr = parse_header(sdu, &num_ce, &num_sdu, rx_ces, rx_lcids, rx_lengths, sdu_len); @@ -576,16 +583,15 @@ void ue_decode_si_mbms(module_id_t module_idP, int CC_id, frame_t frameP, (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_OUT); stop_UE_TIMING(UE_mac_inst[module_idP].rx_si); - trace_pdu(DIRECTION_UPLINK, - (uint8_t *) pdu, - len, - module_idP, - WS_SI_RNTI, - 0xffff, - UE_mac_inst[module_idP].rxFrame, - UE_mac_inst[module_idP].rxSubframe, - 0, - 0); + ws_trace_t tmp = {.direction = DIRECTION_UPLINK, + .pdu_buffer = pdu, + .pdu_buffer_size = len, + .ueid = module_idP, + .rntiType = WS_SI_RNTI, + .rnti = 0xffff, + .sysFrame = UE_mac_inst[module_idP].rxFrame, + .subframe = UE_mac_inst[module_idP].rxSubframe}; + trace_pdu(&tmp); } @@ -604,14 +610,15 @@ ue_decode_si(module_id_t module_idP, int CC_id, frame_t frameP, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_OUT); stop_UE_TIMING(UE_mac_inst[module_idP].rx_si); - trace_pdu(DIRECTION_UPLINK, - (uint8_t *) pdu, - len, - module_idP, - WS_SI_RNTI, - 0xffff, - UE_mac_inst[module_idP].rxFrame, - UE_mac_inst[module_idP].rxSubframe, 0, 0); + ws_trace_t tmp = {.direction = DIRECTION_UPLINK, + .pdu_buffer = pdu, + .pdu_buffer_size = len, + .ueid = module_idP, + .rntiType = WS_SI_RNTI, + .rnti = 0xffff, + .sysFrame = UE_mac_inst[module_idP].rxFrame, + .subframe = UE_mac_inst[module_idP].rxSubframe}; + trace_pdu(&tmp); } void @@ -630,14 +637,15 @@ ue_decode_p(module_id_t module_idP, int CC_id, frame_t frameP, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_PCCH, VCD_FUNCTION_OUT); stop_UE_TIMING(UE_mac_inst[module_idP].rx_p); - trace_pdu(DIRECTION_UPLINK, - (uint8_t *) pdu, - len, - module_idP, - WS_SI_RNTI, - P_RNTI, - UE_mac_inst[module_idP].rxFrame, - UE_mac_inst[module_idP].rxSubframe, 0, 0); + ws_trace_t tmp = {.direction = DIRECTION_UPLINK, + .pdu_buffer = pdu, + .pdu_buffer_size = len, + .ueid = module_idP, + .rntiType = WS_SI_RNTI, + .rnti = P_RNTI, + .sysFrame = UE_mac_inst[module_idP].rxFrame, + .subframe = UE_mac_inst[module_idP].rxSubframe}; + trace_pdu(&tmp); } unsigned char *parse_mch_header(unsigned char *mac_header, @@ -2864,10 +2872,15 @@ ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GET_SDU, VCD_FUNCTION_OUT); stop_UE_TIMING(UE_mac_inst[module_idP].tx_ulsch_sdu); - trace_pdu(DIRECTION_UPLINK, ulsch_buffer, buflen, module_idP, WS_C_RNTI, - UE_mac_inst[module_idP].crnti, - UE_mac_inst[module_idP].txFrame, - UE_mac_inst[module_idP].txSubframe, 0, 0); + ws_trace_t tmp = {.direction = DIRECTION_UPLINK, + .pdu_buffer = ulsch_buffer, + .pdu_buffer_size = buflen, + .ueid = module_idP, + .rntiType = WS_C_RNTI, + .rnti = UE_mac_inst[module_idP].crnti, + .sysFrame = UE_mac_inst[module_idP].txFrame, + .subframe = UE_mac_inst[module_idP].txSubframe}; + trace_pdu(&tmp); } diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index 772b9bf582..76fd4deafd 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -215,8 +215,19 @@ static int nr_process_mac_pdu(instance_t module_idP, NR_UE_UL_BWP_t *ul_bwp = &UE->current_UL_BWP; NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl; - if (pduP[0] != UL_SCH_LCID_PADDING) - trace_NRpdu(DIRECTION_UPLINK, pduP, pdu_len, WS_C_RNTI, UE->rnti, frameP, 0, 0, 0); + if (pduP[0] != UL_SCH_LCID_PADDING) { + ws_trace_t tmp = {.nr = true, + .direction = DIRECTION_UPLINK, + .pdu_buffer = pduP, + .pdu_buffer_size = pdu_len, + .ueid = 0, + .rntiType = WS_C_RNTI, + .rnti = UE->rnti, + .sysFrame = frameP, + .subframe = slot, + .harq_pid = harq_pid}; + trace_pdu(&tmp); + } #ifdef ENABLE_MAC_PAYLOAD_DEBUG LOG_I(NR_MAC, "In %s: dumping MAC PDU in %d.%d:\n", __func__, frameP, slot); diff --git a/openair2/UTIL/OPT/opt.h b/openair2/UTIL/OPT/opt.h index e3b8059f23..8a8aa5c268 100644 --- a/openair2/UTIL/OPT/opt.h +++ b/openair2/UTIL/OPT/opt.h @@ -112,15 +112,29 @@ typedef enum radio_type_e { */ extern int opt_enabled; -#define trace_pdu(x...) if (opt_enabled) trace_pdu_implementation(0, x) -#define trace_NRpdu(x...) if (opt_enabled) nr_trace_pdu_implementation(1, x) - -void trace_pdu_implementation(int nr, int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size, - int ueid, int rntiType, int rnti, uint16_t sysFrame, uint8_t subframe, - int oob_event, int oob_event_value); -void nr_trace_pdu_implementation(int nr, int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size, - int rntiType, int rnti, uint16_t sysFrame, uint8_t subframe, - int oob_event, int oob_event_value); +typedef struct { + bool nr; + int direction; + uint8_t *pdu_buffer; + unsigned int pdu_buffer_size; + int ueid; + int rntiType; + int rnti; + uint16_t sysFrame; + uint8_t subframe; + uint8_t harq_pid; + int oob_event; + int oob_event_value; + int crcStatus; + uint8_t isPredefinedData; + uint8_t retx; +} ws_trace_t; +#define trace_pdu(x) \ + do { \ + if (opt_enabled) \ + trace_pdu_implementation(x); \ + } while (0) +void trace_pdu_implementation(ws_trace_t *t); int init_opt(void); diff --git a/openair2/UTIL/OPT/probe.c b/openair2/UTIL/OPT/probe.c index 58ea8764e9..465baa7301 100644 --- a/openair2/UTIL/OPT/probe.c +++ b/openair2/UTIL/OPT/probe.c @@ -275,11 +275,8 @@ int opt_create_listener_socket(char *ip_address, uint16_t port) { * 5. run ./oasim -a -P0 -n 30 | grep OPT */ /* Add framing header to MAC PDU and send. */ -static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType, - guint16 rnti, guint16 ueid, guint16 frame, guint16 subframe, - guint8 isPredefinedData, guint8 retx, guint8 crcStatus, - guint8 oob_event, guint8 oob_event_value, - uint8_t *pdu_buffer, unsigned int pdu_buffer_size) { +static void SendFrame(guint8 radioType, ws_trace_t *t) +{ unsigned char frameBuffer[16000]; unsigned int frameOffset; ssize_t bytesSent; @@ -291,27 +288,28 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType, /******************************************************************************/ /* Now write out fixed fields (the mandatory elements of struct mac_lte_info) */ frameBuffer[frameOffset++] = radioType; - frameBuffer[frameOffset++] = direction; - frameBuffer[frameOffset++] = rntiType; + frameBuffer[frameOffset++] = t->direction; + frameBuffer[frameOffset++] = t->rntiType; /*************************************/ /* Now optional fields */ /* RNTI */ frameBuffer[frameOffset++] = MAC_LTE_RNTI_TAG; - tmp16 = htons(rnti); + tmp16 = htons(t->rnti); memcpy(frameBuffer+frameOffset, &tmp16, 2); frameOffset += 2; /* UEId */ frameBuffer[frameOffset++] = MAC_LTE_UEID_TAG; - tmp16 = htons(ueid); + tmp16 = htons(t->ueid); memcpy(frameBuffer+frameOffset, &tmp16, 2); frameOffset += 2; /* Subframe number */ frameBuffer[frameOffset++] = MAC_LTE_FRAME_SUBFRAME_TAG; - tmp16 = htons((frame<<4)+subframe); // frame counter : this will give an expert info as wireshark expects SF and not F + tmp16 = + htons((t->sysFrame << 4) + t->subframe); // frame counter : this will give an expert info as wireshark expects SF and not F memcpy(frameBuffer+frameOffset, &tmp16, 2); frameOffset += 2; frameBuffer[frameOffset++] = MAC_LTE_CRC_STATUS_TAG; - frameBuffer[frameOffset++] = crcStatus; + frameBuffer[frameOffset++] = t->crcStatus; #ifdef WIRESHARK_DEV frameOffset += 2; tmp16 = htons(sfnSf); // subframe @@ -321,45 +319,46 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType, /***********************************************************/ /* For these optional fields, no need to encode if value is default */ - if (!isPredefinedData) { + if (t->isPredefinedData) { frameBuffer[frameOffset++] = MAC_LTE_PREDEFINED_DATA_TAG; - frameBuffer[frameOffset++] = isPredefinedData; + frameBuffer[frameOffset++] = t->isPredefinedData; } - if (retx != 0) { + if (t->retx != 0) { frameBuffer[frameOffset++] = MAC_LTE_RETX_TAG; - frameBuffer[frameOffset++] = retx; + frameBuffer[frameOffset++] = t->retx; } //#ifdef WIRESHARK_DEV /* Relating to out-of-band events */ /* N.B. dissector will only look to these fields if length is 0... */ - if (pdu_buffer_size==0) { - switch (oob_event) { + if (t->pdu_buffer_size == 0) { + switch (t->oob_event) { case ltemac_send_preamble : - LOG_D(OPT,"ltemac_send_preamble event %02x." + LOG_D(OPT, + "ltemac_send_preamble event %02x." //"%02x." "%02x.%02x\n", MAC_LTE_SEND_PREAMBLE_TAG, - //ltemac_send_preamble, - rnti, - oob_event_value); + // ltemac_send_preamble, + t->rnti, + t->oob_event_value); //frameBuffer[frameOffset++]=0; //frameBuffer[frameOffset++]=0; //frameBuffer[frameOffset++]=0; frameBuffer[frameOffset++] = MAC_LTE_SEND_PREAMBLE_TAG; //frameBuffer[frameOffset++]=ltemac_send_preamble; - frameBuffer[frameOffset++]=rnti; // is the preamble - frameBuffer[frameOffset++]=oob_event_value; + frameBuffer[frameOffset++] = t->rnti; // is the preamble + frameBuffer[frameOffset++] = t->oob_event_value; break; case ltemac_send_sr: frameBuffer[frameOffset++]=MAC_LTE_SR_TAG ; frameOffset+=2; - frameBuffer[frameOffset++]=rnti; + frameBuffer[frameOffset++] = t->rnti; frameOffset++; - frameBuffer[frameOffset++]=oob_event_value; + frameBuffer[frameOffset++] = t->oob_event_value; frameOffset++; break; @@ -378,11 +377,11 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType, /* Append actual PDU */ //memcpy(frameBuffer+frameOffset, g_PDUBuffer, g_PDUOffset); //frameOffset += g_PDUOffset; - if (pdu_buffer != NULL) { - const int sz = min(pdu_buffer_size, sizeof(frameBuffer)-frameOffset); - memcpy(frameBuffer+frameOffset, (void *)pdu_buffer, sz); - if ( pdu_buffer_size != sz ) - LOG_W(OPT,"pdu is huge : %d\n", pdu_buffer_size); + if (t->pdu_buffer != NULL) { + const int sz = min(t->pdu_buffer_size, sizeof(frameBuffer) - frameOffset); + memcpy(frameBuffer + frameOffset, t->pdu_buffer, sz); + if (t->pdu_buffer_size != sz) + LOG_W(OPT, "pdu is huge : %d\n", t->pdu_buffer_size); frameOffset += sz; } @@ -400,11 +399,8 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType, } } -static void SendFrameNR(guint8 radioType, guint8 direction, guint8 rntiType, - guint16 rnti, guint16 ueid, guint16 frame, guint16 subframe, - guint8 isPredefinedData, guint8 retx, guint8 crcStatus, - guint8 oob_event, guint8 oob_event_value, - uint8_t *pdu_buffer, unsigned int pdu_buffer_size) { +static void SendFrameNR(guint8 radioType, ws_trace_t *t) +{ unsigned char frameBuffer[32000]; unsigned int frameOffset; ssize_t bytesSent; @@ -416,33 +412,36 @@ static void SendFrameNR(guint8 radioType, guint8 direction, guint8 rntiType, /******************************************************************************/ /* Now write out fixed fields (the mandatory elements of struct mac_lte_info) */ frameBuffer[frameOffset++] = radioType; - frameBuffer[frameOffset++] = direction; - frameBuffer[frameOffset++] = rntiType; + frameBuffer[frameOffset++] = t->direction; + frameBuffer[frameOffset++] = t->rntiType; /*************************************/ /* Now optional fields */ /* RNTI */ frameBuffer[frameOffset++] = MAC_NR_RNTI_TAG; - tmp16 = htons(rnti); + tmp16 = htons(t->rnti); memcpy(frameBuffer+frameOffset, &tmp16, 2); frameOffset += 2; /* UEId */ frameBuffer[frameOffset++] = MAC_NR_UEID_TAG; - tmp16 = htons(ueid); + tmp16 = htons(t->ueid); memcpy(frameBuffer+frameOffset, &tmp16, 2); frameOffset += 2; + /* HARQid */ + frameBuffer[frameOffset++] = MAC_NR_HARQID; + frameBuffer[frameOffset++] = t->harq_pid; /* Subframe number */ frameBuffer[frameOffset++] = MAC_NR_FRAME_SLOT_TAG; - tmp16 = htons(frame); // frame counter : this will give an expert info as wireshark expects SF and not F + tmp16 = htons(t->sysFrame); // frame counter : this will give an expert info as wireshark expects SF and not F memcpy(frameBuffer+frameOffset, &tmp16, 2); frameOffset += 2; - tmp16 = htons(subframe); // frame counter : this will give an expert info as wireshark expects SF and not F + tmp16 = htons(t->subframe); // frame counter : this will give an expert info as wireshark expects SF and not F memcpy(frameBuffer+frameOffset, &tmp16, 2); frameOffset += 2; - if (direction == 0 ) { //ulink + if (t->direction == 0) { // ulink frameBuffer[frameOffset++] = MAC_NR_PHR_TYPE2_OTHERCELL_TAG; frameBuffer[frameOffset++] = 0; } - + /***************************************/ /* Now write the MAC PDU */ frameBuffer[frameOffset++] = MAC_NR_PAYLOAD_TAG; @@ -450,11 +449,11 @@ static void SendFrameNR(guint8 radioType, guint8 direction, guint8 rntiType, /* Append actual PDU */ //memcpy(frameBuffer+frameOffset, g_PDUBuffer, g_PDUOffset); //frameOffset += g_PDUOffset; - if (pdu_buffer != NULL) { - const int sz=min(pdu_buffer_size, sizeof(frameBuffer)-frameOffset); - memcpy(frameBuffer+frameOffset, (void *)pdu_buffer, sz); - if ( sz != pdu_buffer_size ) - LOG_W(OPT,"large pdu: %d\n", pdu_buffer_size); + if (t->pdu_buffer != NULL) { + const int sz = min(t->pdu_buffer_size, sizeof(frameBuffer) - frameOffset); + memcpy(frameBuffer + frameOffset, t->pdu_buffer, sz); + if (sz != t->pdu_buffer_size) + LOG_W(OPT, "large pdu: %d\n", t->pdu_buffer_size); frameOffset += sz; } @@ -476,35 +475,33 @@ static void SendFrameNR(guint8 radioType, guint8 direction, guint8 rntiType, extern RAN_CONTEXT_t RC; #include /* Remote serveraddress (where Wireshark is running) */ -void nr_trace_pdu_implementation(int nr, int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size, - int rntiType, int rnti, uint16_t sysFrameNumber, uint8_t subFrameNumber, int oob_event, - int oob_event_value) { - trace_pdu_implementation(nr, direction, pdu_buffer, pdu_buffer_size, - rnti, rntiType, rnti, sysFrameNumber, subFrameNumber, oob_event, - oob_event_value); -} -void trace_pdu_implementation(int nr, int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size, - int ueid, int rntiType, int rnti, uint16_t sysFrameNumber, uint8_t subFrameNumber, int oob_event, - int oob_event_value) { - int radioType=FDD_RADIO; - LOG_D(OPT,"sending packet to wireshark: direction=%s, size: %d, ueid: %d, rnti: %x, frame/sf: %d.%d\n", - direction?"DL":"UL", pdu_buffer_size, ueid, rnti, sysFrameNumber,subFrameNumber); +void trace_pdu_implementation(ws_trace_t *t) +{ + int radioType = FDD_RADIO; + LOG_D(OPT, + "sending packet to wireshark: direction=%s, size: %d, ueid: %d, rnti: %x, frame/sf: %d.%d\n", + t->direction ? "DL" : "UL", + t->pdu_buffer_size, + t->ueid, + t->rnti, + t->sysFrame, + t->subframe); - if (nr) { - radioType=TDD_RADIO; + if (t->nr) { + radioType = TDD_RADIO; } else { - if (RC.eNB && RC.eNB[0][0]!=NULL) - radioType=RC.eNB[0][0]->frame_parms.frame_type== FDD ? FDD_RADIO:TDD_RADIO; + if (RC.eNB && RC.eNB[0][0] != NULL) + radioType = RC.eNB[0][0]->frame_parms.frame_type == FDD ? FDD_RADIO : TDD_RADIO; else if (PHY_vars_UE_g && PHY_vars_UE_g[0][0] != NULL) - radioType=PHY_vars_UE_g[0][0]->frame_parms.frame_type== FDD ? FDD_RADIO:TDD_RADIO; + radioType = PHY_vars_UE_g[0][0]->frame_parms.frame_type == FDD ? FDD_RADIO : TDD_RADIO; else { - LOG_E(OPT,"not a 4G eNB neither a 4G UE!!! \n"); + LOG_E(OPT, "not a 4G eNB neither a 4G UE!!! \n"); } } switch (opt_type) { - case OPT_WIRESHARK : + case OPT_WIRESHARK: if (g_socksd == -1) return; @@ -522,20 +519,10 @@ void trace_pdu_implementation(int nr, int direction, uint8_t *pdu_buffer, unsign break; } - if (nr) - SendFrameNR( radioType, - (direction == DIRECTION_DOWNLINK) ? DIRECTION_DOWNLINK : DIRECTION_UPLINK, - rntiType, rnti, ueid, sysFrameNumber, subFrameNumber, - 1, 0, 1, //guint8 isPredefinedData, guint8 retx, guint8 crcStatus - oob_event,oob_event_value, - pdu_buffer, pdu_buffer_size); - else - SendFrame( radioType, - (direction == DIRECTION_DOWNLINK) ? DIRECTION_DOWNLINK : DIRECTION_UPLINK, - rntiType, rnti, ueid, sysFrameNumber, subFrameNumber, - 1, 0, 1, //guint8 isPredefinedData, guint8 retx, guint8 crcStatus - oob_event,oob_event_value, - pdu_buffer, pdu_buffer_size); + if (t->nr) + SendFrameNR(radioType, t); + else + SendFrame(radioType, t); } /*---------------------------------------------------*/