While UPnP is technically available per Rendez-Vous, no NEX titles ever utilized it. It’s possible we could attempt to support it, since the functionality for some unused features is still present in NEX, but there’s no guarantee it will work correctly (whether that be because it was gutted from a game, or the p2p libraries themselves, which are separate from the NEX libraries, just don’t support it). So trying to mess with that on your end will be fruitless
Before diving into things though you should verify that the issue is actually in the p2p side of things. You haven’t given any error codes so it’s possible that you aren’t even seeing any p2p errors at all
If you’re seeing a 106-XXXX
class error, then that’s a general NEX error not p2p. If you’re seeing a 118-XXXX
class error, then that’s p2p. If you really are seeing a p2p error, I would recommend leaving the error code(s) you’re seeing so we can get a bit more details. We have some information about error codes on GitHub as well (our Discord bot/website are not yet updated to have the new p2p error names) error-codes/data/118 at master · PretendoNetwork/error-codes · GitHub
The 2 main reasons for a p2p error are:
- Bad matchmaking. Our servers are not perfect, and so there’s likely bugs which still need to be squashed. For example older servers tend to have an issue where dead connections might stick around after closing, which could result in trying to establish a p2p connection to a dead client. Though given that you have this issue with multiple games, and Splatoon specifically should be updated to a version without that bug, I think it’s most likely the 2nd reason
- Incompatible networks. Nintendo Network was made in a time when home networks looked very different, and so as time goes on and people upgrade their home networks many of them can become incompatible. There’s not really much we can do in this situation. There’s likely some that we can do, which I’ve noted here already [Enhancement]: Filter clients in sessions by network properties · Issue #43 · PretendoNetwork/nex-protocols-common-go · GitHub (and somewhat relates to the 1st reason), but ultimately if 2 networks are incompatible then there’s not much we can do
As mentioned by @GamersInternatio we have a number of experiments aimed at trying to reduce these errors to the best of our abilities. The way games currently work is that a random port is selected to be your p2p port, which is why most guides (including official Nintendo ones) will tell you to just open every port, since it can’t know which is being used. We agree that just blindly opening every port is bad though, which is why we’re exploring other options
Inkay has the ability to set a specific port to be used, allowing you to only open that specific port (feat(p2p): Allow overriding the p2p udp port for Minecraft · PretendoNetwork/Inkay@22bebff · GitHub and feat(p2p): Port overrides for Splatoon and MK8 · PretendoNetwork/Inkay@a6b91be · GitHub), however it is limited to only some games and is only usable by Inkay users (making it not viable for SSSL users)
As a more generic solution, we have begun some testing of a new “relay” system. This mimics a feature that was officially supported by Rendez-Vous, but gutted in most NEX games. Instead of clients connecting directly to each other, instead the server gives the client the address to a “relay” server run by us. This relay server then reroutes packets to the correct client, while the game still thinks it’s in a p2p mesh. This has the benefit of not having home network issues (since it essentially turns p2p games into server-client games), but may have impacts on areas like latency and will increase our running costs. For a full overview of the pros/cons/feature in general see https://pretendo.network/blog/11-1-24#enhanced-multiplayer-with-relays
Given that you mentioned issues with Splatoon and Mario Kart 8, I would recommend using Inkay to try and set a specific port for those games and then opening that port only