shadPS4/src/core/libraries/network/netctl.cpp
Marcin Mikołajczyk ea37ea11fc
Some checks are pending
Build and Release / reuse (push) Waiting to run
Build and Release / clang-format (push) Waiting to run
Build and Release / get-info (push) Waiting to run
Build and Release / windows-sdl (push) Blocked by required conditions
Build and Release / windows-qt (push) Blocked by required conditions
Build and Release / macos-sdl (push) Blocked by required conditions
Build and Release / macos-qt (push) Blocked by required conditions
Build and Release / linux-sdl (push) Blocked by required conditions
Build and Release / linux-qt (push) Blocked by required conditions
Build and Release / linux-sdl-gcc (push) Blocked by required conditions
Build and Release / linux-qt-gcc (push) Blocked by required conditions
Build and Release / pre-release (push) Blocked by required conditions
Network config (#3292)
* Config entry isConnectedToNetwork

* Respect Config::isConnectedToNetwork when returning connection state

* Return connection status in NetCtlGetInfo

* Print connection data in log
2025-07-23 20:07:42 +03:00

719 lines
25 KiB
C++

// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#ifdef WIN32
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <Ws2tcpip.h>
#include <iphlpapi.h>
#include <winsock2.h>
#else
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#endif
#include <common/singleton.h>
#include "common/config.h"
#include "common/logging/log.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/libs.h"
#include "core/libraries/network/net_ctl_codes.h"
#include "core/libraries/network/netctl.h"
#include "net_util.h"
namespace Libraries::NetCtl {
static NetCtlInternal netctl;
int PS4_SYSV_ABI sceNetBweCheckCallbackIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetBweClearEventIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetBweFinishInternetConnectionTestIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetBweGetInfoIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetBweRegisterCallbackIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetBweSetInternetConnectionTestResultIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetBweStartInternetConnectionTestBandwidthTestIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetBweStartInternetConnectionTestIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetBweUnregisterCallbackIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetInfoV6() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetResultV6() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetStateV6() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlRegisterCallbackV6() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlUnregisterCallbackV6() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlCheckCallback() {
LOG_DEBUG(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlCheckCallbackForLibIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlClearEventForLibIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlClearEventIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlConnectConfIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlConnectIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlConnectWithRetryIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlDisableBandwidthManagementIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlDisconnectIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlEnableBandwidthManagementIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetBandwidthInfoIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetEtherLinkMode() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetIfStat() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetInfo(int code, OrbisNetCtlInfo* info) {
LOG_DEBUG(Lib_NetCtl, "code = {}", code);
switch (code) {
case ORBIS_NET_CTL_INFO_DEVICE:
info->device = ORBIS_NET_CTL_DEVICE_WIRED;
break;
case ORBIS_NET_CTL_INFO_ETHER_ADDR: {
auto* netinfo = Common::Singleton<NetUtil::NetUtilInternal>::Instance();
netinfo->RetrieveEthernetAddr();
memcpy(info->ether_addr.data, netinfo->GetEthernetAddr().data(), 6);
} break;
case ORBIS_NET_CTL_INFO_MTU:
info->mtu = 1500; // default value
break;
case ORBIS_NET_CTL_INFO_LINK:
info->link = Config::getIsConnectedToNetwork() ? ORBIS_NET_CTL_LINK_CONNECTED
: ORBIS_NET_CTL_LINK_DISCONNECTED;
break;
case ORBIS_NET_CTL_INFO_IP_ADDRESS: {
strcpy(info->ip_address,
"127.0.0.1"); // placeholder in case gethostbyname can't find another ip
char devname[80];
gethostname(devname, 80);
if (struct hostent* resolved = gethostbyname(devname)) {
for (int i = 0; resolved->h_addr_list[i] != nullptr; ++i) {
struct in_addr addrIn;
memcpy(&addrIn, resolved->h_addr_list[i], sizeof(u32));
char* addr = inet_ntoa(addrIn);
if (strcmp(addr, "127.0.0.1") != 0) {
strcpy(info->ip_address, addr);
break;
}
}
}
break;
}
default:
LOG_ERROR(Lib_NetCtl, "{} unsupported code", code);
}
LOG_DEBUG(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetInfoIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetInfoV6IpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetNatInfo() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetNatInfoIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetNetEvConfigInfoIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetResult(int eventType, int* errorCode) {
if (!errorCode) {
return ORBIS_NET_CTL_ERROR_INVALID_ADDR;
}
LOG_DEBUG(Lib_NetCtl, "(STUBBED) called eventType = {} ", eventType);
*errorCode = 0;
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetResultIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetResultV6IpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetScanInfoBssidForSsidListScanIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetScanInfoBssidIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetScanInfoByBssidIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetScanInfoForSsidListScanIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetScanInfoForSsidScanIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetState(int* state) {
const auto connected = Config::getIsConnectedToNetwork();
LOG_DEBUG(Lib_NetCtl, "connected = {}", connected);
const auto current_state =
connected ? ORBIS_NET_CTL_STATE_IPOBTAINED : ORBIS_NET_CTL_STATE_DISCONNECTED;
*state = current_state;
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetState2IpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetStateIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetStateV6IpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlGetWifiType() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlInit() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlIsBandwidthManagementEnabledIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlRegisterCallback(OrbisNetCtlCallback func, void* arg, int* cid) {
if (!func || !cid) {
return ORBIS_NET_CTL_ERROR_INVALID_ADDR;
}
s32 result = netctl.RegisterCallback(func, arg);
if (result < 0) {
return result;
} else {
*cid = result;
}
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlRegisterCallbackForLibIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlRegisterCallbackIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlRegisterCallbackV6IpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlScanIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlSetErrorNotificationEnabledIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlSetStunWithPaddingFlagIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlTerm() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlUnregisterCallback() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlUnregisterCallbackForLibIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlUnregisterCallbackIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlUnregisterCallbackV6IpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlUnsetStunWithPaddingFlagIpcInt() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI Func_D8DCB6973537A3DC() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlCheckCallbackForNpToolkit() {
LOG_DEBUG(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlClearEventForNpToolkit() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlRegisterCallbackForNpToolkit(OrbisNetCtlCallbackForNpToolkit func,
void* arg, int* cid) {
if (!func || !cid) {
return ORBIS_NET_CTL_ERROR_INVALID_ADDR;
}
s32 result = netctl.RegisterNpToolkitCallback(func, arg);
if (result < 0) {
return result;
} else {
*cid = result;
}
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlUnregisterCallbackForNpToolkit() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApCheckCallback() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApClearEvent() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApGetConnectInfo() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApGetInfo() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApGetResult() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApGetState() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApInit() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApRegisterCallback() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApStop() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApTerm() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApUnregisterCallback() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApAppInitWpaKey() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApAppInitWpaKeyForQa() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApAppStartWithRetry() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApAppStartWithRetryPid() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApRestart() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApRpCheckCallback() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApRpClearEvent() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApRpGetInfo() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApRpGetResult() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApRpGetState() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApRpRegisterCallback() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApRpStart() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApRpStartConf() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApRpStartWithRetry() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApRpStop() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
int PS4_SYSV_ABI sceNetCtlApRpUnregisterCallback() {
LOG_ERROR(Lib_NetCtl, "(STUBBED) called");
return ORBIS_OK;
}
void RegisterLib(Core::Loader::SymbolsResolver* sym) {
LIB_FUNCTION("XtClSOC1xcU", "libSceNetBwe", 1, "libSceNetCtl", 1, 1,
sceNetBweCheckCallbackIpcInt);
LIB_FUNCTION("YALqoY4aeY0", "libSceNetBwe", 1, "libSceNetCtl", 1, 1, sceNetBweClearEventIpcInt);
LIB_FUNCTION("ouyROWhGUbM", "libSceNetBwe", 1, "libSceNetCtl", 1, 1,
sceNetBweFinishInternetConnectionTestIpcInt);
LIB_FUNCTION("G4vltQ0Vs+0", "libSceNetBwe", 1, "libSceNetCtl", 1, 1, sceNetBweGetInfoIpcInt);
LIB_FUNCTION("GqETL5+INhU", "libSceNetBwe", 1, "libSceNetCtl", 1, 1,
sceNetBweRegisterCallbackIpcInt);
LIB_FUNCTION("mEUt-phGd5E", "libSceNetBwe", 1, "libSceNetCtl", 1, 1,
sceNetBweSetInternetConnectionTestResultIpcInt);
LIB_FUNCTION("pQLJV5SEAqk", "libSceNetBwe", 1, "libSceNetCtl", 1, 1,
sceNetBweStartInternetConnectionTestBandwidthTestIpcInt);
LIB_FUNCTION("c+aYh130SV0", "libSceNetBwe", 1, "libSceNetCtl", 1, 1,
sceNetBweStartInternetConnectionTestIpcInt);
LIB_FUNCTION("0lViPaTB-R8", "libSceNetBwe", 1, "libSceNetCtl", 1, 1,
sceNetBweUnregisterCallbackIpcInt);
LIB_FUNCTION("Jy1EO5GdlcM", "libSceNetCtlV6", 1, "libSceNetCtl", 1, 1, sceNetCtlGetInfoV6);
LIB_FUNCTION("H5yARg37U5g", "libSceNetCtlV6", 1, "libSceNetCtl", 1, 1, sceNetCtlGetResultV6);
LIB_FUNCTION("+lxqIKeU9UY", "libSceNetCtlV6", 1, "libSceNetCtl", 1, 1, sceNetCtlGetStateV6);
LIB_FUNCTION("1NE9OWdBIww", "libSceNetCtlV6", 1, "libSceNetCtl", 1, 1,
sceNetCtlRegisterCallbackV6);
LIB_FUNCTION("hIUVeUNxAwc", "libSceNetCtlV6", 1, "libSceNetCtl", 1, 1,
sceNetCtlUnregisterCallbackV6);
LIB_FUNCTION("iQw3iQPhvUQ", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlCheckCallback);
LIB_FUNCTION("UF6H6+kjyQs", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlCheckCallbackForLibIpcInt);
LIB_FUNCTION("vv6g8zoanL4", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlClearEventForLibIpcInt);
LIB_FUNCTION("8OJ86vFucfo", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlClearEventIpcInt);
LIB_FUNCTION("HCD46HVTyQg", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlConnectConfIpcInt);
LIB_FUNCTION("ID+Gq3Ddzbg", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlConnectIpcInt);
LIB_FUNCTION("aPpic8K75YA", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlConnectWithRetryIpcInt);
LIB_FUNCTION("9y4IcsJdTCc", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlDisableBandwidthManagementIpcInt);
LIB_FUNCTION("qOefcpoSs0k", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlDisconnectIpcInt);
LIB_FUNCTION("x9bSmRSE+hc", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlEnableBandwidthManagementIpcInt);
LIB_FUNCTION("eCUIlA2t5CE", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlGetBandwidthInfoIpcInt);
LIB_FUNCTION("2EfjPXVPk3s", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetEtherLinkMode);
LIB_FUNCTION("teuK4QnJTGg", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetIfStat);
LIB_FUNCTION("obuxdTiwkF8", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetInfo);
LIB_FUNCTION("xstcTqAhTys", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetInfoIpcInt);
LIB_FUNCTION("Jy1EO5GdlcM", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetInfoV6);
LIB_FUNCTION("arAQRFlwqaA", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetInfoV6IpcInt);
LIB_FUNCTION("JO4yuTuMoKI", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetNatInfo);
LIB_FUNCTION("x+cnsAxKSHo", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetNatInfoIpcInt);
LIB_FUNCTION("hhTsdv99azU", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlGetNetEvConfigInfoIpcInt);
LIB_FUNCTION("0cBgduPRR+M", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetResult);
LIB_FUNCTION("NEtnusbZyAs", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetResultIpcInt);
LIB_FUNCTION("H5yARg37U5g", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetResultV6);
LIB_FUNCTION("vdsTa93atXY", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlGetResultV6IpcInt);
LIB_FUNCTION("wP0Ab2maR1Y", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlGetScanInfoBssidForSsidListScanIpcInt);
LIB_FUNCTION("Wn-+887Lt2s", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlGetScanInfoBssidIpcInt);
LIB_FUNCTION("FEdkOG1VbQo", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlGetScanInfoByBssidIpcInt);
LIB_FUNCTION("irV8voIAHDw", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlGetScanInfoForSsidListScanIpcInt);
LIB_FUNCTION("L97eAHI0xxs", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlGetScanInfoForSsidScanIpcInt);
LIB_FUNCTION("uBPlr0lbuiI", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetState);
LIB_FUNCTION("JXlI9EZVjf4", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetState2IpcInt);
LIB_FUNCTION("gvnJPMkSoAY", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetStateIpcInt);
LIB_FUNCTION("+lxqIKeU9UY", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetStateV6);
LIB_FUNCTION("O8Fk4w5MWss", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetStateV6IpcInt);
LIB_FUNCTION("BXW9b3R1Nw4", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlGetWifiType);
LIB_FUNCTION("gky0+oaNM4k", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlInit);
LIB_FUNCTION("YtAnCkTR0K4", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlIsBandwidthManagementEnabledIpcInt);
LIB_FUNCTION("UJ+Z7Q+4ck0", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlRegisterCallback);
LIB_FUNCTION("WRvDk2syatE", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlRegisterCallbackForLibIpcInt);
LIB_FUNCTION("rqkh2kXvLSw", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlRegisterCallbackIpcInt);
LIB_FUNCTION("1NE9OWdBIww", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlRegisterCallbackV6);
LIB_FUNCTION("ipqlpcIqRsQ", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlRegisterCallbackV6IpcInt);
LIB_FUNCTION("reIsHryCDx4", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlScanIpcInt);
LIB_FUNCTION("LJYiiIS4HB0", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlSetErrorNotificationEnabledIpcInt);
LIB_FUNCTION("DjuqqqV08Nk", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlSetStunWithPaddingFlagIpcInt);
LIB_FUNCTION("Z4wwCFiBELQ", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, sceNetCtlTerm);
LIB_FUNCTION("Rqm2OnZMCz0", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlUnregisterCallback);
LIB_FUNCTION("urWaUWkEGZg", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlUnregisterCallbackForLibIpcInt);
LIB_FUNCTION("by9cbB7JGJE", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlUnregisterCallbackIpcInt);
LIB_FUNCTION("hIUVeUNxAwc", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlUnregisterCallbackV6);
LIB_FUNCTION("Hjxpy28aID8", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlUnregisterCallbackV6IpcInt);
LIB_FUNCTION("1HSvkN9oxO4", "libSceNetCtl", 1, "libSceNetCtl", 1, 1,
sceNetCtlUnsetStunWithPaddingFlagIpcInt);
LIB_FUNCTION("2Ny2lzU3o9w", "libSceNetCtl", 1, "libSceNetCtl", 1, 1, Func_D8DCB6973537A3DC);
LIB_FUNCTION("u5oqtlIP+Fw", "libSceNetCtlForNpToolkit", 1, "libSceNetCtl", 1, 1,
sceNetCtlCheckCallbackForNpToolkit);
LIB_FUNCTION("saYB0b2ZWtI", "libSceNetCtlForNpToolkit", 1, "libSceNetCtl", 1, 1,
sceNetCtlClearEventForNpToolkit);
LIB_FUNCTION("wIsKy+TfeLs", "libSceNetCtlForNpToolkit", 1, "libSceNetCtl", 1, 1,
sceNetCtlRegisterCallbackForNpToolkit);
LIB_FUNCTION("2oUqKR5odGc", "libSceNetCtlForNpToolkit", 1, "libSceNetCtl", 1, 1,
sceNetCtlUnregisterCallbackForNpToolkit);
LIB_FUNCTION("19Ec7WkMFfQ", "libSceNetCtlAp", 1, "libSceNetCtl", 1, 1,
sceNetCtlApCheckCallback);
LIB_FUNCTION("meFMaDpdsVI", "libSceNetCtlAp", 1, "libSceNetCtl", 1, 1, sceNetCtlApClearEvent);
LIB_FUNCTION("hfkLVdXmfnU", "libSceNetCtlAp", 1, "libSceNetCtl", 1, 1,
sceNetCtlApGetConnectInfo);
LIB_FUNCTION("LXADzTIzM9I", "libSceNetCtlAp", 1, "libSceNetCtl", 1, 1, sceNetCtlApGetInfo);
LIB_FUNCTION("4jkLJc954+Q", "libSceNetCtlAp", 1, "libSceNetCtl", 1, 1, sceNetCtlApGetResult);
LIB_FUNCTION("AKZOzsb9whc", "libSceNetCtlAp", 1, "libSceNetCtl", 1, 1, sceNetCtlApGetState);
LIB_FUNCTION("FdN+edNRtiw", "libSceNetCtlAp", 1, "libSceNetCtl", 1, 1, sceNetCtlApInit);
LIB_FUNCTION("pmjobSVHuY0", "libSceNetCtlAp", 1, "libSceNetCtl", 1, 1,
sceNetCtlApRegisterCallback);
LIB_FUNCTION("r-pOyN6AhsM", "libSceNetCtlAp", 1, "libSceNetCtl", 1, 1, sceNetCtlApStop);
LIB_FUNCTION("cv5Y2efOTeg", "libSceNetCtlAp", 1, "libSceNetCtl", 1, 1, sceNetCtlApTerm);
LIB_FUNCTION("NpTcFtaQ-0E", "libSceNetCtlAp", 1, "libSceNetCtl", 1, 1,
sceNetCtlApUnregisterCallback);
LIB_FUNCTION("R-4a9Yh4tG8", "libSceNetCtlApIpcInt", 1, "libSceNetCtl", 1, 1,
sceNetCtlApAppInitWpaKey);
LIB_FUNCTION("5oLJoOVBbGU", "libSceNetCtlApIpcInt", 1, "libSceNetCtl", 1, 1,
sceNetCtlApAppInitWpaKeyForQa);
LIB_FUNCTION("YtTwZ3pa4aQ", "libSceNetCtlApIpcInt", 1, "libSceNetCtl", 1, 1,
sceNetCtlApAppStartWithRetry);
LIB_FUNCTION("sgWeDrEt24U", "libSceNetCtlApIpcInt", 1, "libSceNetCtl", 1, 1,
sceNetCtlApAppStartWithRetryPid);
LIB_FUNCTION("amqSGH8l--s", "libSceNetCtlApIpcInt", 1, "libSceNetCtl", 1, 1,
sceNetCtlApRestart);
LIB_FUNCTION("DufQZgH5ISc", "libSceNetCtlApIpcInt", 1, "libSceNetCtl", 1, 1,
sceNetCtlApRpCheckCallback);
LIB_FUNCTION("qhZbOi+2qLY", "libSceNetCtlApIpcInt", 1, "libSceNetCtl", 1, 1,
sceNetCtlApRpClearEvent);
LIB_FUNCTION("VQl16Q+qXeY", "libSceNetCtlApIpcInt", 1, "libSceNetCtl", 1, 1,
sceNetCtlApRpGetInfo);
LIB_FUNCTION("3pxwYqHzGcw", "libSceNetCtlApIpcInt", 1, "libSceNetCtl", 1, 1,
sceNetCtlApRpGetResult);
LIB_FUNCTION("LEn8FGztKWc", "libSceNetCtlApIpcInt", 1, "libSceNetCtl", 1, 1,
sceNetCtlApRpGetState);
LIB_FUNCTION("ofGsK+xoAaM", "libSceNetCtlApIpcInt", 1, "libSceNetCtl", 1, 1,
sceNetCtlApRpRegisterCallback);
LIB_FUNCTION("mjFgpqNavHg", "libSceNetCtlApIpcInt", 1, "libSceNetCtl", 1, 1,
sceNetCtlApRpStart);
LIB_FUNCTION("HMvaHoZWsn8", "libSceNetCtlApIpcInt", 1, "libSceNetCtl", 1, 1,
sceNetCtlApRpStartConf);
LIB_FUNCTION("9Dxg7XSlr2s", "libSceNetCtlApIpcInt", 1, "libSceNetCtl", 1, 1,
sceNetCtlApRpStartWithRetry);
LIB_FUNCTION("6uvAl4RlEyk", "libSceNetCtlApIpcInt", 1, "libSceNetCtl", 1, 1, sceNetCtlApRpStop);
LIB_FUNCTION("8eyH37Ns8tk", "libSceNetCtlApIpcInt", 1, "libSceNetCtl", 1, 1,
sceNetCtlApRpUnregisterCallback);
};
} // namespace Libraries::NetCtl