Lets test the TOPO!

topo
Simon 3 years ago
parent d1cee872e5
commit 011db46f47

@ -38,6 +38,7 @@ from time import time,sleep,perf_counter
import importlib.util
import re
import copy
import json
from setproctitle import setproctitle
#from crccheck.crc import Crc32
@ -409,6 +410,15 @@ def subMapWrite():
except:
logger.warning('(SUBSCRIBER) Cannot write SUB_MAP to file')
def topoWrite():
try:
_fh = open(CONFIG['ALIASES']['PATH'] + CONFIG['ALIASES']['TOPO_FILE'],'w')
json.dump(TOPO,_fh)
_fh.close()
logger.info('(TOPO) Writing topography file to disk')
except:
logger.warning('(TOPO) Cannot write topography file to disk')
#Subscriber Map trimmer loop
def SubMapTrimmer():
logger.debug('(SUBSCRIBER) Subscriber Map trimmer loop started')
@ -552,9 +562,8 @@ def topoTrimmer():
if len(TOPO[_src]) == 0:
_toprem.append(_src)
for _remove in _toprem:
TOPO.pop(_remove)
print(TOPO)
TOPO.pop(_remove)
topoWrite()
@ -2933,6 +2942,9 @@ if __name__ == '__main__':
reactor.stop()
if CONFIG['ALIASES']['SUB_MAP_FILE']:
subMapWrite()
if CONFIG['ALIASES']['TOPO_FILE']:
topoWrite()
# Set signal handers so that we can gracefully exit if need be
for sig in [signal.SIGINT, signal.SIGTERM]:
@ -3149,7 +3161,7 @@ if __name__ == '__main__':
#topography trimmer
topo_trimmer_task = task.LoopingCall(topoTrimmer)
topo_trimmer = topo_trimmer_task.start(610)
topo_trimmer = topo_trimmer_task.start(10)#610
topo_trimmer.addErrback(loopingErrHandle)

@ -186,7 +186,9 @@ def build_config(_config_file):
'SUB_MAP_FILE': config.get(section, 'SUB_MAP_FILE'),
'LOCAL_SUBSCRIBER_FILE': config.get(section, 'LOCAL_SUBSCRIBER_FILE'),
'SERVER_ID_URL': config.get(section, 'SERVER_ID_URL'),
'SERVER_ID_FILE': config.get(section, 'SERVER_ID_FILE')
'SERVER_ID_FILE': config.get(section, 'SERVER_ID_FILE'),
'TOPO_FILE': config.get(section, 'TOPO_FILE'),
})

@ -269,10 +269,12 @@ class OPENBRIDGE(DatagramProtocol):
logger.trace('(%s) *BridgeControl* not sending BCVE, TARGET_IP currently not known',self._system)
def send_my_bcto(self):
_hops = 1
_hops = _hops.to_bytes(1,'big')
for system in self._CONFIG['SYSTEMS']:
if self._CONFIG['SYSTEMS'][system]['MODE'] == 'OPENBRIDGE' and self._CONFIG['SYSTEMS'][system]['VER'] > 5:
if self._config['ENHANCED_OBP'] and self._config['TARGET_IP']:
_packet = b''.join([BCTO,self._CONFIG['GLOBAL']['SERVER_ID'],self._CONFIG['SYSTEMS'][system]['NETWORK_ID'],self._CONFIG['SYSTEMS'][system]['VER'].to_bytes(1,"big")])
_packet = b''.join([BCTO,self._CONFIG['GLOBAL']['SERVER_ID'],self._CONFIG['SYSTEMS'][system]['NETWORK_ID'],self._CONFIG['SYSTEMS'][system]['VER'].to_bytes(1,"big"),_hops])
_h = blake2b(key=self._config['PASSPHRASE'], digest_size=16)
_h.update(_packet)
_hash = _h.digest()
@ -283,17 +285,19 @@ class OPENBRIDGE(DatagramProtocol):
logger.trace('(%s) *BridgeControl* not sending BCTO, TARGET_IP currently not known. DST: %s, VER: %s ',self._system,int_id(self._CONFIG['SYSTEMS'][system]['NETWORK_ID']),self._CONFIG['SYSTEMS'][system]['VER'])
def retransmit_bcto(self,_string):
def retransmit_bcto(self,_string,_hops):
_hops += 1
_hops = _hops.to_bytes(1,'big')
for system in self._CONFIG['SYSTEMS']:
if self._CONFIG['SYSTEMS'][system]['MODE'] == 'OPENBRIDGE' and self._CONFIG['SYSTEMS'][system]['VER'] > 5:
if self._config['ENHANCED_OBP'] and self._config['TARGET_IP']:
_packet = b''.join([BCTO,_string])
_packet = b''.join([BCTO,_string,_hops])
_h = blake2b(key=self._config['PASSPHRASE'], digest_size=16)
_h.update(_packet)
_hash = _h.digest()
_packet = b''.join([_packet,_hash])
self.transport.write(_packet, (self._config['TARGET_IP'], self._config['TARGET_PORT']))
logger.trace('(%s) *BridgeControl* retransmitted BCTO.')
logger.trace('(%s) *BridgeControl* retransmitted BCTO.',self._system)
else:
logger.trace('(%s) *BridgeControl* not retransmitting BCTO, TARGET_IP currently not known.',self._system)
@ -751,9 +755,14 @@ class OPENBRIDGE(DatagramProtocol):
_src[4:8]
_dst[8:12]
_ver[12:13]
_hops[13:14]
if _hash == _hash2:
logger.trace('(%s) *ProtoControl* BCTO received: %s connected to %s with proto ver. %s'. self._system, int_id(_src), int_id(_dst), int.from_bytes_ver,'big')
self.retransmit_bcto(_packet[:13])
if (int(_hops.from_bytes('big')) < 10):
retransmit_bcto(_packet[:14])
else:
if _hops > 10:
logger.trace('(%s) *BridgeControl* not retransmitting BCTO - hop count exceeded',self._system)
self.process_bcto(src,dst,ver)
else:
h,p = _sockaddr

Loading…
Cancel
Save

Powered by TurnKey Linux.