Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sdr-enthusiasts/acars_router

Route ACARS/VDLM2 messages between various services
https://github.com/sdr-enthusiasts/acars_router

acars acarsdec docker docker-container dumpvdl2 libacars vdlm2 vdlm2dec

Last synced: 27 days ago
JSON representation

Route ACARS/VDLM2 messages between various services

Awesome Lists containing this project

README

        

# sdr-enthusiasts/acars_router

`acars_router` receives, validates, deduplicates, modifies and routes ACARS/VDLM2/HFDL/IMSL/IRDM JSON messages.

## Example Feeder `docker-compose.yml`

```yaml
version: "3.8"

volumes:
- acarshub_run

services:
acarshub:
image: ghcr.io/sdr-enthusiasts/docker-acarshub:latest
tty: true
container_name: acarshub
restart: always
ports:
- 8080:80
environment:
- ENABLE_VDLM=EXTERNAL
- ENABLE_ACARS=EXTERNAL
- FEED=true
- IATA_OVERRIDE=UP|UPS|United Parcel Service;GS|FTH|Mountain Aviation (Foothills);GS|EJA|ExecJet
- ENABLE_ADSB=true
- ADSB_LAT=${FEEDER_LAT}
- ADSB_LON=${FEEDER_LON}
- ADSB_URL=${ACARS_TAR_HOST}
volumes:
- "acars_run:/run/acars"
tmpfs:
- /database:exec,size=64M
- /run:exec,size=64M
- /var/log

acars_router:
image: ghcr.io/sdr-enthusiasts/acars_router:latest
tty: true
container_name: acars_router
restart: always
environment:
- TZ=${FEEDER_TZ}
- AR_ENABLE_DEDUPE=true
- AR_SEND_UDP_ACARS=acarshub:5550;feed.airframes.io:5550
- AR_SEND_UDP_VDLM2=acarshub:5555
- AR_SEND_TCP_VDLM2=feed.airframes.io:5553
- AR_SEND_TCP_HFDL=feed.airframes.io:5556
- AR_RECV_ZMQ_VDLM2=dumpvdl2:45555
tmpfs:
- /run:exec,size=64M
- /var/log
```

Change the `GAIN`, `FREQUENCIES`, `SERIAL`, `TZ`, `ADSB_LAT`, `ADSB_LON` and `AR_OVERRIDE_STATION_NAME` to suit your environment.

With the above deployment:

- JSON messages generated by `acarsdec` will be sent to `acars_router` via UDP.
- `acars_router` will connect to `dumpvdl2` via TCP/ZMQ and receive JSON messages.
- `acars_router` will set your station ID on all messages.
- `acars_router` will then output to `acarshub`.

## Ports

All ports are configurable. By default, the following ports will be used:

| Port | Protocol | Description |
| ------- | -------- | -------------------------------------------------------------------------------- |
| `5550` | `UDP` | ACARS ingest. Clients will send ACARS data to this port via UDP. |
| `5550` | `TCP` | ACARS ingest. Clients will send ACARS data to this port via TCP. |
| `5555` | `UDP` | VDLM2 ingest. Clients will send VDLM2 data to this port via UDP. |
| `5555` | `TCP` | VDLM2 ingest. Clients will send VDLM2 data to this port via TCP. |
| `5556` | `UDP` | HFDL ingest. Clients will send HFDL data to this port via UDP. |
| `5556` | `TCP` | HFDL ingest. Clients will send HFDL data to this port via TCP. |
| `5557` | `UDP` | IMSL ingest. Clients will send IMSL data to this port via UDP. |
| `5557` | `TCP` | IMSL ingest. Clients will send IMSL data to this port via TCP. |
| `5558` | `UDP` | IRDM ingest. Clients will send IRDM data to this port via UDP. |
| `5558` | `TCP` | IRDM ingest. Clients will send IRDM data to this port via TCP. |
| `15550` | `TCP` | ACARS server. Can be used for other clients to connect and get messages |
| `15555` | `TCP` | VDLM2 server. Can be used for other clients to connect and get messages |
| `15556` | `TCP` | HFDL server. Can be used for other clients to connect and get messages |
| `15557` | `TCP` | IMSL server. Can be used for other clients to connect and get messages |
| `15558` | `TCP` | IRDM server. Can be used for other clients to connect and get messages |
| `35550` | `ZMQ` | ACARS ingest. Clients will connect to this port and send ACARS messages over ZMQ |
| `35555` | `ZMQ` | VDLM2 ingest. Clients will connect to this port and send VDLM2 messages over ZMQ |
| `35556` | `ZMQ` | HFDL ingest. Clients will connect to this port and send HFDL messages over ZMQ |
| `35557` | `ZMQ` | IMSL ingest. Clients will connect to this port and send IMSL messages over ZMQ |
| `35558` | `ZMQ` | IRDM ingest. Clients will connect to this port and send IRDM messages over ZMQ |
| `45550` | `ZMQ` | ACARS server. Can be used for other ZMQ clients to connect and get messages |
| `45555` | `ZMQ` | VDLM2 server. Can be used for other ZMQ clients to connect and get messages |
| `45556` | `ZMQ` | HFDL server. Can be used for other ZMQ clients to connect and get messages |
| `45557` | `ZMQ` | IMSL server. Can be used for other ZMQ clients to connect and get messages |
| `45558` | `ZMQ` | IRDM server. Can be used for other ZMQ clients to connect and get messages |

