Difference between revisions of "/dev/net/ifmgr/ncl"
(Added more function and structures) |
m (added basic implementation (it works, trust me)) |
||
Line 50: | Line 50: | ||
#define PROXY_CFG_SIZE 0x1c8 | #define PROXY_CFG_SIZE 0x1c8 | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==Implementation Example== | ||
+ | ===WiFi=== | ||
+ | <syntaxhighlight lang="C"> | ||
+ | |||
+ | #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: | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 18:48, 11 November 2018
/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: