apply CRC check to HBP traffic too

crc16
Simon 4 years ago
parent 0d93bbbccb
commit 3a65e7379e
No known key found for this signature in database
GPG Key ID: 6ACF11630B5D8F82

@ -1487,7 +1487,8 @@ class routerOBP(OPENBRIDGE):
'lastSeq': False,
'lastData': False,
'RX_PEER': _peer_id,
'packets': 0
'packets': 0,
'crcs': []
}
@ -1606,6 +1607,9 @@ class routerOBP(OPENBRIDGE):
else:
logger.info('(%s) UNIT Data not bridged to HBP on slot %s - target busy: %s DST_ID: %s',self._system,_d_slot,_d_system,_int_dst_id)
self.STATUS[_stream_id]['crcs'].append(_pkt_crc)
if _call_type == 'group' or _call_type == 'vcsbk':
# Is this a new call stream?
if (_stream_id not in self.STATUS):
@ -1727,7 +1731,6 @@ class routerOBP(OPENBRIDGE):
self.STATUS[_stream_id]['crcs'].append(_pkt_crc)
print(self.STATUS[_stream_id]['crcs'])
self.STATUS[_stream_id]['LAST'] = pkt_time
@ -1794,7 +1797,8 @@ class routerHBP(HBSYSTEM):
},
'lastSeq': False,
'lastData': False,
'packets': 0
'packets': 0,
'crcs': []
},
2: {
'RX_START': time(),
@ -1823,7 +1827,8 @@ class routerHBP(HBSYSTEM):
},
'lastSeq': False,
'lastData': False,
'packets': 0
'packets': 0,
'crcs': []
}
}
@ -2054,6 +2059,8 @@ class routerHBP(HBSYSTEM):
dmrpkt = _data[20:53]
_bits = _data[15]
_pkt_crc = Crc16.calc(dmrpkt)
_nine = bytes_3(9)
_lang = CONFIG['SYSTEMS'][self._system]['ANNOUNCEMENT_LANGUAGE']
@ -2083,6 +2090,9 @@ class routerHBP(HBSYSTEM):
if _call_type == 'unit' and (_dtype_vseq == 6 or _dtype_vseq == 7 or _dtype_vseq == 8 or (_stream_id != self.STATUS[_slot]['RX_STREAM_ID'] and _dtype_vseq == 3)):
_data_call = True
self.STATUS[_slot]['packets'] = 0
self.STATUS[_slot]['crcs'] = []
if _dtype_vseq == 3:
logger.info('(%s) *UNIT CSBK* STREAM ID: %s SUB: %s (%s) PEER: %s (%s) DST_ID %s (%s), TS %s', \
self._system, int_id(_stream_id), get_alias(_rf_src, subscriber_ids), int_id(_rf_src), get_alias(_peer_id, peer_ids), int_id(_peer_id), get_alias(_dst_id, talkgroup_ids), int_id(_dst_id), _slot)
@ -2181,6 +2191,7 @@ class routerHBP(HBSYSTEM):
if (_stream_id != self.STATUS[_slot]['RX_STREAM_ID']):
self.STATUS[_slot]['packets'] = 0
self.STATUS[_slot]['crcs'] = []
self.STATUS[_slot]['_stopTgAnnounce'] = False
@ -2330,6 +2341,7 @@ class routerHBP(HBSYSTEM):
if (_stream_id != self.STATUS[_slot]['RX_STREAM_ID']):
self.STATUS[_slot]['packets'] = 0
self.STATUS[_slot]['crcs'] = []
if (self.STATUS[_slot]['RX_TYPE'] != HBPF_SLT_VTERM) and (pkt_time < (self.STATUS[_slot]['RX_TIME'] + STREAM_TO)) and (_rf_src != self.STATUS[_slot]['RX_RFS']):
logger.warning('(%s) Packet received with STREAM ID: %s <FROM> SUB: %s PEER: %s <TO> TGID %s, SLOT %s collided with existing call', self._system, int_id(_stream_id), int_id(_rf_src), int_id(_peer_id), int_id(_dst_id), _slot)
@ -2418,6 +2430,10 @@ class routerHBP(HBSYSTEM):
if _seq and _seq == self.STATUS[_slot]['lastSeq']:
logger.warning("(%s) *PacketControl* Duplicate sequence number %s, disgarding. Stream ID:, %s TGID: %s",self._system,_seq,int_id(_stream_id),int_id(_dst_id))
return
#Duplicate DMR payload to previuos packet (by CRC16)
if _pkt_crc in self.STATUS[_slot]['crcs']:
logger.warning("(%s) *PacketControl* DMR packet payload with CRC16: %s seen before in this stream, disgarding. Stream ID:, %s TGID: %s",self._system,_pkt_crc,int_id(_stream_id),int_id(_dst_id))
return
#Inbound out-of-order packets
if _seq and self.STATUS[_slot]['lastSeq'] and (_seq != 1) and (_seq < self.STATUS[_slot]['lastSeq']):
logger.warning("%s) *PacketControl* Out of order packet - last SEQ: %s, this SEQ: %s, disgarding. Stream ID:, %s TGID: %s ",self._system,self.STATUS[_slot]['lastSeq'],_seq,int_id(_stream_id),int_id(_dst_id))
@ -2553,6 +2569,8 @@ class routerHBP(HBSYSTEM):
self.STATUS[_slot]['RX_TIME'] = pkt_time
self.STATUS[_slot]['RX_STREAM_ID'] = _stream_id
self.STATUS[_slot]['crcs'].append(_pkt_crc)
#
# Socket-based reporting section
#

Loading…
Cancel
Save

Powered by TurnKey Linux.