Add maximum peer limit for master instances
This commit is contained in:
parent
8a6225bd8e
commit
83692f037c
@ -202,6 +202,7 @@ def build_config(_config_file):
|
|||||||
'MODE': config.get(section, 'MODE'),
|
'MODE': config.get(section, 'MODE'),
|
||||||
'ENABLED': config.getboolean(section, 'ENABLED'),
|
'ENABLED': config.getboolean(section, 'ENABLED'),
|
||||||
'REPEAT': config.getboolean(section, 'REPEAT'),
|
'REPEAT': config.getboolean(section, 'REPEAT'),
|
||||||
|
'MAX_PEERS': config.getint(section, 'MAX_PEERS'),
|
||||||
'EXPORT_AMBE': config.getboolean(section, 'EXPORT_AMBE'),
|
'EXPORT_AMBE': config.getboolean(section, 'EXPORT_AMBE'),
|
||||||
'IP': gethostbyname(config.get(section, 'IP')),
|
'IP': gethostbyname(config.get(section, 'IP')),
|
||||||
'PORT': config.getint(section, 'PORT'),
|
'PORT': config.getint(section, 'PORT'),
|
||||||
|
@ -142,12 +142,17 @@ TGID_ACL: PERMIT:ALL
|
|||||||
# and unused by anything else.
|
# and unused by anything else.
|
||||||
# Repeat - if True, the master repeats traffic to peers, False, it does nothing.
|
# Repeat - if True, the master repeats traffic to peers, False, it does nothing.
|
||||||
#
|
#
|
||||||
|
# MAX_PEERS -- maximun number of peers that may be connect to this master
|
||||||
|
# at any given time. This is very handy if you're allowing hotspots to
|
||||||
|
# connect, or using a limited computer like a Raspberry Pi.
|
||||||
|
#
|
||||||
# ACLs:
|
# ACLs:
|
||||||
# See comments in the GLOBAL stanza
|
# See comments in the GLOBAL stanza
|
||||||
[MASTER-1]
|
[MASTER-1]
|
||||||
MODE: MASTER
|
MODE: MASTER
|
||||||
ENABLED: True
|
ENABLED: True
|
||||||
REPEAT: True
|
REPEAT: True
|
||||||
|
MAX_PEERS: 10
|
||||||
EXPORT_AMBE: False
|
EXPORT_AMBE: False
|
||||||
IP:
|
IP:
|
||||||
PORT: 54000
|
PORT: 54000
|
||||||
|
@ -370,6 +370,8 @@ class HBSYSTEM(DatagramProtocol):
|
|||||||
|
|
||||||
elif _command == 'RPTL': # RPTLogin -- a repeater wants to login
|
elif _command == 'RPTL': # RPTLogin -- a repeater wants to login
|
||||||
_peer_id = _data[4:8]
|
_peer_id = _data[4:8]
|
||||||
|
# Check to see if we've reached the maximum number of allowed peers
|
||||||
|
if len(self._peers < self._config['MAX_PEERS']):
|
||||||
# Check for valid Radio ID
|
# Check for valid Radio ID
|
||||||
if acl_check(_peer_id, self._CONFIG['GLOBAL']['REG_ACL']) and acl_check(_peer_id, self._config['REG_ACL']):
|
if acl_check(_peer_id, self._CONFIG['GLOBAL']['REG_ACL']) and acl_check(_peer_id, self._config['REG_ACL']):
|
||||||
# Build the configuration data strcuture for the peer
|
# Build the configuration data strcuture for the peer
|
||||||
@ -405,6 +407,9 @@ class HBSYSTEM(DatagramProtocol):
|
|||||||
else:
|
else:
|
||||||
self.transport.write('MSTNAK'+_peer_id, _sockaddr)
|
self.transport.write('MSTNAK'+_peer_id, _sockaddr)
|
||||||
logger.warning('(%s) Invalid Login from Radio ID: %s Denied by Registation ACL', self._system, int_id(_peer_id))
|
logger.warning('(%s) Invalid Login from Radio ID: %s Denied by Registation ACL', self._system, int_id(_peer_id))
|
||||||
|
else:
|
||||||
|
self.transport.write('MSTNAK'+_peer_id, _sockaddr)
|
||||||
|
logger.warning('(%s) Registration denied from Radio ID: %s Maximum number of peers exceeded', self._system, int_id(_peer_id))
|
||||||
|
|
||||||
elif _command == 'RPTK': # Repeater has answered our login challenge
|
elif _command == 'RPTK': # Repeater has answered our login challenge
|
||||||
_peer_id = _data[4:8]
|
_peer_id = _data[4:8]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user