Skip to content

Commit a02b38c

Browse files
committed
excluding USRP packets by parse, pcap extraction of single-fragment-lc and vbptc32,11, release v0.5
1 parent 3861e42 commit a02b38c

File tree

5 files changed

+18
-2
lines changed

5 files changed

+18
-2
lines changed

okdmr/dmrlib/tools/pcap_tool.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from bitarray import bitarray
99
from kaitaistruct import KaitaiStruct
10+
from okdmr.dmrlib.etsi.fec.vbptc_32_11 import VBPTC3211
1011
from okdmr.kaitai.homebrew.mmdvm2020 import Mmdvm2020
1112
from okdmr.kaitai.hytera.ip_site_connect_heartbeat import IpSiteConnectHeartbeat
1213
from okdmr.kaitai.hytera.ip_site_connect_protocol import IpSiteConnectProtocol
@@ -43,10 +44,12 @@ def process_packet(self, data: bytes, packet: IP) -> Optional[FullLinkControl]:
4344
burst
4445
and burst.has_emb
4546
and burst.emb.link_control_start_stop == LCSS.SingleFragmentLCorCSBK
47+
and burst.embedded_signalling_bits.count(1)
4648
):
4749
print(
48-
f"Single burst data for VBPTC 32,11 [{burst.emb.preemption_and_power_control_indicator}] {burst.embedded_signalling_bits}"
50+
f"Single burst data for VBPTC 32,11 [{burst.emb.preemption_and_power_control_indicator}] on-air(fec protected) {burst.embedded_signalling_bits} (vbptc deinterleaved) {VBPTC3211.deinterleave_data_bits(burst.embedded_signalling_bits)} in {data.hex()}"
4951
)
52+
return
5053

5154
if (
5255
not burst

okdmr/dmrlib/utils/parsing.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ def parse_hytera_data(bytedata: bytes) -> KaitaiStruct:
4848

4949
def try_parse_packet(udpdata: bytes) -> Optional[KaitaiStruct]:
5050

51+
try:
52+
if udpdata[:4] == b"USRP":
53+
return None
54+
finally:
55+
pass
56+
5157
# Try MMDVM/Homebrew packets
5258
try:
5359
mmdvm = Mmdvm2020.from_bytes(udpdata)

okdmr/tests/dmrlib/etsi/fec/test_vbptc_32_11.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ def test_vbptc_sanity():
1515
def test_encode_decode_vbptc():
1616
bursts: List[(str,)] = [
1717
("00000100010110000000100010100100",),
18+
# following are not valid vbptc protected payloads, probably something proprietary / unidentified
19+
# ("00001100000100010010010001000001",),
20+
# ("00010111000010100000011001000100",),
1821
]
1922

2023
for (burst,) in bursts:

okdmr/tests/dmrlib/utils/test_parsing.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,7 @@ def test_parsing_detection():
5353
mmdvm_hex: str = "52505443002338c84f4b314c5044202034333331303030303034333331303030303030313031302e30303030303030302e3030303030303030304e6f7768657265202020202020202020202020204d756c74692d4d6f6465205265706561746572347777772e676f6f676c652e636f2e756b202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020323031393031333120202020202020202020202020202020202020202020202020202020202020204d4d44564d5f4d4d44564d5f48535f48617420202020202020202020202020202020202020202020"
5454
pkt: KaitaiStruct = try_parse_packet(bytes.fromhex(mmdvm_hex))
5555
assert isinstance(pkt, Mmdvm2020)
56+
57+
usrp_hex: str = "55535250000000730000000000000001000000000000000000000000000000001e00faffe2ffeeff00000c0012000c00e2ffcaffe2ff0c0048008400b400a2005a00060094ff3aff2eff4cff7cffd6ff1e00420066007e005a002a001800e2ffc4ffbeffacff9affa0ffcaff1200540084007e003600eeffbeffb2ffd6fffaff0c0012000600eefff4fffaff12003c003c001800f4ffd6ffc4ffdcff0c002a002a001e000000e2ffe8fffaff12002a001e00f4ffdcffcaffcaff00004e0084009c009c005a001200d0ff88ff58ff58ff64ff88ffd0ff240060006c0072005a0030001800eeffc4ffa6ff88ff82ffa6ffdcff12003c0054005400360018000600faffeeffe2ffe8ffe8ffeefffaff060006000c00180024001e0018000000eefff4ffeeff000018000c00faff06000600faff0c000c00faff06000000e8ffe8fffaff0c003c009000b40096004e00e2ff6aff2eff4cff7cffb8ffeeff00001200"
58+
pkt: Optional[KaitaiStruct] = try_parse_packet(bytes.fromhex(usrp_hex))
59+
assert pkt is None

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
author="Marek Sebera",
1818
author_email="marek.sebera@gmail.com",
1919
license="AGPL-3.0",
20-
version="0.4",
20+
version="0.5",
2121
packages=[
2222
"okdmr.dmrlib",
2323
"okdmr.dmrlib.transmission",

0 commit comments

Comments
 (0)