+++ /dev/null
-/** @file\r
- Raw IP4 receive application\r
-\r
- Copyright (c) 2011-2012, Intel Corporation. All rights reserved.\r
- SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#include "RawIp4Rx.h"\r
-\r
-UINT8 mBuffer[65536];\r
-\r
-\r
-/**\r
- Run the raw IP4 receive application\r
-\r
- @param [in] ArgC Argument count\r
- @param [in] ArgV Argument value array\r
-\r
- @retval 0 Successfully operation\r
- **/\r
-int\r
-RawIp4Rx (\r
- IN int ArgC,\r
- IN char **ArgV\r
- )\r
-{\r
- ssize_t BytesReceived;\r
- struct sockaddr_in LocalPort;\r
- socklen_t LocalPortLength;\r
- struct sockaddr_in RemotePort;\r
- socklen_t RemotePortLength;\r
- int RetVal;\r
- SOCKET s;\r
- UINT64 TotalBytesReceived;\r
-\r
- //\r
- // Create the socket\r
- //\r
- s = socket ( AF_INET, SOCK_RAW, RAW_PROTOCOL );\r
- if ( -1 == s ) {\r
- RetVal = GET_ERRNO;\r
- printf ( "ERROR - socket error, errno: %d\r\n", RetVal );\r
- }\r
- else {\r
- //\r
- // Use for/break; instead of goto\r
- //\r
- for ( ; ; ) {\r
- //\r
- // Bind the socket to a known port\r
- //\r
- memset ( &LocalPort, 0, sizeof ( LocalPort ));\r
- SIN_LEN ( LocalPort ) = sizeof ( LocalPort );\r
- SIN_FAMILY ( LocalPort ) = AF_INET;\r
- SIN_ADDR ( LocalPort ) = 0;\r
- SIN_PORT ( LocalPort ) = 0;\r
- RetVal = bind ( s,\r
- (struct sockaddr *)&LocalPort,\r
- sizeof ( LocalPort ));\r
- if ( -1 == RetVal ) {\r
- RetVal = GET_ERRNO;\r
- printf ( "ERROR - bind error, errno: %d\r\n", RetVal );\r
- break;\r
- }\r
-\r
- //\r
- // Display the local address and protocol\r
- //\r
- LocalPortLength = sizeof ( LocalPort );\r
- RetVal = getsockname ( s, (struct sockaddr *)&LocalPort, &LocalPortLength );\r
- if ( 0 != RetVal ) {\r
- RetVal = GET_ERRNO;\r
- printf ( "ERROR - getsockname error, errno: %d\r\n", RetVal );\r
- break;\r
- }\r
- printf ( "Local Address: %d.%d.%d.%d, Protocol: %d\r\n",\r
- (UINT8)SIN_ADDR ( LocalPort ),\r
- (UINT8)( SIN_ADDR ( LocalPort ) >> 8 ),\r
- (UINT8)( SIN_ADDR ( LocalPort ) >> 16 ),\r
- (UINT8)( SIN_ADDR ( LocalPort ) >> 24 ),\r
- RAW_PROTOCOL );\r
-\r
- //\r
- // Use for/break instead of goto\r
- //\r
- TotalBytesReceived = 0;\r
- for ( ; ; ) {\r
- //\r
- // Receive data from the remote system\r
- //\r
- do {\r
- //\r
- // Attempt to receive a packet\r
- //\r
- RemotePortLength = sizeof ( RemotePort );\r
- BytesReceived = recvfrom ( s,\r
- &mBuffer[0],\r
- sizeof ( mBuffer ),\r
- 0,\r
- (struct sockaddr *)&RemotePort,\r
- &RemotePortLength );\r
- RetVal = (UINT32)BytesReceived;\r
- if ( 0 < BytesReceived ) {\r
- //\r
- // Display the received data\r
- //\r
- printf ( "%4d bytes received from %d.%d.%d.%d:%d\r\n"\r
- "%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\r\n"\r
- "%02x %02x %02x %02x\r\n",\r
- (UINT32)BytesReceived,\r
- (UINT8)SIN_ADDR ( RemotePort ),\r
- (UINT8)( SIN_ADDR ( RemotePort ) >> 8 ),\r
- (UINT8)( SIN_ADDR ( RemotePort ) >> 16 ),\r
- (UINT8)( SIN_ADDR ( RemotePort ) >> 24 ),\r
- SIN_PORT ( RemotePort ),\r
- mBuffer[0],\r
- mBuffer[1],\r
- mBuffer[2],\r
- mBuffer[3],\r
- mBuffer[4],\r
- mBuffer[5],\r
- mBuffer[6],\r
- mBuffer[7],\r
- mBuffer[8],\r
- mBuffer[9],\r
- mBuffer[10],\r
- mBuffer[11],\r
- mBuffer[12],\r
- mBuffer[13],\r
- mBuffer[14],\r
- mBuffer[15],\r
- mBuffer[16],\r
- mBuffer[17],\r
- mBuffer[18],\r
- mBuffer[19]);\r
- TotalBytesReceived += BytesReceived;\r
-\r
- //\r
- // All done when the correct packet is received\r
- //\r
- if ( mBuffer[9] == RAW_PROTOCOL ) {\r
- break;\r
- }\r
- }\r
- else if ( -1 == BytesReceived ) {\r
- //\r
- // Check for a timeout\r
- //\r
- RetVal = GET_ERRNO;\r
- printf ( "ERROR - recv error, errno: %d\r\n", RetVal );\r
- break;\r
- }\r
- } while ( 0 != RetVal );\r
-\r
- //\r
- // Display the bytes received\r
- //\r
- if ( 0 == RetVal ) {\r
- printf ( "Total Bytes Received: %Ld\r\n", TotalBytesReceived );\r
- }\r
-\r
- //\r
- // Test complete\r
- //\r
- break;\r
- }\r
- break;\r
- }\r
-\r
- //\r
- // Close the socket\r
- //\r
- CLOSE_SOCKET ( s );\r
- printf ( "Socket closed\r\n" );\r
- }\r
-\r
- //\r
- // Return the operation status\r
- //\r
- return RetVal;\r
-}\r