diff options
author | Michael Brown <mcb30@etherboot.org> | 2007-07-05 18:38:14 +0100 |
---|---|---|
committer | Michael Brown <mcb30@etherboot.org> | 2007-07-05 18:38:14 +0100 |
commit | 1567b698958cccde4c32e554ef56df7add3a06f6 (patch) | |
tree | 208ea71016215b02fab90b835428568543619302 /src/net/udp/dns.c | |
parent | d64e1be1f8ac01dce56ec0a230d2e261559bcad9 (diff) | |
download | ipxe-1567b698958cccde4c32e554ef56df7add3a06f6.tar.gz |
Add concept of DHCP option applicators.
Diffstat (limited to 'src/net/udp/dns.c')
-rw-r--r-- | src/net/udp/dns.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/net/udp/dns.c b/src/net/udp/dns.c index ff28c7e0a..bd519a26e 100644 --- a/src/net/udp/dns.c +++ b/src/net/udp/dns.c @@ -30,6 +30,7 @@ #include <gpxe/resolv.h> #include <gpxe/retry.h> #include <gpxe/tcpip.h> +#include <gpxe/dhcp.h> #include <gpxe/dns.h> /** @file @@ -503,3 +504,25 @@ struct resolver dns_resolver __resolver ( RESOLV_NORMAL ) = { .name = "DNS", .resolv = dns_resolv, }; + +/** + * Apply DHCP nameserver option + * + * @v tag DHCP option tag + * @v option DHCP option + */ +static int apply_dhcp_nameserver ( unsigned int tag __unused, + struct dhcp_option *option ) { + struct sockaddr_in *sin_nameserver; + + sin_nameserver = ( struct sockaddr_in * ) &nameserver; + sin_nameserver->sin_family = AF_INET; + dhcp_ipv4_option ( option, &sin_nameserver->sin_addr ); + return 0; +} + +/** DHCP nameserver applicator */ +struct dhcp_option_applicator dhcp_nameserver_applicator __dhcp_applicator = { + .tag = DHCP_DNS_SERVERS, + .apply = apply_dhcp_nameserver, +}; |