diff options
author | Michael Brown <mcb30@etherboot.org> | 2007-06-28 21:22:25 +0100 |
---|---|---|
committer | Michael Brown <mcb30@etherboot.org> | 2007-06-28 21:22:25 +0100 |
commit | c73bff7ae5053da239c1fd2a9fdef7ac6b555bbb (patch) | |
tree | 7224f1bcc1f68381d5767dd307cebace6153ecc9 /src | |
parent | 82a873546a93b1a8488309a2ca37c644c2205cf9 (diff) | |
download | ipxe-c73bff7ae5053da239c1fd2a9fdef7ac6b555bbb.zip ipxe-c73bff7ae5053da239c1fd2a9fdef7ac6b555bbb.tar.gz ipxe-c73bff7ae5053da239c1fd2a9fdef7ac6b555bbb.tar.bz2 |
Set current working URI based on TFTP server specified by DHCP.
Diffstat (limited to 'src')
-rw-r--r-- | src/net/udp/dhcp.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/net/udp/dhcp.c b/src/net/udp/dhcp.c index dc826b8..fc0be37 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; } |