If you want any port(s) to be exposed outside of the docker network, please be sure to append them to the ports section of the `docker-compose.yml` file.

## Environment Variables

All env variables with `SEND` or `RECV` in them can have multiple destinations. Each destination should be separated by a `;`. For example, `SEND_UDP_ACARS=acarshub:5550;acarshub2:5550` will send UDP ACARS messages to both `acarshub` and `acarshub2`.

The nomenclature for the environment variables is as follows:

### Nomenclature used in variable naming

#### Input/Inbound data

- Receiver: ACARS router will connect out to a remote host and receive data from it. (TCP/ZMQ)
- Listener: ACARS router will listen on a port for incoming data (UDP) or incoming connection based on socket type (TCP/ZMQ)

#### Output/Outbound data

- Sender: ACARS router will connect out to a remote host and send data to it. (TCP/ZMQ)
- Server: ACARS router will send data to a remote host (UDP) or listen for incoming connection (TCP/ZMQ) and send data to it.

### Outbound data

| Env Variable | Command Line Switch | Default | Description |
| ------------------ | ------------------- | ------- | --------------------------------------- |
| AR_SEND_UDP_ACARS | --send-udp-acars | `unset` | UDP host:port to send ACARS messages to |
| AR_SEND_UDP_VDLM2 | --send-udp-vdlm2 | `unset` | UDP host:port to send VDLM2 messages to |
| AR_SEND_UDP_HFDL | --send-udp-hfdl | `unset` | UDP host:port to send HFDL messages to |
| AR_SEND_UDP_IMSL | --send-udp-imsl | `unset` | UDP host:port to send IMSL messages to |
| AR_SEND_UDP_IRDM | --send-udp-irdm | `unset` | UDP host:port to send IRDM messages to |
| AR_SEND_TCP_ACARS | --send-tcp-acars | `unset` | TCP host:port to send ACARS messages to |
| AR_SEND_TCP_VDLM2 | --send-tcp-vdlm2 | `unset` | TCP host:port to send VDLM2 messages to |
| AR_SEND_TCP_HFDL | --send-tcp-hfdl | `unset` | TCP host:port to send HFDL messages to |
| AR_SEND_TCP_IMSL | --send-tcp-imsl | `unset` | TCP host:port to send IMSL messages to |
| AR_SEND_TCP_IRDM | --send-tcp-irdm | `unset` | TCP host:port to send IRDM messages to |
| AR_SERVE_TCP_ACARS | --serve-tcp-acars | `15550` | TCP port to serve ACARS messages to |
| AR_SERVE_TCP_VDLM2 | --serve-tcp-vdlm2 | `15555` | TCP port to serve VDLM2 messages to |
| AR_SERVE_TCP_HFDL | --serve-tcp-hfdl | `15556` | TCP port to serve HFDL messages to |
| AR_SERVE_TCP_IMSL | --serve-tcp-imsl | `15557` | TCP port to serve IMSL messages to |
| AR_SERVE_TCP_IRDM | --serve-tcp-irdm | `15558` | TCP port to serve IRDM messages to |
| AR_SERVE_ZMQ_ACARS | --serve-zmq-acars | `45550` | ZMQ port to serve ACARS messages to |
| AR_SERVE_ZMQ_VDLM2 | --serve-zmq-vdlm2 | `45555` | ZMQ port to serve VDLM2 messages to |
| AR_SERVE_ZMQ_HFDL | --serve-zmq-hfdl | `45556` | ZMQ port to serve HFDL messages to |
| AR_SERVE_ZMQ_IMSL | --serve-zmq-imsl | `45557` | ZMQ port to serve IMSL messages to |
| AR_SERVE_ZMQ_IRDM | --serve-zmq-irdm | `45558` | ZMQ port to serve IRDM messages to |

### Inbound data

