Repository navigation
Add System Link (LAN) play - #115
Merged
Merged
Conversation
Consoles on the same Wi-Fi find and join each other's System Link games, as 360s do on one network; consoles on a VPN (ZeroTier, Tailscale) are reached by naming their addresses. Core (xenia/kernel/systemlink.*, XSocket, XNet exports): - broadcasts go to the network's broadcast address and, as unicasts, to named peers and consoles heard from outside the network; a console's own broadcasts are dropped - ports below 1024 bind as port + 10000 and are translated both ways - XNADDRs carry the device's address, its own Ethernet address and an online identity; XNetXnAddrToInAddr/InAddrToXnAddr, machine ids, connect status, keys and the system link port are implemented - XNetQosListen/XNetQosLookup answer and send QoS probes over UDP - XLiveBaseGetNatType reports an open NAT with System Link on - system link hosts fill XSESSION_INFO App: System link and Other consoles (VPN) settings under System, launch cvars with the device's address, broadcast address and a kept Ethernet address, and the Wi-Fi multicast lock while a game runs. Halo 3 joins with its "Allow public IP addresses." patch on. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Author
trim.4679B37B-B726-4F7C-BBC0-C8BB9F516C09.MOV |
Contributor
Author
|
@phforner0 should i do something else for approval? |
Owner
Not for now, maybe just test it in more games if possible. I'm currently working on optimizations and fixing some bugs, so it will take a little while before I can review more in-depth and merge with me knowing that it won't break anything in the emulator. And my sincerest thanks for contributing to Xendroid Plus. Or since I don't have much time available at the moment, after you test it in more games I'll merge it and let people test it as a preview build. |
Contributor
Author
|
It’s designed for games that use System Link or LAN for multiplayer; I’ve already tested it with Halo 3 and Gears of War 3 (Horde mode) and both work perfectly. |
Contributor
Author
trim.71E3BB71-4609-46B3-B549-1299CEE86874.MOVGears of war 3 |
Contributor
Author
trim.CB595E25-3202-4516-8BE3-3DC1A6B4E614.MOVBorderlands 2 |
hy300leosquizz-ctrl
added a commit
to hy300leosquizz-ctrl/Xendroid-Plus
that referenced
this pull request
Nov 8, 2026
System link (phforner0#115) added the Network section with Network|systemlink (a switch) and Network|systemlink_peers (text) without updating the inventory test: 176 entries, 120 switches, 3 text fields, and Network after Kernel among the sections. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
System Link between Xendroid+ devices: consoles on the same Wi-Fi find and join each other's System Link games, as 360s do on one network. Devices on another subnet or a VPN (ZeroTier, Tailscale) are reached by naming their IP addresses.
Tested: Halo 3 System Link between two Android phones on one Wi-Fi — the game is found, joined and played.
How
Core (
xenia/kernel/systemlink.{h,cc},XSocket, XNet exports inxam_net.cc):XNetGetTitleXnAddrreturns the device's address, its own Ethernet address and a per-console online identity;XNetXnAddrToInAddr/XNetInAddrToXnAddr,XNetXnAddrToMachineId,XNetLogonGetMachineID,XNetConnect/XNetGetConnectStatus,XNetCreateKey/XNetRegisterKey, the system link port and Ethernet link status are implemented.XNetQosListen/XNetQosLookup: hosts answer QoS probes over UDP (port 13074) with the data they publish.XLiveBaseGetNatTypereports an open NAT with System Link on.XSESSION_INFOinXSessionCreate.Everything is behind the new
systemlinkcvar (off by default); with it off, behaviour is unchanged.App:
02:22:48:…) go to the core as cvars; the Wi-Fi multicast lock is held while a game runs (ACCESS_WIFI_STATE,CHANGE_WIFI_MULTICAST_STATE).Halo 3
Halo 3 refuses to connect to peers whose address is a plain IP unless its bundled patch "Allow public IP addresses." is on (Game patches). Without it the joiner finds the game but gives up with "Unable to join". The setting's description says so.
Tests
SystemLinkTest(broadcast address math) andSettingCatalogTestpass.assembleDebugbuilds.🤖 Generated with Claude Code