Line 1: |
Line 1: |
− | = nifm:s = | + | = nifm:a, nifm:s, nifm:u = |
− | == StaticService == | + | These are "nn::nifm::detail::IStaticService". |
| + | |
| + | Max sessions: nifm:a = 0x2, nifm:s = 0x10, nifm:u = 0x5. |
| + | |
| + | nifm:u = User, nifm:s = System, and nifm:a = Admin. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name || Notes |
| + | |- |
| + | | 4 || [[#CreateGeneralServiceOld]] ([1.0.0-2.3.0] CreateGeneralService) || |
| + | |- |
| + | | 5 || [3.0.0+] [[#CreateGeneralService]] || |
| + | |} |
| + | |
| + | == CreateGeneralServiceOld == |
| + | No input, returns an [[#IGeneralService]]. |
| + | |
| + | == CreateGeneralService == |
| + | Takes a PID and an input u64 reserved_pid, returns an [[#IGeneralService]]. |
| + | |
| + | == IGeneralService == |
| + | This is "nn::nifm::detail::IGeneralService". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name || Notes |
| + | |- |
| + | | 1 || [[#GetClientId]] || |
| + | |- |
| + | | 2 || [[#CreateScanRequest]] || |
| + | |- |
| + | | 4 || [[#CreateRequest]] || |
| + | |- |
| + | | 5 || [[#GetCurrentNetworkProfile]] || |
| + | |- |
| + | | 6 || EnumerateNetworkInterfaces || |
| + | |- |
| + | | 7 || EnumerateNetworkProfiles || |
| + | |- |
| + | | 8 || [[#GetNetworkProfile]] || |
| + | |- |
| + | | 9 || [[#SetNetworkProfile]] || |
| + | |- |
| + | | 10 || RemoveNetworkProfile || |
| + | |- |
| + | | 11 || GetScanDataOld ([1.0.0-3.0.2] GetScanData) || |
| + | |- |
| + | | 12 || [[#GetCurrentIpAddress]] || |
| + | |- |
| + | | 13 || GetCurrentAccessPointOld ([1.0.0-3.0.2] GetCurrentAccessPoint) || |
| + | |- |
| + | | 14 || CreateTemporaryNetworkProfile || Returns an [[#INetworkProfile]]. |
| + | |- |
| + | | 15 || [[#GetCurrentIpConfigInfo]] || |
| + | |- |
| + | | 16 || SetWirelessCommunicationEnabled || |
| + | |- |
| + | | 17 || IsWirelessCommunicationEnabled || |
| + | |- |
| + | | 18 || GetInternetConnectionStatus || |
| + | |- |
| + | | 19 || SetEthernetCommunicationEnabled || |
| + | |- |
| + | | 20 || IsEthernetCommunicationEnabled || |
| + | |- |
| + | | 21 || [[#IsAnyInternetRequestAccepted]] || |
| + | |- |
| + | | 22 || IsAnyForegroundRequestAccepted || |
| + | |- |
| + | | 23 || PutToSleep || |
| + | |- |
| + | | 24 || WakeUp || |
| + | |- |
| + | | 25 || GetSsidListVersion || |
| + | |- |
| + | | 26 || SetExclusiveClient || |
| + | |- |
| + | | 27 || GetDefaultIpSetting || |
| + | |- |
| + | | 28 || SetDefaultIpSetting || |
| + | |- |
| + | | 29 || SetWirelessCommunicationEnabledForTest || |
| + | |- |
| + | | 30 || SetEthernetCommunicationEnabledForTest || |
| + | |- |
| + | | 31 || [2.0.0+] GetTelemetorySystemEventReadableHandle || |
| + | |- |
| + | | 32 || [2.0.0+] GetTelemetryInfo || |
| + | |- |
| + | | 33 || [2.0.0+] ConfirmSystemAvailability || |
| + | |- |
| + | | 34 || [4.0.0+] SetBackgroundRequestEnabled || |
| + | |- |
| + | | 35 || [4.0.0+] GetScanData || |
| + | |- |
| + | | 36 || [4.0.0+] GetCurrentAccessPoint || |
| + | |- |
| + | | 37 || [4.0.0+] Shutdown || |
| + | |- |
| + | | 38 || [6.0.0+] GetAllowedChannels || |
| + | |- |
| + | | 39 || [8.0.0+] NotifyApplicationSuspended || |
| + | |- |
| + | | 40 || [8.0.0+] SetAcceptableNetworkTypeFlag || |
| + | |- |
| + | | 41 || [8.0.0+] GetAcceptableNetworkTypeFlag || |
| + | |- |
| + | | 42 || [8.0.0+] NotifyConnectionStateChanged || |
| + | |- |
| + | | 43 || [9.0.0+] SetWowlDelayedWakeTime || |
| + | |} |
| + | |
| + | === GetClientId === |
| + | Takes a type-0x1A output buffer containing a [[#ClientId]], no output. |
| + | |
| + | The wrapper for this with official sw will return 0 when any errors occur (wrapper returns [[#ClientId]] not Result). |
| + | |
| + | === CreateScanRequest === |
| + | No input, returns an output [[#IScanRequest]]. |
| + | |
| + | === CreateRequest === |
| + | Takes an input s32 "nn::nifm::RequirementPreset", returns an output [[#IRequest]]. |
| + | |
| + | sdknso loads the s32 from "nn::nifm::RequestParameters", which has hard-coded value 0x2. |
| + | |
| + | === GetCurrentNetworkProfile === |
| + | Takes a type-0x1A output buffer containing a [[#SfNetworkProfileData]]. |
| + | |
| + | sdknso converts the output to [[#NetworkProfileData]]. |
| + | |
| + | === GetNetworkProfile === |
| + | Takes an input "nn::util::Uuid" (same Uuid from [[#SfNetworkProfileData]]) and a type-0x1A output buffer containing a [[#SfNetworkProfileData]]. |
| + | |
| + | sdknso converts the output to [[#NetworkProfileData]]. |
| + | |
| + | === SetNetworkProfile === |
| + | Takes a type-0x19 input buffer containing a [[#SfNetworkProfileData]] and returns an output "nn::util::Uuid". |
| + | |
| + | sdknso converts the input to [[#SfNetworkProfileData]], which is then passed to the cmd. |
| + | |
| + | This is only available with nifm:a. |
| + | |
| + | === GetCurrentIpAddress === |
| + | No input, returns an output [[#IpV4Address]]. |
| + | |
| + | === GetCurrentIpConfigInfo === |
| + | No input, returns an output [[#IpAddressSetting]] and a [[#DnsSetting]]. |
| + | |
| + | === IsAnyInternetRequestAccepted === |
| + | Takes a type-0x19 input buffer containing a [[#ClientId]], returns an output u8 bool. |
| + | |
| + | The wrapper for this with official sw will return 0 when any errors occur (wrapper returns bool not Result). |
| + | |
| + | === IScanRequest === |
| + | This is "nn::nifm::detail::IScanRequest". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || Submit |
| + | |- |
| + | | 1 || IsProcessing |
| + | |- |
| + | | 2 || GetResult |
| + | |- |
| + | | 3 || GetSystemEventReadableHandle |
| + | |- |
| + | | 4 || [6.0.0+] SetChannels |
| + | |} |
| + | |
| + | === IRequest === |
| + | This is "nn::nifm::detail::IRequest". This represents an application or sysmodule's request to bring a network up. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
| + | |- |
| + | | 0 || [[#GetRequestState]] |
| + | |- |
| + | | 1 || [[#GetResult]] |
| + | |- |
| + | | 2 || [[#GetSystemEventReadableHandles]] |
| + | |- |
| + | | 3 || [[#Cancel]] |
| + | |- |
| + | | 4 || [[#Submit]] |
| + | |- |
| + | | 5 || [[#SetRequirement]] |
| + | |- |
| + | | 6 || SetRequirementPreset |
| + | |- |
| + | | 8 || SetPriority |
| + | |- |
| + | | 9 || SetNetworkProfileId |
| + | |- |
| + | | 10 || SetRejectable |
| + | |- |
| + | | 11 || [[#SetConnectionConfirmationOption]] |
| + | |- |
| + | | 12 || [[#SetPersistent]] |
| + | |- |
| + | | 13 || SetInstant |
| + | |- |
| + | | 14 || SetSustainable |
| + | |- |
| + | | 15 || SetRawPriority |
| + | |- |
| + | | 16 || SetGreedy |
| + | |- |
| + | | 17 || SetSharable |
| + | |- |
| + | | 18 || SetRequirementByRevision |
| + | |- |
| + | | 19 || [[#GetRequirement]] |
| + | |- |
| + | | 20 || GetRevision |
| + | |- |
| + | | 21 || [[#GetAppletInfo]] |
| + | |- |
| + | | 22 || GetAdditionalInfo |
| + | |- |
| + | | 23 || [3.0.0+] SetKeptInSleep |
| |- | | |- |
− | | 4 || RegisterInterface_GeneralService | + | | 24 || [3.0.0+] RegisterSocketDescriptor |
| |- | | |- |
| + | | 25 || [3.0.0+] UnregisterSocketDescriptor |
| |} | | |} |
| | | |
− | == GeneralService == | + | ==== GetRequestState ==== |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Number || Description |
| + | |- |
| + | | 0 || Set by sdknso when the cmd returns an error. |
| + | |- |
| + | | 1 || Not yet submitted or error |
| + | |- |
| + | | 2 || Pending (sdknso calls this OnHold) |
| + | |- |
| + | | 3 || Connected (sdknso calls this Available) |
| + | |- |
| + | | 5 || |
| + | |} |
| + | |
| + | ==== GetResult ==== |
| + | No input/output. |
| + | |
| + | If the request enters state 1, this command can be used to determine why. It responds with the nice networking error codes that there are support pages for. |
| + | |
| + | ==== GetSystemEventReadableHandles ==== |
| + | No input, returns two Event handles. The first one signals when the RequestState changes. |
| + | |
| + | This is used immediately after [[#CreateRequest]]. |
| + | |
| + | sdknso uses EventClearMode=1 for the first Event, for the second Event this can be user-specified or a default value of 1. |
| + | |
| + | ==== Cancel ==== |
| + | No input/output. |
| + | |
| + | Cancels the request to bring the network up. |
| + | |
| + | ==== Submit ==== |
| + | No input/output. |
| + | |
| + | Submits the request to bring the network up. Call this after configuring the request. |
| + | |
| + | ==== SetRequirement ==== |
| + | Takes a total of 0x20-bytes of input, no output. |
| + | |
| + | [3.0.0+] Takes an additional 4-bytes of input. |
| + | |
| + | ==== SetConnectionConfirmationOption ==== |
| + | Set how to verify the internet connection. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Option || Description |
| + | |- |
| + | | 0 || |
| + | |- |
| + | | 1 || |
| + | |- |
| + | | 2 || "Local" network (does not check for working DNS) |
| + | |- |
| + | | 3 || |
| + | |- |
| + | | 4 || Default |
| + | |- |
| + | | 5 || |
| + | |- |
| + | |} |
| + | |
| + | ==== SetPersistent ==== |
| + | If this is set, when the network connection is lost, rather than causing the request to enter state 1, it will instead enter state 2 and attempt to bring the network back up again. |
| + | |
| + | ==== GetRequirement ==== |
| + | No input, returns a total of 0x20-bytes of output. |
| + | |
| + | [3.0.0+] Returns an additional 4-bytes of output. |
| + | |
| + | ==== GetAppletInfo ==== |
| + | Takes an input u32, a type-0x6 output buffer, and 3 output u32s. |
| + | |
| + | sdknso uses the output from this to launch a LibraryApplet. |
| + | |
| + | The input u32 is set to the output from <code>nn::applet::GetExpectedThemeColorForSystem()</code>. |
| + | |
| + | The output u32s are: [[Applet_Manager_services#AppletId|AppletId]], [[Applet_Manager_services#LibraryAppletMode|LibraryAppletMode]], out_size. |
| + | |
| + | sdknso uses size 0x1000 for the buffer. |
| + | |
| + | The out_size is the total data size written to the output buffer. The buffer contains an array of: {s32 size} {data with the specified size}, with size==-1 indicating that the end of the array was reached. The data from here is pushed as applet input storage. |
| + | |
| + | The returned AppletId is one of the following: error, wifiWebAuth, or netConnect. |
| + | |
| + | === INetworkProfile === |
| + | This is "nn::nifm::detail::INetworkProfile". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
| + | |- |
| + | | 0 || Update |
| |- | | |- |
− | | 1 || GetDeviceID? | + | | 1 || PersistOld ([1.0.0-2.3.0] Persist) |
| |- | | |- |
− | | 2 || RegisterInterface_ScanRequest | + | | 2 || [3.0.0+] Persist |
| + | |} |
| + | |
| + | = ClientId = |
| + | This is "nn::nifm::ClientId". This contains an u32. |
| + | |
| + | = SfNetworkProfileData = |
| + | This is "nn::nifm::detail::sf::NetworkProfileData". This is a 0x17C-byte struct. This is converted to/from [[#NetworkProfileData]] by sdknso. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 4 || RegisterInterface_Request
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| |- | | |- |
− | | 5 || GetCurrentProxySetting | + | | 0x0 || 0xC2 || [[#IpSettingData]] |
| |- | | |- |
− | | 6 || GetEthernetID? | + | | 0xC2 || 0x10 || "nn::util::Uuid" |
| |- | | |- |
− | | 7 || GetEthernetSettings? | + | | 0xD2 || 0x40 || NUL-terminated Network Name string |
| |- | | |- |
− | | 8 || | + | | 0x112 || 0x1 || |
| |- | | |- |
− | | 9 || | + | | 0x113 || 0x1 || |
| |- | | |- |
− | | 10 || | + | | 0x114 || 0x1 || |
| |- | | |- |
− | | 11 || GetAPInfo? | + | | 0x115 || 0x1 || |
| |- | | |- |
− | | 12 || GetIPAddress | + | | 0x116 || 0x65 || [[#SfWirelessSettingData]] |
| |- | | |- |
− | | 13 || GetSSIDInfo? | + | | 0x17B || 0x1 || Padding |
| + | |} |
| + | |
| + | = NetworkProfileData = |
| + | This is "nn::nifm::NetworkProfileData". This is converted from/to [[#SfNetworkProfileData]] by sdknso. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 14 || RegisterInterface_NetworkProfile
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| |- | | |- |
− | | 15 || GetConnInfo | + | | 0x0 || 0x10 || "nn::util::Uuid" |
| |- | | |- |
− | | 16 || SetFlightModeOnOff | + | | 0x10 || 0x40 || NUL-terminated Network Name string |
| |- | | |- |
− | | 17 || GetFlightModeOnOff | + | | 0x50 || 0x4 || |
| |- | | |- |
− | | 18 || | + | | 0x54 || 0x4 || |
| |- | | |- |
− | | 19 || SetUnkMode | + | | 0x58 || 0x1 || |
| |- | | |- |
− | | 20 || GetUnkMode | + | | 0x59 || 0x1 || |
| |- | | |- |
− | | 21 || IsEthIfActive | + | | 0x5A || 0x2 || Padding |
| |- | | |- |
− | | 22 || GetEthIfState | + | | 0x5C || 0x70 || [[#WirelessSettingData]] |
| |- | | |- |
− | | 23 || EthIfDown | + | | 0xCC || 0xC2 || [[#IpSettingData]] |
| + | |} |
| + | |
| + | = SfWirelessSettingData = |
| + | This is a 0x65-byte struct. This is converted to/from [[#WirelessSettingData]] during the [[#NetworkProfileData]] conversion. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 || 0x1 || SSID length (Clamped to max len 0x20 during [[#NetworkProfileData]] conversion) |
| + | |- |
| + | | 0x1 || 0x20 || SSID string |
| + | |- |
| + | | 0x21 || 0x1 || |
| + | |- |
| + | | 0x22 || 0x1 || |
| + | |- |
| + | | 0x23 || 0x1 || |
| + | |- |
| + | | 0x24 || 0x41 || Passphrase |
| + | |} |
| + | |
| + | = WirelessSettingData = |
| + | This is "nn::nifm::WirelessSettingData". This is a 0x70-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 || 0x1 || SSID [[#SfWirelessSettingData|length]] |
| + | |- |
| + | | 0x1 || 0x21 || NUL-terminated SSID string |
| + | |- |
| + | | 0x22 || 0x1 || |
| + | |- |
| + | | 0x23 || 0x1 || Padding |
| + | |- |
| + | | 0x24 || 0x4 || |
| + | |- |
| + | | 0x28 || 0x4 || |
| + | |- |
| + | | 0x2C || 0x41 || Passphrase |
| + | |- |
| + | | 0x6D || 0x3 || Padding |
| + | |} |
| + | |
| + | = IpSettingData = |
| + | This is "nn::nifm::IpSettingData". This is a 0xC2-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 || 0xD || [[#IpAddressSetting]] |
| + | |- |
| + | | 0xD || 0x9 || [[#DnsSetting]] |
| + | |- |
| + | | 0x16 || 0xAA || [[#ProxySetting]] |
| + | |- |
| + | | 0xC0 || 0x2 || MTU |
| + | |} |
| + | |
| + | = ProxySetting = |
| + | This is "nn::nifm::ProxySetting". This is a 0xAA-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 || 0x1 || Enables using the proxy when set. |
| + | |- |
| + | | 0x1 || 0x1 || Padding |
| + | |- |
| + | | 0x2 || 0x2 || Port |
| |- | | |- |
− | | 24 || EthIfUp | + | | 0x4 || 0x64 || Server string, NUL-terminated. |
| |- | | |- |
− | | 25 || | + | | 0x68 || 0x1 || Enables auto-authentication when set, which uses the following two strings. |
| |- | | |- |
− | | 26 || | + | | 0x69 || 0x20 || User string, NUL-terminated. |
| |- | | |- |
− | | 27 || | + | | 0x89 || 0x20 || Password string, NUL-terminated. |
| |- | | |- |
− | | 28 || | + | | 0xA9 || 0x1 || Padding |
| + | |} |
| + | |
| + | = IpV4Address = |
| + | This is "nn::nifm::IpV4Address". This is a 0x4-byte struct. |
| + | |
| + | sdknso copies this into <code>struct in_addr</code>. |
| + | |
| + | = IpAddressSetting = |
| + | This is "nn::nifm::IpAddressSetting". This is a 0xD-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 29 ||
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| |- | | |- |
− | | 30 || | + | | 0x0 || 0x1 || Whether this setting is automatic. Ignored by [[#GetCurrentIpConfigInfo]]. |
| + | |- |
| + | | 0x1 || 0x4 || Copied to an output <code>struct in_addr</code> by sdknso. Same as the output from [[#GetCurrentIpAddress]]. |
| + | |- |
| + | | 0x5 || 0x4 || Copied to an output <code>struct in_addr</code> by sdknso. Subnet Mask. |
| + | |- |
| + | | 0x9 || 0x4 || Copied to an output <code>struct in_addr</code> by sdknso. Gateway. |
| + | |} |
| + | |
| + | = DnsSetting = |
| + | This is "nn::nifm::DnsSetting". This is a 0x9-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 31 ||
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| |- | | |- |
− | | 32 || DumpNetworkInfo | + | | 0x0 || 0x1 || Whether this setting is automatic. Ignored by [[#GetCurrentIpConfigInfo]]. |
| |- | | |- |
− | | 33 || | + | | 0x1 || 0x4 || Copied to an output <code>struct in_addr</code> by sdknso. Primary DNS server. |
| |- | | |- |
| + | | 0x5 || 0x4 || Copied to an output <code>struct in_addr</code> by sdknso. Secondary DNS server. |
| |} | | |} |
| | | |
| [[Category:Services]] | | [[Category:Services]] |