Difference between revisions of "NWM Services"

From 3dbrew
Jump to navigation Jump to search
Line 73: Line 73:
 
| Little-endian ID, for [[Download Play]] this is 0x55.
 
| Little-endian ID, for [[Download Play]] this is 0x55.
 
|}
 
|}
 +
 +
==Network structure==
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Offset
 +
!  Size
 +
!  Description
 +
|-
 +
| 0x0
 +
| 0x6
 +
| This is the MAC address of the host. This is all-zero on the host, like with [[NWMUDS:BeginHostingNetwork]].
 +
|-
 +
| 0xD
 +
| 0x3
 +
| This is the OUI value for use with the beacon tags. Normally this is 001F32.
 +
|-
 +
| 0x10
 +
| 0x4
 +
| wlancommID
 +
|-
 +
| 0x14
 +
| 0x1
 +
| This ID is also stored at offset 0xE in the CTR-generation structure.
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| ?
 +
|}
 +
 +
This 0x108-byte structure is used for [[NWMUDS:BeginHostingNetwork]], [[NWMUDS:ConnectToNetwork]], etc. This data is stored as big-endian.
  
 
== UDS Beacons ==
 
== UDS Beacons ==
 
The UDS host broadcasts a beacon containing at least two Nintendo-vendor tags, normally the data stored in these tags are static. The second tag contains the big-endian u32 networkID, used by the clients when connecting to the host and for the above CCMP key generation. The Nintendo-vendor tag(s) following the first two are unique to the process using UDS, these tags are used for broadcasting metadata regarding the host.
 
The UDS host broadcasts a beacon containing at least two Nintendo-vendor tags, normally the data stored in these tags are static. The second tag contains the big-endian u32 networkID, used by the clients when connecting to the host and for the above CCMP key generation. The Nintendo-vendor tag(s) following the first two are unique to the process using UDS, these tags are used for broadcasting metadata regarding the host.

Revision as of 01:55, 22 September 2014


These NWM services are used for local-WLAN communications, NWM module handles regular wifi APs as well. These services are used for creating/connecting to networks, and for sending/receiving data over the network etc. NWM module uses the wifi SDIO hardware via the IO registers for this.

NWM local-WLAN service "nwm::UDS"

Command Header Description
0x000F0404 RecvBeaconBroadcastData
0x001400C0 RecvBroadcastDataFrame
0x001B0302 Initialize
0x001D0044 BeginHostingNetwork
0x001E0084 ConnectToNetwork

NWM infrastructure service "nwm::INF"

Command Header Description
0x00070742 ConnectToAP

NWM socket service "nwm::SOC"

NWM service "nwm::SAP"

NWM local-WLAN StreetPass service "nwm::CEC"

NWM service "nwm::EXT"

NWM service "nwm::TST"

Local-WLAN

UDS is used for 3DS<>3DS local-WLAN communications, and for 3DS<>Wii U communications. The latter is mainly only used for multi-player in games.

All UDS local-WLAN communications have the CCMP key for data encryption generated via NWM module. The CCMP key passed to nwm::CEC commands(stored in a 0x44-byte input structure) for StreetPass is generated by the CECD module. The input data used with EncryptDecryptAes with keytype1 is a MD5 hash over an input passphrase. This input passphrase is fixed for Download Play, it's unique per local-WLAN protocol. The CTR is a MD5 hash over the below 0x10-byte structure. The output from encrypting that data with AES-CTR is the final CCMP key.

Structure used for generating the CTR

Offset Size Description
0x0 0x4 Little-endian local-WLAN communication ID, normally this is: (user_process uniqueID << 8) | val. Where val is 0x10 on retail(configmem UNITINFO bit0 set), 0x90 for devunit. For Download Play, this is always 0x2810 on retail(0x2890 on devunit).
0x4 0x4 Little-endian u32 networkID, randomly-generated when creating the network. The network SSID used when a client connects to the network is sprintf(out, "%08X", networkID).
0x8 0x6 Host MAC address.
0xE 0x2 Little-endian ID, for Download Play this is 0x55.

Network structure

Offset Size Description
0x0 0x6 This is the MAC address of the host. This is all-zero on the host, like with NWMUDS:BeginHostingNetwork.
0xD 0x3 This is the OUI value for use with the beacon tags. Normally this is 001F32.
0x10 0x4 wlancommID
0x14 0x1 This ID is also stored at offset 0xE in the CTR-generation structure.
0x1C 0x4 ?

This 0x108-byte structure is used for NWMUDS:BeginHostingNetwork, NWMUDS:ConnectToNetwork, etc. This data is stored as big-endian.

UDS Beacons

The UDS host broadcasts a beacon containing at least two Nintendo-vendor tags, normally the data stored in these tags are static. The second tag contains the big-endian u32 networkID, used by the clients when connecting to the host and for the above CCMP key generation. The Nintendo-vendor tag(s) following the first two are unique to the process using UDS, these tags are used for broadcasting metadata regarding the host.