diff --git a/cafe/nsysnet.def b/cafe/nsysnet.def index 7f1ad8a0..8802920a 100644 --- a/cafe/nsysnet.def +++ b/cafe/nsysnet.def @@ -1,6 +1,52 @@ :NAME nsysnet :TEXT +netconf_close +netconf_delete_profile +netconf_get_all_profile_state +netconf_get_assigned_address +netconf_get_assigned_dns +netconf_get_assigned_gateway +netconf_get_assigned_subnet +netconf_get_dns +netconf_get_eth_cfg +netconf_get_if_adminstate +netconf_get_if_ipv4_info +netconf_get_if_ipv4_info_ex +netconf_get_if_linkstate +netconf_get_if_macaddr +netconf_get_if_operstate +netconf_get_ifstate +netconf_get_interface_mtu +netconf_get_last_wifi_link_error +netconf_get_profile_state +netconf_get_proxy_config +netconf_get_running +netconf_get_startup_profile_id +netconf_get_valid_flags +netconf_get_wifi_cfg +netconf_getopt +netconf_init +netconf_nv_load +netconf_nv_read +netconf_nv_store +netconf_nv_write +netconf_read_aoss_config +netconf_read_compat_profile_id +netconf_set_dns +netconf_set_eth_cfg +netconf_set_if_admin_state +netconf_set_if_ipv4_info +netconf_set_if_ipv4_info_ex +netconf_set_interface_mtu +netconf_set_proxy_config +netconf_set_running +netconf_set_startup_profile_id +netconf_set_valid_flag +netconf_set_wifi_cfg +netconf_setopt +netconf_write_aoss_config +netconf_write_compat_profile_id NSSLAddServerPKI NSSLAddServerPKIExternal NSSLAddServerPKIGroups @@ -107,52 +153,6 @@ inet_ntop inet_pton listen mw_socket -netconf_close -netconf_delete_profile -netconf_get_all_profile_state -netconf_get_assigned_address -netconf_get_assigned_dns -netconf_get_assigned_gateway -netconf_get_assigned_subnet -netconf_get_dns -netconf_get_eth_cfg -netconf_get_if_adminstate -netconf_get_if_ipv4_info -netconf_get_if_ipv4_info_ex -netconf_get_if_linkstate -netconf_get_if_macaddr -netconf_get_if_operstate -netconf_get_ifstate -netconf_get_interface_mtu -netconf_get_last_wifi_link_error -netconf_get_profile_state -netconf_get_proxy_config -netconf_get_running -netconf_get_startup_profile_id -netconf_get_valid_flags -netconf_get_wifi_cfg -netconf_getopt -netconf_init -netconf_nv_load -netconf_nv_read -netconf_nv_store -netconf_nv_write -netconf_read_aoss_config -netconf_read_compat_profile_id -netconf_set_dns -netconf_set_eth_cfg -netconf_set_if_admin_state -netconf_set_if_ipv4_info -netconf_set_if_ipv4_info_ex -netconf_set_interface_mtu -netconf_set_proxy_config -netconf_set_running -netconf_set_startup_profile_id -netconf_set_valid_flag -netconf_set_wifi_cfg -netconf_setopt -netconf_write_aoss_config -netconf_write_compat_profile_id recv recvfrom recvfrom_ex diff --git a/include/nsysnet/netconfig.h b/include/nsysnet/netconfig.h new file mode 100644 index 00000000..6a5898b0 --- /dev/null +++ b/include/nsysnet/netconfig.h @@ -0,0 +1,458 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +/** + * \defgroup nsysnet_netconfig + * \ingroup nsysnet + * @{ + */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef uint16_t NetConfEthCfgSpeed; +typedef uint16_t NetConfEthCfgDuplex; +typedef uint16_t NetConfEthCfgNegotiation; +typedef uint16_t NetConfWifiPrivacyMode; +typedef uint16_t NetConfProxyAuthType; +typedef uint16_t NetConfProxyStatus; +typedef uint16_t NetConfInterfaceType; +typedef uint16_t NetConfLinkState; +typedef uint16_t NetConfOperState; +typedef uint16_t NetConfAdminState; + +typedef struct NetConfAllProfileState NetConfAllProfileState; +typedef struct NetConfEthCfg NetConfEthCfg; +typedef struct NetConfProxyConfig NetConfProxyConfig; +typedef struct NetConfValidFlags NetConfValidFlags; +typedef struct NetConfWifiConfig NetConfWifiConfig; +typedef struct NetConfOpt NetConfOpt; +typedef struct NetConfIPv4Info NetConfIPv4Info; +typedef struct NetConfMACAddr NetConfMACAddr; +typedef struct NetConfCfg NetConfCfg; +typedef struct NetConfAOSSConfig NetConfAOSSConfig; +typedef struct NetConfWifiConfigData NetConfWifiConfigData; +typedef struct NetConfWifiConfigDataPrivacy NetConfWifiConfigDataPrivacy; +typedef struct NetConfInterface NetConfInterface; +typedef struct NetConfIfState NetConfIfState; + +typedef enum NetConfInterfaceTypeEnum { + NET_CONF_INTERFACE_TYPE_WIFI = 0, + NET_CONF_INTERFACE_TYPE_ETHERNET = 1, +} NetConfInterfaceTypeEnum; + +typedef enum NetConfEthCfgSpeedEnum { + NET_CONF_ETH_CFG_SPEED_10M = 10, + NET_CONF_ETH_CFG_SPEED_100M = 100, +} NetConfEthCfgSpeedEnum; + +typedef enum NetConfEthCfgDuplexEnum { + NET_CONF_ETH_CFG_DUPLEX_HALF = 1, + NET_CONF_ETH_CFG_DUPLEX_FULL = 2, +} NetConfEthCfgDuplexEnum; + +typedef enum NetConfEthCfgNegotiationEnum { + NET_CONF_ETH_CFG_NEGOTIATION_MANUAL = 1, + NET_CONF_ETH_CFG_NEGOTIATION_AUTO = 2, +} NetConfEthCfgNegotiationEnum; + +typedef enum NetConfIPv4Mode { + NET_CONF_IPV4_MODE_DHCP = 0, + NET_CONF_IPV4_MODE_MANUAL = 2, +} NetConfIPv4Mode; + +typedef enum NetConfWifiPrivacyModeEnum { + NET_CONF_WIFI_PRIVACY_MODE_NONE = 0, + NET_CONF_WIFI_PRIVACY_MODE_WEP = 1, + NET_CONF_WIFI_PRIVACY_MODE_WPA2_PSK_TKIP = 3, + NET_CONF_WIFI_PRIVACY_MODE_WPA_PSK_TKIP = 4, + NET_CONF_WIFI_PRIVACY_MODE_WPA2_PSK_AES = 5, + NET_CONF_WIFI_PRIVACY_MODE_WPA_PSK_AES = 6, +} NetConfWifiPrivacyModeEnum; + +typedef enum NetConfProxyAuthTypeEnum { + NET_CONF_PROXY_AUTH_TYPE_NONE = 0, + NET_CONF_PROXY_AUTH_TYPE_BASIC_AUTHENTICATION = 1, +} NetConfProxyAuthTypeEnum; + +typedef enum NetConfProxyStatusEnum { + NET_CONF_PROXY_DISABLED = 0, + NET_CONF_PROXY_ENABLED = 1, +} NetConfProxyStatusEnum; + +typedef enum NetConfLinkStateEnum { + NET_CONF_LINK_STATE_UP = 1, + NET_CONF_LINK_STATE_DOWN = 2, + NET_CONF_LINK_STATE_NEGOTIATE = 3, +} NetConfLinkStateEnum; + +typedef enum NetConfOperStateEnum { + NET_CONF_OPER_STATE_UP = 1, + NET_CONF_OPER_STATE_DOWN = 2, +} NetConfOperStateEnum; + +typedef enum NetConfAdminStateEnum { + NET_CONF_ADMIN_STATE_UP = 1, + NET_CONF_ADMIN_STATE_DOWN = 2, +} NetConfAdminStateEnum; + +typedef enum NetConfProfile { + NET_CONF_PROFILE_0 = 0, + NET_CONF_PROFILE_1 = 1, + NET_CONF_PROFILE_2 = 2, + NET_CONF_PROFILE_3 = 3, + NET_CONF_PROFILE_4 = 4, + NET_CONF_PROFILE_5 = 5, +} NetConfProfile; + +struct NetConfAllProfileState { + WUT_UNKNOWN_BYTES(0x18); +}; +WUT_CHECK_SIZE(NetConfAllProfileState, 0x18); + +struct WUT_PACKED NetConfEthCfg { + NetConfEthCfgSpeed speed; + NetConfEthCfgDuplex duplex; + NetConfEthCfgNegotiation negotiation; + WUT_PADDING_BYTES(2); +}; +WUT_CHECK_OFFSET(NetConfEthCfg, 0x00, speed); +WUT_CHECK_OFFSET(NetConfEthCfg, 0x02, duplex); +WUT_CHECK_OFFSET(NetConfEthCfg, 0x04, negotiation); +WUT_CHECK_SIZE(NetConfEthCfg, 0x8); + +struct NetConfIPv4Info { + NetConfIPv4Mode mode; + uint32_t addr; + uint32_t netmask; + uint32_t nexthop; // gateway + uint32_t ns1; // dns 1 + uint32_t ns2; // dns 2 +}; +WUT_CHECK_SIZE(NetConfIPv4Info, 0x18); + +struct NetConfMACAddr { + uint8_t MACAddr[0x6]; +}; +WUT_CHECK_SIZE(NetConfMACAddr, 0x6); + +struct NetConfProxyConfig { + NetConfProxyStatus use_proxy; // true/false + uint16_t port; + WUT_UNKNOWN_BYTES(0x02); + NetConfProxyAuthType auth_type; + char host[0x80]; + char username[0x80]; // only 0x20 bytes usable + char password[0x40]; // only 0x20 bytes usable + char noproxy_hosts[0x80]; // not used +}; +WUT_CHECK_SIZE(NetConfProxyConfig, 0x1c8); + +struct NetConfValidFlags { + WUT_UNKNOWN_BYTES(0x18); +}; +WUT_CHECK_SIZE(NetConfValidFlags, 0x18); + +struct WUT_PACKED NetConfWifiConfigDataPrivacy { + NetConfWifiPrivacyMode mode; + WUT_PADDING_BYTES(2); + uint16_t aes_key_len; + uint8_t aes_key[0x40]; + WUT_PADDING_BYTES(2); +}; +WUT_CHECK_OFFSET(NetConfWifiConfigDataPrivacy, 0x00, mode); +WUT_CHECK_OFFSET(NetConfWifiConfigDataPrivacy, 0x04, aes_key_len); +WUT_CHECK_OFFSET(NetConfWifiConfigDataPrivacy, 0x06, aes_key); +WUT_CHECK_SIZE(NetConfWifiConfigDataPrivacy, 0x48); + +struct WUT_PACKED NetConfWifiConfigData { + uint8_t ssid[0x20]; + uint16_t ssidlength; + WUT_PADDING_BYTES(2); + NetConfWifiConfigDataPrivacy privacy; +}; +WUT_CHECK_OFFSET(NetConfWifiConfigData, 0x00, ssid); +WUT_CHECK_OFFSET(NetConfWifiConfigData, 0x20, ssidlength); +WUT_CHECK_OFFSET(NetConfWifiConfigData, 0x24, privacy); +WUT_CHECK_SIZE(NetConfWifiConfigData, 0x6C); + +struct NetConfWifiConfig { + uint16_t config_method; + WUT_PADDING_BYTES(2); + NetConfWifiConfigData config; +}; +WUT_CHECK_SIZE(NetConfWifiConfig, 0x70); + +struct NetConfOpt { + WUT_UNKNOWN_BYTES(0x2c1); +}; +WUT_CHECK_SIZE(NetConfOpt, 0x2c1); + +struct WUT_PACKED NetConfInterface { + uint16_t if_index; + uint16_t if_sate; + uint32_t if_mtu; + NetConfIPv4Info ipv4Info; +}; +WUT_CHECK_OFFSET(NetConfInterface, 0x00, if_index); +WUT_CHECK_OFFSET(NetConfInterface, 0x02, if_sate); +WUT_CHECK_OFFSET(NetConfInterface, 0x04, if_mtu); +WUT_CHECK_OFFSET(NetConfInterface, 0x08, ipv4Info); +WUT_CHECK_SIZE(NetConfInterface, 0x20); + +struct NetConfCfg { + NetConfInterface wl0; + NetConfWifiConfig wifi; + NetConfInterface eth0; + NetConfEthCfg ethCfg; + NetConfProxyConfig proxy; +}; +WUT_CHECK_OFFSET(NetConfCfg, 0x0, wl0); +WUT_CHECK_OFFSET(NetConfCfg, 0x20, wifi); +WUT_CHECK_OFFSET(NetConfCfg, 0x90, eth0); +WUT_CHECK_OFFSET(NetConfCfg, 0xB0, ethCfg); +WUT_CHECK_OFFSET(NetConfCfg, 0xB8, proxy); +WUT_CHECK_SIZE(NetConfCfg, 0x280); + +struct WUT_PACKED NetConfAOSSConfig { + NetConfWifiConfigData config[4]; +}; +WUT_CHECK_SIZE(NetConfAOSSConfig, 0x1b0); + +struct NetConfIfState { + uint16_t if_state; + NetConfLinkState linkstate; + NetConfOperState operstate; + WUT_PADDING_BYTES(2); +}; +WUT_CHECK_SIZE(NetConfIfState, 0x8); + +int +netconf_init(); + +int +netconf_close(); + +int +netconf_delete_profile(NetConfProfile id); + +int +netconf_get_all_profile_state(NetConfAllProfileState *state); + +/** + * Returns the currently used IP address of the console if the given interface matches + * the used interface. + */ +int +netconf_get_assigned_address(NetConfInterfaceType interface, + uint32_t *assignedAddress); + +/** + * Returns the currently used DNS of the console if the given interface matches + * the used interface. + */ +int +netconf_get_assigned_dns(NetConfInterfaceType interface, + uint32_t *dns1, + uint32_t *dns2); + +/** + * Returns the currently used gateway of the console if the given interface matches + * the used interface. + */ +int +netconf_get_assigned_gateway(NetConfInterfaceType unk1, + uint32_t *gateway); + +/** + * Returns the currently used subnet of the console if the given interface matches + * the used interface. + */ +int +netconf_get_assigned_subnet(NetConfInterfaceType unk1, + uint32_t *subnet); + +/** + * Returns the manually set DNS servers of the loaded config if the given + * interface matches the used interface. + */ +int +netconf_get_dns(NetConfInterfaceType unk1, + uint32_t *dns1, + uint32_t *dns2); + +int +netconf_get_eth_cfg(NetConfEthCfg *outCfg); + +NetConfAdminState +netconf_get_if_adminstate(NetConfInterfaceType interface); + +/** + * Returns the WIFI IPv4 Info of the loaded config + */ +int +netconf_get_if_ipv4_info(NetConfIPv4Info *info); + +/** + * Returns the IPv4 Info of the loaded config for the given interface + */ +int +netconf_get_if_ipv4_info_ex(NetConfInterfaceType interface, NetConfIPv4Info *info); + +NetConfLinkState +netconf_get_if_linkstate(NetConfInterfaceType interface); + +int +netconf_get_if_macaddr(NetConfInterfaceType interface, + NetConfMACAddr *info); + +NetConfOperState +netconf_get_if_operstate(NetConfInterfaceType interface); + +int +netconf_get_ifstate(NetConfInterfaceType interface, NetConfIfState *ifState); + +int +netconf_get_interface_mtu(NetConfInterfaceType NetConfInterfaceType, uint32_t *mtu); + +int +netconf_get_last_wifi_link_error(uint32_t *lastError); + +int +netconf_get_profile_state(NetConfInterfaceType interface, + uint32_t *profileState); + +int +netconf_get_proxy_config(NetConfProxyConfig *proxyConfig); + +/** + * Return the current NetConfCfg + */ +int +netconf_get_running(NetConfCfg *running); + +/** + * Gets the default profileId + */ +int +netconf_get_startup_profile_id(); + +int +netconf_get_valid_flags(NetConfValidFlags *validFlags); + +int +netconf_get_wifi_cfg(NetConfWifiConfig *wifiConfig); + +/** + * Not implemented on IOSU side + */ +int +netconf_getopt(uint16_t unk1, + NetConfOpt *buffer, + uint32_t *bufferSize); + +/** + * Read a profile into memory without using it. + */ +int +netconf_nv_read(NetConfProfile profileId, + NetConfCfg *data); + +/** + * Write a profile from buffer. + */ +int +netconf_nv_write(NetConfProfile profileId, + NetConfCfg *data); + +/** + * Load a profile into memory and use it. + */ +int +netconf_nv_load(NetConfProfile profileId); + +/** + * Save the loaded profile from memory into a profile + */ +int +netconf_nv_store(NetConfProfile profileId); + +int +netconf_read_aoss_config(NetConfProfile profileId, + NetConfAOSSConfig *data); + +int +netconf_write_aoss_config(NetConfProfile profileId, + NetConfAOSSConfig *data); + +int +netconf_read_compat_profile_id(uint32_t *outProfileId); + + +int +netconf_set_dns(NetConfInterfaceType interface, + uint32_t *dns1, + uint32_t *dns2); + +int +netconf_set_eth_cfg(NetConfEthCfg *config); + +int +netconf_set_if_admin_state(NetConfInterfaceType interface, + NetConfAdminStateEnum unk2); + +int +netconf_set_if_ipv4_info(NetConfIPv4Info *info); + +int +netconf_set_if_ipv4_info_ex(NetConfInterfaceType interface, + NetConfIPv4Info *info); + +int +netconf_set_interface_mtu(NetConfInterfaceType interface, + uint32_t mtu); + +int +netconf_set_proxy_config(NetConfProxyConfig *config); + +int +netconf_set_running(NetConfCfg *config); + +/** + * Sets the default profileId + */ +int +netconf_set_startup_profile_id(uint32_t profileId); + +int +netconf_set_valid_flag(uint32_t unk1, + uint32_t unk2); + +int +netconf_set_wifi_cfg(NetConfWifiConfig *config); + + +/** + * DEBUG mode only + */ +int +netconf_setopt(uint16_t unk1, + NetConfOpt *buffer, + uint32_t *bufferSize); + +int +netconf_write_compat_profile_id(uint32_t unk1); + +#ifdef __cplusplus +} +#endif + +/** @} */ \ No newline at end of file diff --git a/tests/test_compile_headers_common/test_compile_headers_list.h b/tests/test_compile_headers_common/test_compile_headers_list.h index e59e7ba4..9e68eabc 100644 --- a/tests/test_compile_headers_common/test_compile_headers_list.h +++ b/tests/test_compile_headers_common/test_compile_headers_list.h @@ -111,6 +111,7 @@ #include #include #include +#include #include #include #include