mirror of
https://github.com/FreeRTOS/FreeRTOS.git
synced 2025-06-17 05:34:17 +08:00
Update TCP/IP tack to latest form Git.
This commit is contained in:
@ -108,11 +108,6 @@ are located. */
|
||||
located. */
|
||||
#define dhcpFIRST_OPTION_BYTE_OFFSET ( 0xf0 )
|
||||
|
||||
/* When walking the variable length options field, the following value is used
|
||||
to ensure the walk has not gone past the end of the valid options. 2 bytes is
|
||||
made up of the length byte, and minimum one byte value. */
|
||||
#define dhcpMAX_OPTION_LENGTH_OF_INTEREST ( 2L )
|
||||
|
||||
/* Standard DHCP port numbers and magic cookie value. */
|
||||
#if( ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN )
|
||||
#define dhcpCLIENT_PORT 0x4400u
|
||||
@ -647,9 +642,11 @@ const uint32_t ulMandatoryOptions = 2ul; /* DHCP server address, and the correct
|
||||
/* Walk through the options until the dhcpOPTION_END_BYTE byte
|
||||
is found, taking care not to walk off the end of the options. */
|
||||
pucByte = &( pxDHCPMessage->ucFirstOptionByte );
|
||||
pucLastByte = &( pucUDPPayload[ lBytes - dhcpMAX_OPTION_LENGTH_OF_INTEREST ] );
|
||||
/* Maintain a pointer to the last valid byte (i.e. not the first
|
||||
invalid byte). */
|
||||
pucLastByte = pucUDPPayload + lBytes - 1;
|
||||
|
||||
while( pucByte < pucLastByte )
|
||||
while( pucByte <= pucLastByte )
|
||||
{
|
||||
ucOptionCode = pucByte[ 0 ];
|
||||
if( ucOptionCode == dhcpOPTION_END_BYTE )
|
||||
@ -666,12 +663,13 @@ const uint32_t ulMandatoryOptions = 2ul; /* DHCP server address, and the correct
|
||||
}
|
||||
|
||||
/* Stop if the response is malformed. */
|
||||
if( pucByte < pucLastByte - 1 )
|
||||
if( pucByte < pucLastByte )
|
||||
{
|
||||
/* There are at least two bytes left. */
|
||||
ucLength = pucByte[ 1 ];
|
||||
pucByte += 2;
|
||||
|
||||
if( pucByte >= pucLastByte - ucLength )
|
||||
if( pucByte + ucLength > pucLastByte )
|
||||
{
|
||||
break;
|
||||
}
|
||||
@ -926,7 +924,8 @@ size_t xOptionsLength = sizeof( ucDHCPRequestOptions );
|
||||
FreeRTOS_debug_printf( ( "vDHCPProcess: reply %lxip\n", FreeRTOS_ntohl( xDHCPData.ulOfferedIPAddress ) ) );
|
||||
iptraceSENDING_DHCP_REQUEST();
|
||||
|
||||
if( FreeRTOS_sendto( xDHCPData.xDHCPSocket, pucUDPPayloadBuffer, ( sizeof( DHCPMessage_t ) + xOptionsLength ), FREERTOS_ZERO_COPY, &xAddress, sizeof( xAddress ) ) == 0 )
|
||||
/* 'ucFirstOptionByte' is part of DHCP message struct, so subtract one byte. */
|
||||
if( FreeRTOS_sendto( xDHCPData.xDHCPSocket, pucUDPPayloadBuffer, ( sizeof( DHCPMessage_t ) + xOptionsLength - 1 ), FREERTOS_ZERO_COPY, &xAddress, sizeof( xAddress ) ) == 0 )
|
||||
{
|
||||
/* The packet was not successfully queued for sending and must be
|
||||
returned to the stack. */
|
||||
@ -954,7 +953,8 @@ size_t xOptionsLength = sizeof( ucDHCPDiscoverOptions );
|
||||
FreeRTOS_debug_printf( ( "vDHCPProcess: discover\n" ) );
|
||||
iptraceSENDING_DHCP_DISCOVER();
|
||||
|
||||
if( FreeRTOS_sendto( xDHCPData.xDHCPSocket, pucUDPPayloadBuffer, ( sizeof( DHCPMessage_t ) + xOptionsLength ), FREERTOS_ZERO_COPY, &xAddress, sizeof( xAddress ) ) == 0 )
|
||||
/* 'ucFirstOptionByte' is part of DHCP message struct, so subtract one byte. */
|
||||
if( FreeRTOS_sendto( xDHCPData.xDHCPSocket, pucUDPPayloadBuffer, ( sizeof( DHCPMessage_t ) + xOptionsLength - 1 ), FREERTOS_ZERO_COPY, &xAddress, sizeof( xAddress ) ) == 0 )
|
||||
{
|
||||
/* The packet was not successfully queued for sending and must be
|
||||
returned to the stack. */
|
||||
|
Reference in New Issue
Block a user