Difference between revisions of "Network Interface services"

From Nintendo Switch Brew
Jump to navigation Jump to search
Line 54: Line 54:
 
| 14 || CreateTemporaryNetworkProfile || Returns an [[#INetworkProfile]].
 
| 14 || CreateTemporaryNetworkProfile || Returns an [[#INetworkProfile]].
 
|-
 
|-
| 15 || GetCurrentIpConfigInfo ||
+
| 15 || [[#GetCurrentIpConfigInfo]] ||
 
|-
 
|-
 
| 16 || SetWirelessCommunicationEnabled ||
 
| 16 || SetWirelessCommunicationEnabled ||
Line 134: Line 134:
  
 
This is only available with nifm:a.
 
This is only available with nifm:a.
 +
 +
=== GetCurrentIpConfigInfo ===
 +
No input, returns an output [[#IpAddressSetting]] and a [[#DnsSetting]].
  
 
=== IsAnyInternetRequestAccepted ===
 
=== IsAnyInternetRequestAccepted ===
Line 439: Line 442:
 
|-
 
|-
 
| 0xA9 || 0x1 || Padding
 
| 0xA9 || 0x1 || Padding
 +
|}
 +
 +
= IpAddressSetting =
 +
This is "nn::nifm::IpAddressSetting". This is a 0xD-byte struct.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x1 || Ignored
 +
|-
 +
| 0x1 || 0x4 || struct in_addr
 +
|-
 +
| 0x5 || 0x4 || struct in_addr
 +
|-
 +
| 0x9 || 0x4 || struct in_addr
 +
|}
 +
 +
= DnsSetting =
 +
This is "nn::nifm::DnsSetting". This is a 0x9-byte struct.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x1 || Ignored
 +
|-
 +
| 0x1 || 0x4 || struct in_addr
 +
|-
 +
| 0x5 || 0x4 || struct in_addr
 
|}
 
|}
  
 
[[Category:Services]]
 
[[Category:Services]]

Revision as of 02:38, 11 April 2020

nifm:a, nifm:s, nifm:u

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.

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".

Cmd Name Notes
1 #GetClientId
2 CreateScanRequest Returns an #IScanRequest.
4 CreateRequest Returns an #IRequest.
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).

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.

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".

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.

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
24 [3.0.0+] RegisterSocketDescriptor
25 [3.0.0+] UnregisterSocketDescriptor

GetRequestState

Number Description
1 Not yet submitted or error
2 Pending (sdk calls this OnHold)
3 Connected

GetResult

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

Returns two event handles. The first one signals when the RequestState changes.

Cancel

Cancels the request to bring the network up.

Submit

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.

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.

INetworkProfile

This is "nn::nifm::detail::INetworkProfile".

Cmd Name
0 Update
1 PersistOld ([1.0.0-2.3.0] Persist)
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.

Offset Size Description
0x0 0xC2 #IpSettingData
0xC2 0x10 "nn::util::Uuid"
0xD2 0x40 NUL-terminated Network Name string
0x112 0x1
0x113 0x1
0x114 0x1
0x115 0x1
0x116 0x65 #SfWirelessSettingData
0x17B 0x1 Padding

NetworkProfileData

This is "nn::nifm::NetworkProfileData". This is converted from/to #SfNetworkProfileData by sdknso.

Offset Size Description
0x0 0x10 "nn::util::Uuid"
0x10 0x40 NUL-terminated Network Name string
0x50 0x4
0x54 0x4
0x58 0x1
0x59 0x1
0x5A 0x2 Padding
0x5C 0x70 #WirelessSettingData
0xCC 0xC2 #IpSettingData

SfWirelessSettingData

This is a 0x65-byte struct. This is converted to/from #WirelessSettingData during the #NetworkProfileData conversion.

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.

Offset Size Description
0x0 0x1 SSID 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.

Offset Size Description
0x0 0xE
0xE 0x4 Primary DNS server IPv4 address
0x12 0x4 Secondary DNS server IPv4 address
0x16 0xAA #ProxySetting
0xC0 0x2 MTU

ProxySetting

This is "nn::nifm::ProxySetting". This is a 0xAA-byte struct.

Offset Size Description
0x0 0x1 Enables using the proxy when set.
0x1 0x1 Padding
0x2 0x2 Port
0x4 0x64 Server string, NUL-terminated.
0x68 0x1 Enables auto-authentication when set, which uses the following two strings.
0x69 0x20 User string, NUL-terminated.
0x89 0x20 Password string, NUL-terminated.
0xA9 0x1 Padding

IpAddressSetting

This is "nn::nifm::IpAddressSetting". This is a 0xD-byte struct.

Offset Size Description
0x0 0x1 Ignored
0x1 0x4 struct in_addr
0x5 0x4 struct in_addr
0x9 0x4 struct in_addr

DnsSetting

This is "nn::nifm::DnsSetting". This is a 0x9-byte struct.

Offset Size Description
0x0 0x1 Ignored
0x1 0x4 struct in_addr
0x5 0x4 struct in_addr