IOS/KD: Implement IOCTL_NWC24_REQUEST_SHUTDOWN

This commit is contained in:
Sepalani 2020-05-09 10:36:10 +04:00
parent 393ce529af
commit 1df1a9abe6
3 changed files with 30 additions and 10 deletions

View File

@ -274,8 +274,8 @@ IPCCommandResult NetIPTop::IOCtl(const IOCtlRequest& request)
switch (request.request) switch (request.request)
{ {
case IOCTL_SO_STARTUP: case IOCTL_SO_INITINTERFACE:
return HandleStartUpRequest(request); return HandleInitInterfaceRequest(request);
case IOCTL_SO_SOCKET: case IOCTL_SO_SOCKET:
return HandleSocketRequest(request); return HandleSocketRequest(request);
case IOCTL_SO_ICMPSOCKET: case IOCTL_SO_ICMPSOCKET:
@ -349,7 +349,7 @@ void NetIPTop::Update()
WiiSockMan::GetInstance().Update(); WiiSockMan::GetInstance().Update();
} }
IPCCommandResult NetIPTop::HandleStartUpRequest(const IOCtlRequest& request) IPCCommandResult NetIPTop::HandleInitInterfaceRequest(const IOCtlRequest& request)
{ {
request.Log(GetDeviceName(), Common::Log::IOS_WC24); request.Log(GetDeviceName(), Common::Log::IOS_WC24);
return GetDefaultReply(IPC_SUCCESS); return GetDefaultReply(IPC_SUCCESS);

View File

@ -36,18 +36,18 @@ enum NET_IOCTL
IOCTL_SO_GETHOSTBYNAME, IOCTL_SO_GETHOSTBYNAME,
IOCTL_SO_GETHOSTBYADDR, IOCTL_SO_GETHOSTBYADDR,
IOCTLV_SO_GETNAMEINFO, IOCTLV_SO_GETNAMEINFO,
IOCTL_SO_UNK14, IOCTL_SO_GETLASTERROR,
IOCTL_SO_INETATON, IOCTL_SO_INETATON,
IOCTL_SO_INETPTON, IOCTL_SO_INETPTON,
IOCTL_SO_INETNTOP, IOCTL_SO_INETNTOP,
IOCTLV_SO_GETADDRINFO, IOCTLV_SO_GETADDRINFO,
IOCTL_SO_SOCKATMARK, IOCTL_SO_SOCKATMARK,
IOCTLV_SO_UNK1A, IOCTLV_SO_STARTUP,
IOCTLV_SO_UNK1B, IOCTLV_SO_CLEANUP,
IOCTLV_SO_GETINTERFACEOPT, IOCTLV_SO_GETINTERFACEOPT,
IOCTLV_SO_SETINTERFACEOPT, IOCTLV_SO_SETINTERFACEOPT,
IOCTL_SO_SETINTERFACE, IOCTL_SO_SETINTERFACE,
IOCTL_SO_STARTUP, IOCTL_SO_INITINTERFACE,
IOCTL_SO_ICMPSOCKET = 0x30, IOCTL_SO_ICMPSOCKET = 0x30,
IOCTLV_SO_ICMPPING, IOCTLV_SO_ICMPPING,
IOCTL_SO_ICMPCANCEL, IOCTL_SO_ICMPCANCEL,
@ -68,7 +68,7 @@ public:
void Update() override; void Update() override;
private: private:
IPCCommandResult HandleStartUpRequest(const IOCtlRequest& request); IPCCommandResult HandleInitInterfaceRequest(const IOCtlRequest& request);
IPCCommandResult HandleSocketRequest(const IOCtlRequest& request); IPCCommandResult HandleSocketRequest(const IOCtlRequest& request);
IPCCommandResult HandleICMPSocketRequest(const IOCtlRequest& request); IPCCommandResult HandleICMPSocketRequest(const IOCtlRequest& request);
IPCCommandResult HandleCloseRequest(const IOCtlRequest& request); IPCCommandResult HandleCloseRequest(const IOCtlRequest& request);

View File

@ -141,9 +141,29 @@ IPCCommandResult NetKDRequest::IOCtl(const IOCtlRequest& request)
break; break;
case IOCTL_NWC24_REQUEST_SHUTDOWN: case IOCTL_NWC24_REQUEST_SHUTDOWN:
// if ya set the IOS version to a very high value this happens ... {
INFO_LOG(IOS_WC24, "NET_KD_REQ: IOCTL_NWC24_REQUEST_SHUTDOWN - NI"); if (request.buffer_in == 0 || request.buffer_in % 4 != 0 || request.buffer_in_size < 8 ||
request.buffer_out == 0 || request.buffer_out % 4 != 0 || request.buffer_out_size < 4)
{
return_value = IPC_EINVAL;
ERROR_LOG(IOS_WC24, "NET_KD_REQ: IOCTL_NWC24_REQUEST_SHUTDOWN = IPC_EINVAL");
break;
}
INFO_LOG(IOS_WC24, "NET_KD_REQ: IOCTL_NWC24_REQUEST_SHUTDOWN");
[[maybe_unused]] const u32 event = Memory::Read_U32(request.buffer_in);
// TODO: Advertise shutdown event
// TODO: Shutdown USB keyboard LEDs if event == 3
// TODO: IOCTLV_NCD_SETCONFIG
// TODO: DHCP related features
// SOGetInterfaceOpt(0xfffe,0x4003); // IP settings
// SOGetInterfaceOpt(0xfffe,0xc001); // DHCP lease time remaining?
// SOGetInterfaceOpt(0xfffe,0x1003); // Error
// Call /dev/net/ip/top 0x1b (SOCleanup), it closes all sockets
WiiSockMan::GetInstance().Clean();
return_value = IPC_SUCCESS;
break; break;
}
default: default:
request.Log(GetDeviceName(), Common::Log::IOS_WC24); request.Log(GetDeviceName(), Common::Log::IOS_WC24);