UDP Problem when running a dedicated server (Arch Linux Arm @ Pi 3)

Hello there,
I’ve been toying around with Raspberries and ioquake but encountered a rather strange problem.

The following setup is used:
1x Pi 3 as Server
3x Pi 3 as Clients
All Pis have different hostnames, IPs and CD-Keys

  • I start my dedicated box (with OSP if that matters) and all clients find it ingame (running on default Port 27960)
  • First client connects, plays against the 2 bots that are waiting for him, all good.
  • When the second client clicks ‘connect’, it drops client #1 -> stays ingame but no connection / lagmeter goes through the roof, 999 ping!
  • If client #1 wants to reconnect, it can’t even see the server in the ingame browser anymore (“checking 1of 1 servers” but it never shows up)
  • This can be chained with client #3 connecting and dropping client #2 in the same way.

Now if I host the server not as a dedicated one but start a normal, non-dedicated from one of the clients ingame, it works and everyone can play (now they show up as IPX and not as UDP) but the Pi gets really hot and after a couple of maps just freezes.
That got me so far as to thinking UDP may be the problem here but I’ve got no clue how to force the dedicated machine to use IPX. There’s the net_noipx / net_noudp commandline switches but they don’t seem to have any effect whatsoever or I’m using them wrong (added to the start parameters of my shellscript to launch the server)

Punkbuster is off, CD-Key check on/off doesn’t matter, IPTables and blocking the UDP Ports just removes them from the ingame browser but doesn’t force IPX.

Any ideas what’s happening / causing the issue and how to fix it?

cheers,
ctc.Sebi

Is there a pi-specific fork of ioquake3 you’re using?

The thermal event is most likely due to a lack of active cooling on the pi when rendering the game but I’m just guessing. You might try limiting the frame rate with com_maxfps to something like 30 and seeing if that fixes the issue.

That’s the package I used on the first PI when preparing the image which I cloned to the other SD cards afterwards:
https://aur.archlinux.org/packages/ioquake3-git/

I’ve set the FPS Limit to 60 on the server-ish Pi and it still happens, but it does not happen on the ones that are only running the client and not the server ontop.

When the ioquake3 in-game server browser says IPX it’s actually UDP over IPv6. Vanilla Q3 had IPX instead of IPv6. The protocol names are hard coded in the pak.pk3/vm/ui.qvm. If you use ioquake3’s baseq3/vm/ui.qvm on the clients they will say UDP6 instead of IPX.

By default the server only has IPv4 enabled. Add +set net_enabled 3 to server run arguments to enable both IPv4 and IPv6 like clients do by default. Setting net_enabled to 2 will enable IPv6 but not IPv4.

From README.md:

  net_enabled                       - enable networking, bitmask. Add up
                                      number for option to enable it:
                                      enable ipv4 networking:    1
                                      enable ipv6 networking:    2
                                      prioritise ipv6 over ipv4: 4
                                      disable multicast support: 8

No idea why the client connections are getting dropped though.

Now that’s something I can try :slight_smile: Didn’t know about that / must’ve skipped that part of the readme.
Will try it and report back. Thanks for the tip.

1 Like

OK, another “fraggin’ friday” in the office and I can happily report that net_enabled 2 solved our problem.

Maybe our managed switches got some problem when it’s running over IPv4.
But as long as it is working now, I can live and frag and die with that :smiley:
Thanks for the tip and if someone encounters something similar in the future, well we now got a solution.

Now where did I store my old configs… off to frag some co-workers :stuck_out_tongue:

2 Likes