summaryrefslogtreecommitdiffstats
path: root/src/net
diff options
context:
space:
mode:
authorMichael Brown2007-01-18 22:22:03 +0100
committerMichael Brown2007-01-18 22:22:03 +0100
commit075f8144ff4383c148be33744ed493fe30b5f53d (patch)
tree3f40d625cd944554b2e03e5d298d70848c5d7667 /src/net
parentUse total free memory as advertised window. This seems to be sufficient (diff)
downloadipxe-075f8144ff4383c148be33744ed493fe30b5f53d.tar.gz
ipxe-075f8144ff4383c148be33744ed493fe30b5f53d.tar.xz
ipxe-075f8144ff4383c148be33744ed493fe30b5f53d.zip
Have DHCP set the nameserver, rather than DNS read the DHCP nameserver
value.
Diffstat (limited to 'src/net')
-rw-r--r--src/net/udp/dns.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/net/udp/dns.c b/src/net/udp/dns.c
index c63679044..872e3b296 100644
--- a/src/net/udp/dns.c
+++ b/src/net/udp/dns.c
@@ -26,7 +26,6 @@
#include <byteswap.h>
#include <gpxe/async.h>
#include <gpxe/udp.h>
-#include <gpxe/dhcp.h>
#include <gpxe/dns.h>
/** @file
@@ -35,6 +34,9 @@
*
*/
+/* The DNS server */
+struct in_addr nameserver = { INADDR_NONE };
+
/**
* Compare DNS reply name against the query name from the original request
*
@@ -51,7 +53,7 @@ static int dns_name_cmp ( struct dns_request *dns, struct dns_header *reply,
while ( 1 ) {
/* Obtain next section of rname */
- while ( ( *rname ) & 0xc0 ) {
+ while ( ( *rname ) & 0xc0 ) {
rname = ( ( ( char * ) reply ) +
( ntohs( *((uint16_t *)rname) ) & ~0xc000 ));
}
@@ -402,16 +404,18 @@ static struct async_operations dns_async_operations = {
/**
* Resolve name using DNS
*
+ * @v name Host name to resolve
+ * @v sa Socket address to fill in
+ * @v parent Parent asynchronous operation
+ * @ret rc Return status code
*/
int dns_resolv ( const char *name, struct sockaddr *sa,
struct async *parent ) {
struct dns_request *dns;
- struct dhcp_option *option;
union {
struct sockaddr_tcpip st;
struct sockaddr_in sin;
- } nameserver;
-
+ } server;
int rc;
/* Allocate DNS structure */
@@ -435,20 +439,20 @@ int dns_resolv ( const char *name, struct sockaddr *sa,
dns->qinfo->qclass = htons ( DNS_CLASS_IN );
/* Identify nameserver */
- memset ( &nameserver, 0, sizeof ( nameserver ) );
- nameserver.sin.sin_family = AF_INET;
- nameserver.sin.sin_port = htons ( DNS_PORT );
- if ( ! ( option = find_global_dhcp_option ( DHCP_DNS_SERVERS ) ) ) {
+ memset ( &server, 0, sizeof ( server ) );
+ server.sin.sin_family = AF_INET;
+ server.sin.sin_port = htons ( DNS_PORT );
+ server.sin.sin_addr = nameserver;
+ if ( server.sin.sin_addr.s_addr == INADDR_NONE ) {
DBGC ( dns, "DNS %p no name servers\n", dns );
rc = -ENXIO;
goto err;
}
- dhcp_ipv4_option ( option, &nameserver.sin.sin_addr );
/* Open UDP connection */
DBGC ( dns, "DNS %p using nameserver %s\n", dns,
- inet_ntoa ( nameserver.sin.sin_addr ) );
- udp_connect ( &dns->udp, &nameserver.st );
+ inet_ntoa ( server.sin.sin_addr ) );
+ udp_connect ( &dns->udp, &server.st );
if ( ( rc = udp_open ( &dns->udp, 0 ) ) != 0 )
goto err;