[P25nx] Welcome
Jamison Judge
jamison at jamisonjudge.com
Fri Jul 27 14:56:00 EDT 2018
> Oh dear god, don't let cisco do multicast, they suck total ass doing it.
THANK YOU…… Using cisco’s gre multipoint for this type of traffic is also a desperate plea for disaster.
> Our first work was doing programed IO at 9600 bps, and we just couldn't keep
> up
Interesting. Out of curiosity, was this using Go? I’ve never tried high-level synchronous bit banging in practice, but until I read this, my gut would have said that rate would be no problem.
> What I propose is to have a core network of servers/VM's, 4 to 8 world wide.
> These run linux and have GRE tunnels between them with OSPF for unicast and
> MOSPF/PIM SM for multicast.
I think it’s worth weighing the cost/benefit of a multicast infrastructure at all. Is the promise of theoretical "infinite scalability” worth all the complexity that’s introduced? From a pragmatic, here-and-now standpoint, we have a relatively small number of spokes that may very well naturally have very little path overlap anyway (ie an advanced multicast topology might end up acting as a defacto multiple-unicast anyway). Just a thought.
> On Jul 26, 2018, at 12:59 AM, Bryan Fields <Bryan at bryanfields.net> wrote:
>
> On 7/26/18 12:47 AM, jy at xtra.co.nz wrote:
>> Hi Bryan,
>>
>> Thank you for breathing fresh life into this group.
>>
>> As you I'm sure you know the issue of jitter has rather plagued P25
>> transmission over the internet well before the advent of P25NX.
>>
>> I've spent some time looking at the jitter issue and at my urging Dave's
>> P25NX V1 dashboard did have a jitter meter of sorts to allow jitter to be
>> examined. FWIW my impression is that the audio from a Quantar locally
>> connected to a voter that in turn is receiving packets form the internet
>> via the original Cisco STUN process sounds better than the same stream
>> connected directly to the Quantar.
>>
>> One of the P25NX V2 goals was to move away from the STUN TCP style
>> connection to UDP but I think that is only half of the solution. Similarly
>> writing code to implement a jitter buffer for STUN based on the Motorola
>> V.24 transport has issues because there is not a one-to-one relationship
>> between the V.24 records and and STUN frames.
>
> Well that's the issue is having to use a cisco. It's a cheap off the shelf
> sync serial HDLC to IP converter. It's not designed for any of this, hell
> STUN isn't even a defined protocol.
>
> Our first work was doing programed IO at 9600 bps, and we just couldn't keep
> up, it needed a dedicated hardware. Luckily Juan Carlos XE1F, was able to
> code up a sync to async HDLC in a PIC16F887, and I got a prototype of this
> working. This converts the sync HDLC to a regular serial port at 9600 bps.
>
> This needs more testing.
>
>> A possible line of attack may involved taking the V.24 stream and then
>> packing the IMBE records one by one into RTP frames and using the Cisco
>> router's built-in RTP jitter buffer features. This addresses both UDP
>> transport and the necessary timestamps for successful de-jitter
>> processing.
>
> So we did get something like this going. It talks STUN to a cisco and
> completely rebuilds the frames that the Quantar expects. This can take a raw
> IMBE data, and publish it to the quantar and ensure the Reed Solomon FEC is
> setup properly, along with all the other flags and bits needed. We can do the
> same in reverse. This is all written in Go.
>
> RTP may be an option for this, but much of the protocol would need to be
> engineered for this application.
>
>> How might this work? There is no RTP payload type for Motorola V.24
>> encoded IMBE. AFAIK there is no RTP type for IMBE but there is a Cisco
>> support payload type of 'transparent' which operates with the assumption
>> that the codec is in the endpoint (i.e. the Quantar or DIU).
>>
>> So my proposal is that Motorola V.24 is converted to RTP with the IMBE
>> records packed 1:1 into 20ms RTP frames of codec type transparent then
>> transported by Cisco over the internet as RTP. The router's jitter buffer
>> will de-jitter the RTP packets based on the RTP timestamp. The de-jittered
>> frames then needed to be converted back to V.24 HDLC frames for the
>> connected Quantar.
>
> 20 ms frames is a horrible waste of bandwidth, and it hard on routers. A
> better idea was taking 180 or 360 ms of audio (9 or 18 frames of p25), adding
> the headers and handling to it and then sending that out. This is 100 or 200
> bytes of data, plus overhead, it's still under 512 bytes of the IPv4 minMTU.
>
> Worst case you would have 360 ms of delay through the network, and this really
> isn't an issue for hams. Now the cool thing is you can send two packets with
> sequence numbers and have no need for FEC. If one drops, you get the other,
> and 360 ms of audio with headers is about 400 bytes. This is 8kbit/s on the
> wire.
>
> If we looks at 20 ms frames, we have to pad them out to 64 bytes (minimum
> packet size), and have 50 of them per second, 64 bytes * 50 frames/s * 8
> bits/byte = 25.6kbit/s. And it's much more work to route/process 50 packets
> vs less than 3.
>
>> How might this work in practice? We connect the V.24 to the Cisco router
>> using the classic WIC-1 or similar interface. We have to accept that the
>> router only knowns how to encapsulate HDLC as STUN so this needs to be spat
>> out of an Ethernet port to a Raspberry Pi or similar (P25NX V2 style). The
>> Pi or other external box builds a properly formatted stream to send back to
>> the router on the same Ethernet port to the far end destination. The
>> topology could be an established RTP point-to-point connection to something
>> like an AstroTAC voter (or a PC emulation of that) or a point-to-multipoint
>> connection (Cisco uses the language 'hoot and holler' for this) via
>> multicast much as in V2.
>
> Oh dear god, don't let cisco do multicast, they suck total ass doing it.
>
> What I propose is to have a core network of servers/VM's, 4 to 8 world wide.
> These run linux and have GRE tunnels between them with OSPF for unicast and
> MOSPF/PIM SM for multicast. They are assumed to have a solid connections
> between them as they are at datacenters.
>
> Running on each of these Linux hosts facing the users is a unicast to
> multicast daemon. This will accept a connection from a repeater, auth it,
> negotiate it (1 packet or 2 for voice), keep state of talkgroups in use
> (pruning), handle forwarding/CAC if overloaded, and translations.
>
> Basically my repeater client will connect up, via UDP over IPv4/6 to the
> server, auth and negotiate if I'd like 1 or 2 copies of every frame and what
> talk groups I want. The server will convert my IPv4 unicast into IPv6
> multicast on the backend. Linux routing will forward these frames reliability
> and track loss at each hop between the servers.
>
> This makes the server side able to be robust and simple in it's process, with
> most heavy lifting done on the client. In testing this I was about to process
> about 20k pps across a test network of 6 RPi 3's emulation this "core". It
> would be easy to expand this network too, and using IPv6 multicast makes it
> very easy to map 65k talk groups into the IP space; much easier than IPv4.
> Since this removes multicast from the clients, it will even work behind NAT.
>
> The server side would fail over in the event of a server going down, you'd
> just connect to the backup. With a common interface, we could even write a
> translator from MMDVM to it, or even YSF which uses the same IMBE codec in
> wide mode (blasphemy, no?). This would have the distinct advantage over the
> the mmdvm reflectors that simply map a talk group to one server. If WW server
> is down, no one can talk. Granted its a bit more complex too.
>
> Much of the client is working and coded in Go. If you know Go and want to get
> involved let me know, I'm mostly on the protocol design side, coding is beyond
> me. We've all been busy with work/travel and the process is on the back burner.
>
>
> --
> Bryan Fields
>
> 727-409-1194 - Voice
> http://bryanfields.net
> _______________________________________________
> P25nx-interest mailing list
> P25nx-interest at lists.keekles.org
> http://lists.keekles.org/cgi-bin/mailman/listinfo/p25nx-interest
More information about the P25nx-interest
mailing list