Multiple - See Extended
Move bridge.py's config information to a separate file. Provide a sample file for bridge.py (bridge_rules_SAMPLE.py) Tell peers we're a 3rd party app and repeater monitor.
This commit is contained in:
parent
2c826f76ed
commit
7a0cedb7cb
1
.gitignore
vendored
1
.gitignore
vendored
@ -3,4 +3,5 @@
|
|||||||
Icon
|
Icon
|
||||||
dmrlink.cfg
|
dmrlink.cfg
|
||||||
pub*
|
pub*
|
||||||
|
bridge_rules.py
|
||||||
*.pyc
|
*.pyc
|
||||||
|
45
bridge.py
45
bridge.py
@ -21,44 +21,13 @@ from dmrlink import IPSC, UnauthIPSC, NETWORK, networks, int_id, send_to_ipsc, d
|
|||||||
# RPT_WAKE_UP = b'\x85' + NETWORK[_network]['LOCAL']['RADIO_ID] + b'\x00\x00\x00\x01' + b'\x01' + b'\x01'
|
# RPT_WAKE_UP = b'\x85' + NETWORK[_network]['LOCAL']['RADIO_ID] + b'\x00\x00\x00\x01' + b'\x01' + b'\x01'
|
||||||
# TS1 = 0, TS2 = 1
|
# TS1 = 0, TS2 = 1
|
||||||
|
|
||||||
RULES = {
|
# Import Bridging rules
|
||||||
'K0USY': {
|
#
|
||||||
'GROUP_VOICE': [
|
try:
|
||||||
{'SRC_GROUP': b'\x00\x0C\x30', 'SRC_TS': 1, 'DST_NET': 'LAWRENCE', 'DST_GROUP': b'\x00\x0C\x30', 'SRC_TS': 1},
|
from bridge_rules import RULES
|
||||||
{'SRC_GROUP': b'\x00\x0C\x30', 'SRC_TS': 1, 'DST_NET': 'TEST', 'DST_GROUP': b'\x00\x00\xD2', 'SRC_TS': 1}
|
except ImportError:
|
||||||
],
|
sys.exit('Bridging rules file not found or invalid')
|
||||||
'PRIVATE_VOICE': [
|
|
||||||
],
|
|
||||||
'GROUP_DATA': [
|
|
||||||
],
|
|
||||||
'PRIVATE_DATA': [
|
|
||||||
]
|
|
||||||
},
|
|
||||||
'LAWRENCE': {
|
|
||||||
'GROUP_VOICE': [
|
|
||||||
{'SRC_GROUP': b'\x00\x0C\x30', 'SRC_TS': 1, 'DST_NET': 'K0USY', 'DST_GROUP': b'\x00\x0C\x30', 'SRC_TS': 1},
|
|
||||||
{'SRC_GROUP': b'\x00\x0C\x30', 'SRC_TS': 1, 'DST_NET': 'TEST', 'DST_GROUP': b'\x00\x00\xD2', 'SRC_TS': 1}
|
|
||||||
],
|
|
||||||
'PRIVATE_VOICE': [
|
|
||||||
],
|
|
||||||
'GROUP_DATA': [
|
|
||||||
],
|
|
||||||
'PRIVATE_DATA': [
|
|
||||||
]
|
|
||||||
},
|
|
||||||
'TEST': {
|
|
||||||
'GROUP_VOICE': [
|
|
||||||
{'SRC_GROUP': b'\x00\x00\xD2', 'SRC_TS': 1, 'DST_NET': 'K0USY', 'DST_GROUP': b'\x00\x0C\x30', 'SRC_TS': 1},
|
|
||||||
{'SRC_GROUP': b'\x00\x00\xD2', 'SRC_TS': 1, 'DST_NET': 'LAWRENCE', 'DST_GROUP': b'\x00\x0C\x30', 'SRC_TS': 1}
|
|
||||||
],
|
|
||||||
'PRIVATE_VOICE': [
|
|
||||||
],
|
|
||||||
'GROUP_DATA': [
|
|
||||||
],
|
|
||||||
'PRIVATE_DATA': [
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class bridgeIPSC(IPSC):
|
class bridgeIPSC(IPSC):
|
||||||
|
|
||||||
|
40
bridge_rules_SAMPLE.py
Normal file
40
bridge_rules_SAMPLE.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
'''
|
||||||
|
The following is an example for your bridge_rules file. Note, all bridging is ONE-WAY!
|
||||||
|
Rules for an IPSC network indicate destination IPSC network for the Group ID specified
|
||||||
|
(allowing transcoding of the Group ID to a different value). Group IDs are specified
|
||||||
|
as hex strings.
|
||||||
|
|
||||||
|
The IPSC name must match an IPSC name from dmrlink.cfg.
|
||||||
|
|
||||||
|
The example below cross-patches TGID 1 on an IPSC network named "IPSC_FOO" with TGID 2
|
||||||
|
on an IPSC network named "IPSC_BAR".
|
||||||
|
|
||||||
|
THIS EXAMPLE WILL NOT WORK AS IT IS - YOU MUST SPECIFY NAMES AND GROUP IDS!!!
|
||||||
|
'''
|
||||||
|
|
||||||
|
RULES = {
|
||||||
|
'IPSC_FOO': {
|
||||||
|
'GROUP_VOICE': [
|
||||||
|
{'SRC_GROUP': b'\x00\x00\x01', 'DST_NET': 'IPSC_BAR', 'DST_GROUP': b'\x00\x00\x02'},
|
||||||
|
# Repeat the above line for as many rules for this IPSC network as you want.
|
||||||
|
],
|
||||||
|
'PRIVATE_VOICE': [
|
||||||
|
],
|
||||||
|
'GROUP_DATA': [
|
||||||
|
],
|
||||||
|
'PRIVATE_DATA': [
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'IPSC_BAR:' {
|
||||||
|
'GROUP_VOICE': [
|
||||||
|
{'SRC_GROUP': b'\x00\x00\x02', 'DST_NET': 'IPSC_FOO', 'DST_GROUP': b'\x00\x00\x01'},
|
||||||
|
# Repeat the above line for as many rules for this IPSC network as you want.
|
||||||
|
],
|
||||||
|
'PRIVATE_VOICE': [
|
||||||
|
],
|
||||||
|
'GROUP_DATA': [
|
||||||
|
],
|
||||||
|
'PRIVATE_DATA': [
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -134,11 +134,11 @@ try:
|
|||||||
})
|
})
|
||||||
|
|
||||||
if NETWORK[section]['LOCAL']['AUTH_ENABLED']:
|
if NETWORK[section]['LOCAL']['AUTH_ENABLED']:
|
||||||
# 0x1C - Voice and Data calls only, 0xDC - Voice, Data and XCMP/XNL
|
#0x60 - 3rd Party App & Repeater Monitoring, 0x1C - Voice and Data calls only, 0xDC - Voice, Data and XCMP/XNL
|
||||||
NETWORK[section]['LOCAL']['FLAGS'] = '\x00\x00\x00\x1C'
|
NETWORK[section]['LOCAL']['FLAGS'] = '\x00\x00\x60\x1C'
|
||||||
#NETWORK[section]['LOCAL']['FLAGS'] = '\x00\x00\x00\xDC'
|
#NETWORK[section]['LOCAL']['FLAGS'] = '\x00\x00\x60\xDC'
|
||||||
else:
|
else:
|
||||||
NETWORK[section]['LOCAL']['FLAGS'] = '\x00\x00\x00\x0C'
|
NETWORK[section]['LOCAL']['FLAGS'] = '\x00\x00\x60\x0C'
|
||||||
|
|
||||||
if not NETWORK[section]['LOCAL']['TS1_LINK'] and not NETWORK[section]['LOCAL']['TS2_LINK']:
|
if not NETWORK[section]['LOCAL']['TS1_LINK'] and not NETWORK[section]['LOCAL']['TS2_LINK']:
|
||||||
NETWORK[section]['LOCAL']['MODE'] = '\x65'
|
NETWORK[section]['LOCAL']['MODE'] = '\x65'
|
||||||
|
Loading…
Reference in New Issue
Block a user