#include <string.h>#include <gpxe/dhcp.h>#include <gpxe/netdevice.h>#include <undipreload.h>#include <pxeparent.h>#include <realmode.h>#include <pxe_api.h>Go to the source code of this file.
Functions | |
| FILE_LICENCE (GPL2_OR_LATER) | |
| void __weak_impl() | get_cached_dhcpack (void) |
| Present cached DHCP packet if it exists. | |
| FILE_LICENCE | ( | GPL2_OR_LATER | ) |
| void __weak_impl() get_cached_dhcpack | ( | void | ) |
Present cached DHCP packet if it exists.
Definition at line 32 of file pxeparent_dhcp.c.
References s_PXENV_GET_CACHED_INFO::Buffer, s_PXENV_GET_CACHED_INFO::BufferSize, DBG, undi_device::entry, undi_device::flags, memset(), s_SEGOFF16::offset, s_PXENV_GET_CACHED_INFO::PacketType, preloaded_undi, PXENV_GET_CACHED_INFO, PXENV_PACKET_TYPE_DHCP_ACK, pxeparent_call(), real_to_user(), s_SEGOFF16::segment, store_cached_dhcpack(), strerror(), and UNDI_FL_KEEP_ALL.
Referenced by start_dhcp().
00032 { 00033 struct undi_device *undi; 00034 struct s_PXENV_GET_CACHED_INFO get_cached_info; 00035 int rc; 00036 00037 /* Use preloaded UNDI device to get at PXE entry point */ 00038 undi = &preloaded_undi; 00039 if ( ! undi->entry.segment ) { 00040 DBG ( "PXEDHCP no preloaded UNDI device found\n" ); 00041 return; 00042 } 00043 00044 /* Check that stack is available to get cached info */ 00045 if ( ! ( undi->flags & UNDI_FL_KEEP_ALL ) ) { 00046 DBG ( "PXEDHCP stack was unloaded, no cache available\n" ); 00047 return; 00048 } 00049 00050 /* Obtain cached DHCP packet */ 00051 memset ( &get_cached_info, 0, sizeof ( get_cached_info ) ); 00052 get_cached_info.PacketType = PXENV_PACKET_TYPE_DHCP_ACK; 00053 00054 if ( ( rc = pxeparent_call ( undi->entry, PXENV_GET_CACHED_INFO, 00055 &get_cached_info, 00056 sizeof ( get_cached_info ) ) ) != 0 ) { 00057 DBG ( "PXEDHCP GET_CACHED_INFO failed: %s\n", strerror ( rc ) ); 00058 return; 00059 } 00060 00061 DBG ( "PXEDHCP got cached info at %04x:%04x length %d\n", 00062 get_cached_info.Buffer.segment, get_cached_info.Buffer.offset, 00063 get_cached_info.BufferSize ); 00064 00065 /* Present cached DHCP packet */ 00066 store_cached_dhcpack ( real_to_user ( get_cached_info.Buffer.segment, 00067 get_cached_info.Buffer.offset ), 00068 get_cached_info.BufferSize ); 00069 }
1.5.7.1