I am not seeing bridge.py in my installs. I do have hb_bridge.py and hb_bridge_all.py. Are these interchangeable?
With IPSC_Bridge.py I am getting the following errors at start up.
root@AI6BX-DMR:/opt/DMRlink# python IPSC_Bridge.py
INFO 2019-12-01 08:32:03,184 DMRlink 'IPSC_Bridge.py' (c) 2015 N0MJS & the K0USY Group - SYSTEM STARTING...
INFO 2019-12-01 08:32:03,185 Version 20170620
INFO 2019-12-01 08:32:03,185 ID ALIAS MAPPER: 'peer_ids.json' is current, not downloaded
INFO 2019-12-01 08:32:03,186 ID ALIAS MAPPER: 'subscriber_ids.json' is current, not downloaded
INFO 2019-12-01 08:32:03,308 ID ALIAS MAPPER: peer_ids dictionary is available
INFO 2019-12-01 08:32:05,256 ID ALIAS MAPPER: subscriber_ids dictionary is available
INFO 2019-12-01 08:32:05,259 (RIFF_PEER) IPSC Instance Created: 92374, 0.0.0.0:62031
INFO 2019-12-01 08:32:05,260 section = RIFF_PEER
INFO 2019-12-01 08:32:05,260 Section RIFF_PEER was not found, using DEFAULTS
INFO 2019-12-01 08:32:05,260 gateway = 127.0.0.1
INFO 2019-12-01 08:32:05,261 toGatewayPort = 31003
INFO 2019-12-01 08:32:05,261 fromGatewayPort = 31000
INFO 2019-12-01 08:32:05,261 DMRLink IPSC Bridge
INFO 2019-12-01 08:32:05,264 (RIFF_PEER) Registering with the Master: 22.214.171.124:7000
INFO 2019-12-01 08:32:05,265 (RIFF_MASTER) IPSC Instance Created: 54321, 0.0.0.0:62042
INFO 2019-12-01 08:32:05,265 section = RIFF_MASTER
INFO 2019-12-01 08:32:05,265 Section RIFF_MASTER was not found, using DEFAULTS
INFO 2019-12-01 08:32:05,266 gateway = 127.0.0.1
INFO 2019-12-01 08:32:05,266 toGatewayPort = 31003
INFO 2019-12-01 08:32:05,266 fromGatewayPort = 31000
INFO 2019-12-01 08:32:05,266 DMRLink IPSC Bridge
Traceback (most recent call last):
File "IPSC_Bridge.py", line 308, in <module>
systems[system] = ambeIPSC(system, CONFIG, logger, report_server)
File "IPSC_Bridge.py", line 96, in __init__
self.ipsc_ambe = AMBE_IPSC(self, _name, _config, _logger, self._ambeRxPort)
File "/usr/local/lib/python2.7/dist-packages/dmr_utils/ambe_bridge.py", line 525, in __init__
AMBE_BASE.__init__(self, _parent, _name, _config, _logger, _port)
File "/usr/local/lib/python2.7/dist-packages/dmr_utils/ambe_bridge.py", line 187, in __init__
self.udp_port = reactor.listenUDP(self._ambeRxPort, UDP_IMPORT(self.import_datagramReceived))
File "/usr/lib/python2.7/dist-packages/twisted/internet/posixbase.py", line 369, in listenUDP
File "/usr/lib/python2.7/dist-packages/twisted/internet/udp.py", line 178, in startListening
File "/usr/lib/python2.7/dist-packages/twisted/internet/udp.py", line 198, in _bindSocket
raise error.CannotListenError(self.interface, self.port, le)
twisted.internet.error.CannotListenError: Couldn't listen on any:31000: [Errno 98] Address already in use.
From: <main@DVSwitch.groups.io> on behalf of "Cort N0MJS via Groups.Io" <n0mjs@...>
Date: Saturday, November 30, 2019 at 6:31 PM
To: "email@example.com" <main@DVSwitch.groups.io>
Subject: Re: [DVSwitch] Linking dmrlink and HBlink3 #dmrlink #hblink
You’re really going to have to think about your project goals and make a decision. I have run systems with confbridge.py running on one side and bridge.py on the other… There are a LOT of things that can get you in trouble. You’ll have to remember, you’re essentially running two separate multi-system “networks” that are cross-connected to each other.
If at all possible, I’d recommend handling all of your call routing in bridge.py and translating the Motorolas into home-brew. Why this way and not the other? I’ve sunset development on DMRlink – mostly because I don’t even have a Motorola repeater anymore and I need at least 2 to really do any development work with it. Time is another reason. But I also see home-brew protocol and MMDVM as the future of digital ham radio… for me at least, and since I’m not getting paid for this, I’ll be following the beat of my own drum :)
Because you’re so Motorola heavy, you should consider running the call routing in confbridge.py on the IPSC side and bring your MMDVMs in as the afterthought. Just remember that there will be no new development on DMRlink unless someone else does it. It is what it is.
For the KS-DMR network, when someone shows up with a Motorola repeater, we deploy an IPSC_Bridge.py and HB_bridge.py combo for each one. The idea is simply convert the Motorola to speak home-brew as fast and as close to the source as possible. Often times this is a small single board computer – usually with “Pi” in the name somewhere – right with the repeater itself. Other times, for folks who want to be a part of it it just can’t handle (or just don’t want to) running those services we provide them on our infrastructure.
Thank you for your timely and detailed response. With the links Steve sent, I think I am ready to have a go at it again. That said, I note in your response below that use of TGID and some repeater grouping would be desireable which is the other benefit that has drawn me to your work. Would I still use the confbridge.py or bridge.py after setting up IPSC? Would best practice be to remove my current installs of DMRlink and HBlink3 before installing the suggested branch versions?
Why not just connect the XPR8300s to the IPSC system with the SLR5700s? By the way, the “master” is inconsequential. The only purpose it serves is bootstrapping a new peer in the IPSC mesh – it doesn’t really matter who plays that role. When systems are meshed, they all operate as “peers” for the purpose of passing traffic. Master is only unique for link establishment. As for the hotspots, there’s no need to use bridge.py either.
My recommendation is to connect all Motorola repeaters in the same IPSC mesh (system, network – whatever you want to call it), and then use IPSC_Bridge.py and HB_Bridge.py to connect a single Homebrew server (master) over to the Motorolas. BTW: On the home-brew side, “master” does have significant meaning since the repeaters to not form a mesh like IPSC. All traffic has to traverse a central server, which just happens to be (unfortunately, because it really clouds the issue) a “master”.
IPSC_Bridge.py and HB_Bridge.py are found in the specific branches of DMRlink and HBlink (the original Python2 version) named for those programs. You’ll have to clone and switch the branch, or just clone the branch you want directly. Please don’t be temped to just use the versions of confbridge.py etc. with the “Bridge” branches. They’re based on quite old versions that are missing a lot of updates to other programs, but they are EXTREMELY stable and do the job they need to for protocol bridging quite well.
If you are struggling with how branches and stuff work with GitHub, the Internet us FULL of how-tos and tutorials on the topic.
I’m advising this setup because it appears you’re heavily invested in Motorola IPSC networking already, and the solution I’ve offered provides the most continuity for what you’re used to and already doing with the SLR5700s. There’s no need to run confbridge.py or bridge.py unless unless you’re wanting to segregated traffic between parts of your system – that is to say, have a TGID available on a group of repeaters not available on another group, etc.
If you reach the point where you have too many machines in a single IPSC mesh and you’re using too much bandwidth (n-1 stream count and all) you could look into proxy.py in DMRlink, which will transparently break up your IPSC mesh into smaller sub-groups.
- Currently I have an SLR5700 functioning as a master hosting six Motorola DMR repeaters. These all live on a public Internet address.
- I have two Moto XPR8300’s that I want to peer to DMRlink and bridge to the current SLR5700 Master. Ultimately, I wish to transition the six repeaters from the 5700 so they are all on DMR link.
- I am currently working with one MMDVM hotspot on the HBlink3 side of things with the goal of bridging the two sides together, something I can’t do with the SLR5700. Once working, hotspots will likely grow to about 15 or 20 devices.
- Down the road the total number of Moto repeaters will grow to about 15.
- This will be operated on a private network supported by ARDEN mesh networking operating in the 10.x.x.x domain and will have a gateway to the broader Internet via an AMPR.or 44.x.x.x address for hotspot connections when members travel.
- The system will be migrated to a Debian 9 Blade server once ready for production deployment. I am currently building on a Vultr Debian VM for test and learning purposes.
I need to understand what you’re attempting to do. Please fill in the gaps for me?
You have a number of Motorola repeaters and MMDVM devices. You’re trying to make them all talk together on a private network. You do not have any “upstream” connections to the “big networks” or laterals to other independent networks?
Is that right? The use case changes best practice. Also, which “side” has more devices – the Motorola repeaters or the MMDVM devices? Today? Expected in the future?
First, my apology as I am still new to the groups here and finding my way through these tools. DVSwitch is clearly a powerful set of programs and bridges that I am certain will do exactly what I am trying to accomplish Once I better understand the relationships between them and some of the pieces that make those links work. I am currently running:
Bridge.py and have also tried bridge_all.py
Following are my files:
Again, I sincerely appreciate any guidance possible and suspect I am missing something that will be blatantly obvious once pointed out.