a sUgfM@sddlZddlmZddlZddlmZddlmZddlm Z m Z m Z e e ZGddde ZGd d d eZGd d d eZdS) N)Tuple)h2b)Tpdu) ApduSource PacketType CardResetcseZdZdZfddZeeeefdddZeeeefdddZ eeeeefdd d Z e dd d Z eeefd ddZ e dddZZS) _PysharkRsprozMAPDU Source [provider] base class for reading RSPRO (osmo-remsim) via tshark.cs&||_d|_d|_d|_tdSN)pysharkbank_id bank_slotcmd_tpdusuper__init__)self pyshark_inst __class__/home/jenkins/workspace/gerrit-pysim-build/JOB_TYPE/test/a1/default/a3/default/a4/default/label/simtester/pySim/apdu_source/pyshark_rspro.pyr s z_PysharkRspro.__init__)returncCs$|d}|d}t|t|fS)zCConvert a 'bankSlot_element' field into a tuple of bank_id, slot_nrZbankIdslotNr get_fieldint)r r slot_nrrrr get_bank_slot's  z_PysharkRspro.get_bank_slotcCs$|d}|d}t|t|fS)zGConvert a 'clientSlot_element' field into a tuple of client_id, slot_nrZclientIdrr) client_slotZ client_idrrrrget_client_slot.s  z_PysharkRspro.get_client_slotcCs4t|d}t|d}t|d}|||fS)zHConvert a 'slotPhysStatus_element' field into a tuple of vcc, reset, clk vccPresent resetActive clkActive)rr)Zpstatusr r!r"rrr get_pstatus5sz_PysharkRspro.get_pstatuscCs|j}||Sr )r next _parse_packet)rprrr read_packet=s z_PysharkRspro.read_packet)bslcCsT|js|d|_|d|_n4|j|dks8|j|dkrPtd|d|dfdS)zNKeep track of the bank:slot to make sure we don't mix traces of multiple cardsrrz%Received data for unexpected B(%u:%u)N)r r ValueError)rr(rrr_set_or_verify_bank_slotAs   z&_PysharkRspro._set_or_verify_bank_slotcCs|d}|d}|d}|d}|dkr|d}|d}||}|d} || } || |d d d } td |d |d| d | d| t| |_n|dkrR|d} | d}||}| d} || } || | d d d } td|d |d| d | d| t| } |jrt |j| }d|_|Snx|dkr|d}|d}|d} |d}| |\}}}|r|r|stdt dSnt d||fdS)NrsproZRsproPDU_elementmsgZmsg_treeZ12ZtpduModemToCard_elementZfromClientSlot_elementZtoBankSlot_elementdata:zC(%u:%u) -> B(%u:%u): %srrZ13ZtpduCardToModem_elementZtoClientSlot_elementZfromBankSlot_elementzC(%u:%u) <- B(%u:%u): %sFZ14ZclientSlotStatusInd_elementZslotPhysStatus_elementRESETzUnhandled msg type %s: %s) rrrr*replaceloggerdebugrrrr#rprint)rr&Z rspro_layerZ rspro_elementZmsg_typeZ rspro_msgZ modem2cardrZcslr r(r-Z card2modemZrsp_tpdurZ cl_slotstatusZ slot_pstatusr r!r"rrrr%JsL         $       $        z_PysharkRspro._parse_packet)__name__ __module__ __qualname____doc__r staticmethodrrrrr#rr'r*r% __classcell__rrrrr s  r cs eZdZdZfddZZS)PysharkRsproPcapasAPDU Source [provider] class for reading RSPRO (osmo-remsim) from a PCAP file via pyshark, which in turn uses tshark (part of wireshark). In order to use this, you need a wireshark patched with RSPRO support, such as can be found at https://gitea.osmocom.org/osmocom/wireshark/src/branch/laforge/rspro A STANDARD UPSTREAM WIRESHARK *DOES NOT WORK*. cs"tj|dddd}t|dS)zZ Args: pcap_filename: File name of the pcap file to be opened r+TF)display_filteruse_jsonZ keep_packetsN)r Z FileCapturerr)rZ pcap_filenamerrrrrszPysharkRsproPcap.__init__r6r7r8r9rr;rrrrr<|sr<cs"eZdZdZdfdd ZZS)PysharkRsproLiveavAPDU Source [provider] class for reading RSPRO (osmo-remsim) from a live capture via pyshark, which in turn uses tshark (part of wireshark). In order to use this, you need a wireshark patched with RSPRO support, such as can be found at https://gitea.osmocom.org/osmocom/wireshark/src/branch/laforge/rspro A STANDARD UPSTREAM WIRESHARK *DOES NOT WORK*. tcp port 9999 or tcp port 9998cs"tj|d|dd}t|dS)z Args: interface: Network interface name to capture packets on (like "eth0") bfp_filter: libpcap capture filter to use r+T) interfacer= bpf_filterr>N)r Z LiveCapturerr)rrBrCrrrrrs zPysharkRsproLive.__init__)rAr?rrrrr@sr@)loggingtypingrr pySim.utilsr pySim.apdurr/rrr getLoggerr6r2r r<r@rrrrs    _