2016-02-17 10:31:41 -08:00
# adsbus
adsbus is a hub and protocol translator for [ADS-B ](https://en.wikipedia.org/wiki/Automatic_dependent_surveillance_%E2%80%93_broadcast ) messages.
2016-02-28 21:41:35 -08:00
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.
2016-02-17 10:31:41 -08:00
## Building
2016-02-17 10:34:00 -08:00
```bash
2016-02-28 19:49:06 -08:00
sudo apt-get -y install build-essential git clang libjansson-dev libprotobuf-c-dev protobuf-c-compiler
2016-02-17 10:34:47 -08:00
git clone https://github.com/flamingcowtv/adsb-tools.git
2016-02-28 19:49:06 -08:00
cd adsb-tools/adsbus
2016-02-17 10:31:41 -08:00
make
2016-02-17 10:32:34 -08:00
```
2016-02-28 21:41:35 -08:00
## Features
2016-02-28 21:49:29 -08:00
* Separates the concepts of transport, data flow, and format
2016-02-28 21:41:35 -08:00
* Transports:
* Outgoing TCP connection
* Incoming TCP connection
2016-03-03 21:13:17 -08:00
* Local files, [named pipes ](https://en.wikipedia.org/wiki/Named_pipe ), and [character devices ](https://en.wikipedia.org/wiki/Device_file#Character_devices )
2016-02-28 21:41:35 -08:00
* [stdin/stdout ](https://en.wikipedia.org/wiki/Standard_streams )
2016-02-28 21:44:21 -08:00
* Execute a command and talk to its stdin/stdout
2016-02-28 21:49:29 -08:00
* Data flows:
2016-02-28 21:41:35 -08:00
* Send (data flows out of adsbus)
* Receive (data flows in to adsbus)
2016-03-03 21:13:50 -08:00
* Send & receive (both directions on the same socket, without echo)
2016-02-28 21:41:35 -08:00
* Formats:
2016-02-28 21:44:21 -08:00
* [airspy_adsb ](../protocols/airspy_adsb.md ) (a.k.a. ASAVR)
* [beast ](../protocols/beast.md )
* [json ](../protocols/json.md )
* [proto ](../protocols/proto.md ) (a.k.a. ProtoBuf, Protocol Buffers)
* [raw ](../protocols/raw.md ) (a.k.a. AVR)
* stats (send only, summary aggregated data)
2016-02-28 21:41:35 -08:00
* Transport features:
* [IPv4 ](https://en.wikipedia.org/wiki/IPv4 ) and [IPv6 ](https://en.wikipedia.org/wiki/IPv6 ) support
2016-02-28 21:44:21 -08:00
* Reresolution and reconnection on disconnect, with backoff and jitter
2016-02-28 21:41:35 -08:00
* [TCP keepalives ](https://en.wikipedia.org/wiki/Keepalive#TCP_keepalive ) for dead connection detection
2016-02-28 21:44:21 -08:00
* [TCP fast open ](https://en.wikipedia.org/wiki/TCP_Fast_Open ) for faster startup of high-latency connections
2016-02-28 21:41:35 -08:00
* [SO_REUSEPORT ](https://lwn.net/Articles/542629/ ) for zero-downtime updates
2016-02-28 21:49:29 -08:00
* Data flow features:
* Rapid detection and disconnection of receive <-> receive connections
2016-02-28 23:07:02 -08:00
* Less rapid detection and disconnection of send <-> send connections
2016-03-03 22:03:31 -08:00
* Hop counting and limits (json and proto formats only) to stop infinite routing loops
2016-02-28 21:41:35 -08:00
* Format features:
* Autodetection of received data format
* [MLAT ](https://en.wikipedia.org/wiki/Multilateration ) scaling for different clock rates and counter bit widths
* [RSSI ](https://en.wikipedia.org/wiki/Received_signal_strength_indication ) 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