void w5500_dhcp_assign() { S2E_Packet *value = get_S2E_Packet_pointer(); wiz_NetInfo gWIZNETINFO; getIPfromDHCP(gWIZNETINFO.ip); getGWfromDHCP(gWIZNETINFO.gw); getSNfromDHCP(gWIZNETINFO.sn); getDNSfromDHCP(gWIZNETINFO.dns); get_S2E_Packet_value(gWIZNETINFO.mac, value->network_info_common.mac, sizeof(gWIZNETINFO.mac[0]) * 6); set_S2E_Packet_value(value->network_info_common.local_ip, gWIZNETINFO.ip, sizeof(value->network_info_common.local_ip)); set_S2E_Packet_value(value->network_info_common.gateway, gWIZNETINFO.gw, sizeof(value->network_info_common.gateway)); set_S2E_Packet_value(value->network_info_common.subnet, gWIZNETINFO.sn, sizeof(value->network_info_common.subnet)); set_S2E_Packet_value(value->options.dns_server_ip, gWIZNETINFO.dns, sizeof(value->options.dns_server_ip)); if(value->options.dhcp_use) gWIZNETINFO.dhcp = NETINFO_DHCP; else gWIZNETINFO.dhcp = NETINFO_STATIC; ctlnetwork(CN_SET_NETINFO, (void*) &gWIZNETINFO); // display_Net_Info(); // printf("DHCP LEASED TIME : %d sec. \r\n", getDHCPLeasetime()); }
void set_S2E_Packet(wiz_NetInfo *net) { set_S2E_Packet_value(s2e_packet.network_info_common.mac, net->mac, sizeof(s2e_packet.network_info_common.mac)); set_S2E_Packet_value(s2e_packet.network_info_common.local_ip, net->ip, sizeof(s2e_packet.network_info_common.local_ip)); set_S2E_Packet_value(s2e_packet.network_info_common.gateway, net->gw, sizeof(s2e_packet.network_info_common.gateway)); set_S2E_Packet_value(s2e_packet.network_info_common.subnet, net->sn, sizeof(s2e_packet.network_info_common.subnet)); set_S2E_Packet_value(s2e_packet.options.dns_server_ip, net->dns, sizeof(s2e_packet.options.dns_server_ip)); if(net->dhcp == NETINFO_STATIC) s2e_packet.options.dhcp_use = 0; else s2e_packet.options.dhcp_use = 1; }
static void process_set_info(uint8_t sock, Remote_Info *remote_info, WIZnet_Header *wiznet_header) { uint16_t len; uint8_t buffer[sizeof(WIZnet_Header) + sizeof(WIZnet_Set_Info_Reply)]; uint32_t ptr; WIZnet_Set_Info set_info; WIZnet_Set_Info_Reply reply; S2E_Packet *s2e_packet = get_S2E_Packet_pointer(); uint8_t ip[4]; uint16_t port; getsockopt(sock, SO_REMAINSIZE, &len); if(len != wiznet_header->length) return; recvfrom(sock, (uint8_t *)&set_info, sizeof(WIZnet_Set_Info), ip, &port); if((wiznet_header->valid & 0x80)) decrypt((wiznet_header->valid & 0x7F), (uint8_t *)&set_info, len); if(memcmp(set_info.dst_mac_address, s2e_packet->network_info_common.mac, 6)) return; if(strcmp((char *)set_info.set_pw, (char *)s2e_packet->options.pw_setting)) return; //update config msg set_S2E_Packet_value(s2e_packet, &set_info.system_info, sizeof(S2E_Packet)); s2e_packet->fw_ver[0] = MAJOR_VER; s2e_packet->fw_ver[1] = MINOR_VER; s2e_packet->fw_ver[2] = MAINTENANCE_VER; //save to storage save_S2E_Packet_to_storage(); // reply wiznet_header->length = sizeof(WIZnet_Set_Info_Reply); wiznet_header->op_code[1] = WIZNET_REPLY; memcpy(reply.src_mac_address, s2e_packet->network_info_common.mac, 6); memcpy(&reply.system_info, s2e_packet, sizeof(S2E_Packet)); if((wiznet_header->valid & 0x80)) encrypt((wiznet_header->valid & 0x7F), (uint8_t *)&reply, sizeof(WIZnet_Set_Info_Reply)); ptr = 0; memcpy(buffer, wiznet_header, sizeof(WIZnet_Header)); ptr += sizeof(WIZnet_Header); memcpy(buffer + ptr, (void *)&reply, sizeof(WIZnet_Set_Info_Reply)); ptr += sizeof(WIZnet_Set_Info_Reply); if(wiznet_header->unicast == 0) { memset(remote_info->ip, 255, 4); } sendto(sock, buffer, ptr, remote_info->ip, remote_info->port); delay_cnt(100); NVIC_SystemReset(); }