P25Link project

From WLPS Wiki
Jump to navigation Jump to search



  • P25Link was first conceived around December, 2017.

By the end of January, 2018 a sync HDLC to async HDLC board begin to be developed by Bryan W9CR and Juan Carlos XE1F. An ambitious project that will be the evolution form P25NX.

  • On October 10, 2019, a Bridge code between P25NX and P25-MMDVM was released for testing on talk group 10203. The bridge is based on Perl. Later, by April 2020, a dashboard and more talk groups were added.
  • During June 2020, the first public release for code that replaces the old P25NX C# Code been uploaded to github. The code was completely written from scratch using Perl.
  • By October 24, the first .deb package was released.
  • On March 29, 2021, Juan Carlos XE1F made an attempt to relocate the Bridged TGs from 10100-10303 to the 1050x range, which was not aceptable for Jonathan G4KLX who decided he does not want any crosslink to P25NX so there are no Bridged TGs in the P25Clients/P25Gateway/P25Hosts.txt file on github as he denied to update his github repo.


p25link_2.33-3 Raspberry Pi Raspbian Installer - Public release.

P25Link in a nutshell

P25Link Perl code talks to Quantar repeater by a HDLC card Or a Cisco router using STUN (serial tunneling). It also connects to P25NX network using a VPN managed by the Cisco router and exchange data with other systems running P25Link code or P25NX code. All this data is exchanged using Multicast UDP frames. To connect to P25-MMDVM reflectors, it establish an UDP connection with the linked reflectors.

Cisco configuration

The best way to go for P25Link is to follow W9CR wiki: Allstar®_and_P25_on_Quantar

For those that prefer to go with P25-MMDVM features only, here is an example configuration. Please don't copy this blindly, it is not a turn-key/copy-paste solution.

service timestamps debug datetime msec
service timestamps log datetime msec
service password-encryption
aaa new-model 
aaa authentication login localauth local
aaa authorization exec default local
aaa accounting delay-start
aaa session-id common
clock timezone EST -6 0  #CHANGE THIS
clock summer-time EDT recurring
ip dhcp pool RPi
network  #Change this to Fa0/0 IP address
default-router #change this to Fa0/1 interface IP
dns-server #DNS SERVER
lease 0 0 15
ip cef
ip multicast-routing 
username w9cr privilege 15 secret 5 $1$9lDK$ALihMA.kF88ExXKVmFq7K/
username Wodie privilege 15 secret 5 $1$M9o/$80Ek/.0CKN207Fh3lPY7O1
username kris privilege 15 secret 5 $1$f3zx$.r9BFydXeSv4HMZ4eMCxR.
username rancid privilege 15 secret 5 $1$ahD1$l5GzplOjj4xrcVgCZqfjp1
username bryan privilege 15 secret 5 $1$4GKN$COhQTbtzjgMEsfznmLjqf0
stun peer-name #CHANGE THIS TO FA0/0 IP
stun protocol-group 1 basic #change this to your group
interface FastEthernet0/0
description INTERNET
ip address dhcp  # Allow for DHCP, or you can set static:
#ip address # Static example
ip nat inside
ip virtual-reassembly in
duplex auto
speed auto
ip pim sparse-mode
ip tcp adjust-mss 1400
ip igmp query-interval 125
interface Serial0/0/0
description To-Raspberry-Pi
mtu 2104
no ip address
encapsulation stun
clock rate 9600
stun group 130
stun route all tcp #change to the R-Pi IP address.
! !
! Turn off Crap
no ip forward-protocol nd
no ip http server
no ip http secure-server
ip pim bidir-enable
ip pim spt-threshold infinity
scheduler allocate 20000 1000
ntp update-calendar
ntp server pool.ntp.org


Bryan W9CR

Juan Carlos XE1F

Under Construction!

27 47 67 1B2F43

41 62 83 293E53