//--// #if defined(ADS_LINKER_BUG__NOT_ALL_UNUSED_VARIABLES_ARE_REMOVED) #pragma arm section zidata = "g_NetworkConfig_pcm023" #endif NETWORK_CONFIG g_NetworkConfig = { { TRUE }, 1, // interface count { { SOCK_NETWORKCONFIGURATION_FLAGS_DHCP, /*flags to enable wireless bitwise OR this value with SOCK_NETWORKCONFIGURATION_FLAGS_TYPE__set(SOCK_NETWORKCONFIGURATION_FLAGS_WIRELESS)*/ SOCK_MAKE_IP_ADDR_LITTLEEND(192,168, 5,100), /*ip address */ SOCK_MAKE_IP_ADDR_LITTLEEND(255,255,255, 0), /*subnet mask*/ SOCK_MAKE_IP_ADDR_LITTLEEND(192,168, 5, 1), /*gateway */ SOCK_MAKE_IP_ADDR_LITTLEEND( 0, 0, 0, 0), /*dns1 */ SOCK_MAKE_IP_ADDR_LITTLEEND( 0, 0, 0, 0), /*dns2 */ SOCK_NETWORKCONFIGURATION_INTERFACETYPE_ETHERNET, /* Change to SOCK_NETWORKCONFIGURATION_INTERFACETYPE_WIRELESS_80211 for wireless */ 6, /*mac address length*/ { /*mac address*/ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, } }, }, };
//--// #if defined(ADS_LINKER_BUG__NOT_ALL_UNUSED_VARIABLES_ARE_REMOVED) #pragma arm section zidata = "g_NetworkConfig_Gadgeteer" #endif NETWORK_CONFIG g_NetworkConfig = { { TRUE }, 1, // interface count { { SOCK_NETWORKCONFIGURATION_FLAGS_DHCP, /*flags to enable wireless bitwise OR this value with SOCK_NETWORKCONFIGURATION_FLAGS_TYPE__set(SOCK_NETWORKCONFIGURATION_FLAGS_WIRELESS)*/ SOCK_MAKE_IP_ADDR_LITTLEEND( 0, 0, 0, 0), /*ip address */ SOCK_MAKE_IP_ADDR_LITTLEEND( 0, 0, 0, 0), /*subnet mask*/ SOCK_MAKE_IP_ADDR_LITTLEEND( 0, 0, 0, 0), /*gateway */ SOCK_MAKE_IP_ADDR_LITTLEEND( 0, 0, 0, 0), /*dns1 */ SOCK_MAKE_IP_ADDR_LITTLEEND( 0, 0, 0, 0), /*dns2 */ SOCK_NETWORKCONFIGURATION_INTERFACETYPE_ETHERNET, /* Change to SOCK_NETWORKCONFIGURATION_INTERFACETYPE_WIRELESS_80211 for wireless */ 6, /*mac address length*/ { /*mac address*/ 0x00, 0x04, 0xA3, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, } }, }, };
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include <tinyhal.h> //--// NETWORK_CONFIG g_NetworkConfig = { { TRUE }, 1, // interface count { // ENC28J60 chip { SOCK_NETWORKCONFIGURATION_FLAGS_DHCP | SOCK_NETWORKCONFIGURATION_FLAGS_TYPE__set(SOCK_NETWORKCONFIGURATION_FLAGS_WIRELESS), SOCK_MAKE_IP_ADDR_LITTLEEND(192,168, 0, 200), SOCK_MAKE_IP_ADDR_LITTLEEND(255,255,255, 0), SOCK_MAKE_IP_ADDR_LITTLEEND(192,168, 0, 1), SOCK_MAKE_IP_ADDR_LITTLEEND( 0, 0, 0, 0), SOCK_MAKE_IP_ADDR_LITTLEEND( 0, 0, 0, 0), SOCK_NETWORKCONFIGURATION_INTERFACETYPE_ETHERNET, /* Change to SOCK_NETWORKCONFIGURATION_INTERFACETYPE_WIRELESS_80211 for wireless */ 6, { 0x00, 0x04, 0xA2, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, } }, }, };
HRESULT RTIP_SOCKETS_Driver::UpdateAdapterConfiguration( UINT32 interfaceIndex, UINT32 updateFlags, SOCK_NetworkConfiguration* config ) { NATIVE_PROFILE_PAL_NETWORK(); if(interfaceIndex >= NETWORK_INTERFACE_COUNT) { return CLR_E_INVALID_PARAMETER; } BOOL fEnableDhcp = (0 != (config->flags & SOCK_NETWORKCONFIGURATION_FLAGS_DHCP)); if(0 != (updateFlags & SOCK_NETWORKCONFIGURATION_UPDATE_DHCP)) { if(fEnableDhcp) { DHCP_conf reg_conf; memset(®_conf, 0, sizeof(reg_conf)); memset(&g_RTIP_SOCKETS_Driver.m_interfaces[interfaceIndex].m_currentDhcpSession, 0, sizeof(DHCP_session)); xn_dhcp_init_conf(®_conf); g_RTIP_SOCKETS_Driver.m_interfaces[interfaceIndex].m_currentDhcpSession.packet_style = DHCP_MICROSOFT; if (SOCK_SOCKET_ERROR == xn_dhcp(g_RTIP_SOCKETS_Driver.m_interfaces[interfaceIndex].m_interfaceNumber, &g_RTIP_SOCKETS_Driver.m_interfaces[interfaceIndex].m_currentDhcpSession, ®_conf)) { DEBUG_HANDLE_SOCKET_ERROR("update cfg: xn_dhcp", FALSE); return CLR_E_FAIL; } } else { if(SOCK_SOCKET_ERROR == rtp_net_set_ip(g_RTIP_SOCKETS_Driver.m_interfaces[interfaceIndex].m_interfaceNumber, (RTP_PFUINT8)&config->ipaddr, (RTP_PFUINT8)&config->subnetmask)) { DEBUG_HANDLE_SOCKET_ERROR("update cfg: rtp_net_set_ip", FALSE); return CLR_E_FAIL; } UINT32 destMask = SOCK_MAKE_IP_ADDR_LITTLEEND(0,0,0,0); if(SOCK_SOCKET_ERROR == xn_rt_add((RTP_PFUINT8)RT_DEFAULT, (RTP_PFUINT8)&destMask, (RTP_PFUINT8)&config->gateway, RT_USEIFACEMETRIC, g_RTIP_SOCKETS_Driver.m_interfaces[interfaceIndex].m_interfaceNumber, RT_INF)) { DEBUG_HANDLE_SOCKET_ERROR("update cfg: xn_rt_add", FALSE); return FALSE; } } } if(fEnableDhcp) { if(0 != (updateFlags & SOCK_NETWORKCONFIGURATION_UPDATE_DHCP_RELEASE)) { if(g_RTIP_SOCKETS_Driver.m_interfaces[interfaceIndex].m_currentDhcpSession.client_ip != 0) { if(SOCK_SOCKET_ERROR == xn_dhcp_release(&g_RTIP_SOCKETS_Driver.m_interfaces[interfaceIndex].m_currentDhcpSession)) { DEBUG_HANDLE_SOCKET_ERROR("update cfg: xn_dhcp_release", FALSE); /*return CLR_E_FAIL;*/ } } memset(&g_RTIP_SOCKETS_Driver.m_interfaces[interfaceIndex].m_currentDhcpSession, 0, sizeof(DHCP_session)); } if(0 != (updateFlags & SOCK_NETWORKCONFIGURATION_UPDATE_DHCP_RENEW)) { DHCP_conf reg_conf; xn_dhcp_init_conf(®_conf); g_RTIP_SOCKETS_Driver.m_interfaces[interfaceIndex].m_currentDhcpSession.packet_style = DHCP_MICROSOFT; if (SOCK_SOCKET_ERROR == xn_dhcp(g_RTIP_SOCKETS_Driver.m_interfaces[interfaceIndex].m_interfaceNumber, &g_RTIP_SOCKETS_Driver.m_interfaces[interfaceIndex].m_currentDhcpSession, ®_conf)) { DEBUG_HANDLE_SOCKET_ERROR("update cfg: xn_dhcp", FALSE); return CLR_E_FAIL; } } } // when using DHCP do not use the static settings else if(0 != (updateFlags & SOCK_NETWORKCONFIGURATION_UPDATE_DNS)) { if(config->dnsServer1 != 0 || config->dnsServer2 != 0) { xn_set_server_list( NULL, 0); // add the DNS servers of the config if( config->dnsServer1 != 0) { RTP_PFCUINT8 dns1 = (RTP_PFCUINT8)&(config->dnsServer1); if (SOCK_SOCKET_ERROR == xn_add_dns_server( dns1 )) { DEBUG_HANDLE_SOCKET_ERROR("update cfg: xn_add_dns_server(1)", FALSE); } } if( config->dnsServer2 != 0) { RTP_PFCUINT8 dns2 = (RTP_PFCUINT8)&(config->dnsServer2); if (SOCK_SOCKET_ERROR == xn_add_dns_server( dns2 )) { DEBUG_HANDLE_SOCKET_ERROR("update cfg: xn_add_dns_server(2)", FALSE); } } } } if(0 != (updateFlags & SOCK_NETWORKCONFIGURATION_UPDATE_MAC)) { // mac address requires stack re-init Network_Uninitialize(); Network_Initialize(); } if(0 != (config->flags & SOCK_NETWORKCONFIGURATION_FLAGS_DYNAMIC_DNS)) { // the rtip stack doesn't support dynamic dns return CLR_E_NOT_SUPPORTED; } return S_OK; }