Millipede is a high-performance NTRIP caster written in C for the CentipedeRTK project, a network of RTK bases based in France (see https://centipede.fr).
Millipede uses libevent2 for minimal memory footprint.
It can easily handle tens of thousands of NTRIP sessions on a minimal server.
Currently runs on FreeBSD.
Features:
- "Virtual" base algorithm which picks the nearest base from the source table
- High performance
- Low memory footprint
- Supports IPv6 and IPv4
- NTRIP proxy to fetch from an external caster
- On-demand stream subscription
The current version requires:
- libcyaml
- libevent2
- json-c
FreeBSD: sudo pkg install libevent libcyaml json-c
cd caster; make
As root:
- Create a
caster
user:pw useradd -n caster -d /nonexistent -s /bin/nologin
cd caster; make install
- Create configuration files in (default)
/usr/local/etc/millipede/
, samples insample-config/
.caster.yaml
main configuration filesourcetable.dat
our local sourcetablesource.auth
authentication of sources from our sourcetablehost.auth
authentication as a client to other hosts
mkdir /var/log/millipede && chown caster /var/log/millipede
install -m 0755 sample-config/caster.sh /usr/local/etc/rc.d/caster
sysrc caster_enable=YES
service caster start
, or start the /usr/local/sbin/caster
binary.
There are 3 main functions the caster can fulfill simultaneously, configured from caster.yaml
.
Configure sourcetable.dat
for the local sources, source.auth
for their authentication, and the listen
section for the IP addresses to listen on.
Configure the proxy
section with a reference caster.
The local caster will fetch the sourcetable from the reference caster at table_refresh_delay
(in seconds) intervals, and announce it merged with its own sourcetable.
Sources will be fetched and served to clients on-demand from the reference caster.
Should be declared in the local sourcetable (see default config) with its "virtual" field (12th field) set to "1".
When a NTRIP client connects to this base and announces its location through $G*GGA NMEA lines, the caster will serve it the nearest base from its general sourcetable (local + proxy), switching over time when the client moves.