% TZSP test campaign # # execute test: # > test/run_tests -P "load_contrib('tzsp')" -t scapy/contrib/tzsp.uts # + Basic layer handling = build basic TZSP frames == basic TZSP header - keepalive bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02')/ \ IP(src='1.1.1.1', dst='2.2.2.2')/ \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT)/ \ TZSP(type=TZSP.TYPE_KEEPALIVE, encapsulated_protocol=0) frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr.type == TZSP.TYPE_KEEPALIVE) assert(not tzsp_lyr.payload) == basic TZSP header - keepalive + ignored end tag bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02')/ \ IP(src='1.1.1.1', dst='2.2.2.2')/ \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT)/ \ TZSP(type=TZSP.TYPE_KEEPALIVE, encapsulated_protocol=0)/ \ TZSPTagEnd() frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr.type == TZSP.TYPE_KEEPALIVE) assert(tzsp_lyr.guess_payload_class(tzsp_lyr.payload) is scapy.packet.Raw) == basic TZSP header with RX Packet and EndTag bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ TZSPTagEnd() / \ Ether(src='00:03:03:03:03:03', dst='00:04:04:04:04:04') / \ Raw('foobar') frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr.type == TZSP.TYPE_RX_PACKET) tzsp_tag_end = tzsp_lyr.payload assert(tzsp_tag_end.type == 1) encapsulated_payload = tzsp_lyr.get_encapsulated_payload() encapsulated_ether_lyr = encapsulated_payload.getlayer(Ether) assert(encapsulated_ether_lyr.src == '00:03:03:03:03:03') == basic TZSP header with RX Packet and Padding bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ TZSPTagPadding() / \ TZSPTagEnd() / \ Ether(src='00:03:03:03:03:03', dst='00:04:04:04:04:04') / \ Raw('foobar') frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr.type == TZSP.TYPE_RX_PACKET) tzsp_tag_padding = tzsp_lyr.payload assert(tzsp_tag_padding.type == 0) tzsp_tag_end = tzsp_tag_padding.payload assert(tzsp_tag_end.type == 1) == basic TZSP header with RX Packet and RAWRSSI (byte, short) bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ TZSPTagRawRSSIByte(raw_rssi=42) / \ TZSPTagRawRSSIShort(raw_rssi=12345) / \ TZSPTagEnd() / \ Ether(src='00:03:03:03:03:03', dst='00:04:04:04:04:04') / \ Raw('foobar') frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr.type == TZSP.TYPE_RX_PACKET) tzsp_tag_raw_rssi_byte = tzsp_lyr.payload assert(tzsp_tag_raw_rssi_byte.type == 10) assert(tzsp_tag_raw_rssi_byte.raw_rssi == 42) tzsp_tag_raw_rssi_short = tzsp_tag_raw_rssi_byte.payload assert(tzsp_tag_raw_rssi_short.type == 10) assert(tzsp_tag_raw_rssi_short.raw_rssi == 12345) tzsp_tag_end = tzsp_tag_raw_rssi_short.payload assert(tzsp_tag_end.type == 1) == basic TZSP header with RX Packet and SNR (byte, short) bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ TZSPTagSNRByte(snr=23) / \ TZSPTagSNRShort(snr=54321) / \ TZSPTagEnd() / \ Ether(src='00:03:03:03:03:03', dst='00:04:04:04:04:04') / \ Raw('foobar') frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr.type == TZSP.TYPE_RX_PACKET) tzsp_tag_snr_byte = tzsp_lyr.payload assert(tzsp_tag_snr_byte.type == 11) assert(tzsp_tag_snr_byte.len == 1) assert(tzsp_tag_snr_byte.snr == 23) tzsp_tag_snr_short = tzsp_tag_snr_byte.payload assert(tzsp_tag_snr_short.type == 11) assert(tzsp_tag_snr_short.len == 2) assert(tzsp_tag_snr_short.snr == 54321) tzsp_tag_end = tzsp_tag_snr_short.payload assert(tzsp_tag_end.type == 1) == basic TZSP header with RX Packet and DATA Rate bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ TZSPTagDataRate(data_rate=TZSPTagDataRate.DATA_RATE_33) / \ TZSPTagEnd() / \ Ether(src='00:03:03:03:03:03', dst='00:04:04:04:04:04') / \ Raw('foobar') frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr.type == TZSP.TYPE_RX_PACKET) tzsp_tag_data_rate = tzsp_lyr.payload assert(tzsp_tag_data_rate.type == 12) assert(tzsp_tag_data_rate.len == 1) assert(tzsp_tag_data_rate.data_rate == TZSPTagDataRate.DATA_RATE_33) tzsp_tag_end = tzsp_tag_data_rate.payload assert(tzsp_tag_end.type == 1) == basic TZSP header with RX Packet and Timestamp bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ TZSPTagTimestamp(timestamp=0x11223344) / \ TZSPTagEnd() / \ Ether(src='00:03:03:03:03:03', dst='00:04:04:04:04:04') / \ Raw('foobar') frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr.type == TZSP.TYPE_RX_PACKET) tzsp_tag_timestamp = tzsp_lyr.payload assert(tzsp_tag_timestamp.type == 13) assert(tzsp_tag_timestamp.len == 4) assert(tzsp_tag_timestamp.timestamp == 0x11223344) tzsp_tag_end = tzsp_tag_timestamp.payload assert(tzsp_tag_end.type == 1) == basic TZSP header with RX Packet and ContentionFree bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ TZSPTagContentionFree(contention_free=TZSPTagContentionFree.NO) / \ TZSPTagContentionFree(contention_free=TZSPTagContentionFree.YES) / \ TZSPTagEnd() / \ Ether(src='00:03:03:03:03:03', dst='00:04:04:04:04:04') / \ Raw('foobar') frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr.type == TZSP.TYPE_RX_PACKET) tzsp_tag_contention_free_no = tzsp_lyr.payload assert(tzsp_tag_contention_free_no.type == 15) assert(tzsp_tag_contention_free_no.len == 1) assert(tzsp_tag_contention_free_no.contention_free == TZSPTagContentionFree.NO) tzsp_tag_contention_free_yes = tzsp_tag_contention_free_no.payload assert(tzsp_tag_contention_free_yes.type == 15) assert(tzsp_tag_contention_free_yes.len == 1) assert(tzsp_tag_contention_free_yes.contention_free == TZSPTagContentionFree.YES) tzsp_tag_end = tzsp_tag_contention_free_yes.payload assert(tzsp_tag_end.type == 1) == basic TZSP header with RX Packet and Decrypted bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ TZSPTagDecrypted(decrypted=TZSPTagDecrypted.NO) / \ TZSPTagDecrypted(decrypted=TZSPTagDecrypted.YES) / \ TZSPTagEnd() / \ Ether(src='00:03:03:03:03:03', dst='00:04:04:04:04:04') / \ Raw('foobar') frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr.type == TZSP.TYPE_RX_PACKET) tzsp_tag_decrypted_no = tzsp_lyr.payload assert(tzsp_tag_decrypted_no.type == 16) assert(tzsp_tag_decrypted_no.len == 1) assert(tzsp_tag_decrypted_no.decrypted == TZSPTagDecrypted.NO) tzsp_tag_decrypted_yes= tzsp_tag_decrypted_no.payload assert(tzsp_tag_decrypted_yes.type == 16) assert(tzsp_tag_decrypted_yes.len == 1) assert(tzsp_tag_decrypted_yes.decrypted == TZSPTagDecrypted.YES) tzsp_tag_end = tzsp_tag_decrypted_yes.payload assert(tzsp_tag_end.type == 1) == basic TZSP header with RX Packet and FCS error bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ TZSPTagError(fcs_error=TZSPTagError.NO) / \ TZSPTagError(fcs_error=TZSPTagError.YES) / \ TZSPTagEnd() / \ Ether(src='00:03:03:03:03:03', dst='00:04:04:04:04:04') / \ Raw('foobar') frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr.type == TZSP.TYPE_RX_PACKET) tzsp_tag_error_no = tzsp_lyr.payload assert(tzsp_tag_error_no.type == 17) assert(tzsp_tag_error_no.len == 1) assert(tzsp_tag_error_no.fcs_error == TZSPTagError.NO) tzsp_tag_error_yes = tzsp_tag_error_no.payload assert(tzsp_tag_error_yes.type == 17) assert(tzsp_tag_error_yes.len == 1) assert(tzsp_tag_error_yes.fcs_error == TZSPTagError.YES) tzsp_tag_end = tzsp_tag_error_yes.payload assert(tzsp_tag_end.type == 1) == basic TZSP header with RX Packet and RXChannel bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ TZSPTagRXChannel(rx_channel=123) / \ TZSPTagEnd() / \ Ether(src='00:03:03:03:03:03', dst='00:04:04:04:04:04') / \ Raw('foobar') frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr.type == TZSP.TYPE_RX_PACKET) tzsp_tag_rx_channel = tzsp_lyr.payload assert(tzsp_tag_rx_channel.type == 18) assert(tzsp_tag_rx_channel.len == 1) assert(tzsp_tag_rx_channel.rx_channel == 123) tzsp_tag_end = tzsp_tag_rx_channel.payload assert(tzsp_tag_end.type == 1) == basic TZSP header with RX Packet and Packet count bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ TZSPTagPacketCount(packet_count=0x44332211) / \ TZSPTagEnd() / \ Ether(src='00:03:03:03:03:03', dst='00:04:04:04:04:04') / \ Raw('foobar') frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr.type == TZSP.TYPE_RX_PACKET) tzsp_tag_packet_count = tzsp_lyr.payload assert(tzsp_tag_packet_count.type == 40) assert(tzsp_tag_packet_count.len == 4) assert(tzsp_tag_packet_count.packet_count == 0x44332211) tzsp_tag_end = tzsp_tag_packet_count.payload assert(tzsp_tag_end.type == 1) == basic TZSP header with RX Packet and RXFrameLength bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ TZSPTagRXFrameLength(rx_frame_length=0xbad0) / \ TZSPTagEnd() / \ Ether(src='00:03:03:03:03:03', dst='00:04:04:04:04:04') / \ Raw('foobar') frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr.type == TZSP.TYPE_RX_PACKET) tzsp_tag_frame_length = tzsp_lyr.payload assert(tzsp_tag_frame_length.type == 41) assert(tzsp_tag_frame_length.len == 2) assert(tzsp_tag_frame_length.rx_frame_length == 0xbad0) tzsp_tag_end = tzsp_tag_frame_length.payload assert(tzsp_tag_end.type == 1) == basic TZSP header with RX Packet and WLAN RADIO HDR SERIAL bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) SENSOR_ID = b'1E:AT:DE:AD:BE:EF' frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ TZSPTagWlanRadioHdrSerial(sensor_id=SENSOR_ID) / \ TZSPTagEnd() / \ Ether(src='00:03:03:03:03:03', dst='00:04:04:04:04:04') / \ Raw('foobar') frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr.type == TZSP.TYPE_RX_PACKET) tzsp_tag_sensor_id = tzsp_lyr.payload assert(tzsp_tag_sensor_id.type == 60) assert(tzsp_tag_sensor_id.len == len(SENSOR_ID)) assert(tzsp_tag_sensor_id.sensor_id == SENSOR_ID) tzsp_tag_end = tzsp_tag_sensor_id.payload assert(tzsp_tag_end.type == 1) == handling of unknown tag bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) SENSOR_ID = b'1E:AT:DE:AD:BE:EF' frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ TZSPTagUnknown(len=6, data=b'\x06\x05\x04\x03\x02\x01') / \ TZSPTagWlanRadioHdrSerial(sensor_id=SENSOR_ID) / \ TZSPTagEnd() / \ Ether(src='00:03:03:03:03:03', dst='00:04:04:04:04:04') / \ Raw('foobar') frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr) tzsp_tag_unknown = tzsp_lyr.payload assert(type(tzsp_tag_unknown) is TZSPTagUnknown) = all layers stacked bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02')/ \ IP(src='1.1.1.1', dst='2.2.2.2')/ \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT)/ \ TZSP()/ \ TZSPTagRawRSSIByte(raw_rssi=12)/ \ TZSPTagRawRSSIShort(raw_rssi=1234)/ \ TZSPTagSNRByte(snr=12)/ \ TZSPTagSNRShort(snr=1234)/ \ TZSPTagDataRate(data_rate = TZSPTagDataRate.DATA_RATE_54)/ \ TZSPTagTimestamp(timestamp=12345)/ \ TZSPTagContentionFree(contention_free = TZSPTagContentionFree.NO)/ \ TZSPTagContentionFree(contention_free = TZSPTagContentionFree.YES)/ \ TZSPTagDecrypted(decrypted=TZSPTagDecrypted.NO)/ \ TZSPTagDecrypted(decrypted=TZSPTagDecrypted.YES)/ \ TZSPTagError(fcs_error = TZSPTagError.YES)/ \ TZSPTagError(fcs_error = TZSPTagError.NO)/ \ TZSPTagRXChannel(rx_channel = 42)/ \ TZSPTagPacketCount(packet_count = 987654)/ \ TZSPTagRXFrameLength(rx_frame_length = 0x0bad)/ \ TZSPTagWlanRadioHdrSerial(sensor_id = 'foobar')/ \ TZSPTagPadding()/ \ TZSPTagEnd()/ \ Ether(src='00:03:03:03:03:03', dst='00:04:04:04:04:04')/ \ ARP() frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) tzsp_raw_rssi_byte_lyr = tzsp_lyr.payload assert(tzsp_raw_rssi_byte_lyr.type == 10) tzsp_tag_raw_rssi_short = tzsp_raw_rssi_byte_lyr.payload assert(tzsp_tag_raw_rssi_short.type == 10) tzsp_tag_snr_byte = tzsp_tag_raw_rssi_short.payload assert(tzsp_tag_snr_byte.type == 11) tzsp_tag_snr_short = tzsp_tag_snr_byte.payload assert(tzsp_tag_snr_short.type == 11) tzsp_tag_data_rate = tzsp_tag_snr_short.payload assert(tzsp_tag_data_rate.type == 12) tzsp_tag_timestamp = tzsp_tag_data_rate.payload assert(tzsp_tag_timestamp.type == 13) tzsp_tag_contention_free_no = tzsp_tag_timestamp.payload assert(tzsp_tag_contention_free_no.type == 15) tzsp_tag_contention_free_yes = tzsp_tag_contention_free_no.payload assert(tzsp_tag_contention_free_yes.type == 15) tzsp_tag_decrypted_no = tzsp_tag_contention_free_yes.payload assert(tzsp_tag_decrypted_no.type == 16) tzsp_tag_decrypted_yes = tzsp_tag_decrypted_no.payload assert(tzsp_tag_decrypted_yes.type == 16) tzsp_tag_error_yes = tzsp_tag_decrypted_yes.payload assert(tzsp_tag_error_yes.type == 17) tzsp_tag_error_no = tzsp_tag_error_yes.payload assert(tzsp_tag_error_no.type == 17) tzsp_tag_rx_channel = tzsp_tag_error_no.payload assert(tzsp_tag_rx_channel.type == 18) tzsp_tag_packet_count = tzsp_tag_rx_channel.payload assert(tzsp_tag_packet_count.type == 40) tzsp_tag_frame_length = tzsp_tag_packet_count.payload assert(tzsp_tag_frame_length.type == 41) tzsp_tag_sensor_id = tzsp_tag_frame_length.payload assert(tzsp_tag_sensor_id.type == 60) tzsp_tag_padding = tzsp_tag_sensor_id.payload assert(tzsp_tag_padding.type == 0) tzsp_tag_end = tzsp_tag_padding.payload assert(tzsp_tag_end.type == 1) encapsulated_payload = tzsp_tag_end.payload encapsulated_ether_lyr = encapsulated_payload.getlayer(Ether) assert(encapsulated_ether_lyr.src == '00:03:03:03:03:03') + corner cases = state tags value range == TZSPTagContentionFree bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02')/ \ IP(src='1.1.1.1', dst='2.2.2.2')/ \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT)/ \ TZSP()/ \ TZSPTagContentionFree(contention_free = 0xff)/ \ TZSPTagEnd() frm = frm.build() frm = Ether(frm) tzsp_tag_contention_free = frm.getlayer(TZSPTagContentionFree) assert(tzsp_tag_contention_free) tzsp_tag_contention_free_attr = tzsp_tag_contention_free.get_field('contention_free') assert(tzsp_tag_contention_free_attr) symb_str = tzsp_tag_contention_free_attr.i2repr(tzsp_tag_contention_free, tzsp_tag_contention_free.contention_free) assert(symb_str == 'yes') == TZSPTagError bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02')/ \ IP(src='1.1.1.1', dst='2.2.2.2')/ \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT)/ \ TZSP()/ \ TZSPTagError(fcs_error=TZSPTagError.NO)/ \ TZSPTagEnd() frm = frm.build() frm = Ether(frm) tzsp_tag_error = frm.getlayer(TZSPTagError) assert(tzsp_tag_error) tzsp_tag_error_attr = tzsp_tag_error.get_field('fcs_error') assert(tzsp_tag_error_attr) symb_str = tzsp_tag_error_attr.i2repr(tzsp_tag_error, tzsp_tag_error.fcs_error) assert(symb_str == 'no') frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02')/ \ IP(src='1.1.1.1', dst='2.2.2.2')/ \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT)/ \ TZSP()/ \ TZSPTagError(fcs_error=TZSPTagError.YES + 1)/ \ TZSPTagEnd() frm = frm.build() frm = Ether(frm) tzsp_tag_error = frm.getlayer(TZSPTagError) assert(tzsp_tag_error) tzsp_tag_error_attr = tzsp_tag_error.get_field('fcs_error') assert(tzsp_tag_error_attr) symb_str = tzsp_tag_error_attr.i2repr(tzsp_tag_error, tzsp_tag_error.fcs_error) assert(symb_str == 'reserved') == missing TZSP header before end tag frm = TZSPTagEnd()/ \ Ether(src='00:03:03:03:03:03', dst='00:04:04:04:04:04')/ \ ARP() frm = frm.build() try: frm = TZSPTagEnd(frm) assert False except TZSPStructureException: pass == invalid length field for given tag bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ TZSPTagRawRSSIByte(len=3) / \ TZSPTagEnd() frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(type(tzsp_lyr.payload) is Raw ) == handling of unknown tag - payload to short bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) SENSOR_ID = '1E:AT:DE:AD:BE:EF' frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ Raw(b'\xff\x0a\x01\x02\x03\x04\x05') frm = frm.build() frm = Ether(frm) frm.show() tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr) raw_lyr = tzsp_lyr.payload assert(type(raw_lyr) is Raw) assert(raw_lyr.load == b'\xff\x0a\x01\x02\x03\x04\x05') == handling of unknown tag - no payload after tag type bind_layers(UDP, TZSP, dport=TZSP_PORT_DEFAULT) SENSOR_ID = '1E:AT:DE:AD:BE:EF' frm = Ether(src='00:01:01:01:01:01', dst='00:02:02:02:02:02') / \ IP(src='1.1.1.1', dst='2.2.2.2') / \ UDP(sport=12345, dport=TZSP_PORT_DEFAULT) / \ TZSP() / \ Raw(b'\xff') frm = frm.build() frm = Ether(frm) tzsp_lyr = frm.getlayer(TZSP) assert(tzsp_lyr) raw_lyr = tzsp_lyr.payload assert(type(raw_lyr) is Raw) assert(raw_lyr.load == b'\xff')