Changes

Line 1: Line 1: −
= bsd:u, bsd:s =
+
= bsd:u, bsd:s, bsd:a =
 
This is "nn::socket::sf::IClient".
 
This is "nn::socket::sf::IClient".
 +
 +
[15.0.0+] This is "nn::socket::sf::IClient_MC".
 +
 +
[18.0.0+] This is "nn::socket::sf::IClient".
    
All the services commands but the first two return -1 on failure and set errno when that happens. Although Nintendo has the FreeBSD kernel's to socket stack, '''the errno macro definitions being in use actually come from Linux (and not from FreeBSD as one would expect!)'''.
 
All the services commands but the first two return -1 on failure and set errno when that happens. Although Nintendo has the FreeBSD kernel's to socket stack, '''the errno macro definitions being in use actually come from Linux (and not from FreeBSD as one would expect!)'''.
 +
 +
[18.0.0+] bsd:a was added.
    
These services have max_sessions 0x40. There's 22 IPC handler threads for bsd:u, and 11 for bsd:s.
 
These services have max_sessions 0x40. There's 22 IPC handler threads for bsd:u, and 11 for bsd:s.
 +
 +
[16.0.0+] bsd:u has max_sessions 0x24 and bsd:s has max_sessions 0x7E.
 +
 +
[18.0.0+] bsd:u has max_sessions 0xF, bsd:s has max_sessions 0x7E and bsd:a has max_sessions 0x17.
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 10: Line 20:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0  || RegisterClient (Initialize)
+
| 0  || [[#RegisterClient]]
 
|-
 
|-
 
| 1  || StartMonitoring
 
| 1  || StartMonitoring
Line 74: Line 84:  
| 31 || [7.0.0+] EventFd
 
| 31 || [7.0.0+] EventFd
 
|-
 
|-
| 32 || [7.0.0+] RegisterResourceStatisticsName
+
| 32 || [7.0.0+] [[#RegisterResourceStatisticsName]]
 
|-
 
|-
| 33 || [10.0.0+] Initialize2
+
| 33 || [10.0.0+] [[#RegisterClientShared]]
 +
|-
 +
| 34 || [15.0.0+] GetSocketStatistics
 +
|-
 +
| 35 || [17.0.0+] NifIoctl
 +
|-
 +
| 200 || [15.0.0+] SetThreadCoreMask
 +
|-
 +
| 201 || [15.0.0+] GetThreadCoreMask
 
|}
 
|}
   −
== Initalize ==
+
== RegisterClient ==
Takes a [[#BsdBufferConfig]] (made-up name), the PID, the size of the transfer memory and a copy-handle of the latter.
+
Takes a [[#LibraryConfigData]], the PID, the size of the transfer memory and a copy-handle of the latter.
 
  −
=== BsdBufferConfig ===
  −
/// Configuration structure for bsdInitalize
  −
typedef struct  {
  −
    u32 version;                ///< Observed 1 on 2.0 LibAppletWeb, 2 on 3.0.
  −
  −
    u32 tcp_tx_buf_size;        ///< Size of the TCP transfer (send) buffer (initial or fixed).
  −
    u32 tcp_rx_buf_size;        ///< Size of the TCP recieve buffer (initial or fixed).
  −
    u32 tcp_tx_buf_max_size;    ///< Maximum size of the TCP transfer (send) buffer. If it is 0, the size of the buffer is fixed to its initial value.
  −
    u32 tcp_rx_buf_max_size;    ///< Maximum size of the TCP receive buffer. If it is 0, the size of the buffer is fixed to its initial value.
  −
  −
    u32 udp_tx_buf_size;        ///< Size of the UDP transfer (send) buffer (typically 0x2400 bytes).
  −
    u32 udp_rx_buf_size;        ///< Size of the UDP receive buffer (typically 0xA500 bytes).
  −
  −
    u32 sb_efficiency;          ///< Number of buffers for each socket (standard values range from 1 to 8).
  −
} BsdBufferConfig;
  −
 
      
The transfer memory must be larger than a the computed size below. Should the transfer memory be smaller than that, the BSD sockets service would only send ZeroWindow packets (for TCP), resulting in a transfer rate not exceeding 1 byte/s.
 
The transfer memory must be larger than a the computed size below. Should the transfer memory be smaller than that, the BSD sockets service would only send ZeroWindow packets (for TCP), resulting in a transfer rate not exceeding 1 byte/s.
Line 158: Line 159:  
[7.0.0+] The buffers were replaced with a type-0x6 output buffer.
 
[7.0.0+] The buffers were replaced with a type-0x6 output buffer.
   −
= bsdcfg =
+
== RegisterResourceStatisticsName ==
 +
With [10.0.0+] this now takes an additional 8-bytes of input.
 +
 
 +
== RegisterClientShared ==
 +
Same input/output as [[#RegisterClient]] except this doesn't take an input handle.
 +
 
 +
The work-buffer (size is still specified with this cmd) is backed by memory in the sysmodule, instead of TransferMemory. The size (after alignment) must be >=0x1000 and <=0x13F000.
 +
 
 +
sdknso will only use this cmd when two flags in the input config are set: the first one being set indicates that the bsd:s service is used, while the second flag enables using this cmd. An error is thrown if the work-buffer size is <0x1000. Otherwise when these flags aren't set, [[#RegisterClient]] is used as usual.
 +
 
 +
= bsdcfg, ifcfg =
 
This is "nn::bsdsocket::cfg::ServerInterface".
 
This is "nn::bsdsocket::cfg::ServerInterface".
 +
 +
[17.0.0+] ifcfg was added.
 +
 +
This has max_sessions 4.
 +
 +
[18.0.0+] bsdcfg has max_sessions 1 and ifcfg has max_sessions 4.
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 190: Line 207:  
|-
 
|-
 
| 12 || PrintArpEntries
 
| 12 || PrintArpEntries
 +
|-
 +
| 13 || [16.0.0+]
 +
|-
 +
| 14 || [16.0.0+]
 +
|-
 +
| 15 || [16.0.0+]
 +
|-
 +
| 16 || [17.0.0+]
 +
|-
 +
| 17 || [17.0.0+]
 +
|-
 +
| 18 || [17.0.0+]
 +
|-
 +
| 19 || [17.0.0+]
 +
|-
 +
| 20 || [17.0.0+]
 +
|-
 +
| 21 || [17.0.0+]
 +
|-
 +
| 22 || [17.0.0+]
 +
|-
 +
| 23 || [17.0.0+]
 +
|-
 +
| 50 || [17.0.0+]
 +
|-
 +
| 51 || [17.0.0+]
 +
|-
 +
| 52 || [17.0.0+]
 +
|-
 +
| 53 || [17.0.0+]
 +
|-
 +
| 54 || [17.0.0+]
 +
|-
 +
| 55 || [17.0.0+]
 +
|-
 +
| 56 || [17.0.0+]
 +
|-
 +
| 57 || [17.0.0+]
 +
|-
 +
| 58 || [17.0.0+]
 +
|-
 +
| 100 || [17.0.0+]
 
|}
 
|}
   Line 201: Line 260:     
[3.0.0+] Takes an additional 4-bytes of input.
 
[3.0.0+] Takes an additional 4-bytes of input.
 +
 +
== Cmd13 ==
 +
Takes a type-0x5 input buffer, no output.
 +
 +
Stubbed, just returns 0.
 +
 +
== Cmd14 ==
 +
Takes a type-0x5 input buffer, no output.
 +
 +
Stubbed, just returns 0.
 +
 +
== Cmd15 ==
 +
Takes a type-0x5 input buffer, no output.
 +
 +
Stubbed, just returns 0.
    
= ethc:c =
 
= ethc:c =
 
This is "nn::eth::sf::IEthInterface".
 
This is "nn::eth::sf::IEthInterface".
 +
 +
This service no longer exists in [15.0.0+].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 220: Line 296:  
|-
 
|-
 
| 5  || GetMediaType
 
| 5  || GetMediaType
 +
|-
 +
| 6 || [11.0.0+] GetMacAddress
 
|}
 
|}
    
= ethc:i =
 
= ethc:i =
 
This is "nn::eth::sf::IEthInterfaceGroup".
 
This is "nn::eth::sf::IEthInterfaceGroup".
 +
 +
This service no longer exists in [15.0.0+].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 251: Line 331:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || SetDnsAddressesPrivateRequest (stubbed, returns 0x7FE03)
+
| 0 || SetDnsAddressesPrivateRequest
 
|-
 
|-
| 1 || GetDnsAddressPrivateRequest (stubbed, returns 0x7FE03)
+
| 1 || GetDnsAddressPrivateRequest
 
|-
 
|-
 
| 2 || GetHostByNameRequest
 
| 2 || GetHostByNameRequest
Line 286: Line 366:  
== GetAddrInfoRequest ==
 
== GetAddrInfoRequest ==
 
Takes three type 5 buffers (host, port, and hints), and a type 6 buffer (the output addrinfos). Also takes a u8 (padded to 4 bytes so the next raw parameter can align), a u32, and a u64. The u8 is a boolean for whether to enable "nsd resolve" (1) or not (0). Not sure what the u32 is. It seems to either come from a parameter to <tt>GetAddrInfo</tt> or be zero. The u64 is most likely a placeholder for the server to copy the PID into and should be zero. Both hints and the output buffer contain serialized addrinfo chains. The hints buffer is sized 0x400 bytes long by default, and the output buffer 0x1000 bytes.
 
Takes three type 5 buffers (host, port, and hints), and a type 6 buffer (the output addrinfos). Also takes a u8 (padded to 4 bytes so the next raw parameter can align), a u32, and a u64. The u8 is a boolean for whether to enable "nsd resolve" (1) or not (0). Not sure what the u32 is. It seems to either come from a parameter to <tt>GetAddrInfo</tt> or be zero. The u64 is most likely a placeholder for the server to copy the PID into and should be zero. Both hints and the output buffer contain serialized addrinfo chains. The hints buffer is sized 0x400 bytes long by default, and the output buffer 0x1000 bytes.
 +
 +
On newer versions this calls the same vfunc as GetAddrInfoRequestWithOptions, except with fixed Options.
    
=== Addrinfo Serialization Format ===
 
=== Addrinfo Serialization Format ===
Line 323: Line 405:     
The list should be terminated with a sentinel four-byte zero value.
 
The list should be terminated with a sentinel four-byte zero value.
 +
 +
= dns:priv =
 +
This is "nn::socket::resolver::IPrivateResolver".
 +
 +
This was added with [18.0.0+].
 +
 +
This has max_sessions 1.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 ||
 +
|-
 +
| 1 ||
 +
|-
 +
| 2 ||
 +
|}
    
= nsd:u, nsd:a =
 
= nsd:u, nsd:a =
 
This is "nn::nsd::detail::IManager".
 
This is "nn::nsd::detail::IManager".
 +
 +
nsd:u has max_sessions 20, nsd:a has IPC max_sessions 5. No retail system titles have access to nsd:a.
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 331: Line 433:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 10 || GetSettingName
+
| 5 || [11.0.0+] [[#GetSettingUrl]]
 +
|-
 +
| 10 || [[#GetSettingName]]
 
|-
 
|-
 
| 11 || [[#GetEnvironmentIdentifier]]
 
| 11 || [[#GetEnvironmentIdentifier]]
 
|-
 
|-
| 12 || GetDeviceId
+
| 12 || [[#GetDeviceId]]
 
|-
 
|-
| 13 || DeleteSettings
+
| 13 || [[#DeleteSettings]]
 
|-
 
|-
| 14 || ImportSettings
+
| 14 || [[#ImportSettings]]
 
|-
 
|-
| 15 || [4.0.0+] SetChangeEnvironmentIdentifierDisabled
+
| 15 || [4.0.0+] [[#SetChangeEnvironmentIdentifierDisabled]]
 
|-
 
|-
| 20 || Resolve
+
| 20 || [[#Resolve]]
 
|-
 
|-
| 21 || ResolveEx
+
| 21 || [[#ResolveEx]]
 
|-
 
|-
| 30 || GetNasServiceSetting
+
| 30 || [[#GetNasServiceSetting]]
 
|-
 
|-
| 31 || GetNasServiceSettingEx
+
| 31 || [[#GetNasServiceSettingEx]]
 
|-
 
|-
| 40 || GetNasRequestFqdn
+
| 40 || [[#GetNasRequestFqdn]]
 
|-
 
|-
| 41 || GetNasRequestFqdnEx
+
| 41 || [[#GetNasRequestFqdnEx]]
 
|-
 
|-
| 42 || GetNasApiFqdn
+
| 42 || [[#GetNasApiFqdn]]
 
|-
 
|-
| 43 || GetNasApiFqdnEx
+
| 43 || [[#GetNasApiFqdnEx]]
 
|-
 
|-
| 50 || GetCurrentSetting
+
| 50 || [[#GetCurrentSetting]]
 
|-
 
|-
| 51 || [9.0.0+] WriteTestParameter
+
| 51 || [9.0.0+] [[#WriteTestParameter]]
 
|-
 
|-
| 52 || [9.0.0+] ReadTestParameter
+
| 52 || [9.0.0+] [[#ReadTestParameter]]
 
|-
 
|-
 
| 60 || [[#ReadSaveDataFromFsForTest]]
 
| 60 || [[#ReadSaveDataFromFsForTest]]
Line 371: Line 475:  
| 62 || [[#DeleteSaveDataOfFsForTest]]
 
| 62 || [[#DeleteSaveDataOfFsForTest]]
 
|-
 
|-
| 63 || [4.0.0+] IsChangeEnvironmentIdentifierDisabled
+
| 63 || [4.0.0+] [[#IsChangeEnvironmentIdentifierDisabled]]
 
|-
 
|-
| 64 || [10.0.0+] SetWithoutDomainExchangeFqdns
+
| 64 || [10.0.0+] [[#SetWithoutDomainExchangeFqdns]]
 
|-
 
|-
| 100 || [10.0.0+] GetApplicationServerEnvironmentType
+
| 100 || [10.0.0+] [[#GetApplicationServerEnvironmentType]]
 
|-
 
|-
| 101 || [10.0.0+] SetApplicationServerEnvironmentType
+
| 101 || [10.0.0+] [[#SetApplicationServerEnvironmentType]]
 
|-
 
|-
| 102 || [10.0.0+] DeleteApplicationServerEnvironmentType
+
| 102 || [10.0.0+] [[#DeleteApplicationServerEnvironmentType]]
 
|}
 
|}
 +
 +
== GetSettingUrl ==
 +
Takes a type-0x16 output buffer containing an [[#Url]].
 +
 +
Gets the 0x100-byte [[System_Settings|sys-setting]] for <code>nsd!setting_url</code> with the data being located on stack, memcpys the 0x100-bytes to the output buffer, then returns 0.
 +
 +
With newer sysvers, after loading the sys-setting it checks if the first 8-bytes match "https://", when it doesn't match then the tmp data on stack is overwritten with an [[#Url]] for <nowiki>"https://api.sect.srv.nintendo.net/v1/setting"</nowiki> (which is also the default value of this sys-setting). Prior to loading the sys-setting it also checks the size of the sys-setting (setsys GetSettingsItemValueSize), jumping to this memcpy-block when the size is 0.
 +
 +
== GetSettingName ==
 +
Takes a type-0x16 output buffer containing a [[#SettingName]].
 +
 +
Calls a func with output located on stack. If successful the 0x100-bytes from there is memcpy'd to the output buffer, then returns 0.
 +
 +
That func eventually memcpys data from state, if available.
    
== GetEnvironmentIdentifier ==
 
== GetEnvironmentIdentifier ==
Takes a type-0x16 buffer with size 8. Returns a string.
+
Takes a type-0x16 buffer containing an [[#EnvironmentIdentifier]].
    
The output string is used by [[NIM_services|NIM]] for the "eid:%s" in the User-Agent strings.
 
The output string is used by [[NIM_services|NIM]] for the "eid:%s" in the User-Agent strings.
    
This is the "lp1" string also used in domains.
 
This is the "lp1" string also used in domains.
 +
 +
== GetDeviceId ==
 +
No input, returns a [[#DeviceId]].
 +
 +
Stubbed, just returns 0.
 +
 +
== DeleteSettings ==
 +
Takes an input [[#DeleteMode]], no output.
 +
 +
This is only usable with nsd:a.
 +
 +
== ImportSettings ==
 +
Takes an input [[#ImportMode]], a type-0x5 input buffer, a type-0x6 output buffer, no output.
 +
 +
This is only usable with nsd:a.
 +
 +
== SetChangeEnvironmentIdentifierDisabled ==
 +
Takes an input bool, no output.
 +
 +
This is only usable with nsd:a.
 +
 +
== Resolve ==
 +
Takes a type-0x16 output buffer containing a [[#Fqdn]] and a type-0x15 input buffer containing a [[#Fqdn]].
 +
 +
== ResolveEx ==
 +
Takes a type-0x16 output buffer containing a [[#Fqdn]] and a type-0x15 input buffer containing a [[#Fqdn]], returns an output u32 "nn::nsd::InnerResult".
 +
 +
The official user-process wrapper code writes the output InnerResult to an output field as a "nn::Result".
 +
 +
== GetNasServiceSetting ==
 +
Takes a type-0x16 output buffer containing a [[#NasServiceSetting]], a type-0x15 input buffer containing a [[#NasServiceName]].
 +
 +
== GetNasServiceSettingEx ==
 +
Takes a type-0x16 output buffer containing a [[#NasServiceSetting]], a type-0x15 input buffer containing a [[#NasServiceName]], returns an output u32 "nn::nsd::InnerResult".
 +
 +
The official user-process wrapper code writes the output InnerResult to an output field as a "nn::Result".
 +
 +
== GetNasRequestFqdn ==
 +
Takes a type-0x16 output buffer containing a [[#Fqdn]].
 +
 +
== GetNasRequestFqdnEx ==
 +
Takes a type-0x16 output buffer containing a [[#Fqdn]], returns an output u32 "nn::nsd::InnerResult".
 +
 +
The official user-process wrapper code writes the output InnerResult to an output field as a "nn::Result".
 +
 +
== GetNasApiFqdn ==
 +
Takes a type-0x16 output buffer containing a [[#Fqdn]].
 +
 +
== GetNasApiFqdnEx ==
 +
Takes a type-0x16 output buffer containing a [[#Fqdn]], returns an output u32 "nn::nsd::InnerResult".
 +
 +
The official user-process wrapper code writes the output InnerResult to an output field as a "nn::Result".
 +
 +
== GetCurrentSetting ==
 +
Takes a type-0x16 output buffer containing a [[#SaveData]].
 +
 +
This is only usable with nsd:a.
 +
 +
== WriteTestParameter ==
 +
Takes a type-0x5 input buffer, no output.
 +
 +
Official sw uses [[#TestParameter]] for the buffer.
 +
 +
This is only usable with nsd:a.
 +
 +
== ReadTestParameter ==
 +
Takes a type-0x6 output buffer.
 +
 +
Official sw uses [[#TestParameter]] for the buffer.
 +
 +
This is only usable with nsd:a.
    
== ReadSaveDataFromFsForTest ==
 
== ReadSaveDataFromFsForTest ==
Requires the <code>nsd!test_mode</code> setting to be equal to 1.
+
Takes a type-0x16 output buffer containing a [[#SaveData]].
 +
 
 +
This is only usable with nsd:a.
 +
 
 +
Requires the <code>nsd!test_mode</code> setting to be equal to 1 (this doesn't apply with newer sysvers).
   −
Mounts the system save data for bsdsockets as <code>nsdsave</code> and reads from <code>nsd:/file</code> to the specified buffer, at the specified size and offset with no checks whatsoever. <code>nsdsave</code> is then unmounted.
+
Mounts the system save data for bsdsockets as <code>nsdsave</code> and reads from <code>nsd:/file</code> to the specified buffer with offset=0 and size=[[#SaveData]] size. <code>nsdsave</code> is then unmounted.
    
== WriteSaveDataToFsForTest ==
 
== WriteSaveDataToFsForTest ==
Requires the <code>nsd!test_mode</code> setting to be equal to 1.
+
Takes a type-0x15 input buffer containing a [[#SaveData]].
 +
 
 +
This is only usable with nsd:a. Requires the <code>nsd!test_mode</code> setting to be equal to 1.
   −
Mounts the system save data for bsdsockets as <code>nsdsave</code> and writes to <code>nsd:/file</code> (appending is allowed) using the specified buffer, at the specified size and offset, with no checks whatsoever. <code>nsdsave</code> is then commited and unmounted.
+
Mounts the system save data for bsdsockets as <code>nsdsave</code> and writes to <code>nsd:/file</code> (appending is allowed) using the specified buffer with offset=0 and size=[[#SaveData]] size. <code>nsdsave</code> is then commited and unmounted.
    
== DeleteSaveDataOfFsForTest ==
 
== DeleteSaveDataOfFsForTest ==
 +
No input/output.
 +
 +
This is only usable with nsd:a. Requires the <code>nsd!test_mode</code> setting to be equal to 1.
 +
 +
Deletes the system save data for bsdsockets.
 +
 +
== IsChangeEnvironmentIdentifierDisabled ==
 +
No input, returns an output bool.
 +
 +
== SetWithoutDomainExchangeFqdns ==
 +
Takes a type-0x5 input buffer containing an array of [[#Fqdn]].
 +
 
Requires the <code>nsd!test_mode</code> setting to be equal to 1.
 
Requires the <code>nsd!test_mode</code> setting to be equal to 1.
   −
Deletes the system save data for bsdsockets.
+
The maximum number of input entries is 2.
 +
 
 +
== GetApplicationServerEnvironmentType ==
 +
No input. Returns an output [[Applet_Manager_services#ServerEnvironmentType|ServerEnvironmentType]].
 +
 
 +
This gets the type previously configured by [[#SetApplicationServerEnvironmentType]] if available, otherwise it determines the type via the current [[#EnvironmentIdentifier]].
 +
 
 +
== SetApplicationServerEnvironmentType ==
 +
Takes an input u8 [[Applet_Manager_services#ServerEnvironmentType|ServerEnvironmentType]], no output.
 +
 
 +
== DeleteApplicationServerEnvironmentType ==
 +
No input/output.
 +
 
 +
= bsd:nu =
 +
This is "nn::anif::detail::ISfUserServiceCreator".
 +
 
 +
This was added with [15.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#CreateUserService]]
 +
|}
 +
 
 +
== CreateUserService ==
 +
No input. Returns an [[#ISfUserService]].
 +
 
 +
== ISfUserService ==
 +
This is "nn::anif::detail::ISfUserService".
 +
 
 +
This was added with [15.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#Assign]]
 +
|-
 +
| 128 || GetUserInfo
 +
|-
 +
| 129 || GetStateChangedEvent
 +
|}
 +
 
 +
=== Assign ===
 +
Takes an input handle. Returns an [[#ISfAssignedNetworkInterfaceService]].
 +
 
 +
The handle is the service-session handle for "nn::anif::detail::ISfNetworkInterfaceService".
 +
 
 +
=== ISfAssignedNetworkInterfaceService ===
 +
This is "nn::anif::detail::ISfAssignedNetworkInterfaceService".
 +
 
 +
This was added with [15.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#AddSession]]
 +
|}
 +
 
 +
==== AddSession ====
 +
Takes an input handle, no output.
 +
 
 +
The handle is the service-session handle for "nn::anif::detail::ISfNetworkInterfaceService".
 +
 
 +
= LibraryConfigData =
 +
This is "nn::socket::sf::LibraryConfigData".
 +
 
 +
/// Configuration structure for bsdInitalize
 +
typedef struct  {
 +
    u32 version;                ///< Observed 1 on 2.0 LibAppletWeb, 2 on 3.0.
 +
 +
    u32 tcp_tx_buf_size;        ///< Size of the TCP transfer (send) buffer (initial or fixed).
 +
    u32 tcp_rx_buf_size;        ///< Size of the TCP recieve buffer (initial or fixed).
 +
    u32 tcp_tx_buf_max_size;    ///< Maximum size of the TCP transfer (send) buffer. If it is 0, the size of the buffer is fixed to its initial value.
 +
    u32 tcp_rx_buf_max_size;    ///< Maximum size of the TCP receive buffer. If it is 0, the size of the buffer is fixed to its initial value.
 +
 +
    u32 udp_tx_buf_size;        ///< Size of the UDP transfer (send) buffer (typically 0x2400 bytes).
 +
    u32 udp_rx_buf_size;        ///< Size of the UDP receive buffer (typically 0xA500 bytes).
 +
 +
    u32 sb_efficiency;          ///< Number of buffers for each socket (standard values range from 1 to 8).
 +
} LibraryConfigData;
 +
 
 +
Versions:
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! System version
 +
! Version
 +
|-
 +
| [1.0.0-2.3.0] || 0x1
 +
|-
 +
| [3.0.0-3.0.2] || 0x2
 +
|-
 +
| [4.0.0-4.1.0] || 0x3
 +
|-
 +
| [5.0.0-5.1.0] || 0x4
 +
|-
 +
| [6.0.0-7.0.1] || 0x5
 +
|-
 +
| [8.0.0-8.1.1] || 0x6
 +
|-
 +
| [9.0.0-12.1.0] || 0x7
 +
|-
 +
| [13.0.0-15.0.1] || 0x8
 +
|-
 +
| [16.0.0+] || 0x9
 +
|}
 +
 
 +
= DeleteMode =
 +
This is "nn::nsd::DeleteMode".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value
 +
! Description
 +
|-
 +
| 0 ||
 +
|-
 +
| 1 ||
 +
|}
 +
 
 +
= ImportMode =
 +
This is "nn::nsd::ImportMode".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value
 +
! Description
 +
|-
 +
| 0 ||
 +
|-
 +
| 1 ||
 +
|}
 +
 
 +
= Url =
 +
This is "nn::nsd::Url". This is a 0x100-byte struct.
 +
 
 +
= SettingName =
 +
This is "nn::nsd::SettingName". This is a 0x100-byte struct.
 +
 
 +
= EnvironmentIdentifier =
 +
This is "nn::nsd::EnvironmentIdentifier". This a 0x8-byte struct, containing a string.
 +
 
 +
= DeviceId =
 +
This is "nn::nsd::DeviceId". This is a 0x10-byte struct.
 +
 
 +
= Fqdn =
 +
This is "nn::nsd::Fqdn". This is a 0x100-byte struct, containing a string.
 +
 
 +
= NasServiceSetting =
 +
This is "nn::nsd::NasServiceSetting". This is a 0x108-byte struct.
 +
 
 +
= NasServiceName =
 +
This is "nn::nsd::NasServiceName". This is a 0x10-byte struct.
 +
 
 +
= SaveData =
 +
This is "nn::nsd::SaveData". This is a 0x12BF0-byte struct.
 +
 
 +
= TestParameter =
 +
This is "nn::nsd::detail::TestParameter". This is a 0x80-byte struct.
    
[[Category:Services]]
 
[[Category:Services]]