diff options
Diffstat (limited to 'clients/net-snk/app/netlib/dhcp.c')
-rw-r--r-- | clients/net-snk/app/netlib/dhcp.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/clients/net-snk/app/netlib/dhcp.c b/clients/net-snk/app/netlib/dhcp.c index 8aa995e..8f27cf6 100644 --- a/clients/net-snk/app/netlib/dhcp.c +++ b/clients/net-snk/app/netlib/dhcp.c @@ -171,6 +171,7 @@ static uint32_t dhcp_siaddr_ip = 0; static int8_t dhcp_filename[256]; static int8_t dhcp_tftp_name[256]; +static char * response_buffer; /*>>>>>>>>>>>>>>>>>>>>>>>>>>>> IMPLEMENTATION <<<<<<<<<<<<<<<<<<<<<<<<<<<*/ @@ -186,7 +187,7 @@ static int8_t dhcp_tftp_name[256]; * NON ZERO - error condition occurs. */ int32_t -dhcp(int32_t boot_device, filename_ip_t * fn_ip, unsigned int retries) { +dhcp(int32_t boot_device, char *ret_buffer, filename_ip_t * fn_ip, unsigned int retries) { int i = (int) retries+1; uint8_t dhcp_tftp_mac[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; @@ -194,6 +195,7 @@ dhcp(int32_t boot_device, filename_ip_t * fn_ip, unsigned int retries) { strcpy((char *) dhcp_filename, ""); strcpy((char *) dhcp_tftp_name, ""); + response_buffer = ret_buffer; dhcp_device_socket = boot_device; memcpy(dhcp_own_mac, fn_ip -> own_mac, 6); @@ -802,6 +804,13 @@ handle_dhcp(uint8_t * packet, int32_t packetsize) { if (btph -> op != 2) return -1; // it is not Boot Reply + if(response_buffer) { + if(packetsize <= 1720) + memcpy(response_buffer, packet, packetsize); + else + memcpy(response_buffer, packet, 1720); + } + if (memcmp(btph -> vend, dhcp_magic, 4)) { // It is BootP - RFC 951 NET_DEBUG_PRINTF("WARNING:\t\tBooting via BootP 951\n"); |