| Env Variable | Command Line Switch | Default | Description |
| ------------------- | ------------------- | ------- | -------------------------------------------- |
| AR_RECV_ZMQ_ACARS | --recv-zmq-acars | `unset` | ZMQ host:port to receive ACARS messages from |
| AR_RECV_ZMQ_VDLM2 | --recv-zmq-vdlm2 | `unset` | ZMQ host:port to receive VDLM2 messages from |
| AR_RECV_ZMQ_HFDL | --recv-zmq-hfdl | `unset` | ZMQ host:port to receive HFDL messages from |
| AR_RECV_ZMQ_IMSL | --recv-zmq-imsl | `unset` | ZMQ host:port to receive IMSL messages from |
| AR_RECV_ZMQ_IRDM | --recv-zmq-irdm | `unset` | ZMQ host:port to receive IRDM messages from |
| AR_RECV_TCP_ACARS | --recv-tcp-acars | `unset` | TCP host:port to receive ACARS messages from |
| AR_RECV_TCP_VDLM2 | --recv-tcp-vdlm2 | `unset` | TCP host:port to receive VDLM2 messages from |
| AR_RECV_TCP_HFDL | --recv-tcp-hfdl | `unset` | TCP host:port to receive HFDL messages from |
| AR_RECV_TCP_IMSL | --recv-tcp-imsl | `unset` | TCP host:port to receive IMSL messages from |
| AR_RECV_TCP_IRDM | --recv-tcp-irdm | `unset` | TCP host:port to receive IRDM messages from |
| AR_LISTEN_TCP_ACARS | --listen-tcp-acars | `5550` | TCP port to listen for ACARS messages from |
| AR_LISTEN_TCP_VDLM2 | --listen-tcp-vdlm2 | `5555` | TCP port to listen for VDLM2 messages from |
| AR_LISTEN_TCP_HFDL | --listen-tcp-hfdl | `5556` | TCP port to listen for HFDL messages from |
| AR_LISTEN_TCP_IMSL | --listen-tcp-imsl | `5557` | TCP port to listen for IMSL messages from |
| AR_LISTEN_TCP_IRDM | --listen-tcp-irdm | `5558` | TCP port to listen for IRDM messages from |
| AR_LISTEN_UDP_ACARS | --listen-udp-acars | `5550` | UDP port to listen for ACARS messages from |
| AR_LISTEN_UDP_VDLM2 | --listen-udp-vdlm2 | `5555` | UDP port to listen for VDLM2 messages from |
| AR_LISTEN_UDP_HFDL | --listen-udp-hfdl | `5556` | UDP port to listen for HFDL messages from |
| AR_LISTEN_UDP_IMSL | --listen-udp-imsl | `5557` | UDP port to listen for IMSL messages from |
| AR_LISTEN_UDP_IRDM | --listen-udp-irdm | `5558` | UDP port to listen for IRDM messages from |
| AR_LISTEN_ZMQ_ACARS | --listen-zmq-acars | `35550` | ZMQ port to listen for ACARS messages from |
| AR_LISTEN_ZMQ_VDLM2 | --listen-zmq-vdlm2 | `35555` | ZMQ port to listen for VDLM2 messages from |
| AR_LISTEN_ZMQ_HFDL | --listen-zmq-hfdl | `35556` | ZMQ port to listen for HFDL messages from |
| AR_LISTEN_ZMQ_IMSL | --listen-zmq-imsl | `35557` | ZMQ port to listen for IMSL messages from |
| AR_LISTEN_ZMQ_IRDM | --listen-zmq-irdm | `35558` | ZMQ port to listen for IRDM messages from |

### General Options

| Env Variable | Command Line Switch | Default | Description |
| ------------------------ | ----------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| AR_VERBOSITY | --verbose | `info` | Verbosity level. Valid values are `debug`, `info`, `warning`, `error` |
| AR_ENABLE_DEDUPE | --enable-dedupe | `false` | Enable message deduplication. Valid values are `true` or `false` |
| AR_DEDUPE_WINDOW | --dedupe-window | `2` | Window for how long a message will be considered a duplicate if the same message is received again. |
| AR_SKEW_WINDOW | --skew-window | `5` | If a message is older then the skew window it will be automatically rejected, in seconds. If you are receiving only ACARS/VDLM2 1 or 2 seconds is a good value. With HFDL you will need to increase the window. |
| AR_MAX_UDP_PACKET_SIZE | --max-udp-packet-size | `60000` | Maximum UDP packet size. Messages greater then this will be send in multiple parts |
| AR_ADD_PROXY_ID | --add-proxy-id | `true` | Append to the message a header indicating that acars router processed the message |
| AR_OVERRIDE_STATION_NAME | --override-station-name | `unset` | Change the station id field (identifying your station name for unstream clients) is set to this instead of what was in the message originally |
| AR_STATS_EVERY | --stats-every | `5` | How often to print stats to the log in minutes |
| AR_STATS_VERBOSE | --stats-verbose | `false` | Print verbose stats to the log |
| AR_REASSEMBLY_WINDOW | --reassemble-window | `1.0` | If a message comes in, but part of the message is missing, this value will be used to keep the partial message fragment around while attempting to wait for the second (or subsequent) part(s) |
| AR_DISABLE_ACARS | --disable-acars | `false` | Disable ACARS processing. Valid values are `true` or `false` |
| AR_DISABLE_VDLM2 | --disable-vdlm | `false` | Disable VDLM processing. Valid values are `true` or `false` |
| AR_DISABLE_HFDL | --disable-hfdl | `false` | Disable HFDL processing. Valid values are `true` or `false` |
| AR_DISABLE_IMSL | --disable-imsl | `false` | Disable IMSL processing. Valid values are `true` or `false` |
| AR_DISABLE_IRDM | --disable-irdm | `false` | Disable IRDM processing. Valid values are `true` or `false` |