/* Initialise the resolver. Open a socket and bind it to the address of the server. return -1 if something goes wrong, otherwise 0 */ int redboot_dns_res_init(void) { memset((char *)&server, 0, sizeof(server)); server.sin_len = sizeof(server); server.sin_family = AF_INET; server.sin_port = htons(DOMAIN_PORT); cyg_drv_mutex_init(&dns_mutex); #ifdef CYGSEM_REDBOOT_FLASH_CONFIG { ip_addr_t dns_ip; flash_get_config("dns_ip", &dns_ip, CONFIG_IP); if (dns_ip[0] == 0 && dns_ip[1] == 0 && dns_ip[2] == 0 && dns_ip[3] == 0) return -1; memcpy(&server.sin_addr, &dns_ip, sizeof(dns_ip)); /* server config is valid */ s = 0; } #else // Use static configuration set_dns(__Xstr(CYGPKG_REDBOOT_NETWORKING_DNS_IP)); #endif return 0; }
/* Initialise the resolver. Open a socket and bind it to the address of the server. return -1 if something goes wrong, otherwise 0 */ int redboot_dns_res_init(void) { #ifdef CYGPKG_REDBOOT_NETWORKING_DNS_FCONFIG_DOMAIN char *dns_domain = NULL; #endif memset((char *)&server, 0, sizeof(server)); server.sin_len = sizeof(server); server.sin_family = AF_INET; server.sin_port = htons(DOMAIN_PORT); cyg_drv_mutex_init(&dns_mutex); /* Set the default DNS domain first, so that it can be overwritten latter */ #ifdef CYGPKG_REDBOOT_NETWORKING_DNS_DEFAULT_DOMAIN setdomainname(__Xstr(CYGPKG_REDBOOT_NETWORKING_DNS_DEFAULT_DOMAIN), strlen(__Xstr(CYGPKG_REDBOOT_NETWORKING_DNS_DEFAULT_DOMAIN))); #endif /* Set the domain name from flash so that DHCP can later overwrite it. */ #ifdef CYGPKG_REDBOOT_NETWORKING_DNS_FCONFIG_DOMAIN flash_get_config("dns_domain", &dns_domain, CONFIG_STRING); if(dns_domain != NULL && dns_domain[0] != '\0') setdomainname(dns_domain, strlen(dns_domain)); #endif /* If we got a DNS server address from the DHCP/BOOTP, then use that address */ if ( __bootp_dns_set ) { memcpy(&server.sin_addr, &__bootp_dns_addr, sizeof(__bootp_dns_addr) ); #ifdef CYGPKG_REDBOOT_NETWORKING_DNS_DHCP_DOMAIN if(__bootp_dns_domain_set) setdomainname(__bootp_dns_domain, strlen(__bootp_dns_domain)); #endif /* server config is valid */ s = 0; } else { #ifdef CYGSEM_REDBOOT_FLASH_CONFIG { ip_addr_t dns_ip; flash_get_config("dns_ip", &dns_ip, CONFIG_IP); if (dns_ip[0] == 0 && dns_ip[1] == 0 && dns_ip[2] == 0 && dns_ip[3] == 0) return -1; memcpy(&server.sin_addr, &dns_ip, sizeof(dns_ip)); /* server config is valid */ s = 0; } #else // Use static configuration. If CYGPKG_REDBOOT_NETWORKING_DNS_IP // is valid s will set set as a side effect. set_dns(__Xstr(CYGPKG_REDBOOT_NETWORKING_DNS_IP)); #endif } return 0; }