Hello,
I have a Concentratord + Chirpstack UDP Forwarder setup I am trying to get working, but am running into an issue. I have no issue sending messages from Concentratord to the Chirpstack Gateway Bridge, but when I try sending to the Chirpstack UDP Forwarder, I get the following issue:
2026-09-14T20:40:14.120Z INFO [chirpstack_udp_forwarder] Starting ChirpStack UDP Forwarder (version: 4.3.1, docs: https://github.com/chirpstack/chirpstack-udp-forwarder)
2026-09-14T20:40:14.120Z DEBUG [chirpstack_udp_forwarder::helpers] Reading gateway id, server: ipc:///tmp/concentratord_command
2026-09-14T20:40:14.120Z INFO [chirpstack_udp_forwarder::commands] Creating new socket for sending commands, endpoint: ipc:///tmp/concentratord_command
2026-09-14T20:40:14.123Z INFO [chirpstack_udp_forwarder] Received gateway ID from Concentratord, gateway_id:
2026-09-14T20:40:14.124Z INFO [chirpstack_udp_forwarder::forwarder] Starting forwarder, server: www.mydomain.com:1780
2026-09-14T20:40:14.124Z INFO [chirpstack_udp_forwarder::metrics] Starting Prometheus metrics server, bind: 0.0.0.0:9800
2026-09-14T20:40:14.165Z INFO [chirpstack_udp_forwarder::events] Creating new socket for receiving events, endpoint: ipc:///tmp/concentratord_event
2026-09-14T20:40:14.166Z INFO [chirpstack_udp_forwarder::commands] Creating new socket for sending commands, endpoint: ipc:///tmp/concentratord_command
thread '<unnamed>' (38) panicked at src/forwarder.rs:222:12:
copy_from_slice: source slice length (0) does not match destination slice length (8)
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Aborted (core dumped)
Best I can tell, the gateway ID it is recieving from concentratord is blank, resulting in the error. I'm not sure what I am missing in my setup.
Versions:
chirpstack-concentratord-sx1302 4.4.1
chirpstack-udp-forwarder 4.3.1
Here is my concentratord config, which has no problem when pushing to the gateway bridge:
# Concentratord configuration.
[concentratord]
# Log level.
#
# Valid options are:
# * TRACE
# * DEBUG
# * INFO
# * WARN
# * ERROR
# * OFF
log_level="INFO"
# Log to syslog.
#
# When set to true, log messages are being written to syslog instead of stdout.
log_to_syslog=false
# Statistics interval.
stats_interval="30s"
# Disable CRC status filter.
#
# By default, the Concentratord will ignore received frames which do not have
# a valid CRC. This option makes it possible to disable this filter such that
# received frames without (valid) CRC can be analyzed.
disable_crc_filter=false
# Configuration for the (ZeroMQ based) API.
[concentratord.api]
# Event PUB socket bind.
event_bind="ipc:///tmp/concentratord_event"
# Command REP socket bind.
command_bind="ipc:///tmp/concentratord_command"
# LoRa gateway configuration.
[gateway]
# GPIO Info
sx1302_power_en_chip="/dev/gpiochip4"
sx1302_reset_pin=17
# Antenna gain (dB).
antenna_gain=0
# Public LoRaWAN network.
lorawan_public=true
com_dev_path="/dev/ttyConcentrator"
# Region.
#
# The region of the gateway. Options:
# EU868, US915, CN779, EU433, AU915, CN470, AS923, AS923_2, AS923_3, AS923_4,
# KR923, IN865, RU864
#
# Not not all the gateway models implement all regions.
region="US915"
# Gateway vendor / model.
#
# This configures various vendor and model specific settings.
model="rak_5146"
# Gateway vendor / model flags.
#
# Flag can be used to configure additional vendor / model features. The
# following flags can be used:
#
# Global flags:
# GNSS - Enable GNSS / GPS support
# USB - Use USB for concentrator communication (default is SPI)
model_flags=[ "USB" ]
# Time fallback.
#
# In case the gateway does not have a GNSS module or is unable to aquire a
# GNSS fix, use the system-time for setting the 'time' field on RX.
time_fallback_enabled=true
# Static gateway location.
[gateway.location]
# When set to non-zero values, the static gateway location will be reported
# when the gateway does not have a GNSS module or when no GNSS location fix
# is available.
latitude=0.0
longitude=0.0
altitude=0
Here is the Chirpstack UDP Forwarder config:
# UDP Forwarder configuration.
[udp_forwarder]
# Log level.
#
# Valid options are:
# * TRACE
# * DEBUG
# * INFO
# * WARN
# * ERROR
# * OFF
log_level="DEBUG"
# Log to syslog.
#
# When set to true, log messages are being written to syslog instead of stdout.
log_to_syslog=false
# Prometheus metrics bind.
#
# E.g. '0.0.0.0:9800', leave blank to disable the metrics endpoint.
metrics_bind="0.0.0.0:9800"
# Servers to forward the data to using UDP.
# This section can be repeated.
[[udp_forwarder.servers]]
# Server (hostname:port).
server="www.mydomain.com:1780"
# Keepalive interval (seconds).
#
# In this interval, the ChirpStack UDP Forwarder will send keepalive
# frames to the server, which must be answered by an acknowledgement.
keepalive_interval_secs=10
# Max. allowed keepalive failures.
#
# After the max. number has been reached, the ChirpStack UDP Forwarder will
# 're-connect' to the server, meaning it will also re-resolve the DNS in case
# the server address is a hostname.
keepalive_max_failures=12
# Filters.
[backend.filters]
# Forward CRC ok.
forward_crc_ok=true
# Forward CRC invalid.
forward_crc_invalid=false
# Forward CRC missing.
forward_crc_missing=false
# LoRaWAN only.
lorawan_only=false
# DevAddr prefix filters.
#
# Example configuration:
# dev_addr_prefixes=["0000ff00/24"]
#
# The above filter means that the 24MSB of 0000ff00 will be used to
# filter DevAddrs. Uplinks with DevAddrs that do not match any of the
# configured filters will not be forwarded. Leaving this option empty
# disables filtering on DevAddr.
dev_addr_prefixes=[]
# JoinEUI prefix filters.
#
# Example configuration:
# join_eui_prefixes=["0000ff0000000000/24"]
#
# The above filter means that the 24MSB of 0000ff0000000000 will be used
# to filter JoinEUIs. Uplinks with JoinEUIs that do not match any of the
# configured filters will not be forwarded. Leaving this option empty
# disables filtering on JoinEUI.
join_eui_prefixes=[]
# Concentratord configuration.
[concentratord]
# Event API URL.
event_url="ipc:///tmp/concentratord_event"
# Command API URL.
command_url="ipc:///tmp/concentratord_command"
I would be grateful for any insight on what could be causing this issue.