diff options
| author | Michael Brown | 2007-01-18 22:22:03 +0100 |
|---|---|---|
| committer | Michael Brown | 2007-01-18 22:22:03 +0100 |
| commit | 075f8144ff4383c148be33744ed493fe30b5f53d (patch) | |
| tree | 3f40d625cd944554b2e03e5d298d70848c5d7667 /src | |
| parent | Use total free memory as advertised window. This seems to be sufficient (diff) | |
| download | ipxe-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')
| -rw-r--r-- | src/include/gpxe/dns.h | 2 | ||||
| -rw-r--r-- | src/net/udp/dns.c | 28 |
2 files changed, 18 insertions, 12 deletions
diff --git a/src/include/gpxe/dns.h b/src/include/gpxe/dns.h index 234517ffb..fca3a7a35 100644 --- a/src/include/gpxe/dns.h +++ b/src/include/gpxe/dns.h @@ -109,6 +109,8 @@ struct dns_request { struct retry_timer timer; }; +extern struct in_addr nameserver; + extern int dns_resolv ( const char *name, struct sockaddr *sa, struct async *parent ); 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; |
