Files
adsb-tools/adsbus/README.md
2016-03-11 15:00:45 -08:00

4.6 KiB

adsbus

adsbus is a hub and protocol translator for ADS-B messages.

It is conceptually similar to dump1090 --net-only, but supports more protocols and configurations. It doesn't talk to your radio itself; it hooks programs that do, then handles the network distribution and format translation. It doesn't output to a web interface or send data to services like FlightAware; it provides hooks for programs that do.

Building

sudo apt-get -y install build-essential git clang libjansson-dev libprotobuf-c-dev protobuf-c-compiler
git clone https://github.com/flamingcowtv/adsb-tools.git
cd adsb-tools/adsbus
make

Features

  • Separates the concepts of transport, data flow, and format
  • Transports:
  • Data flows:
    • Send (data flows out of adsbus)
    • Receive (data flows in to adsbus)
    • Send & receive (both directions on the same socket, without echo)
  • Formats:
    • airspy_adsb (a.k.a. ASAVR)
    • beast
    • json
    • proto (a.k.a. ProtoBuf, Protocol Buffers)
    • raw (a.k.a. AVR)
    • stats (send only, summary aggregated data)
  • Transport features:
    • IPv4 and IPv6 support
    • Reresolution and reconnection on disconnect, with backoff and jitter
    • TCP keepalives for dead connection detection
    • TCP fast open for faster startup of high-latency connections
    • SO_REUSEPORT for zero-downtime updates
  • Data flow features:
    • Rapid detection and disconnection of receive <-> receive connections
    • Less rapid detection and disconnection of send <-> send connections
    • Hop counting and limits (json and proto formats only) to stop infinite routing loops
  • Format features:
    • Autodetection of received data format
    • MLAT scaling for different clock rates and counter bit widths
    • RSSI scaling for different bit widths
    • Introduces json format for balanced human and machine readability with forward compatibility
    • Introduces proto format for fast serialization and deserialization with forward compatibility
  • Federation:
    • Federation allows linking multiple instances of adsbus for:
      • Scalability (cores, number of input or output clients, etc.)
      • Efficient long-haul links (hub and spoke models on both ends)
    • json and proto formats carry information about original source across multiple hops
    • SO_REUSEPORT allows multiple adsbus instances to accept connections on the same IP and port without a load balancer

Security, reliability, testing

  • Secure build options by default
  • valgrind clean
    • Zero open fds and allocated blocks when run with --track-fds=yes --show-leak-kinds=all --leak-check=full
    • Cleans up on normal exit and when handling SIGINT/SIGTERM
  • Subprogram isolation
    • All fds created with CLOEXEC; none passed on to children (tested with --exec-receive='ls -l /proc/self/fd 1>&2')
    • Separate process group
  • Test suite
    • make test runs a large set of test inputs through adsbus under valgrind
  • Parser fuzzing
  • Network fuzzing
    • stutterfuzz.sh runs adsbus with stutterfuzz to test connection/network handling under load, using afl test cases