summaryrefslogtreecommitdiffstats
path: root/src/net/udp/dhcp.c
diff options
context:
space:
mode:
authorMichael Brown2007-06-28 22:22:25 +0200
committerMichael Brown2007-06-28 22:22:25 +0200
commitc73bff7ae5053da239c1fd2a9fdef7ac6b555bbb (patch)
tree7224f1bcc1f68381d5767dd307cebace6153ecc9 /src/net/udp/dhcp.c
parentCurrent bochs has a 128kB BIOS, not 64kB (diff)
downloadipxe-c73bff7ae5053da239c1fd2a9fdef7ac6b555bbb.tar.gz
ipxe-c73bff7ae5053da239c1fd2a9fdef7ac6b555bbb.tar.xz
ipxe-c73bff7ae5053da239c1fd2a9fdef7ac6b555bbb.zip
Set current working URI based on TFTP server specified by DHCP.
Diffstat (limited to 'src/net/udp/dhcp.c')
-rw-r--r--src/net/udp/dhcp.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/net/udp/dhcp.c b/src/net/udp/dhcp.c
index dc826b81..fc0be374 100644
--- a/src/net/udp/dhcp.c
+++ b/src/net/udp/dhcp.c
@@ -18,6 +18,7 @@
#include <string.h>
#include <stdlib.h>
+#include <stdio.h>
#include <errno.h>
#include <assert.h>
#include <byteswap.h>
@@ -29,6 +30,7 @@
#include <gpxe/retry.h>
#include <gpxe/tcpip.h>
#include <gpxe/ip.h>
+#include <gpxe/uri.h>
#include <gpxe/dhcp.h>
/** @file
@@ -857,6 +859,9 @@ int dhcp_configure_netdev ( struct net_device *netdev,
struct in_addr netmask = { 0 };
struct in_addr gateway = { INADDR_NONE };
struct sockaddr_in *sin_nameserver;
+ struct in_addr tftp_server;
+ struct uri *uri;
+ char uri_string[32];
int rc;
/* Clear any existing routing table entry */
@@ -883,5 +888,15 @@ int dhcp_configure_netdev ( struct net_device *netdev,
find_dhcp_ipv4_option ( options, DHCP_LOG_SERVERS,
&syslogserver );
+ /* Set current working URI based on TFTP server */
+ find_dhcp_ipv4_option ( options, DHCP_EB_SIADDR, &tftp_server );
+ snprintf ( uri_string, sizeof ( uri_string ),
+ "tftp://%s/", inet_ntoa ( tftp_server ) );
+ uri = parse_uri ( uri_string );
+ if ( ! uri )
+ return -ENOMEM;
+ churi ( uri );
+ uri_put ( uri );
+
return 0;
}