Added dhcp_ipv4_option() and friends.

Added test code to configure the interface for IPv4 after DHCP.
This commit is contained in:
Michael Brown
2006-07-20 02:49:59 +00:00
parent 6a0b4c9772
commit 00a1f000b1
3 changed files with 102 additions and 1 deletions

View File

@@ -24,6 +24,7 @@
#include <assert.h>
#include <vsprintf.h>
#include <gpxe/list.h>
#include <gpxe/in.h>
#include <gpxe/dhcp.h>
/** @file
@@ -85,6 +86,21 @@ unsigned long dhcp_num_option ( struct dhcp_option *option ) {
return value;
}
/**
* Obtain value of an IPv4-address DHCP option
*
* @v option DHCP option, or NULL
* @v inp IPv4 address to fill in
*
* Parses the IPv4 address value from a DHCP option, if present. It
* is permitted to call dhcp_ipv4_option() with @c option set to NULL;
* in this case the address will be set to 0.0.0.0.
*/
void dhcp_ipv4_option ( struct dhcp_option *option, struct in_addr *inp ) {
if ( option )
*inp = option->data.in;
}
/**
* Calculate length of a normal DHCP option
*
@@ -460,6 +476,45 @@ unsigned long find_global_dhcp_num_option ( unsigned int tag ) {
return dhcp_num_option ( find_global_dhcp_option ( tag ) );
}
/**
* Find DHCP IPv4-address option, and return its value
*
* @v options DHCP options block
* @v tag DHCP option tag to search for
* @v inp IPv4 address to fill in
* @ret value Numerical value of the option, or 0 if not found
*
* This function exists merely as a notational shorthand for a call to
* find_dhcp_option() followed by a call to dhcp_ipv4_option(). It is
* not possible to distinguish between the cases "option not found"
* and "option has a value of 0.0.0.0" using this function; if this
* matters to you then issue the two constituent calls directly and
* check that find_dhcp_option() returns a non-NULL value.
*/
void find_dhcp_ipv4_option ( struct dhcp_option_block *options,
unsigned int tag, struct in_addr *inp ) {
dhcp_ipv4_option ( find_dhcp_option ( options, tag ), inp );
}
/**
* Find DHCP IPv4-address option, and return its value
*
* @v options DHCP options block
* @v tag DHCP option tag to search for
* @v inp IPv4 address to fill in
* @ret value Numerical value of the option, or 0 if not found
*
* This function exists merely as a notational shorthand for a call to
* find_dhcp_option() followed by a call to dhcp_ipv4_option(). It is
* not possible to distinguish between the cases "option not found"
* and "option has a value of 0.0.0.0" using this function; if this
* matters to you then issue the two constituent calls directly and
* check that find_dhcp_option() returns a non-NULL value.
*/
void find_global_dhcp_ipv4_option ( unsigned int tag, struct in_addr *inp ) {
dhcp_ipv4_option ( find_global_dhcp_option ( tag ), inp );
}
/**
* Delete DHCP option
*