Firstly, King Arthur’s Gold will be participating in the World IPv6 Launch on June 6th, in that we have every site/server for King Arthur’s Gold IPv6-enabled.
The World IPv6 Launch is a joint effort by content providers, Internet Service Providers, and hardware vendors to make appreciable progress in deploying IPv6. It is a follow-up of sorts to last year’s World IPv6 Day, where many content providers ran tests with the public for 24 hours to see if there were any unforeseen problems and to gauge the impact of advertising IPv6 availability on their sites. As was hoped, it was a non-event, as was Facebook recently enabling IPv6 on their site permanently.
I urge you all to call your ISPs and e-mail your favorite sites’ support asking what their plans are to support IPv6. IPv4 exhaustion is continuing to push forward the deployment of NAT at large scales, which will come at a cost to gamers and other applications which frequently rely on port forwarding. As the quality of IPv4 connectivity degrades over time, IPv6 will increasingly prevail as the higher quality means for two endpoints to talk to each other.
Beyond that, I have been working carefully to make the new server registration/list components of the KAG API compatible with IPv4 and IPv6, and respecting server owners’ preferences for whether IPv6 is preferred by clients (assuming the client and server both have IPv6 connectivity). The game netcode itself does not support IPv6 yet because the underlying library we use does not support it, however a medium-to-long term goal of mine is to extend it to support IPv6 or replace our netcode with something else. Here is a basic overview of the logic that is being built in currently:
- The server owner enters into their configuration whether IPv6 should be enabled (default on), whether IPv6 or IPv4 should be preferred by clients (default to ‘whichever performs better, or IPv6 if they’re pretty much the same’), and what IPv6 address to bind to (defaults to auto-selecting one)
- The server registers with the API. If the preference configuration is 0 (select the better performing protocol or IPv6 if they’re the close) or 6 (prefer IPv6 absolutely), the server registers with IPv6 as its main identifying address in the server list. If the server is IPv4 only or the preference is set to 4, the server registers with its IPv4 address as its identifier
- Some other steps go on to allow the server to list its other address, if it has one, so that it is confirmed as owned by the server and allowed to be used to identify the server
- When a client requests the server list, it is filtered by all criteria the client supplies (documentation will be available on the wiki soon, describing how the server list/filter API works). The client will receive the full list of servers matching the filter criteria including their IPv4 and IPv6 addresses. The client will ping servers over both IPv4 and IPv6 to gauge performance, assuming it has IPv4 and IPv6 access. IPv4-only servers will not be displayed to IPv6-only clients, and vice-versa.
- The client will have a configuration setting for its own preference for IPv4 or IPv6, however I have not figured out exactly how this will work in cooperation with the server preference. Possibly the server preference being 0 will mean “defer to the client’s setting”, and the client will default to using whichever performs better (or IPv6 if latency is within X%).
Other notes –
- The new server registration API will eventually refuse to list servers that it cannot connect to. This will prevent servers behind a firewall (without port forwarding) from being listed in the master server list
- You can view my own personal post from a couple years ago here. This has the general logic that the above workflow/design is based on.
- I have no idea when we’ll get around to adding IPv6 support to the actual game code unfortunately. It is something I would like to do, however I have not investigated enough to understand what the scope of the project would be and what our options are for implementing IPv6 least painfully.
If you have any questions about IPv4 exhaustion, IPv6 deployment, or how KAG/gaming will likely deal with these in the future, take a look at the following links and head to this forum thread: