Network Interface services: Difference between revisions

No edit summary
Masagrator (talk | contribs)
 
(49 intermediate revisions by 3 users not shown)
Line 8: Line 8:
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Cmd || Name || Notes
! Cmd || Name
|-  
|-  
| 4 || [[#CreateGeneralServiceOld]] ([1.0.0-2.3.0] CreateGeneralService) ||
| 4 || [[#CreateGeneralServiceOld]] ([1.0.0-2.3.0] CreateGeneralService)
|-
|-
| 5 || [3.0.0+] [[#CreateGeneralService]] ||
| 5 || [3.0.0+] [[#CreateGeneralService]]
|}
|}


Line 26: Line 26:
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Cmd || Name || Notes
! Cmd || Name
|-
|-
| 1 || [[#GetClientId]] ||
| 1 || [[#GetClientId]]
|-
|-
| 2 || CreateScanRequest || Returns an [[#IScanRequest]].
| 2 || [[#CreateScanRequest]]
|-
|-
| 4 || CreateRequest || Returns an [[#IRequest]].
| 4 || [[#CreateRequest]]
|-
|-
| 5 || [[#GetCurrentNetworkProfile]] ||
| 5 || [[#GetCurrentNetworkProfile]]
|-
|-
| 6 || EnumerateNetworkInterfaces ||
| 6 || EnumerateNetworkInterfaces
|-
|-
| 7 || EnumerateNetworkProfiles ||
| 7 || [[#EnumerateNetworkProfiles]]
|-
|-
| 8 || GetNetworkProfile ||
| 8 || [[#GetNetworkProfile]]
|-
|-
| 9 || SetNetworkProfile ||
| 9 || [[#SetNetworkProfile]]
|-
|-
| 10 || RemoveNetworkProfile ||
| 10 || RemoveNetworkProfile
|-
|-
| 11 || GetScanDataOld ([1.0.0-3.0.2] GetScanData) ||
| 11 || GetScanDataOld ([1.0.0-3.0.2] GetScanData)
|-
|-
| 12 || GetCurrentIpAddress ||
| 12 || [[#GetCurrentIpAddress]]
|-
|-
| 13 || GetCurrentAccessPointOld ([1.0.0-3.0.2] GetCurrentAccessPoint) ||
| 13 || GetCurrentAccessPointOld ([1.0.0-3.0.2] GetCurrentAccessPoint)
|-
|-
| 14 || CreateTemporaryNetworkProfile || Returns an [[#INetworkProfile]].
| 14 || [[#CreateTemporaryNetworkProfile]]
|-
|-
| 15 || GetCurrentIpConfigInfo ||
| 15 || [[#GetCurrentIpConfigInfo]]
|-
|-
| 16 || SetWirelessCommunicationEnabled ||
| 16 || [[#SetWirelessCommunicationEnabled]]
|-
|-
| 17 || IsWirelessCommunicationEnabled ||
| 17 || [[#IsWirelessCommunicationEnabled]]
|-
|-
| 18 || GetInternetConnectionStatus ||
| 18 || [[#GetInternetConnectionStatus]]
|-
|-
| 19 || SetEthernetCommunicationEnabled ||
| 19 || SetEthernetCommunicationEnabled
|-
|-
| 20 || IsEthernetCommunicationEnabled ||
| 20 || IsEthernetCommunicationEnabled
|-
|-
| 21 || [[#IsAnyInternetRequestAccepted]] ||
| 21 || [[#IsAnyInternetRequestAccepted]]
|-
|-
| 22 || IsAnyForegroundRequestAccepted ||
| 22 || IsAnyForegroundRequestAccepted
|-
|-
| 23 || PutToSleep ||
| 23 || PutToSleep
|-
|-
| 24 || WakeUp ||
| 24 || WakeUp
|-
|-
| 25 || GetSsidListVersion ||
| 25 || GetSsidListVersion
|-
|-
| 26 || SetExclusiveClient ||
| 26 || SetExclusiveClient
|-
|-
| 27 || GetDefaultIpSetting ||
| 27 || GetDefaultIpSetting
|-
|-
| 28 || SetDefaultIpSetting ||
| 28 || SetDefaultIpSetting
|-
|-
| 29 || SetWirelessCommunicationEnabledForTest ||
| 29 || SetWirelessCommunicationEnabledForTest
|-
|-
| 30 || SetEthernetCommunicationEnabledForTest ||
| 30 || SetEthernetCommunicationEnabledForTest
|-
|-
| 31 || [2.0.0+] GetTelemetorySystemEventReadableHandle ||
| 31 || [2.0.0+] GetTelemetorySystemEventReadableHandle
|-
|-
| 32 || [2.0.0+] GetTelemetryInfo ||
| 32 || [2.0.0+] GetTelemetryInfo
|-
|-
| 33 || [2.0.0+] ConfirmSystemAvailability ||
| 33 || [2.0.0+] ConfirmSystemAvailability
|-
|-
| 34 || [4.0.0+] SetBackgroundRequestEnabled ||
| 34 || [4.0.0+] SetBackgroundRequestEnabled
|-
|-
| 35 || [4.0.0+] GetScanData ||
| 35 || [4.0.0+] GetScanData
|-
|-
| 36 || [4.0.0+] GetCurrentAccessPoint ||
| 36 || [4.0.0+] GetCurrentAccessPoint
|-
|-
| 37 || [4.0.0+] Shutdown ||
| 37 || [4.0.0+] Shutdown
|-
|-
| 38 || [6.0.0+] GetAllowedChannels ||
| 38 || [6.0.0+] GetAllowedChannels
|-
|-
| 39 || [8.0.0+] NotifyApplicationSuspended ||
| 39 || [8.0.0+] NotifyApplicationSuspended
|-
|-
| 40 || [8.0.0+] SetAcceptableNetworkTypeFlag ||
| 40 || [8.0.0+] SetAcceptableNetworkTypeFlag
|-
|-
| 41 || [8.0.0+] GetAcceptableNetworkTypeFlag ||
| 41 || [8.0.0+] GetAcceptableNetworkTypeFlag  
|-
|-
| 42 || [8.0.0+] NotifyConnectionStateChanged ||
| 42 || [8.0.0+] NotifyConnectionStateChanged
|-
|-
| 43 || [9.0.0+] SetWowlDelayedWakeTime ||  
| 43 || [9.0.0+] [[#SetWowlDelayedWakeTime]]
|-
| 44 || [18.0.0+] IsWiredConnectionAvailable
|-
| 45 || [18.0.0+] IsNetworkEmulationFeatureEnabled
|-
| 46 || [18.0.0+] SelectActiveNetworkEmulationProfileIdForDebug
|-
| 47 || [19.0.0+] GetScanData
|-
| 48 || [20.0.0+] ResetActiveNetworkEmulationProfileId
|-
| 49 || [18.0.0+] GetActiveNetworkEmulationProfileId
|-
| 50 || [18.0.0+] IsRewriteFeatureEnabled
|-
| 51 || [18.0.0+] CreateRewriteRule
|-
| 52 || [18.0.0+] DestroyRewriteRule
|-
| 53 || [20.0.0+] IsActiveNetworkEmulationProfileIdSelected
|-
| 54 || [20.0.0+] SelectDefaultNetworkEmulationProfileId
|-
| 55 || [20.0.0+] GetDefaultNetworkEmulationProfileId
|-
| 56 || [20.0.0+] GetNetworkEmulationProfile
|-
| 57 || [20.0.0+] SetWowlTcpKeepAliveTimeout
|}
|}


Line 117: Line 145:


The wrapper for this with official sw will return 0 when any errors occur (wrapper returns [[#ClientId]] not Result).
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 ===
=== GetCurrentNetworkProfile ===
Line 122: Line 158:


sdknso converts the output to [[#NetworkProfileData]].
sdknso converts the output to [[#NetworkProfileData]].
=== EnumerateNetworkProfiles ===
Takes an input u8 [[#NetworkProfileType]] and type-0x6 output buffer containing a [[#SfNetworkProfileBasicInfo]] array. Outputs s32 total available count of entries for given input.
sdknso uses hardcoded [[#NetworkProfileType]] "User" as input and converts the output to [[#NetworkProfileBasicInfo]].
Using any other [[#NetworkProfileType]] than "User" requires nifm:a session.
=== 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]].
=== CreateTemporaryNetworkProfile ===
Returns an [[#INetworkProfile]].
=== GetCurrentIpConfigInfo ===
No input, returns an output [[#IpAddressSetting]] and a [[#DnsSetting]].
=== SetWirelessCommunicationEnabled ===
Takes an input u8 bool, no output.
This is only available with nifm:s and nifm:a.
=== IsWirelessCommunicationEnabled ===
No input, returns an output u8 bool.
=== GetInternetConnectionStatus ===
No input. Takes an output u8 [[#NetworkInterfaceType]], u8 '''wifiStrength''', u8 '''connectionStatus'''.
'''wifiStrength''' returns value from 0 to 3, matching WiFi icon set.


=== IsAnyInternetRequestAccepted ===
=== IsAnyInternetRequestAccepted ===
Line 127: Line 204:


The wrapper for this with official sw will return 0 when any errors occur (wrapper returns bool not Result).
The wrapper for this with official sw will return 0 when any errors occur (wrapper returns bool not Result).
=== SetWowlDelayedWakeTime ===
Takes an input s32, no output.
This requires nifm:a/nifm:s.
This goes through a list of objects to call a vfunc with the input value, that func then writes the input into the object state. The default value is 0. This field in state is later used for [[WLAN_services|wlaninf]] cmd30.


=== IScanRequest ===
=== IScanRequest ===
Line 147: Line 231:


=== IRequest ===
=== IRequest ===
This is "nn::nifm::detail::IRequest". This represents an application or sysmodule's request to bring a network up.
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"
Line 169: Line 255:
| 8 || SetPriority
| 8 || SetPriority
|-
|-
| 9 || SetNetworkProfileId
| 9 || [[#SetNetworkProfileId]]
|-
|-
| 10 || SetRejectable
| 10 || SetRejectable
Line 193: Line 279:
| 20 || GetRevision
| 20 || GetRevision
|-
|-
| 21 || GetAppletInfo
| 21 || [[#GetAppletInfo]]
|-
|-
| 22 || GetAdditionalInfo
| 22 || GetAdditionalInfo
|-
|-
| 23 || [3.0.0+] SetKeptInSleep
| 23 || [3.0.0+] [[#SetKeptInSleep]]
|-
| 24 || [3.0.0+] [[#RegisterSocketDescriptor]]
|-
|-
| 24 || [3.0.0+] RegisterSocketDescriptor
| 25 || [3.0.0+] [[#UnregisterSocketDescriptor]
|-
|-
| 25 || [3.0.0+] UnregisterSocketDescriptor
| 26 || [21.0.0+] GetNetworkAccessStatus
|}
|}


==== GetRequestState ====
==== GetRequestState ====
{| class="wikitable" border="1"
No input. Returns an output [[#RequestState]].
|-
! Number || Description
|-
| 1 || Not yet submitted or error
|-
| 2 || Pending (sdk calls this OnHold)
|-
| 3 || Connected
|}


==== GetResult ====
==== 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.
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 ====
==== GetSystemEventReadableHandles ====
Returns two event handles. The first one signals when the RequestState changes.
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 ====
==== Cancel ====
No input/output.
Cancels the request to bring the network up.
Cancels the request to bring the network up.


==== Submit ====
==== Submit ====
No input/output.
Submits the request to bring the network up. Call this after configuring the request.
Submits the request to bring the network up. Call this after configuring the request.


Line 232: Line 321:


[3.0.0+] Takes an additional 4-bytes of input.
[3.0.0+] Takes an additional 4-bytes of input.
==== SetNetworkProfileId ====
Takes an input "nn::util::Uuid" (same Uuid from [[#SfNetworkProfileBasicInfo]]), no output.


==== SetConnectionConfirmationOption ====
==== SetConnectionConfirmationOption ====
Set how to verify the internet connection.
Takes an input [[#ConnectionConfirmationOption]]. No output.
 
{| class="wikitable" border="1"
|-
! Option || Description
|-
| 0 ||
|-
| 1 ||
|-
| 2 || "Local" network (does not check for working DNS)
|-
| 3 ||
|-
| 4 || Default
|-
| 5 ||
|-
|}


==== SetPersistent ====
==== SetPersistent ====
Line 261: Line 335:


[3.0.0+] Returns an additional 4-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.
==== SetKeptInSleep ====
Takes an input bool, no output.
[[#GetRequestState|RequestState]] must be value 1. This sets a flag in state.
==== RegisterSocketDescriptor ====
Takes an input s32 sockfd, no output.
[[#GetRequestState|RequestState]] must be value 3. Only 1 socket can be registered at a time per IRequest. The specified sockfd is written into state.
During sleep-entry, [[WLAN_services|wlan:inf]] cmd19 is eventually used with data from currently-open IRequest objects' registered-sockets. Note however, the wlaninf cmd only supports a single set of data, hence if there's more than 1 IRequest with a registered socket only the last object in the list will actually get used during wlan:inf RequestSleep.
==== UnregisterSocketDescriptor ====
Takes an input s32 sockfd, no output.
[[#GetRequestState|RequestState]] must be value 3. The input sockfd must match the one previously registered with [[#RegisterSocketDescriptor]].


=== INetworkProfile ===
=== INetworkProfile ===
Line 277: Line 383:


= ClientId =
= ClientId =
This is "nn::nifm::ClientId". This contains an u32.
This is "nn::nifm::ClientId". This is a 0x4-byte struct.


= SfNetworkProfileData =
= SfNetworkProfileData =
Line 288: Line 394:
! Description
! Description
|-
|-
| 0x0 || 0xC2 || [[#IpSettingData]]
| 0x0 || 0xC2 || [[#IpSettingData|IpSetting]]
|-
|-
| 0xC2 || 0x10 ||  
| 0xC2 || 0x10 || Id
|-
|-
| 0xD2 || 0x40 || NUL-terminated string
| 0xD2 || 0x40 || Name (NUL-terminated Network Name string)
|-
|-
| 0x112 || 0x1 ||  
| 0x112 || 0x1 ||  
Line 302: Line 408:
| 0x115 || 0x1 ||  
| 0x115 || 0x1 ||  
|-
|-
| 0x116 || 0x66 || [[#SfWirelessSettingData]]
| 0x116 || 0x65 || [[#SfWirelessSettingData|SfWirelessSettingData]]
|-
| 0x17B || 0x1 || Reserved
|}
|}


Line 314: Line 422:
! Description
! Description
|-
|-
| 0x0 || 0x10 ||  
| 0x0 || 0x10 || Id
|-
| 0x10 || 0x40 || Name (NUL-terminated Network Name string)
|-
| 0x50 || 0x4 || [[#NetworkProfileType|NetworkProfileType]]
|-
| 0x54 || 0x4 || [[#NetworkInterfaceType|NetworkInterfaceType]]
|-
| 0x58 || 0x1 || IsAutoConnect
|-
| 0x59 || 0x1 || IsLargeCapacity
|-
| 0x5A || 0x2 || Reserved
|-
| 0x5C || 0x70 || [[#WirelessSettingData|WirelessSetting]]
|-
| 0xCC || 0xC2 || [[#IpSettingData|IpSetting]]
|}
 
= SfNetworkProfileBasicInfo =
This is "nn::nifm::detail::sf::NetworkProfileBasicInfo". This is converted from/to [[#NetworkProfileBasicInfo]] by sdknso.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0 || 0x10 || Id
|-
| 0x10 || 0x40 || Name (NUL-terminated Network Name string)
|-
| 0x50 || 0x1 || [[#NetworkProfileType|NetworkProfileType]]
|-
| 0x51 || 0x1 || [[#NetworkInterfaceType|NetworkInterfaceType]]
|-
| 0x52 || 0x21 || [[#Ssid]]
|-
| 0x73 || 0x1 || [[#Authentication]]
|-
| 0x74 || 0x1 || [[#Encryption]]
|}
 
= NetworkProfileBasicInfo =
This is "nn::nifm::NetworkProfileBasicInfo". This is converted from/to [[#SfNetworkProfileBasicInfo]] by sdknso.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0 || 0x10 || Id
|-
|-
| 0x10 || 0x40 || NUL-terminated string
| 0x10 || 0x40 || Name (NUL-terminated Network Name string)
|-
|-
| 0x50 || 0x4 ||  
| 0x50 || 0x4 || [[#NetworkProfileType|NetworkProfileType]]
|-
|-
| 0x54 || 0x4 ||  
| 0x54 || 0x4 || [[#NetworkInterfaceType|NetworkInterfaceType]]
|-
|-
| 0x58 || 0x1 ||  
| 0x58 || 0x21 || [[#Ssid]]
|-
|-
| 0x59 || 0x1 ||  
| 0x79 || 0x3 || Padding
|-
|-
| 0x5A || 0x2 || Padding
| 0x7C || 0x4 || [[#Authentication]]
|-
|-
| 0x5C || 0x70 || [[#WirelessSettingData]]
| 0x80 || 0x4 || [[#Encryption]]
|}
 
= NetworkProfileType =
This is "nn::nifm::NetworkProfileType".
 
{| class="wikitable" border="1"
|-
|-
| 0xCC || 0xC2 || [[#IpSettingData]]
! Bits
! Description
|-
| 0 || User
|-
| 1 || SsidList
|-
| 2 || Temporary
|}
 
= NetworkInterfaceType =
This is "nn::nifm::NetworkInterfaceType".
 
{| class="wikitable" border="1"
|-
! Value
! Description
|-
| 0 || Invalid
|-
| 1 || Ieee80211
|-
| 2 || Ethernet
|}
|}


= SfWirelessSettingData =
= SfWirelessSettingData =
This is a 0x66-byte struct. This is converted to/from [[#WirelessSettingData]] during the [[#NetworkProfileData]] conversion.
This is a 0x65-byte struct. This is converted to/from [[#WirelessSettingData]] during the [[#NetworkProfileData]] conversion.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 342: Line 530:
! Description
! Description
|-
|-
| 0x0 || 0x1 || SSID length (Clamped to max len 0x20 during [[#NetworkProfileData]] conversion)
| 0x0 || 0x21 || [[#Ssid|Ssid]] (length is clamped to 0x20 during [[#NetworkProfileData]] conversion)
|-
|-
| 0x1 || 0x21 || NUL-terminated SSID string
| 0x21 || 0x1 ||  
|-
|-
| 0x22 || 0x1 ||  
| 0x22 || 0x1 ||  
Line 350: Line 538:
| 0x23 || 0x1 ||  
| 0x23 || 0x1 ||  
|-
|-
| 0x24 || 0x1 || Passphrase length?
| 0x24 || 0x41 || [[#SharedKey|SharedKey]]
|-
| 0x25 || 0x41 || Passphrase
|}
|}


Line 364: Line 550:
! Description
! Description
|-
|-
| 0x0 || 0x1 || SSID [[#SfWirelessSettingData|length]]
| 0x0 || 0x22 || [[#SsidConfig|SsidConfig]]
|-
|-
| 0x1 || 0x21 || NUL-terminated SSID string
| 0x23 || 0x2 || Reserved
|-
|-
| 0x22 || 0x1 ||  
| 0x24 || 0x4C || [[#Security|Security]]
|}
 
= SsidConfig =
This is "nn::nifm::SsidConfig". This is a 0x22-byte struct.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0 || 0x21 || [[#Ssid|Ssid]]
|-
| 0x21 || 0x1 || NonBroadcast
|}
 
= Security =
This is "nn::nifm::Security". This is a 0x4C-byte struct.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0 || 0x8 || [[#AuthEncryption|AuthEncryption]]
|-
| 0x8 || 0x41 || [[#SharedKey|SharedKey]]
|-
| 0x49 || 0x3 || Reserved
|}
 
= Ssid =
This is "nn::nifm::Ssid". This is a 0x21-byte struct.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0 || 0x1 || Length
|-
| 0x1 || 0x20 || Hex (NUL-terminated SSID string)
|}
 
= AuthEncryption =
This is "nn::nifm::AuthEncryption". This is a 0x8-byte struct.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0 || 0x4 || [[#Authentication|Authentication]]
|-
| 0x4 || 0x4 || [[#Encryption|Encryption]]
|}
 
= SharedKey =
This is "nn::nifm::SharedKey". This is a 0x41-byte struct.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0 || 0x1 || Length
|-
| 0x1 || 0x40 || KeyMaterial
|}
 
= Authentication =
This is "nn::nifm::Authentication".
 
{| class="wikitable" border="1"
|-
! Value
! Description
|-
| 0 || Invalid
|-
| 1 || Open
|-
| 2 || Shared
|-
| 3 || Wpa
|-
| 4 || WpaPsk
|-
| 5 || Wpa2
|-
| 6 || Wpa2Psk
|-
| 7 || Unknown
|}
 
= Encryption =
This is "nn::nifm::Encryption".
 
{| class="wikitable" border="1"
|-
! Value
! Description
|-
|-
| 0x23 || 0x1 || Padding
| 0 || Invalid
|-
|-
| 0x24 || 0x4 ||  
| 1 || None
|-
|-
| 0x28 || 0x4 || Passphrase length?
| 2 || Wep
|-
|-
| 0x2C || 0x41 || Passphrase
| 3 || Tkip
|-
|-
| 0x6D || 0x3 || Padding
| 4 || Aes
|}
|}


Line 390: Line 682:
! Description
! Description
|-
|-
| 0x0 || 0xE ||  
| 0x0 || 0xD || [[#IpAddressSetting|Ip]]
|-
|-
| 0xE || 0x4 || Primary DNS server IPv4 address
| 0xD || 0x9 || [[#DnsSetting|Dns]]
|-
|-
| 0x12 || 0x4 || Secondary DNS server IPv4 address
| 0x16 || 0xAA || [[#ProxySetting|Proxy]]
|-
|-
| 0x16 || 0xAA || [[#ProxySetting]]
| 0xC0 || 0x2 || Mtu
|-
| 0xC0 || 0x2 || MTU
|}
|}


Line 410: Line 700:
! Description
! Description
|-
|-
| 0x0 || 0x1 ||  
| 0x0 || 0x1 || IsEnabled
|-
|-
| 0x1 || 0x1 || Padding
| 0x1 || 0x1 || Reserved
|-
|-
| 0x2 || 0x2 || Port
| 0x2 || 0x2 || Port
|-
|-
| 0x4 || ? || Server string
| 0x4 || 0x64 || Proxy (server string, NUL-terminated)
|-
| 0x68 || 0x41 || [[#AuthenticationSetting|Authentication]]
|-
| 0xA9 || 0x1 || Reserved
|}
 
= AuthenticationSetting =
This is "nn::nifm::AuthenticationSetting". This is a 0x41-byte struct.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0 || 0x1 || IsEnabled
|-
| 0x1 || 0x20 || Username (user string, NUL-terminated)
|-
| 0x21 || 0x20 || Password (password string, NUL-terminated)
|}
 
= 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"
|-
! Offset
! Size
! Description
|-
| 0x0 || 0x1 || IsAuto (Ignored by [[#GetCurrentIpConfigInfo]])
|-
| 0x1 || 0x4 || IpAddress (Copied to an output <code>struct in_addr</code> by sdknso)
|-
| 0x5 || 0x4 || SubnetMask (Copied to an output <code>struct in_addr</code> by sdknso)
|-
| 0x9 || 0x4 || DefaultGateway (Copied to an output <code>struct in_addr</code> by sdknso)
|}
 
= DnsSetting =
This is "nn::nifm::DnsSetting". This is a 0x9-byte struct.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0 || 0x1 || IsAuto (Ignored by [[#GetCurrentIpConfigInfo]])
|-
| 0x1 || 0x4 || PreferredDns (Copied to an output <code>struct in_addr</code> by sdknso)
|-
| 0x5 || 0x4 || AlternateDns (Copied to an output <code>struct in_addr</code> by sdknso)
|}
 
= RequestState =
This is "nn::nifm::RequestState".
 
{| class="wikitable" border="1"
|-
! Value
! Description
|-
| 0 || Invalid
|-
| 1 || Free
|-
| 2 || OnHold
|-
| 3 || Accepted
|-
| 4 || Blocking
|}
 
= ConnectionConfirmationOption =
This is "nn::nifm::ConnectionConfirmationOption".
 
{| class="wikitable" border="1"
|-
! Value
! Description
|-
| 0 || Invalid
|-
| 1 || Prohibited
|-
| 2 || NotRequired
|-
| 3 || Preferred
|-
| 4 || Required
|-
| 5 || Forced
|}
|}


[[Category:Services]]
[[Category:Services]]