/dev/net/ifmgr/ncl

From WiiUBrew
Jump to navigation Jump to search

/dev/net/ifmgr/ncl is the IOSU device node that handles network configuration. Its functions are exposed to the Cafe OS userspace through nsysnet.rpl's netconf functions.

ioctl() interface

0x0C - netconf_get_wifi_cfg()

This function is used to get the configuration information of the active wifi profile. It takes no input, and stores its output in a wifi configuration buffer.

0x11 - netconf_set_wifi_cfg()

This function is used to set the configuration information of the active wifi profile. It takes a wifi configuration buffer as input, and produces no output.

0x25 - netconf_set_proxy_cfg()

This function is used to set the configuration information for the proxy of the active wifi profile. It takes a proxy configuration buffer as input, and produces no output.

0x26 - netconf_get_proxy_cfg()

This function is used to get the configuration information for the proxy of the active wifi profile. It takes no input, and stores its output in a proxy configuration buffer.

Structures

Wifi Configuration

/* Wifi configuration */
typedef struct WifiConfig
{
    char unk0[0x4-0x0];
    char ssid[0x20];
    uint16_t ssid_len;
    char unk26[0x2c-0x26];
    uint16_t key_len;
    char key[0x40];
    char unk6e[0x70-0x6e];
} WifiConfig;

#define WIFI_CFG_SIZE  0x70

Proxy Configuration

/* Proxy configuration */
typedef struct ProxyConfig
{
    uint16_t using_proxy; // 0x0000 or 0x0001
    uint16_t port;
    int using_auth; // not sure about that
    char ip[0x80];
    char username[0x80];
    char password[0x80];
    char unknown[0x40];
} ProxyConfig;

#define PROXY_CFG_SIZE 0x1c8

Implementation Example

WiFi

    #define NET_GET_WIFI_CFG 0x0C
    #define NET_SET_WIFI_CFG 0x11

    #define NET_GET_PROXY_CFG 0x26
    #define NET_SET_PROXY_CFG 0x25

    int fd;
    WifiConfig *wf_cfg;

    int handle = IOS_Open((char*)"/dev/net/ifmgr/ncl", 0);
    if(!handle)
    {
        _print("Couldn't open IOSU module. Press + to exit.");
        flipBuffers();
        goto end;
    }

    wf_cfg = (WifiConfig*)OSAllocFromSystem(0x70, 4);
    if(!wf_cfg)
    {
        _print("Couldn't alloc output buffer. Press + to exit");
        flipBuffers();
        goto end;
    }

    memset(wf_cfg, 0, 0x70);
    IOS_Ioctl(handle, NET_GET_WIFI_CFG, NULL, 0, wf_cfg, 0x70);

    fd = open("sd:/wifi_cfg.bin", O_WRONLY);
    write(fd, wf_cfg, 0x70);
    close(fd);

    _print("File written to SD Card ! Press + to exit");
    flipBuffers();

end: