# wozt/ax88179_aroma_driver architecture

> Architecture diagram of the GitHub repository wozt/ax88179_aroma_driver, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/wozt/ax88179_aroma_driver
- Repository: https://github.com/wozt/ax88179_aroma_driver

## Overview

This is an experimental Wii U Aroma/WUMS USB Ethernet driver. A background worker initializes the AX88179, starts lwIP, obtains network configuration, and enables an nsysnet compatibility shim for Wii U Menu and game processes. Shim-created sockets use AX/lwIP while pre-existing native sockets remain native. Separate compatibility paths cover DNS, Nintendo NSSL through a localhost relay, and FTP/Wiiload listener handoff. The README documents these capabilities; sampled source confirms the worker’s network startup and polling, but detailed shim and driver call wiring was not sampled.

Main entry points: [`net/ax_net.c`](https://github.com/wozt/ax88179_aroma_driver/blob/main/net/ax_net.c) (lwIP network), [`aroma_module/nsysnet_shim.c`](https://github.com/wozt/ax88179_aroma_driver/blob/main/aroma_module/nsysnet_shim.c) (nsysnet shim), [`aroma_module/main.c`](https://github.com/wozt/ax88179_aroma_driver/blob/main/aroma_module/main.c) (Module worker), [`aroma_module`](https://github.com/wozt/ax88179_aroma_driver/tree/main/aroma_module) (PPC relay)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Aroma runtime"]
  node_worker["Module worker<br/>[main.c]"]
  node_patching["FunctionPatcher<br/>[iosu_patch.c]"]
end

subgraph group_network["Ethernet stack"]
  node_driver["AX88179 driver<br/>[ax88179.c]"]
  node_usb["Wii U USB host"]
  node_net["lwIP network<br/>[ax_net.c]"]
  node_port["lwIP system port<br/>[sys_arch.c]"]
end

subgraph group_compat["Network compatibility"]
  node_shim["nsysnet shim<br/>[nsysnet_shim.c]"]
  node_dns["DNS compatibility<br/>[nsysnet_shim.c]"]
  node_tls["NSSL bridge<br/>[nsysnet_shim.c]"]
  node_native["Native nsysnet"]
  node_relay["PPC relay"]
end

subgraph group_handoff["Listener handoff"]
  node_ftphandoff["FTP listener handoff"]
  node_wiiloadhandoff["Wiiload listener handoff"]
end

node_titles(("Menu and games"))
node_dhcp["DHCP server"]
node_resolver["DNS services"]
node_internet(("Internet"))
node_nssl["Nintendo NSSL"]

node_titles -->|"patched exports"| node_patching
node_worker -->|"initializes"| node_driver
node_worker -->|"starts and polls"| node_net
node_worker -->|"starts and stops"| node_shim
node_patching -->|"dispatches exports"| node_shim
node_driver -->|"USB I/O"| node_usb
node_net -->|"Ethernet frames"| node_driver
node_net -->|"uses port"| node_port
node_net -->|"requests configuration"| node_dhcp
node_net -->|"routes traffic"| node_internet
node_shim -->|"routes shim sockets"| node_net
node_shim -->|"preserves native sockets"| node_native
node_dns -->|"resolves via AX"| node_net
node_dns -.->|"uses when system mode"| node_resolver
node_nssl -->|"opens socket"| node_native
node_tls -->|"bridges encrypted stream"| node_relay
node_relay -->|"uses localhost socket"| node_native
node_relay -->|"forwards bytes"| node_net
node_worker -->|"enables handoff"| node_ftphandoff
node_worker -->|"enables handoff"| node_wiiloadhandoff
node_ftphandoff -->|"recreates listener through"| node_shim
node_wiiloadhandoff -->|"recreates listener through"| node_shim

click node_worker "https://github.com/wozt/ax88179_aroma_driver/blob/main/aroma_module/main.c"
click node_patching "https://github.com/wozt/ax88179_aroma_driver/blob/main/aroma_module/iosu_patch.c"
click node_shim "https://github.com/wozt/ax88179_aroma_driver/blob/main/aroma_module/nsysnet_shim.c"
click node_dns "https://github.com/wozt/ax88179_aroma_driver/blob/main/aroma_module/nsysnet_shim.c"
click node_tls "https://github.com/wozt/ax88179_aroma_driver/blob/main/aroma_module/nsysnet_shim.c"
click node_relay "https://github.com/wozt/ax88179_aroma_driver/tree/main/aroma_module"
click node_driver "https://github.com/wozt/ax88179_aroma_driver/blob/main/driver/ax88179.c"
click node_net "https://github.com/wozt/ax88179_aroma_driver/blob/main/net/ax_net.c"
click node_port "https://github.com/wozt/ax88179_aroma_driver/blob/main/net/port/sys_arch.c"
click node_ftphandoff "https://github.com/wozt/ax88179_aroma_driver/tree/main/aroma_module"
click node_wiiloadhandoff "https://github.com/wozt/ax88179_aroma_driver/tree/main/aroma_module"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_worker,node_patching toneBlue
class node_driver,node_usb,node_net,node_port toneAmber
class node_shim,node_dns,node_tls,node_native,node_relay,node_dhcp toneMint
class node_ftphandoff,node_wiiloadhandoff toneRose
class node_titles,node_resolver,node_internet,node_nssl toneIndigo
```

## Components

### Aroma runtime

- [Module worker](https://github.com/wozt/ax88179_aroma_driver/blob/main/aroma_module/main.c): `aroma_module/main.c`
- [FunctionPatcher](https://github.com/wozt/ax88179_aroma_driver/blob/main/aroma_module/iosu_patch.c): `aroma_module/iosu_patch.c`

### Ethernet stack

- [AX88179 driver](https://github.com/wozt/ax88179_aroma_driver/blob/main/driver/ax88179.c): `driver/ax88179.c`
- **Wii U USB host**
- [lwIP network](https://github.com/wozt/ax88179_aroma_driver/blob/main/net/ax_net.c): `net/ax_net.c`
- [lwIP system port](https://github.com/wozt/ax88179_aroma_driver/blob/main/net/port/sys_arch.c): `net/port/sys_arch.c`

### Network compatibility

- [nsysnet shim](https://github.com/wozt/ax88179_aroma_driver/blob/main/aroma_module/nsysnet_shim.c): `aroma_module/nsysnet_shim.c`
- [DNS compatibility](https://github.com/wozt/ax88179_aroma_driver/blob/main/aroma_module/nsysnet_shim.c): `aroma_module/nsysnet_shim.c`
- [NSSL bridge](https://github.com/wozt/ax88179_aroma_driver/blob/main/aroma_module/nsysnet_shim.c): `aroma_module/nsysnet_shim.c`
- **Native nsysnet**
- [PPC relay](https://github.com/wozt/ax88179_aroma_driver/tree/main/aroma_module): `aroma_module`

### Listener handoff

- [FTP listener handoff](https://github.com/wozt/ax88179_aroma_driver/tree/main/aroma_module): `aroma_module`
- [Wiiload listener handoff](https://github.com/wozt/ax88179_aroma_driver/tree/main/aroma_module): `aroma_module`

### Other components

- **Menu and games**
- **DHCP server**
- **DNS services**
- **Internet**
- **Nintendo NSSL**

## Connections

- Menu and games → FunctionPatcher: patched exports
- Module worker → AX88179 driver: initializes
- Module worker → lwIP network: starts and polls
- Module worker → nsysnet shim: starts and stops
- FunctionPatcher → nsysnet shim: dispatches exports
- AX88179 driver → Wii U USB host: USB I/O
- lwIP network → AX88179 driver: Ethernet frames
- lwIP network → lwIP system port: uses port
- lwIP network → DHCP server: requests configuration
- lwIP network → Internet: routes traffic
- nsysnet shim → lwIP network: routes shim sockets
- nsysnet shim → Native nsysnet: preserves native sockets
- DNS compatibility → lwIP network: resolves via AX
- DNS compatibility → DNS services: uses when system mode
- Nintendo NSSL → Native nsysnet: opens socket
- NSSL bridge → PPC relay: bridges encrypted stream
- PPC relay → Native nsysnet: uses localhost socket
- PPC relay → lwIP network: forwards bytes
- Module worker → FTP listener handoff: enables handoff
- Module worker → Wiiload listener handoff: enables handoff
- FTP listener handoff → nsysnet shim: recreates listener through
- Wiiload listener handoff → nsysnet shim: recreates listener through
