The Nintendo Switch Switch


Yesterday I had the idea that it would be cool if I turned a Nintendo Switch (will be referred to as NX to avoid confusion as NX is the code name for the Nintendo Switch) console into an actual network switch. I thought about it a bit and realized that it would be doable in hardware at least, since the NX docking station has USB-A ports.

The Nintendo Switch Switch

Next step is software, while I have done some NX homebrew stuff in the past, it didn’t sound fun implementing this pretty much from scratch. But then I remembered switchroot that has Android and Linux for the NX and setting up a network switch inside Linux would be easy.

So the first step was to install switchroot Ubuntu. I just flashed the image file to an SD card, booted it with hekate (a boot loader for the NX) and followed the setup wizard.

After that was done, I plugged in the USB Ethernet dongle, opened a terminal on the switch and executed lsusb.

cynthia@cynthia-switch:~$ lsusb
Bus 002 Device 002: ID 057e:200c Nintendo Co., Ltd Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 009: ID 057e:200a Nintendo Co., Ltd Bus 001 Device 011: ID 2357:0601 Bus 001 Device 005: ID 0b95:7e2b ASIX Electronics Corp. AX88772B
Bus 001 Device 012: ID 04d9:0348 Holtek Semiconductor, Inc. Bus 001 Device 004: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 002: ID 057e:200c Nintendo Co., Ltd Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

My dongle is 2357:0601, For some reason it does not have a vendor name but I confirmed that was not unique to the switch so proceeded along.

However, when I checked ip link all I saw was interfaces internal to the NX like lo and the WiFi interface, but no USB network card. To help debug why my USB interfaces were not showing up, I used the usb-devices tool and saw Driver=(none) for my USB Ethernet dongle. :(

I was honestly a bit confused and not sure what to do next, I tried re-compiling the kernel and all sorts of stuff that didn’t help.

Then I realized. On the download page for switchroot there is an updates folder, so I tried that.

All I had to do was download the update zip and extract it to the boot partition of the SD card after I had deleted the boot directory and the boot.scr file. I put the SD card in the NX again and booted it back up with hekate.

Upon opening a terminal and running ip link I was presented with this:

16: enx9cebe816215d: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 9c:eb:e8:16:21:5d brd ff:ff:ff:ff:ff:ff
18: enx8416f90eae20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 84:16:f9:0e:ae:20 brd ff:ff:ff:ff:ff:ff

🎉🎉🎉 Finally I had gotten the dongles to work and it was only the configuration left!

So I just did some quick configuration with brctl and ip:

brctl addbr br0 # Adding the bridge interface # Adding the physical interface to the bridge
brctl addif br0 enx8416f90eae20 enx9cebe816215d ip link set br0 up # Set the bridge interface to up

Then I connected one dongle to my LAN and one to a computer that I used for testing.

And after checking twitter.com on the test computer finally it was all working!

A speedtest shows that it can at least do 90Mbps (one of my dongles is only 100Mbps).

Speedtest

Final Setup

If this was to your liking then maybe you will find my Twitter interesting @bitcynth.

I have some other plans related to this that will be posted soon™.