Roon Core Machine
lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
model name : Intel(R) Core™ i7-4770K CPU @ 3.50GHz
stepping : 3
microcode : 0x28
cpu MHz : 1546.340
cache size : 8192 KB
physical id : 0
siblings : 8
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm arat pln pts md_clear flush_l1d
vmx flags : vnmi preemption_timer invvpid ept_x_only ept_ad ept_1gb flexpriority tsc_offset vtpr mtf vapic ept vpid unrestricted_guest ple
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds
bogomips : 8499.03
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
2x 8GB DDR3
cat /proc/meminfo
MemTotal: 16198184 kB
MemFree: 6696012 kB
MemAvailable: 9453636 kB
Roon Core version 1.8 (build 884) Stable
Networking Gear & Setup Details
Server → Wired 2.5GbE unmanaged switch (TP-Link TL-SG105-M2) → Wired 1GbE managed switch GS305e → Ubiquiti U6-LR Access Point → AirPlay clients over Wifi and Wired
Connected Audio Devices
HomePod - wifi
HomePod minis x3 - wifi
Yamaha RX-V583 (wired)
All clients are using airplay
HomePods are all running iOS 15.2
Number of Tracks in Library
10,000 tracks
Description of Issue
Issue with incorrect IPEndpoint whilst using Airplay targets.
As far as I can tell from the logs It looks like Roon is allowing the use of the loopback interface to be used as the IPEndpoint with an Airplay client.
This is an occasional annoyance, if I hit play and it doesn’t work I can keep hitting play in the Control interface on my phone, or PC a couple of times it will eventually pick the correct/actual IP address for the endpoint and play.
My best guess is that Roon is not using the correct IP endpoint for the Airplay client and defaulting to the loopback IP address.
I would expect Roon to validate that 127.0.0.1 is a loopback address and not a valid IP address for an AirPlay client
I have reproduced this issue multiple times on different HomePods in my home.
What my server network interfaces look like:
$>ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.8.10 netmask 255.255.255.0 broadcast 192.168.8.255
inet6 <redacted> prefixlen 64 scopeid 0x0<global>
inet6 <redacted> prefixlen 64 scopeid 0x0<global>
inet6 fe80::<redacted> prefixlen 64 scopeid 0x20<link>
ether 00:e0:4c:68:61:f2 txqueuelen 1000 (Ethernet)
RX packets 353826 bytes 60508901 (57.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 780663 bytes 620614645 (591.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 149470 bytes 26814787 (25.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 149470 bytes 26814787 (25.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
$> ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:e0:4c:68:61:f2 brd ff:ff:ff:ff:ff:ff
altname enp1s0
inet 192.168.8.10/24 brd 192.168.8.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 <redacted>/64 scope global dynamic mngtmpaddr
valid_lft 86381sec preferred_lft 14381sec
inet6 <redacted>/64 scope global dynamic mngtmpaddr
valid_lft 1797sec preferred_lft 298sec
inet6 fe80::<redacted>/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 74:d0:2b:2c:8d:21 brd ff:ff:ff:ff:ff:ff
altname enp0s25
altname eno1
Data from avahi-browse -avrt
Filtered down to the single airplay endpoint I was debugging on / matching to the Roon Server log file snippets
+ eth0 IPv4 Garage _srpl-tls._tcp local
= eth0 IPv4 MyHome56 _meshcop._udp local
hostname = [Garage.local]
address = [192.168.8.29]
port = [49191]
txt = ["xa=829DBDF22C3740CE" "tv=1.2.0" "sb=00000031" "vn=Apple Inc." "rv=1" "xp=12A8503AFCF64161" "nn=MyHome56"]
+ eth0 IPv4 E02B969787D4@Garage AirTunes Remote Audio local
+ eth0 IPv4 Garage AirPlay Remote Video local
+ eth0 IPv4 Garage _companion-link._tcp local
+ eth0 IPv4 70-35-60-63.1 Garage _sleep-proxy._udp local
= eth0 IPv4 Garage _srpl-tls._tcp local
hostname = [Garage.local]
address = [192.168.8.29]
port = [853]
txt = ["server-id=d66f2ff9b7c4fece" "domain=openthread.thread.home.arpa."]
= eth0 IPv4 E02B969787D4@Garage AirTunes Remote Audio local
hostname = [Garage.local]
address = [192.168.8.29]
port = [7000]
txt = ["vv=2" "ov=15.2" "vs=600.8.41" "vn=65537" "tp=UDP" "pk=3aa29ce45fea0b6a1db815024f0912f105ec94eb50d0b72b8463d95d68bac425" "am=AudioAccessory5,1" "md=0,1,2" "sf=0x404" "ft=0x4A7FCA00,0xBC356BD0" "et=0,3,5" "da=true" "cn=0,1,2,3"]
UFW firewall rules running on the server:
>ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] Anywhere ALLOW IN 192.168.8.0/24
[ 2] Anywhere on eth0 ALLOW IN 192.168.8.0/24
[ 3] Anywhere on eth1 REJECT IN Anywhere
[ 4] 22/tcp LIMIT IN Anywhere
[ 5] Anywhere (v6) on eth1 REJECT IN Anywhere (v6)
[ 6] Anywhere (v6) REJECT OUT Anywhere (v6) on eth1 (out)
Roon Log file snippets
01/12 17:35:09 Trace: [ipaddresses] enumerating addresses
01/12 17:35:09 Trace: [ipaddresses] FOUND lo 127.0.0.1
01/12 17:35:09 Trace: [ipaddresses] FOUND eth0 192.168.8.10
01/12 17:35:09 Trace: [ipaddresses] SKIPPED eth1: no ipv4
An example of the wrong IP Endpoint being selected, and then a couple of minutes later (as I was filling out this support ticket) it subsequently working again.
01/12 18:16:23 Trace: [zone Garage] PlayPause
01/12 18:16:23 Trace: [zone Garage] Unpause
01/12 18:16:23 Trace: [zone Garage] Selecting Source state=Paused
01/12 18:16:23 Trace: [zone Garage] Unsuspend
01/12 18:16:23 Info: [Garage] [zoneplayer] Playing: /export/media/music/alex/flac/AFI/Decemberunderground/04 Summer Shudder.flac
01/12 18:16:23 Info: [Garage] [zoneplayer] Open Result (Playing):Result[Status=Success]
01/12 18:16:23 Info: [Garage] [zoneplayer] Performing initial seek to 108000
01/12 18:16:23 Info: [Garage] [zoneplayer] Starting playback
01/12 18:16:23 Trace: [airplay/client] Connecting to airplay server
01/12 18:16:23 Warn: [airplay/rtsp] SocketException while connecting to RTSP server: Connection refused [::ffff:127.0.0.1]:7000
01/12 18:16:23 Warn: [airplay/client] Failed to connect: Result[Status=NetworkError]
01/12 18:16:23 Info: [zone Garage] OnPlayFeedback Playing
01/12 18:16:23 Info: [airplay] AirPlay device connection failed to: AirPlayDevice[DeviceId=E02B969787D4@Garage._raop._tcp.local, Name=Garage.local, Model=AudioAccessory5,1, IPEndPoint=127.0.0.1:7000]
01/12 18:16:23 Trace: [Garage] [HighQuality, 16/44 FLAC => 16/44] [PLAYING @ 1:48/3:06] Summer Shudder - AFI
01/12 18:16:23 Trace: [musicpowerstate] music is playing, preventing idle sleep
01/12 18:16:23 Trace: [airplay] disconnected
01/12 18:16:23 Trace: [zone] Garage received transport control from endpoint integration: suspend
01/12 18:16:23 Trace: [zone Garage] Garage received transport control from Garage: suspend
01/12 18:16:23 Trace: [zone Garage] Suspend
01/12 18:16:23 Info: [zone Garage] OnPlayFeedback Stopped
01/12 18:16:23 Info: [zone Garage] Canceling Pending Sleep
01/12 18:16:23 Trace: [Garage] [HighQuality, 16/44 FLAC => 16/44] [PAUSED @ 1:48/3:06] Summer Shudder - AFI
01/12 18:16:23 Info: [audio/env] [zoneplayer -> stream] All streams were disposed
01/12 18:16:23 Info: [audio/env] [zoneplayer] All streams were disposed
01/12 18:16:23 Info:
--[ SignalPath ]---------------------------------------------
SignalPath Quality = HighQuality
Elements:
Source Format=Flac 44100/16/2 BitRate=1046 Quality=Lossless
Output OutputType=AirPlay Quality=HighQuality SubType= Model=AudioAccessory5,1
------------------------------------------------------------
01/12 18:16:26 Info: [stats] 27301mb Virtual, 1861mb Physical, 690mb Managed, 308 Handles, 97 Threads
01/12 18:16:41 Info: [stats] 27205mb Virtual, 1858mb Physical, 699mb Managed, 308 Handles, 83 Threads
01/12 18:16:56 Info: [stats] 27221mb Virtual, 1858mb Physical, 720mb Managed, 308 Handles, 85 Threads
01/12 18:17:11 Info: [stats] 27205mb Virtual, 1857mb Physical, 728mb Managed, 308 Handles, 81 Threads
01/12 18:17:26 Info: [stats] 27237mb Virtual, 1857mb Physical, 750mb Managed, 308 Handles, 89 Threads
01/12 18:17:41 Info: [stats] 27205mb Virtual, 1857mb Physical, 757mb Managed, 308 Handles, 81 Threads
01/12 18:17:56 Info: [stats] 27213mb Virtual, 1857mb Physical, 776mb Managed, 308 Handles, 82 Threads
01/12 18:18:11 Info: [stats] 27205mb Virtual, 1857mb Physical, 785mb Managed, 308 Handles, 83 Threads
01/12 18:18:24 Trace: [zone Garage] PlayPause
01/12 18:18:24 Trace: [zone Garage] Unpause
01/12 18:18:24 Trace: [zone Garage] Selecting Source state=Paused
01/12 18:18:24 Trace: [zone Garage] Unsuspend
01/12 18:18:24 Info: [Garage] [zoneplayer] Playing: /export/media/music/alex/flac/AFI/Decemberunderground/04 Summer Shudder.flac
01/12 18:18:24 Info: [Garage] [zoneplayer] Open Result (Playing):Result[Status=Success]
01/12 18:18:24 Info: [Garage] [zoneplayer] Performing initial seek to 108000
01/12 18:18:24 Info: [Garage] [zoneplayer] Starting playback
01/12 18:18:24 Trace: [airplay/client] Connecting to airplay server
01/12 18:18:24 Info: [zone Garage] OnPlayFeedback Playing
01/12 18:18:24 Trace: [Garage] [HighQuality, 16/44 FLAC => 16/44] [PLAYING @ 1:48/3:06] Summer Shudder - AFI
01/12 18:18:24 Trace: [musicpowerstate] music is playing, preventing idle sleep
01/12 18:18:24 Info: [Garage] [zoneplayer] Queueing: /export/media/music/alex/flac/AFI/Decemberunderground/09 Kiss And Control.flac
01/12 18:18:24 Info: [Garage] [zoneplayer] Open result (Queueing): Result[Status=Success]
01/12 18:18:24 Trace: [prebuffer] ready 149940/441000 (34%) @ 108/186 sec
01/12 18:18:24 Trace: [airplay/client] Requesting OPTIONS
01/12 18:18:24 Info: [airplay/client] REQUESTING OPTIONS *
01/12 18:18:24 Trace: [airplay/client] Got good OPTIONS: ANNOUNCE, SETUP, RECORD, PAUSE, FLUSH, TEARDOWN, OPTIONS, GET_PARAMETER, SET_PARAMETER, POST, GET, PUT
01/12 18:18:24 Info: [airplay] AirPlay device connected: AirPlayDevice[DeviceId=E02B969787D4@Garage._raop._tcp.local, Name=Garage.local, Model=AudioAccessory5,1, IPEndPoint=192.168.8.29:7000]
01/12 18:18:24 Trace: [airplay] connected
01/12 18:18:24 Trace: [airplay/client] Sending ANNOUNCE
01/12 18:18:24 Trace: [airplay/client] ANNOUNCE Succeeded
01/12 18:18:24 Trace: [airplay/client] Sending SETUP
01/12 18:18:24 Trace: [airplay/client] SETUP was successful
01/12 18:18:24 Trace: [airplay/client] Sending RECORD
01/12 18:18:24 Trace: [airplay/client] Record Succeeded
01/12 18:18:24 Trace: [airplay/client] Sending SET_PARAMETER volume -4.800000000000001db
01/12 18:18:24 Trace: [airplay/client] Sending first sync packet rtptime=219248178 synctime=219336378
01/12 18:18:24 Info:
--[ SignalPath ]---------------------------------------------
SignalPath Quality = HighQuality
Elements:
Source Format=Flac 44100/16/2 BitRate=1046 Quality=Lossless
Output OutputType=AirPlay Quality=HighQuality SubType= Model=AudioAccessory5,1
------------------------------------------------------------
01/12 18:18:26 Info: [stats] 27253mb Virtual, 1863mb Physical, 816mb Managed, 314 Handles, 91 Threads
01/12 18:18:27 Trace: [zone Garage] PlayPause
01/12 18:18:27 Trace: [zone Garage] Pause
01/12 18:18:27 Info: [zone Garage] Canceling Pending Sleep
01/12 18:18:27 Trace: [airplay/client] Sending FLUSH
01/12 18:18:27 Info: [zone Garage] OnPlayFeedback Paused
01/12 18:18:27 Trace: [Garage] [HighQuality, 16/44 FLAC => 16/44] [100% buf] [PAUSED @ 1:50/3:06] Summer Shudder - AFI
01/12 18:18:27 Trace: [airplay/client] FLUSH was successful
01/12 18:18:32 Trace: [zone Garage] [zone] no playback for 5s, suspending to release audio device
01/12 18:18:32 Trace: [airplay/client] Sending TEARDOWN
01/12 18:18:32 Info:
--[ SignalPath ]---------------------------------------------
SignalPath Quality = HighQuality
Elements:
Source Format=Flac 44100/16/2 BitRate=1046 Quality=Lossless
Output OutputType=AirPlay Quality=HighQuality SubType= Model=AudioAccessory5,1
------------------------------------------------------------
01/12 18:18:32 Trace: [zone Garage] Suspend
01/12 18:18:32 Trace: [zone Garage] Stop
01/12 18:18:32 Info: [zone Garage] OnPlayFeedback Stopped
01/12 18:18:32 Info: [zone Garage] Canceling Pending Sleep
01/12 18:18:32 Info: [audio/env] [zoneplayer -> stream] All streams were disposed
01/12 18:18:32 Trace: [airplay/client] Sending FLUSH
01/12 18:18:32 Info: [audio/env] [zoneplayer] All streams were disposed
01/12 18:18:33 Trace: [airplay/client] TEARDOWN was successful
01/12 18:18:33 Info: [airplay] AirPlay device disconnected: AirPlayDevice[DeviceId=E02B969787D4@Garage._raop._tcp.local, Name=Garage.local, Model=AudioAccessory5,1, IPEndPoint=192.168.8.29:7000]
01/12 18:18:33 Trace: [airplay] disconnected
01/12 18:18:33 Trace: [zone] Garage received transport control from endpoint integration: suspend
01/12 18:18:33 Trace: [zone Garage] Garage received transport control from Garage: suspend
01/12 18:18:33 Trace: [zone Garage] Suspend
01/12 18:18:33 Info: [zone Garage] Canceling Pending Sleep
01/12 18:18:33 Warn: [airplay/client] FLUSH failed: 455 Method Not Valid In This State
RAATServer log:
01/12 17:35:09 Info: Starting RAATServer v1.8 (build 884) stable on linuxx64
01/12 17:35:09 Trace: [RAATServer] detected ALSA support
01/12 17:35:09 Warn: [bits] myinfo: {
"os": "Linux 5.10.0-10-amd64",
"platform": "linuxx64",
"machineversion": 100800884,
"branch": "stable",
"appmodifier": "",
"appname": "RAATServer"
}
01/12 17:35:10 Debug: [easyhttp] [1] POST to https://bits.roonlabs.net/1/q/roon.base.,roon.internet_discovery. returned after 360 ms, status code: 200
01/12 17:35:10 Trace: [bits] updated bits, in 397ms
01/12 17:35:10 Info: [RAATServer] creating RAAT__manager
01/12 17:35:10 Info: [RAATServer] appdata_dir = /home/roon/RAATServer
01/12 17:35:10 Info: [RAATServer] unique_id = 446fdf41-9233-4443-82f2-6544755cad1c
01/12 17:35:10 Info: [RAATServer] machine_id = 6c40f223-3fcb-9bb0-9e6f-1bee1c9b483e
01/12 17:35:10 Info: [RAATServer] machine_name = sauron
01/12 17:35:10 Info: [RAATServer] os_version = Linux 5.10.0-10-amd64
01/12 17:35:10 Info: [RAATServer] vendor =
01/12 17:35:10 Info: [RAATServer] model =
01/12 17:35:10 Info: [RAATServer] service_id = d7634b85-8190-470f-aa51-6cb5538dc1b9
01/12 17:35:10 Info: [RAATServer] is_dev = False
01/12 17:35:10 Trace: [raatmanager] starting
01/12 17:35:10 Trace: [raatmanager] initialized
01/12 17:35:10 Info: [RAATServer] running RAAT__manager
01/12 17:35:10 Trace: [raatmanager] starting discovery
01/12 17:35:10 Trace: [discovery] starting
01/12 17:35:10 Info: [discovery] [iface:lo:127.0.0.1] multicast recv socket is bound to 0.0.0.0:9003
01/12 17:35:10 Info: [discovery] [iface:lo:127.0.0.1] multicast send socket is bound to 0.0.0.0:33592
01/12 17:35:10 Info: [discovery] [iface:eth0:192.168.8.10] multicast recv socket is bound to 0.0.0.0:9003
01/12 17:35:10 Info: [discovery] [iface:eth0:192.168.8.10] multicast send socket is bound to 0.0.0.0:41521
01/12 17:35:10 Info: [discovery] unicast socket is bound to 0.0.0.0:9003
01/12 17:35:10 Trace: [raatmanager] starting server
01/12 17:35:10 Info: [jsonserver] listening on port 9200
01/12 17:35:10 Trace: [raatmanager] announcing
01/12 17:35:10 Debug: [discovery] broadcast op is complete
01/12 17:35:10 Trace: [inetdiscovery] added device raatserver/446fdf41-9233-4443-82f2-6544755cad1c in addr:__ADDR__
01/12 17:35:10 Trace: [inetdiscovery] added service com.roonlabs.raatserver.tcp for device raatserver/446fdf41-9233-4443-82f2-6544755cad1c
01/12 17:35:13 Trace: [jsonserver] [127.0.0.1:41104] accepted connection
01/12 17:35:13 Trace: [jsonserver] [127.0.0.1:41104] GOT[LL] [1] {"request":"enumerate_devices","subscription_id":"0"}
01/12 17:35:13 Trace: [jsonserver] [127.0.0.1:41104] SENT [1] [nonfinal] {"status": "Success", "devices": []}
01/12 17:35:15 Trace: [ipaddresses] enumerating addresses
01/12 17:35:15 Trace: [ipaddresses] FOUND lo 127.0.0.1
01/12 17:35:15 Trace: [ipaddresses] FOUND eth0 192.168.8.10
01/12 17:35:15 Trace: [ipaddresses] SKIPPED eth1: no ipv4
01/12 17:35:15 Debug: [easyhttp] [2] POST to https://discovery.roonlabs.net/1/register returned after 220 ms, status code: 200
01/12 17:35:15 Trace: [inetdiscovery] registered 1 devices, 1 services
01/12 17:35:20 Trace: [RAATServer] refreshing @ 10s
01/12 17:35:20 Trace: [raatmanager] announcing
01/12 17:35:20 Debug: [discovery] broadcast op is complete