acars_router
receives, validates, deduplicates, modifies and routes ACARS/VDLM2/HFDL/IMSL/IRDM JSON messages.
version: "3.8"
volumes:
- acarshub_run
services:
acarshub:
image: ghcr.io/sdr-enthusiasts/docker-acarshub:latest
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
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 toacars_router
via UDP. acars_router
will connect todumpvdl2
via TCP/ZMQ and receive JSON messages.acars_router
will set your station ID on all messages.acars_router
will then output toacarshub
.
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.
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:
- 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)
- 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.
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 |
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 |
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 |