ValveSoftware / ValveSoftware/source-sdk-2013
Bug Report: Valve Update Breaks Steam Game Server Visibility on Linux/ARM Emulation
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 10k
- Forks
- 3k
- Avg merge
- 8d 11h
- Merged PRs (30d)
- 2
Description
Bug Report: Valve Update Breaks Steam Game Server Visibility on Linux/ARM Emulation
Executive Summary
After a recent Valve update, Linux/ARM-based game servers that successfully appeared in the Steam server browser prior to the update are now invisible to the browser and only reachable via direct IP connection. The server appears as "LAN" because the Steam master server reports the server's public IP as 127.0.0.1, despite the server being configured with a public IP on the network interface.
Affected System
- Platform: Linux on ARM64
- CPU Emulation: Tested with both QEMU and FEX-Emu
- Game Server: Counter-Strike: Source GunGame
- Host IP: [REMOVED - LOCAL NETWORK IP]
- Public Internet IP: [REMOVED - PRIVATE]
- Steam Client Version: Latest stable version (emulated via FEX-Emu, or run on native ARM via QEMU)
Problem Description
-
Server Works, but is Invisible:
- The server runs successfully and accepts connections via direct IP.
- The
net_public_adrcvar is set to the public internet IP. - VAC secure mode is active.
- SourceMod and GunGame plugins load and run correctly.
- However, the server does NOT appear in the Steam server browser for clients.
-
"Public IP to Steam" Reports 127.0.0.1:
Connection to Steam servers successful. Public IP to Steam is 127.0.0.1. VAC secure mode is activated. -
Affected Both QEMU and FEX-Emu:
- The same issue occurs with QEMU (which worked before the update).
- The same issue occurs with FEX-Emu (current testing environment).
- This indicates the problem is not specific to FEX-Emu, but rather a change in Valve's API that affects all Linux/ARM emulation environments.
-
Root Cause Hypothesis:
- Prior to the update, the game server engine appeared to derive its public IP from the
net_public_adrcvar. - After the update, the engine no longer respects
net_public_adrand relies exclusively on the Steam API'sISteamGameServer::GetPublicIP()function to determine the public IP for master server queries. - Under both QEMU and FEX-Emu, the Steam client (
steamclient.so) reportsGetPublicIP()as 127.0.0.1, causing the master server to treat the server as LAN-only.
- Prior to the update, the game server engine appeared to derive its public IP from the
Attempted Fixes (as logged in the server console)
-
Attempted Hooking of
SteamInternal_GameServer_Init:- Created an LD_PRELOAD hook that intercepts
SteamInternal_GameServer_Initand returns a modified public IP. - Tested with passthrough of all arguments (8 slots).
- Result: Steam init fails with "Unable to load Steam support library" (the hook prevents proper Steam initialization).
- Created an LD_PRELOAD hook that intercepts
-
Attempted Hooking of
ISteamGameServer::GetPublicIP(vtable +0x84):- Similar approach as above, modifying the IP reported by
GetPublicIP(). - Result: Same issue — hooks prevent Steam client from initializing correctly.
- Similar approach as above, modifying the IP reported by
-
Attempted Native Engine Path (
ConVarRef("hostip")):- The engine reads the
hostipConVar and passes it toSteamInternal_GameServer_Initinternally. - Tested setting
hostipvia RCON command: no effect on server browser visibility.
- The engine reads the
Conclusion
This is a breaking change introduced by a recent Valve update that:
- Breaks game server visibility on Linux/ARM emulated platforms.
- Affects both QEMU and FEX-Emu (not FEX-Emu-specific).
- Is likely caused by Valve removing support for
net_public_adrcvar and making master server queries strictly dependent onGetPublicIP().
Suggested Fix for Valve
- Re-enable
net_public_adrsupport for Linux/ARM game servers, or - Ensure
GetPublicIP()returns the correct public IP (not 127.0.0.1) when the server is configured with a public IP in the cvar, or - Add a new Steam API call for manually setting the public IP that bypasses the
GetPublicIP()ambiguity on emulated platforms.
Logs and Screenshots
- Server startup logs showing
Public IP to Steam is 127.0.0.1. - Startup command showing
-net_public_adr <public_ip>. - Confirmation that the server works on direct IP but not in the Steam browser.
- Server query results (via
statuscommand in the console): visible in RCON but not viamasterbrowser.steampowered.com.
Additional Information
- This issue prevents Linux/ARM server owners from offering their servers to the public, as players cannot find them in the Steam browser.
- The issue is reproducible on a clean install of the latest Source SDK Base or Counter-Strike: Source with the latest Steam client.
- Both QEMU (tested with latest stable version) and FEX-Emu (tested with current stable version) exhibit the same behavior.
Date: August 30, 2026
Contact: wagner.alves.cos@gmail.com
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
No repository file or test is identified. Start by reviewing the startup logs and reproducing the server-browser failure on Linux/ARM under QEMU or FEX-Emu, then trace the interaction between net_public_adr, hostip, and SteamInternal_GameServer_Init/GetPublicIP(). Done requires a confirmed cause and a validated fix that restores public server visibility.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, linux
- Domain
- game-dev, networking, operating-systems
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100