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" "near" 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
- TLS/SSL server and client support
- "blocklist" with quotas per IP prefix
- On-demand stream subscription
- "wildcard" base configuration to allow unregistered sources to send hidden streams
- GELF/Graylog export with bulk mode
- JSON API for remote administration and monitoring
- API tool
mapi
The current version requires:
- libcyaml
- libevent2
- json-c >= 0.16
- openssl >= 3.0.15
FreeBSD: sudo pkg install libevent libcyaml json-c
cd caster; make clean depend all
As root:
- Create a
casteruser: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.yamlmain configuration filesourcetable.datour local sourcetablesource.authauthentication of sources from our sourcetablehost.authauthentication as a client to other hosts
mkdir /var/log/millipede && chown caster /var/log/millipedeinstall -m 0755 sample-config/caster.sh /usr/local/etc/rc.d/castersysrc 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.
(Previously known as the "V" base)
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.