self.command('echo $USER; nohup sudo tshark -f "tcp port not 22 and port not 53" -i any -w '+self.EPCSourceCodePath+'/scripts/'+EPC_PcapFileName+' > /tmp/tshark.log 2>&1 &',self.EPCUserName,5)
cancel_ra_proc(enb_mod_idP,CC_idP,frameP,current_rnti);// TODO: Currently we don't support retransmission of Msg3 ( If in error Cancel RA procedure and reattach)
cancel_ra_proc(enb_mod_idP,CC_idP,frameP,current_rnti);// TODO: Currently we don't support retransmission of Msg3 ( If in error Cancel RA procedure and reattach)
LOG_D(MAC,"scheduled_ul_bytes, new %d\n",UE_template->scheduled_ul_bytes);
/* Cyclic shift for DMRS */
cshift=0;// values from 0 to 7 can be used for mapping the cyclic shift (36.211 , Table 5.5.2.1.1-1)
/* save it for a potential retransmission */
UE_template->cshift[harq_pid]=cshift;
AssertFatal(UE_template->physicalConfigDedicated!=NULL,"UE_template->physicalConfigDedicated is null\n");
AssertFatal(UE_template->physicalConfigDedicated->ext4!=NULL,"UE_template->physicalConfigDedicated->ext4 is null\n");
AssertFatal(UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11!=NULL,"UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 is null\n");
LOG_D(MAC,"[eNB %d] CC_id %d Frame %d, subframeP %d: Generated ULSCH DCI for next UE_id %d, format 0\n",
module_idP,
CC_id,
frameP,
subframeP,
UE_id);
}else{// round_UL > 0 => retransmission
/* In LTE-M the UL HARQ process is asynchronous */
T(T_ENB_MAC_UE_UL_SCHEDULE_RETRANSMISSION,
T_INT(module_idP),
T_INT(CC_id),
T_INT(rnti),
T_INT(frameP),
T_INT(subframeP),
T_INT(harq_pid),
T_INT(UE_template->mcs_UL[harq_pid]),
T_INT(0),
T_INT(6),
T_INT(round_UL));
AssertFatal(UE_template->physicalConfigDedicated!=NULL,"UE_template->physicalConfigDedicated is null\n");
AssertFatal(UE_template->physicalConfigDedicated->ext4!=NULL,"UE_template->physicalConfigDedicated->ext4 is null\n");
AssertFatal(UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11!=NULL,"UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 is null\n");
LOG_D(MAC,"scheduled_ul_bytes, new %d\n",UE_template->scheduled_ul_bytes);
/* Cyclic shift for DMRS */
cshift=0;// values from 0 to 7 can be used for mapping the cyclic shift (36.211 , Table 5.5.2.1.1-1)
/* save it for a potential retransmission */
UE_template->cshift[harq_pid]=cshift;
AssertFatal(UE_template->physicalConfigDedicated!=NULL,"UE_template->physicalConfigDedicated is null\n");
AssertFatal(UE_template->physicalConfigDedicated->ext4!=NULL,"UE_template->physicalConfigDedicated->ext4 is null\n");
AssertFatal(UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11!=NULL,"UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 is null\n");
LOG_D(MAC,"[eNB %d] CC_id %d Frame %d, subframeP %d: Generated ULSCH DCI for next UE_id %d, format 0\n",
module_idP,
CC_id,
frameP,
subframeP,
UE_id);
}else{// round_UL > 0 => retransmission
/* In LTE-M the UL HARQ process is asynchronous */
T(T_ENB_MAC_UE_UL_SCHEDULE_RETRANSMISSION,
T_INT(module_idP),
T_INT(CC_id),
T_INT(rnti),
T_INT(frameP),
T_INT(subframeP),
T_INT(harq_pid),
T_INT(UE_template->mcs_UL[harq_pid]),
T_INT(0),
T_INT(6),
T_INT(round_UL));
AssertFatal(UE_template->physicalConfigDedicated!=NULL,"UE_template->physicalConfigDedicated is null\n");
AssertFatal(UE_template->physicalConfigDedicated->ext4!=NULL,"UE_template->physicalConfigDedicated->ext4 is null\n");
AssertFatal(UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11!=NULL,"UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 is null\n");
uint16_tue_process_rar(constmodule_id_tmodule_idP,constintCC_id,constframe_tframeP,constrnti_tra_rnti,uint8_t*constdlsch_buffer,rnti_t*constt_crnti,constuint8_tpreamble_index,uint8_t*selected_rar_buffer// output argument for storing the selected RAR header and RAR payload
How to configure wireshark for dissecting LTE protocols:
- start the wireshark as a sudoers
- goto analyze->enabled prototols
- goto analyze->enabled prototols
=> enable mac_lte_udp and rlc_lte_udp
- goto edit/preferences and expand Protocols
- select UDP and check "try heuristic sub-dissectors first"
- select MAC-LTE, and check all the options (checkboxes), and set the "which layer info to show in info column" to "MAC info"
- select RLC-LTE, and check all the options except the "May see RLC headers only", and set the "call PDCP dissector for DRB PDUs" to "12-bit SN". Optionally you may select the sequence analysis for RLC AM/UM.
- goto edit/preferences and expand Protocols
- select UDP and check "try heuristic sub-dissectors first"
- select MAC-LTE, and check all the options (checkboxes), and set the "which layer info to show in info column" to "MAC info"
- select RLC-LTE, and check all the options except the "May see RLC headers only", and
set the "call PDCP dissector for DRB PDUs" to "12-bit SN". Optionally you may select the sequence analysis for RLC AM/UM.
How to use
- start eNB or UE with option -W (or -P if you want to make a pcap file)
- capture on local interface "lo"
- filter out the ICMP/DNS/TCP messages (e.g. "!icmp && !dns && !tcp")
How to use
- start eNB or UE with option --opt.type wireshark
--opt options are:
--opt.type none/wireshark/pcap
--opt.ip 127.0.0.1 to specify the output IP address (default: 127.0.0.1)
output port is always: 9999 (to change it, change constant: PACKET_MAC_LTE_DEFAULT_UDP_PORT in OAI code)
--opt.path file_name to specify the file name (pcap)
- capture on local interface "lo"
- filter out the ICMP/DNS/TCP messages (e.g. "!icmp && !dns && !tcp")
LOG_E(PHY,"Received Timestamp (IF4p5) doesn't correspond to the time we think it is (proc->tti_rx %d, subframe %d, symbol_mask %x)\n",proc->tti_rx,*subframe,proc->symbol_mask[*subframe]);
// AssertFatal((proc->RU_mask&(1<<i)) == 0, "eNB %d frame %d, subframe %d : previous information from RU %d (num_RU %d,mask %x) has not been served yet!\n",eNB->Mod_id,ru->proc.frame_rx,ru->proc.subframe_rx,ru->idx,eNB->num_RU,proc->RU_mask);
//AssertFatal((proc->RU_mask&(1<<i)) == 0, "eNB %d frame %d, subframe %d : previous information from RU %d (num_RU %d,mask %x) has not been served yet!\n", eNB->Mod_id,ru->proc.frame_rx,ru->proc.subframe_rx,ru->idx,eNB->num_RU,proc->RU_mask);
if(ru->is_slave==0&&((proc->RU_mask[ru->proc.tti_rx]&(1<<i))==1)&&eNB->RU_list[i]->state==RU_RUN){// This is master & the RRU has already been received
}elseif(ru->is_slave==1&&ru->state==RU_RUN&&((proc->RU_mask[ru->proc.tti_rx]&(1<<0))==1)){// master already received. TODO: we assume that RU0 is master.