aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/udp/dns.c
diff options
context:
space:
mode:
authorMichael Brown <mcb30@etherboot.org>2007-07-05 18:38:14 +0100
committerMichael Brown <mcb30@etherboot.org>2007-07-05 18:38:14 +0100
commit1567b698958cccde4c32e554ef56df7add3a06f6 (patch)
tree208ea71016215b02fab90b835428568543619302 /src/net/udp/dns.c
parentd64e1be1f8ac01dce56ec0a230d2e261559bcad9 (diff)
downloadipxe-1567b698958cccde4c32e554ef56df7add3a06f6.tar.gz
Add concept of DHCP option applicators.
Diffstat (limited to 'src/net/udp/dns.c')
-rw-r--r--src/net/udp/dns.c23
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,
+};