mirror of https://github.com/acidanthera/audk.git
Update the sockets applications
* Builds with GCC 4.4 compiler. Signed-off by: lpleahy git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12498 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
a88c31639b
commit
59bc059327
|
@ -51,9 +51,9 @@ BOOLEAN bTimerRunning;
|
|||
struct sockaddr_in LocalAddress;
|
||||
EFI_EVENT pTimer;
|
||||
int ListenSocket;
|
||||
UINT8 Buffer [ DATA_BUFFER_SIZE ];
|
||||
struct pollfd PollFd [ MAX_CONNECTIONS ];
|
||||
DT_PORT Port [ MAX_CONNECTIONS ];
|
||||
UINT8 Buffer[ DATA_BUFFER_SIZE ];
|
||||
struct pollfd PollFd[ MAX_CONNECTIONS ];
|
||||
DT_PORT Port[ MAX_CONNECTIONS ];
|
||||
nfds_t MaxPort;
|
||||
|
||||
|
||||
|
@ -136,17 +136,17 @@ SocketAccept (
|
|||
// Allocate a port
|
||||
//
|
||||
Index = MaxPort++;
|
||||
PollFd [ Index ].fd = ListenSocket;
|
||||
PollFd [ Index ].events = POLLRDNORM | POLLHUP;
|
||||
PollFd [ Index ].revents = 0;
|
||||
Port [ Index ].BytesAverage = 0;
|
||||
Port [ Index ].BytesPrevious = 0;
|
||||
Port [ Index ].BytesTotal = 0;
|
||||
Port [ Index ].Samples = 0;
|
||||
Port [ Index ].RemoteAddress.sin_len = 0;
|
||||
Port [ Index ].RemoteAddress.sin_family = 0;
|
||||
Port [ Index ].RemoteAddress.sin_port = 0;
|
||||
Port [ Index ].RemoteAddress.sin_addr.s_addr= 0;
|
||||
PollFd[ Index ].fd = ListenSocket;
|
||||
PollFd[ Index ].events = POLLRDNORM | POLLHUP;
|
||||
PollFd[ Index ].revents = 0;
|
||||
Port[ Index ].BytesAverage = 0;
|
||||
Port[ Index ].BytesPrevious = 0;
|
||||
Port[ Index ].BytesTotal = 0;
|
||||
Port[ Index ].Samples = 0;
|
||||
Port[ Index ].RemoteAddress.sin_len = 0;
|
||||
Port[ Index ].RemoteAddress.sin_family = 0;
|
||||
Port[ Index ].RemoteAddress.sin_port = 0;
|
||||
Port[ Index ].RemoteAddress.sin_addr.s_addr= 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -242,8 +242,7 @@ SocketNew (
|
|||
"0x%08x: Socket created\r\n",
|
||||
ListenSocket ));
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
Status = EFI_NOT_STARTED;
|
||||
}
|
||||
}
|
||||
|
@ -312,16 +311,16 @@ SocketPoll (
|
|||
//
|
||||
// Account for this descriptor
|
||||
//
|
||||
if ( 0 != PollFd [ Index ].revents ) {
|
||||
if ( 0 != PollFd[ Index ].revents ) {
|
||||
FdCount -= 1;
|
||||
}
|
||||
|
||||
//
|
||||
// Check for a broken connection
|
||||
//
|
||||
if ( 0 != ( PollFd [ Index ].revents & POLLHUP )) {
|
||||
if ( 0 != ( PollFd[ Index ].revents & POLLHUP )) {
|
||||
bRemoveSocket = TRUE;
|
||||
if ( ListenSocket == PollFd [ Index ].fd ) {
|
||||
if ( ListenSocket == PollFd[ Index ].fd ) {
|
||||
bListenError = TRUE;
|
||||
DEBUG (( DEBUG_ERROR,
|
||||
"ERROR - Network closed on listen socket, errno: %d\r\n",
|
||||
|
@ -330,37 +329,37 @@ SocketPoll (
|
|||
else {
|
||||
DEBUG (( DEBUG_ERROR,
|
||||
"ERROR - Network closed on socket %d.%d.%d.%d:%d, errno: %d\r\n",
|
||||
Port [ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||
htons ( Port [ Index ].RemoteAddress.sin_port ),
|
||||
Port[ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||
htons ( Port[ Index ].RemoteAddress.sin_port ),
|
||||
errno ));
|
||||
|
||||
//
|
||||
// Close the socket
|
||||
//
|
||||
CloseStatus = close ( PollFd [ Index ].fd );
|
||||
CloseStatus = close ( PollFd[ Index ].fd );
|
||||
if ( 0 == CloseStatus ) {
|
||||
bRemoveSocket = TRUE;
|
||||
DEBUG (( DEBUG_INFO,
|
||||
"0x%08x: Socket closed for %d.%d.%d.%d:%d\r\n",
|
||||
PollFd [ Index ].fd,
|
||||
Port [ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||
htons ( Port [ Index ].RemoteAddress.sin_port )));
|
||||
PollFd[ Index ].fd,
|
||||
Port[ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||
htons ( Port[ Index ].RemoteAddress.sin_port )));
|
||||
}
|
||||
else {
|
||||
DEBUG (( DEBUG_ERROR,
|
||||
"ERROR - Failed to close socket 0x%08x for %d.%d.%d.%d:%d, errno: %d\r\n",
|
||||
PollFd [ Index ].fd,
|
||||
Port [ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||
htons ( Port [ Index ].RemoteAddress.sin_port ),
|
||||
PollFd[ Index ].fd,
|
||||
Port[ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||
htons ( Port[ Index ].RemoteAddress.sin_port ),
|
||||
errno ));
|
||||
}
|
||||
}
|
||||
|
@ -369,11 +368,11 @@ SocketPoll (
|
|||
//
|
||||
// Check for a connection or read data
|
||||
//
|
||||
if ( 0 != ( PollFd [ Index ].revents & POLLRDNORM )) {
|
||||
if ( 0 != ( PollFd[ Index ].revents & POLLRDNORM )) {
|
||||
//
|
||||
// Check for a connection
|
||||
//
|
||||
if ( ListenSocket == PollFd [ Index ].fd ) {
|
||||
if ( ListenSocket == PollFd[ Index ].fd ) {
|
||||
//
|
||||
// Another client connection was received
|
||||
//
|
||||
|
@ -416,7 +415,7 @@ SocketPoll (
|
|||
bRemoveSocket = TRUE;
|
||||
DEBUG (( DEBUG_INFO,
|
||||
"0x%08x: Socket closed for %d.%d.%d.%d:%d\r\n",
|
||||
PollFd [ Index ].fd,
|
||||
PollFd[ Index ].fd,
|
||||
RemoteAddress.sin_addr.s_addr & 0xff,
|
||||
( RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
||||
( RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
||||
|
@ -426,7 +425,7 @@ SocketPoll (
|
|||
else {
|
||||
DEBUG (( DEBUG_ERROR,
|
||||
"ERROR - Failed to close socket 0x%08x, errno: %d\r\n",
|
||||
PollFd [ Index ].fd,
|
||||
PollFd[ Index ].fd,
|
||||
errno ));
|
||||
}
|
||||
|
||||
|
@ -436,8 +435,7 @@ SocketPoll (
|
|||
//
|
||||
Status = EFI_SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
//
|
||||
// Display the connection
|
||||
//
|
||||
|
@ -452,17 +450,17 @@ SocketPoll (
|
|||
// Allocate the client connection
|
||||
//
|
||||
Index = MaxPort++;
|
||||
Port [ Index ].BytesAverage = 0;
|
||||
Port [ Index ].BytesPrevious = 0;
|
||||
Port [ Index ].BytesTotal = 0;
|
||||
Port [ Index ].Samples = 0;
|
||||
Port [ Index ].RemoteAddress.sin_len = RemoteAddress.sin_len;
|
||||
Port [ Index ].RemoteAddress.sin_family = RemoteAddress.sin_family;
|
||||
Port [ Index ].RemoteAddress.sin_port = RemoteAddress.sin_port;
|
||||
Port [ Index ].RemoteAddress.sin_addr = RemoteAddress.sin_addr;
|
||||
PollFd [ Index ].fd = Socket;
|
||||
PollFd [ Index ].events = POLLRDNORM | POLLHUP;
|
||||
PollFd [ Index ].revents = 0;
|
||||
Port[ Index ].BytesAverage = 0;
|
||||
Port[ Index ].BytesPrevious = 0;
|
||||
Port[ Index ].BytesTotal = 0;
|
||||
Port[ Index ].Samples = 0;
|
||||
Port[ Index ].RemoteAddress.sin_len = RemoteAddress.sin_len;
|
||||
Port[ Index ].RemoteAddress.sin_family = RemoteAddress.sin_family;
|
||||
Port[ Index ].RemoteAddress.sin_port = RemoteAddress.sin_port;
|
||||
Port[ Index ].RemoteAddress.sin_addr = RemoteAddress.sin_addr;
|
||||
PollFd[ Index ].fd = Socket;
|
||||
PollFd[ Index ].events = POLLRDNORM | POLLHUP;
|
||||
PollFd[ Index ].revents = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -470,7 +468,7 @@ SocketPoll (
|
|||
//
|
||||
// Data received
|
||||
//
|
||||
BytesReceived = read ( PollFd [ Index ].fd,
|
||||
BytesReceived = read ( PollFd[ Index ].fd,
|
||||
&Buffer,
|
||||
sizeof ( Buffer ));
|
||||
if ( 0 < BytesReceived ) {
|
||||
|
@ -479,13 +477,13 @@ SocketPoll (
|
|||
//
|
||||
DEBUG (( DEBUG_INFO,
|
||||
"0x%08x: Socket received 0x%08x bytes from %d.%d.%d.%d:%d\r\n",
|
||||
PollFd [ Index ].fd,
|
||||
PollFd[ Index ].fd,
|
||||
BytesReceived,
|
||||
Port [ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||
htons ( Port [ Index ].RemoteAddress.sin_port )));
|
||||
Port[ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||
htons ( Port[ Index ].RemoteAddress.sin_port )));
|
||||
|
||||
//
|
||||
// Synchronize with the TimerCallback routine
|
||||
|
@ -495,7 +493,7 @@ SocketPoll (
|
|||
//
|
||||
// Account for the data received
|
||||
//
|
||||
Port [ Index ].BytesTotal += BytesReceived;
|
||||
Port[ Index ].BytesTotal += BytesReceived;
|
||||
|
||||
//
|
||||
// Release the synchronization with the TimerCallback routine
|
||||
|
@ -508,33 +506,33 @@ SocketPoll (
|
|||
//
|
||||
DEBUG (( DEBUG_INFO,
|
||||
"ERROR - Receive failure for %d.%d.%d.%d:%d, errno: %d\r\n",
|
||||
Port [ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||
htons ( Port [ Index ].RemoteAddress.sin_port ),
|
||||
Port[ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||
htons ( Port[ Index ].RemoteAddress.sin_port ),
|
||||
errno ));
|
||||
CloseStatus = close ( PollFd [ Index ].fd );
|
||||
CloseStatus = close ( PollFd[ Index ].fd );
|
||||
if ( 0 == CloseStatus ) {
|
||||
bRemoveSocket = TRUE;
|
||||
DEBUG (( DEBUG_INFO,
|
||||
"0x%08x: Socket closed for %d.%d.%d.%d:%d\r\n",
|
||||
PollFd [ Index ].fd,
|
||||
Port [ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||
htons ( Port [ Index ].RemoteAddress.sin_port )));
|
||||
PollFd[ Index ].fd,
|
||||
Port[ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||
htons ( Port[ Index ].RemoteAddress.sin_port )));
|
||||
}
|
||||
else {
|
||||
DEBUG (( DEBUG_ERROR,
|
||||
"ERROR - Failed to close socket 0x%08x for %d.%d.%d.%d:%d, errno: %d\r\n",
|
||||
PollFd [ Index ].fd,
|
||||
Port [ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||
htons ( Port [ Index ].RemoteAddress.sin_port ),
|
||||
PollFd[ Index ].fd,
|
||||
Port[ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
||||
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||
htons ( Port[ Index ].RemoteAddress.sin_port ),
|
||||
errno ));
|
||||
}
|
||||
}
|
||||
|
@ -553,23 +551,23 @@ SocketPoll (
|
|||
if ( bRemoveSocket ) {
|
||||
DEBUG (( DEBUG_INFO,
|
||||
"0x%08x: Socket removed from polling\r\n",
|
||||
PollFd [ Index ].fd ));
|
||||
PollFd[ Index ].fd ));
|
||||
MaxPort -= 1;
|
||||
for ( Entry = Index + 1; MaxPort >= Entry; Entry++ ) {
|
||||
EntryPrevious = Entry;
|
||||
Port [ EntryPrevious ].BytesAverage = Port [ Entry ].BytesAverage;
|
||||
Port [ EntryPrevious ].BytesPrevious = Port [ Entry ].BytesPrevious;
|
||||
Port [ EntryPrevious ].BytesTotal = Port [ Entry ].BytesTotal;
|
||||
Port [ EntryPrevious ].RemoteAddress.sin_len = Port [ Entry ].RemoteAddress.sin_len;
|
||||
Port [ EntryPrevious ].RemoteAddress.sin_family = Port [ Entry ].RemoteAddress.sin_family;
|
||||
Port [ EntryPrevious ].RemoteAddress.sin_port = Port [ Entry ].RemoteAddress.sin_port;
|
||||
Port [ EntryPrevious ].RemoteAddress.sin_addr.s_addr = Port [ Entry ].RemoteAddress.sin_addr.s_addr;
|
||||
Port [ EntryPrevious ].Samples = Port [ Entry ].Samples;
|
||||
PollFd [ EntryPrevious ].events = PollFd [ Entry ].events;
|
||||
PollFd [ EntryPrevious ].fd = PollFd [ Entry ].fd;
|
||||
PollFd [ EntryPrevious ].revents = PollFd [ Entry ].revents;
|
||||
Port[ EntryPrevious ].BytesAverage = Port[ Entry ].BytesAverage;
|
||||
Port[ EntryPrevious ].BytesPrevious = Port[ Entry ].BytesPrevious;
|
||||
Port[ EntryPrevious ].BytesTotal = Port[ Entry ].BytesTotal;
|
||||
Port[ EntryPrevious ].RemoteAddress.sin_len = Port[ Entry ].RemoteAddress.sin_len;
|
||||
Port[ EntryPrevious ].RemoteAddress.sin_family = Port[ Entry ].RemoteAddress.sin_family;
|
||||
Port[ EntryPrevious ].RemoteAddress.sin_port = Port[ Entry ].RemoteAddress.sin_port;
|
||||
Port[ EntryPrevious ].RemoteAddress.sin_addr.s_addr = Port[ Entry ].RemoteAddress.sin_addr.s_addr;
|
||||
Port[ EntryPrevious ].Samples = Port[ Entry ].Samples;
|
||||
PollFd[ EntryPrevious ].events = PollFd[ Entry ].events;
|
||||
PollFd[ EntryPrevious ].fd = PollFd[ Entry ].fd;
|
||||
PollFd[ EntryPrevious ].revents = PollFd[ Entry ].revents;
|
||||
}
|
||||
PollFd [ MaxPort ].fd = -1;
|
||||
PollFd[ MaxPort ].fd = -1;
|
||||
Index -= 1;
|
||||
}
|
||||
|
||||
|
@ -625,31 +623,31 @@ TimerCallback (
|
|||
//
|
||||
// Determine if any data was received
|
||||
//
|
||||
BytesReceived = Port [ Index ].BytesTotal;
|
||||
if (( ListenSocket != PollFd [ Index ].fd )
|
||||
BytesReceived = Port[ Index ].BytesTotal;
|
||||
if (( ListenSocket != PollFd[ Index ].fd )
|
||||
&& ( 0 != BytesReceived )) {
|
||||
//
|
||||
// Update the average bytes per second
|
||||
//
|
||||
DeltaBytes = Port [ Index ].BytesAverage >> AVERAGE_SHIFT_COUNT;
|
||||
Port [ Index ].BytesAverage -= DeltaBytes;
|
||||
DeltaBytes = BytesReceived - Port [ Index ].BytesPrevious;
|
||||
Port [ Index ].BytesPrevious = BytesReceived;
|
||||
Port [ Index ].BytesAverage += DeltaBytes;
|
||||
DeltaBytes = Port[ Index ].BytesAverage >> AVERAGE_SHIFT_COUNT;
|
||||
Port[ Index ].BytesAverage -= DeltaBytes;
|
||||
DeltaBytes = BytesReceived - Port[ Index ].BytesPrevious;
|
||||
Port[ Index ].BytesPrevious = BytesReceived;
|
||||
Port[ Index ].BytesAverage += DeltaBytes;
|
||||
|
||||
//
|
||||
// Separate the samples
|
||||
//
|
||||
if (( 2 << AVERAGE_SHIFT_COUNT ) == Port [ Index ].Samples ) {
|
||||
if (( 2 << AVERAGE_SHIFT_COUNT ) == Port[ Index ].Samples ) {
|
||||
Print ( L"---------- Stable average ----------\r\n" );
|
||||
}
|
||||
Port [ Index ].Samples += 1;
|
||||
Port[ Index ].Samples += 1;
|
||||
|
||||
//
|
||||
// Display the data rate
|
||||
//
|
||||
Delta = (UINT32)( DeltaBytes >> DATA_RATE_UPDATE_SHIFT );
|
||||
Average = Port [ Index ].BytesAverage >> ( AVERAGE_SHIFT_COUNT + DATA_RATE_UPDATE_SHIFT );
|
||||
Average = Port[ Index ].BytesAverage >> ( AVERAGE_SHIFT_COUNT + DATA_RATE_UPDATE_SHIFT );
|
||||
if ( Average < RANGE_SWITCH ) {
|
||||
Print ( L"%d Bytes/sec, Ave: %d Bytes/Sec\r\n",
|
||||
Delta,
|
||||
|
@ -919,8 +917,7 @@ main (
|
|||
//
|
||||
// Use for/break instead of goto
|
||||
//
|
||||
for ( ; ; )
|
||||
{
|
||||
for ( ; ; ) {
|
||||
//
|
||||
// Create the timer
|
||||
//
|
||||
|
|
|
@ -84,7 +84,7 @@ UINT64 TotalBytesSent;
|
|||
UINT64 PreviousBytes;
|
||||
UINT64 AverageBytes;
|
||||
UINT64 Samples;
|
||||
UINT8 Buffer [ DATA_BUFFER_SIZE ];
|
||||
UINT8 Buffer[ DATA_BUFFER_SIZE ];
|
||||
|
||||
|
||||
//
|
||||
|
@ -146,8 +146,7 @@ GetDigit (
|
|||
// Walk the digits
|
||||
//
|
||||
Value = 0;
|
||||
while (( '0' <= *pDigit ) && ( '9' >= *pDigit ))
|
||||
{
|
||||
while (( '0' <= *pDigit ) && ( '9' >= *pDigit )) {
|
||||
//
|
||||
// Make room for the new least significant digit
|
||||
//
|
||||
|
@ -313,7 +312,7 @@ SocketConnect (
|
|||
//
|
||||
// Check for user stop request
|
||||
//
|
||||
while ( ! bTick ) {
|
||||
while ( !bTick ) {
|
||||
Status = ControlCCheck ( );
|
||||
if ( EFI_ERROR ( Status )) {
|
||||
break;
|
||||
|
@ -494,8 +493,7 @@ SocketOpen (
|
|||
//
|
||||
// Use do/while and break instead of goto
|
||||
//
|
||||
do
|
||||
{
|
||||
do {
|
||||
//
|
||||
// Wait for the network layer to initialize
|
||||
//
|
||||
|
@ -801,7 +799,7 @@ Tcp4Locate (
|
|||
//
|
||||
// Open the network controller's service protocol
|
||||
//
|
||||
Tcp4Controller = pHandles [ Tcp4Index++ ];
|
||||
Tcp4Controller = pHandles[ Tcp4Index++ ];
|
||||
Status = gBS->OpenProtocol (
|
||||
Tcp4Controller,
|
||||
&gEfiTcp4ServiceBindingProtocolGuid,
|
||||
|
@ -1499,12 +1497,15 @@ main (
|
|||
//
|
||||
// Validate the command line
|
||||
//
|
||||
if ( 2 != Argc ) {
|
||||
Print ( L"%s <remote IP address>\r\n", Argv[0] );
|
||||
if ( 2 > Argc ) {
|
||||
Print ( L"%s <remote IP address> [Use TCP]\r\n", Argv[0] );
|
||||
return -1;
|
||||
}
|
||||
|
||||
bTcp4 = TRUE;
|
||||
//
|
||||
// Determine if TCP should be used
|
||||
//
|
||||
bTcp4 = (BOOLEAN)( 2 < Argc );
|
||||
|
||||
//
|
||||
// Determine the support routines
|
||||
|
@ -1522,8 +1523,7 @@ bTcp4 = TRUE;
|
|||
//
|
||||
// Use for/break instead of goto
|
||||
//
|
||||
for ( ; ; )
|
||||
{
|
||||
for ( ; ; ) {
|
||||
//
|
||||
// No bytes sent so far
|
||||
//
|
||||
|
@ -1540,14 +1540,10 @@ bTcp4 = TRUE;
|
|||
RemoteHostAddress.sin_family = AF_INET;
|
||||
RemoteHostAddress.sin_port = htons ( PcdGet16 ( DataSource_Port ));
|
||||
|
||||
Print ( L"Argc: %d\r\n", Argc);
|
||||
Print ( L"Argv[0]: %a\r\n", Argv[0]);
|
||||
Print ( L"Argv[1]: %a\r\n", Argv[1]);
|
||||
|
||||
//
|
||||
// Get the IP address
|
||||
//
|
||||
pRemoteHost = Argv [1];
|
||||
pRemoteHost = Argv[1];
|
||||
Status = IpAddress ( );
|
||||
if ( EFI_ERROR ( Status )) {
|
||||
break;
|
||||
|
|
|
@ -59,10 +59,10 @@ main (
|
|||
&RemoteAddress[1],
|
||||
&RemoteAddress[2],
|
||||
&RemoteAddress[3]))
|
||||
|| ( 255 < RemoteAddress [0])
|
||||
|| ( 255 < RemoteAddress [1])
|
||||
|| ( 255 < RemoteAddress [2])
|
||||
|| ( 255 < RemoteAddress [3])) {
|
||||
|| ( 255 < RemoteAddress[0])
|
||||
|| ( 255 < RemoteAddress[1])
|
||||
|| ( 255 < RemoteAddress[2])
|
||||
|| ( 255 < RemoteAddress[3])) {
|
||||
Print ( L"%a <IPv4 Address>\r\n", Argv[0]);
|
||||
}
|
||||
else {
|
||||
|
@ -78,7 +78,7 @@ main (
|
|||
Print ( L"ERROR - host not found, errno: %d\r\n", errno );
|
||||
}
|
||||
else {
|
||||
pIpAddress = (UINT8 *)pHost->h_addr_list [ 0 ];
|
||||
pIpAddress = (UINT8 *)pHost->h_addr_list[ 0 ];
|
||||
Print ( L"%d.%d.%d.%d, %a\r\n",
|
||||
pIpAddress[0],
|
||||
pIpAddress[1],
|
||||
|
|
|
@ -23,9 +23,9 @@
|
|||
|
||||
#include <sys/socket.h>
|
||||
|
||||
struct hostent * _gethostbydnsname(const char *, int);
|
||||
struct hostent * _gethostbydnsname (const char *, int);
|
||||
|
||||
char mBuffer [65536];
|
||||
char mBuffer[65536];
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
#include <sys/socket.h>
|
||||
|
||||
char mBuffer [65536];
|
||||
char mBuffer[65536];
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -53,10 +53,10 @@ main (
|
|||
&RemoteAddress[1],
|
||||
&RemoteAddress[2],
|
||||
&RemoteAddress[3]))
|
||||
|| ( 255 < RemoteAddress [0])
|
||||
|| ( 255 < RemoteAddress [1])
|
||||
|| ( 255 < RemoteAddress [2])
|
||||
|| ( 255 < RemoteAddress [3])) {
|
||||
|| ( 255 < RemoteAddress[0])
|
||||
|| ( 255 < RemoteAddress[1])
|
||||
|| ( 255 < RemoteAddress[2])
|
||||
|| ( 255 < RemoteAddress[3])) {
|
||||
Print ( L"%a <IPv4 Address>\r\n", Argv[0]);
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
#include <sys/socket.h>
|
||||
|
||||
char mBuffer [65536];
|
||||
char mBuffer[65536];
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
#include <sys/socket.h>
|
||||
|
||||
char mBuffer [65536];
|
||||
char mBuffer[65536];
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
#include <sys/socket.h>
|
||||
|
||||
char mBuffer [65536];
|
||||
char mBuffer[65536];
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
/** @file
|
||||
Out-of-band receive test application
|
||||
|
||||
Copyright (c) 2011, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include <OobRx.h>
|
||||
|
||||
|
||||
/**
|
||||
Receive out-of-band messages from the remote system.
|
||||
|
||||
@param [in] Argc The number of arguments
|
||||
@param [in] Argv The argument value array
|
||||
|
||||
@retval 0 The application exited normally.
|
||||
@retval Other An error occurred.
|
||||
**/
|
||||
int
|
||||
main (
|
||||
IN int Argc,
|
||||
IN char **Argv
|
||||
)
|
||||
{
|
||||
int RetVal;
|
||||
|
||||
//
|
||||
// Run the application
|
||||
//
|
||||
RetVal = OobRx ( Argc, Argv );
|
||||
|
||||
//
|
||||
// Return the operation status
|
||||
//
|
||||
return RetVal;
|
||||
}
|
|
@ -0,0 +1,253 @@
|
|||
/** @file
|
||||
Windows version of the OOB Receive application
|
||||
|
||||
Copyright (c) 2011, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include <OobRx.h>
|
||||
|
||||
UINT8 mBuffer[65536];
|
||||
|
||||
|
||||
/**
|
||||
Run the OOB receive application
|
||||
|
||||
@param [in] ArgC Argument count
|
||||
@param [in] ArgV Argument value array
|
||||
|
||||
@retval 0 Successfully operation
|
||||
**/
|
||||
int
|
||||
OobRx (
|
||||
IN int ArgC,
|
||||
IN char **ArgV
|
||||
)
|
||||
{
|
||||
SOCKET a;
|
||||
ssize_t BytesReceived;
|
||||
struct sockaddr_in LocalPort;
|
||||
UINT32 OobInLine;
|
||||
UINT16 PortNumber;
|
||||
struct timeval ReceiveTimeout;
|
||||
struct sockaddr_in RemotePort;
|
||||
socklen_t RemotePortLength;
|
||||
int RetVal;
|
||||
SOCKET s;
|
||||
UINT32 TransmittedBefore;
|
||||
UINT32 TransmittedDuring;
|
||||
UINT32 TransmittedOob;
|
||||
UINT32 TransmittedAfter;
|
||||
UINT32 * pTransmittedBytes;
|
||||
|
||||
//
|
||||
// Create the socket
|
||||
//
|
||||
s = socket ( AF_INET, SOCK_STREAM, IPPROTO_TCP );
|
||||
if ( -1 == s ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - socket error, errno: %d\r\n", RetVal );
|
||||
}
|
||||
else {
|
||||
//
|
||||
// Use for/break; instead of goto
|
||||
//
|
||||
for ( ; ; ) {
|
||||
//
|
||||
// Bind the socket to a known port
|
||||
//
|
||||
PortNumber = OOB_RX_PORT;
|
||||
memset ( &LocalPort, 0, sizeof ( LocalPort ));
|
||||
SIN_LEN ( LocalPort ) = sizeof ( LocalPort );
|
||||
SIN_FAMILY ( LocalPort ) = AF_INET;
|
||||
SIN_ADDR ( LocalPort ) = 0;
|
||||
SIN_PORT ( LocalPort ) = htons ( PortNumber );
|
||||
RetVal = bind ( s,
|
||||
(struct sockaddr *)&LocalPort,
|
||||
sizeof ( LocalPort ));
|
||||
if ( -1 == RetVal ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - bind error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Make the port available on the server
|
||||
//
|
||||
RetVal = listen ( s, 2 );
|
||||
if ( -1 == RetVal ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - listen error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Wait for a connection to the known port
|
||||
//
|
||||
RemotePortLength = sizeof ( RemotePort );
|
||||
a = accept ( s,
|
||||
(struct sockaddr *)&RemotePort,
|
||||
&RemotePortLength );
|
||||
if ( -1 == a ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - accept error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Use for/break instead of goto
|
||||
//
|
||||
for ( ; ; ) {
|
||||
//
|
||||
// Set the receive timeout
|
||||
//
|
||||
ReceiveTimeout.tv_sec = 0;
|
||||
ReceiveTimeout.tv_usec = 20 * 1000;
|
||||
RetVal = setsockopt ( a,
|
||||
SOL_SOCKET,
|
||||
SO_RCVTIMEO,
|
||||
(char *)&ReceiveTimeout,
|
||||
sizeof ( ReceiveTimeout ));
|
||||
if ( -1 == RetVal ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - setsockopt RCVTIMEO error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Select the OOB processing
|
||||
//
|
||||
OobInLine = ( 1 < ArgC );
|
||||
RetVal = setsockopt ( s,
|
||||
SOL_SOCKET,
|
||||
SO_OOBINLINE,
|
||||
(char *)&OobInLine,
|
||||
sizeof ( OobInLine ));
|
||||
if ( -1 == RetVal ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - setsockopt OOBINLINE error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
printf ( "%s\r\n", ( 0 != OobInLine ) ? "OOB messages are in-line"
|
||||
: "OOB messages move to the head of the queue" );
|
||||
|
||||
//
|
||||
// Receive data from the remote system
|
||||
//
|
||||
TransmittedBefore = 0;
|
||||
TransmittedOob = 0;
|
||||
TransmittedDuring = 0;
|
||||
TransmittedAfter = 0;
|
||||
pTransmittedBytes = &TransmittedBefore;
|
||||
do {
|
||||
//
|
||||
// Attempt to receive OOB data
|
||||
//
|
||||
BytesReceived = recv ( a, &mBuffer[0], sizeof ( mBuffer ), MSG_OOB );
|
||||
RetVal = (UINT32)BytesReceived;
|
||||
if ( 0 < BytesReceived ) {
|
||||
//
|
||||
// Display the received OOB data
|
||||
//
|
||||
printf ( "%5Ld OOB bytes received\r\n", (UINT64)BytesReceived );
|
||||
|
||||
//
|
||||
// Account for the bytes received
|
||||
//
|
||||
TransmittedOob += RetVal;
|
||||
*pTransmittedBytes += TransmittedAfter;
|
||||
TransmittedAfter = 0;
|
||||
pTransmittedBytes = &TransmittedDuring;
|
||||
}
|
||||
else if ( -1 == BytesReceived ) {
|
||||
//
|
||||
// Check for connection timeout
|
||||
//
|
||||
RetVal = GET_ERRNO;
|
||||
if ( RX_TIMEOUT_ERROR != RetVal ) {
|
||||
//
|
||||
// Receive error
|
||||
//
|
||||
printf ( "ERROR - recv OOB error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Ignore the timeout
|
||||
// Try to receive normal data instead
|
||||
//
|
||||
BytesReceived = recv ( a, &mBuffer[0], sizeof ( mBuffer ), 0 );
|
||||
RetVal = (UINT32)BytesReceived;
|
||||
if ( 0 < BytesReceived ) {
|
||||
//
|
||||
// Display the received data
|
||||
//
|
||||
printf ( "%4Ld bytes received\r\n", (UINT64)BytesReceived );
|
||||
|
||||
//
|
||||
// Account for the bytes received
|
||||
//
|
||||
TransmittedAfter += RetVal;
|
||||
}
|
||||
else if ( -1 == BytesReceived ) {
|
||||
//
|
||||
// Check for a timeout
|
||||
//
|
||||
RetVal = GET_ERRNO;
|
||||
if ( RX_TIMEOUT_ERROR != RetVal ) {
|
||||
printf ( "ERROR - recv error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while ( 0 != RetVal );
|
||||
|
||||
//
|
||||
// Display the bytes received
|
||||
//
|
||||
if ( 0 == RetVal ) {
|
||||
printf ( "Bytes before OOB: %8d\r\n", TransmittedBefore );
|
||||
if ( 0 != TransmittedDuring ) {
|
||||
printf ( "Bytes during OOB: %8d\r\n", TransmittedDuring );
|
||||
}
|
||||
printf ( "Out-of-band bytes: %8d\r\n", TransmittedOob );
|
||||
printf ( "Bytes after OOB: %8d\r\n", TransmittedAfter );
|
||||
printf ( " --------\r\n" );
|
||||
printf ( "Total Bytes: %8d\r\n", TransmittedBefore
|
||||
+ TransmittedDuring
|
||||
+ TransmittedOob
|
||||
+ TransmittedAfter );
|
||||
}
|
||||
|
||||
//
|
||||
// Test complete
|
||||
//
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Close the test socket
|
||||
//
|
||||
CLOSE_SOCKET ( a );
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Close the socket
|
||||
//
|
||||
CLOSE_SOCKET ( s );
|
||||
printf ( "Socket closed\r\n" );
|
||||
}
|
||||
|
||||
//
|
||||
// Return the operation status
|
||||
//
|
||||
return RetVal;
|
||||
}
|
|
@ -0,0 +1,96 @@
|
|||
/** @file
|
||||
Definitions for the OOB Receive application
|
||||
|
||||
Copyright (c) 2011, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _OOB_RX_H_
|
||||
#define _OOB_RX_H_
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Include Files
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifdef BUILD_FOR_WINDOWS
|
||||
//
|
||||
// Build for Windows environment
|
||||
//
|
||||
|
||||
#include <winsock2.h>
|
||||
|
||||
#define CLOSE_SOCKET closesocket
|
||||
#define SIN_ADDR(port) port.sin_addr.S_un.S_addr
|
||||
#define SIN_FAMILY(port) port.sin_family
|
||||
#define SIN_LEN(port) port.sin_family
|
||||
#define SIN_PORT(port) port.sin_port
|
||||
#define GET_ERRNO WSAGetLastError ( )
|
||||
|
||||
#define RX_TIMEOUT_ERROR WSAETIMEDOUT
|
||||
#define ssize_t int
|
||||
#define socklen_t int
|
||||
|
||||
#else // BUILD_FOR_WINDOWS
|
||||
//
|
||||
// Build for EFI environment
|
||||
//
|
||||
|
||||
#include <Uefi.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <netinet/in.h>
|
||||
|
||||
#include <sys/EfiSysCall.h>
|
||||
#include <sys/endian.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#define CLOSE_SOCKET close
|
||||
#define SIN_ADDR(port) port.sin_addr.s_addr
|
||||
#define SIN_FAMILY(port) port.sin_family
|
||||
#define SIN_LEN(port) port.sin_len
|
||||
#define SIN_PORT(port) port.sin_port
|
||||
#define SOCKET int
|
||||
#define GET_ERRNO errno
|
||||
#define RX_TIMEOUT_ERROR ETIMEDOUT
|
||||
|
||||
#endif // BUILD_FOR_WINDOWS
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Constants
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define OOB_RX_PORT 12344
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// API
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
Run the OOB receive application
|
||||
|
||||
@param [in] ArgC Argument count
|
||||
@param [in] ArgV Argument value array
|
||||
|
||||
@retval 0 Successfully operation
|
||||
**/
|
||||
|
||||
int
|
||||
OobRx (
|
||||
IN int ArgC,
|
||||
IN char **ArgV
|
||||
);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#endif // _OOB_RX_H_
|
|
@ -0,0 +1,64 @@
|
|||
#/** @file
|
||||
# OobRx Application
|
||||
#
|
||||
# This file contains an 'Intel Peripheral Driver' and is
|
||||
# licensed for Intel CPUs and chipsets under the terms of your
|
||||
# license agreement with Intel or your vendor. This file may
|
||||
# be modified by the user, subject to additional terms of the
|
||||
# license agreement
|
||||
#
|
||||
#
|
||||
# Copyright (c) 20011 Intel Corporation. All rights reserved
|
||||
# This software and associated documentation (if any) is furnished
|
||||
# under a license and may only be used or copied in accordance
|
||||
# with the terms of the license. Except as permitted by such
|
||||
# license, no part of this software or documentation may be
|
||||
# reproduced, stored in a retrieval system, or transmitted in any
|
||||
# form or by any means without the express written consent of
|
||||
# Intel Corporation.
|
||||
#
|
||||
##
|
||||
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = OobRx
|
||||
FILE_GUID = 79DED328-7FCE-4909-9AFD-D66176AF97A6
|
||||
MODULE_TYPE = UEFI_APPLICATION
|
||||
VERSION_STRING = 1.0
|
||||
ENTRY_POINT = ShellCEntryLib
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||
#
|
||||
|
||||
[Sources]
|
||||
Main.c
|
||||
OobRx.c
|
||||
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
ShellPkg/ShellPkg.dec
|
||||
StdLib/StdLib.dec
|
||||
|
||||
|
||||
[LibraryClasses]
|
||||
BaseMemoryLib
|
||||
BsdSocketLib
|
||||
DebugLib
|
||||
EfiSocketLib
|
||||
LibC
|
||||
LibMath
|
||||
ShellCEntryLib
|
||||
UefiBootServicesTableLib
|
||||
UefiLib
|
||||
# UseSocketDxe
|
||||
|
||||
[BuildOptions]
|
||||
INTEL:*_*_*_CC_FLAGS = /Qdiag-disable:181,186
|
||||
MSFT:*_*_*_CC_FLAGS = /Od
|
||||
GCC:*_*_*_CC_FLAGS = -O0 -Wno-unused-variable
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OobRx", "OobRx.vcproj", "{FA34A77A-5034-4065-B4BD-B74984DEB2F7}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{FA34A77A-5034-4065-B4BD-B74984DEB2F7}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{FA34A77A-5034-4065-B4BD-B74984DEB2F7}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{FA34A77A-5034-4065-B4BD-B74984DEB2F7}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{FA34A77A-5034-4065-B4BD-B74984DEB2F7}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
Binary file not shown.
|
@ -0,0 +1,211 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="OobRx"
|
||||
ProjectGUID="{FA34A77A-5034-4065-B4BD-B74984DEB2F7}"
|
||||
RootNamespace="OobRx"
|
||||
Keyword="Win32Proj"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories=".."
|
||||
PreprocessorDefinitions="BUILD_FOR_WINDOWS"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
BrowseInformation="1"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="1"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=".."
|
||||
PreprocessorDefinitions="BUILD_FOR_WINDOWS"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
BrowseInformation="1"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\main.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\OobRx.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\OobRx.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
|
@ -0,0 +1,56 @@
|
|||
/** @file
|
||||
Windows version of the OOB Receive application
|
||||
|
||||
Copyright (c) 2011, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include <OobRx.h>
|
||||
|
||||
|
||||
/**
|
||||
Receive out-of-band messages from the remote system.
|
||||
|
||||
@param [in] argc The number of arguments
|
||||
@param [in] argv The argument value array
|
||||
|
||||
@retval 0 The application exited normally.
|
||||
@retval Other An error occurred.
|
||||
**/
|
||||
int
|
||||
main(
|
||||
int argc,
|
||||
char ** argv
|
||||
)
|
||||
{
|
||||
int RetVal;
|
||||
WSADATA WsaData;
|
||||
|
||||
//
|
||||
// Initialize the WinSock layer
|
||||
//
|
||||
RetVal = WSAStartup ( MAKEWORD ( 2, 2 ), &WsaData );
|
||||
if ( 0 == RetVal ) {
|
||||
//
|
||||
// Start the application
|
||||
//
|
||||
RetVal = OobRx ( argc, argv );
|
||||
|
||||
//
|
||||
// Done with the WinSock layer
|
||||
//
|
||||
WSACleanup ( );
|
||||
}
|
||||
|
||||
//
|
||||
// Return the final result
|
||||
//
|
||||
return RetVal;
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/** @file
|
||||
Out-of-band transmit test application
|
||||
|
||||
Copyright (c) 2011, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include <OobTx.h>
|
||||
|
||||
|
||||
/**
|
||||
Transmit out-of-band messages to the remote system.
|
||||
|
||||
@param [in] Argc The number of arguments
|
||||
@param [in] Argv The argument value array
|
||||
|
||||
@retval 0 The application exited normally.
|
||||
@retval Other An error occurred.
|
||||
**/
|
||||
int
|
||||
main (
|
||||
IN int Argc,
|
||||
IN char **Argv
|
||||
)
|
||||
{
|
||||
int RetVal;
|
||||
|
||||
//
|
||||
// Run the application
|
||||
//
|
||||
RetVal = OobTx ( Argc, Argv );
|
||||
|
||||
//
|
||||
// Return the operation status
|
||||
//
|
||||
return RetVal;
|
||||
}
|
|
@ -0,0 +1,248 @@
|
|||
/** @file
|
||||
Windows version of the OOB Transmit application
|
||||
|
||||
Copyright (c) 2011, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include <OobTx.h>
|
||||
|
||||
UINT8 mBuffer[8192];
|
||||
UINT8 mOob[512];
|
||||
|
||||
/**
|
||||
Transmit out-of-band messages to the remote system.
|
||||
|
||||
@param [in] ArgC Argument count
|
||||
@param [in] ArgV Argument value array
|
||||
|
||||
@retval 0 Successfully operation
|
||||
**/
|
||||
|
||||
int
|
||||
OobTx (
|
||||
IN int ArgC,
|
||||
IN char **ArgV
|
||||
)
|
||||
{
|
||||
UINT32 BytesSent;
|
||||
ssize_t BytesTransmitted;
|
||||
UINT32 Index;
|
||||
struct sockaddr_in LocalPort;
|
||||
UINT32 OobInLine;
|
||||
UINT16 PortNumber;
|
||||
UINT32 RemoteAddress[4];
|
||||
struct sockaddr_in RemotePort;
|
||||
int RetVal;
|
||||
UINT32 TransmittedAfter;
|
||||
UINT32 TransmittedBefore;
|
||||
UINT32 TransmittedOob;
|
||||
SOCKET s;
|
||||
|
||||
//
|
||||
// Create the socket
|
||||
//
|
||||
s = socket ( AF_INET, SOCK_STREAM, IPPROTO_TCP );
|
||||
if ( -1 == s ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - socket error, errno: %d\r\n", RetVal );
|
||||
}
|
||||
else {
|
||||
//
|
||||
// Use for/break; instead of goto
|
||||
//
|
||||
for ( ; ; ) {
|
||||
//
|
||||
// Validate the arguments
|
||||
//
|
||||
if (( 2 > ArgC )
|
||||
|| ( 4 != sscanf ( ArgV[1],
|
||||
"%d.%d.%d.%d",
|
||||
&RemoteAddress[0],
|
||||
&RemoteAddress[1],
|
||||
&RemoteAddress[2],
|
||||
&RemoteAddress[3]))
|
||||
|| ( 224 < RemoteAddress[0])
|
||||
|| ( 255 < RemoteAddress[1])
|
||||
|| ( 255 < RemoteAddress[2])
|
||||
|| ( 255 < RemoteAddress[3])
|
||||
|| (( 0 == RemoteAddress[0])
|
||||
&& ( 0 == RemoteAddress[1])
|
||||
&& ( 0 == RemoteAddress[2])
|
||||
&& ( 0 == RemoteAddress[3]))) {
|
||||
printf ( "%s <remote IP address> [optional: enables in-line OOB]\r\n", ArgV[0]);
|
||||
RetVal = EINVAL;
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Bind the socket to a local port
|
||||
//
|
||||
memset ( &LocalPort, 0, sizeof ( LocalPort ));
|
||||
SIN_LEN ( LocalPort ) = sizeof ( LocalPort );
|
||||
SIN_FAMILY ( LocalPort ) = AF_INET;
|
||||
SIN_ADDR ( LocalPort ) = 0;
|
||||
SIN_PORT ( LocalPort ) = 0;
|
||||
RetVal = bind ( s,
|
||||
(struct sockaddr *)&LocalPort,
|
||||
sizeof ( LocalPort ));
|
||||
if ( -1 == RetVal ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - bind error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Specify the remote port
|
||||
//
|
||||
PortNumber = OOB_RX_PORT;
|
||||
memset ( &RemotePort, 0, sizeof ( RemotePort ));
|
||||
SIN_LEN ( RemotePort ) = sizeof ( RemotePort );
|
||||
SIN_FAMILY ( RemotePort ) = AF_INET;
|
||||
SIN_ADDR ( RemotePort ) = ( RemoteAddress[3] << 24 )
|
||||
| ( RemoteAddress[2] << 16 )
|
||||
| ( RemoteAddress[1] << 8 )
|
||||
| RemoteAddress[0];
|
||||
SIN_PORT ( RemotePort ) = htons ( PortNumber );
|
||||
|
||||
//
|
||||
// Connect to the remote server
|
||||
//
|
||||
RetVal = connect ( s, (struct sockaddr *)&RemotePort, sizeof ( RemotePort ));
|
||||
if ( -1 == RetVal ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - connect error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Select the OOB processing
|
||||
//
|
||||
OobInLine = ( 2 < ArgC );
|
||||
RetVal = setsockopt ( s,
|
||||
SOL_SOCKET,
|
||||
SO_OOBINLINE,
|
||||
(char *)&OobInLine,
|
||||
sizeof ( OobInLine ));
|
||||
if ( -1 == RetVal ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - setsockopt OOBINLINE error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
printf ( "%s\r\n", ( 0 != OobInLine ) ? "OOB messages are in-line"
|
||||
: "OOB messages move to the head of the queue" );
|
||||
|
||||
//
|
||||
// Initialize the messages
|
||||
//
|
||||
memset ( &mBuffer[0], 0, sizeof ( mBuffer ));
|
||||
memset ( &mOob[0], 0x11, sizeof ( mOob ));
|
||||
|
||||
//
|
||||
// Send the data before the out-of-band message
|
||||
//
|
||||
TransmittedBefore = 0;
|
||||
for ( Index = 0; TX_MSGS_BEFORE > Index; Index++ ) {
|
||||
BytesSent = 0;
|
||||
do {
|
||||
BytesTransmitted = send ( s,
|
||||
&mBuffer[BytesSent],
|
||||
sizeof ( mBuffer ) - BytesSent,
|
||||
0 );
|
||||
if ( -1 == BytesTransmitted ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - send before error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
BytesSent += (UINT32)BytesTransmitted;
|
||||
RetVal = 0;
|
||||
} while ( sizeof ( mBuffer ) > BytesSent );
|
||||
if ( 0 != RetVal ) {
|
||||
break;
|
||||
}
|
||||
TransmittedBefore += BytesSent;
|
||||
}
|
||||
if ( 0 != RetVal ) {
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Send the out-of-band message
|
||||
//
|
||||
BytesSent = 0;
|
||||
do {
|
||||
BytesTransmitted = send ( s,
|
||||
&mOob[BytesSent],
|
||||
sizeof ( mOob ) - BytesSent,
|
||||
MSG_OOB );
|
||||
if ( -1 == BytesTransmitted ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - send OOB error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
BytesSent += (UINT32)BytesTransmitted;
|
||||
RetVal = 0;
|
||||
} while ( sizeof ( mOob ) > BytesSent );
|
||||
if ( 0 != RetVal ) {
|
||||
break;
|
||||
}
|
||||
TransmittedOob = BytesSent;
|
||||
|
||||
//
|
||||
// Send the data after the out-of-band message
|
||||
//
|
||||
TransmittedAfter = 0;
|
||||
for ( Index = 0; TX_MSGS_AFTER > Index; Index++ ) {
|
||||
BytesSent = 0;
|
||||
do {
|
||||
BytesTransmitted = send ( s,
|
||||
&mBuffer[BytesSent],
|
||||
sizeof ( mBuffer ) - BytesSent,
|
||||
0 );
|
||||
if ( -1 == BytesTransmitted ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - send after error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
BytesSent += (UINT32)BytesTransmitted;
|
||||
RetVal = 0;
|
||||
} while ( sizeof ( mBuffer ) > BytesSent );
|
||||
if ( 0 != RetVal ) {
|
||||
break;
|
||||
}
|
||||
TransmittedAfter += BytesSent;
|
||||
}
|
||||
|
||||
//
|
||||
// Test completed successfully
|
||||
//
|
||||
if ( 0 == RetVal ) {
|
||||
printf ( "Bytes before OOB: %8d\r\n", TransmittedBefore );
|
||||
printf ( "Out-of-band bytes: %8d\r\n", TransmittedOob );
|
||||
printf ( "Bytes after OOB: %8d\r\n", TransmittedAfter );
|
||||
printf ( " --------\r\n" );
|
||||
printf ( "Total Bytes: %8d\r\n", TransmittedBefore
|
||||
+ TransmittedOob
|
||||
+ TransmittedAfter );
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Close the socket
|
||||
//
|
||||
CLOSE_SOCKET ( s );
|
||||
}
|
||||
|
||||
//
|
||||
// Return the operation status
|
||||
//
|
||||
return RetVal;
|
||||
}
|
|
@ -0,0 +1,97 @@
|
|||
/** @file
|
||||
Definitions for the OOB Transmit application
|
||||
|
||||
Copyright (c) 2011, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _OOB_TX_H_
|
||||
#define _OOB_TX_H_
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Include Files
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifdef BUILD_FOR_WINDOWS
|
||||
//
|
||||
// Build for Windows environment
|
||||
//
|
||||
|
||||
#include <winsock2.h>
|
||||
|
||||
#define CHAR8 char
|
||||
#define CLOSE_SOCKET closesocket
|
||||
#define EINVAL 22 // Invalid argument
|
||||
#define GET_ERRNO WSAGetLastError ( )
|
||||
#define SIN_ADDR(port) port.sin_addr.S_un.S_addr
|
||||
#define SIN_FAMILY(port) port.sin_family
|
||||
#define SIN_LEN(port) port.sin_family
|
||||
#define SIN_PORT(port) port.sin_port
|
||||
#define socklen_t int
|
||||
#define ssize_t int
|
||||
|
||||
#else // BUILD_FOR_WINDOWS
|
||||
//
|
||||
// Build for EFI environment
|
||||
//
|
||||
|
||||
#include <Uefi.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <netinet/in.h>
|
||||
|
||||
#include <sys/EfiSysCall.h>
|
||||
#include <sys/endian.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#define CLOSE_SOCKET close
|
||||
#define GET_ERRNO errno
|
||||
#define SIN_ADDR(port) port.sin_addr.s_addr
|
||||
#define SIN_FAMILY(port) port.sin_family
|
||||
#define SIN_LEN(port) port.sin_len
|
||||
#define SIN_PORT(port) port.sin_port
|
||||
#define SOCKET int
|
||||
|
||||
#endif // BUILD_FOR_WINDOWS
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Constants
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define OOB_RX_PORT 12344
|
||||
|
||||
#define TX_MSGS_BEFORE 32
|
||||
#define TX_MSGS_AFTER 8
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// API
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
Transmit out-of-band messages to the remote system.
|
||||
|
||||
@param [in] ArgC Argument count
|
||||
@param [in] ArgV Argument value array
|
||||
|
||||
@retval 0 Successfully operation
|
||||
**/
|
||||
|
||||
int
|
||||
OobTx (
|
||||
IN int ArgC,
|
||||
IN char **ArgV
|
||||
);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#endif // _OOB_TX_H_
|
|
@ -0,0 +1,64 @@
|
|||
#/** @file
|
||||
# OobTx Application
|
||||
#
|
||||
# This file contains an 'Intel Peripheral Driver' and is
|
||||
# licensed for Intel CPUs and chipsets under the terms of your
|
||||
# license agreement with Intel or your vendor. This file may
|
||||
# be modified by the user, subject to additional terms of the
|
||||
# license agreement
|
||||
#
|
||||
#
|
||||
# Copyright (c) 20011 Intel Corporation. All rights reserved
|
||||
# This software and associated documentation (if any) is furnished
|
||||
# under a license and may only be used or copied in accordance
|
||||
# with the terms of the license. Except as permitted by such
|
||||
# license, no part of this software or documentation may be
|
||||
# reproduced, stored in a retrieval system, or transmitted in any
|
||||
# form or by any means without the express written consent of
|
||||
# Intel Corporation.
|
||||
#
|
||||
##
|
||||
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = OobTx
|
||||
FILE_GUID = EB740091-A494-44d7-8D96-C192F95A6394
|
||||
MODULE_TYPE = UEFI_APPLICATION
|
||||
VERSION_STRING = 1.0
|
||||
ENTRY_POINT = ShellCEntryLib
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||
#
|
||||
|
||||
[Sources]
|
||||
Main.c
|
||||
OobTx.c
|
||||
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
ShellPkg/ShellPkg.dec
|
||||
StdLib/StdLib.dec
|
||||
|
||||
|
||||
[LibraryClasses]
|
||||
BaseMemoryLib
|
||||
BsdSocketLib
|
||||
DebugLib
|
||||
EfiSocketLib
|
||||
LibC
|
||||
LibMath
|
||||
ShellCEntryLib
|
||||
UefiBootServicesTableLib
|
||||
UefiLib
|
||||
# UseSocketDxe
|
||||
|
||||
[BuildOptions]
|
||||
INTEL:*_*_*_CC_FLAGS = /Qdiag-disable:181,186
|
||||
MSFT:*_*_*_CC_FLAGS = /Od
|
||||
GCC:*_*_*_CC_FLAGS = -O0 -Wno-unused-variable
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OobTx", "OobTx.vcproj", "{C5B91ED2-C2BA-4EE7-A789-F6621CE601B9}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{C5B91ED2-C2BA-4EE7-A789-F6621CE601B9}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C5B91ED2-C2BA-4EE7-A789-F6621CE601B9}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{C5B91ED2-C2BA-4EE7-A789-F6621CE601B9}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{C5B91ED2-C2BA-4EE7-A789-F6621CE601B9}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
Binary file not shown.
|
@ -0,0 +1,211 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="OobTx"
|
||||
ProjectGUID="{C5B91ED2-C2BA-4EE7-A789-F6621CE601B9}"
|
||||
RootNamespace="OobTx"
|
||||
Keyword="Win32Proj"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories=".."
|
||||
PreprocessorDefinitions="BUILD_FOR_WINDOWS; _CRT_SECURE_NO_DEPRECATE"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
BrowseInformation="1"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="1"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=".."
|
||||
PreprocessorDefinitions="BUILD_FOR_WINDOWS; _CRT_SECURE_NO_DEPRECATE"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
BrowseInformation="1"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\main.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\OobTx.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\OobTx.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
|
@ -0,0 +1,56 @@
|
|||
/** @file
|
||||
Windows version of the OOB Transmit application
|
||||
|
||||
Copyright (c) 2011, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include <OobTx.h>
|
||||
|
||||
|
||||
/**
|
||||
Transmit out-of-band messages to the remote system.
|
||||
|
||||
@param [in] Argc The number of arguments
|
||||
@param [in] Argv The argument value array
|
||||
|
||||
@retval 0 The application exited normally.
|
||||
@retval Other An error occurred.
|
||||
**/
|
||||
int
|
||||
main(
|
||||
int argc,
|
||||
char ** argv
|
||||
)
|
||||
{
|
||||
int RetVal;
|
||||
WSADATA WsaData;
|
||||
|
||||
//
|
||||
// Initialize the WinSock layer
|
||||
//
|
||||
RetVal = WSAStartup ( MAKEWORD ( 2, 2 ), &WsaData );
|
||||
if ( 0 == RetVal ) {
|
||||
//
|
||||
// Start the application
|
||||
//
|
||||
RetVal = OobTx ( argc, argv );
|
||||
|
||||
//
|
||||
// Done with the WinSock layer
|
||||
//
|
||||
WSACleanup ( );
|
||||
}
|
||||
|
||||
//
|
||||
// Return the final result
|
||||
//
|
||||
return RetVal;
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/** @file
|
||||
Raw IP4 receive test application
|
||||
|
||||
Copyright (c) 2011, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include "RawIp4Rx.h"
|
||||
|
||||
|
||||
/**
|
||||
Receive raw datagrams from a remote system.
|
||||
|
||||
@param [in] Argc The number of arguments
|
||||
@param [in] Argv The argument value array
|
||||
|
||||
@retval 0 The application exited normally.
|
||||
@retval Other An error occurred.
|
||||
**/
|
||||
int
|
||||
main (
|
||||
IN int Argc,
|
||||
IN char **Argv
|
||||
)
|
||||
{
|
||||
int RetVal;
|
||||
|
||||
//
|
||||
// Run the application
|
||||
//
|
||||
RetVal = RawIp4Rx ( Argc, Argv );
|
||||
|
||||
//
|
||||
// Return the operation status
|
||||
//
|
||||
return RetVal;
|
||||
}
|
|
@ -0,0 +1,188 @@
|
|||
/** @file
|
||||
Raw IP4 receive application
|
||||
|
||||
Copyright (c) 2011, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include "RawIp4Rx.h"
|
||||
|
||||
UINT8 mBuffer[65536];
|
||||
|
||||
|
||||
/**
|
||||
Run the raw IP4 receive application
|
||||
|
||||
@param [in] ArgC Argument count
|
||||
@param [in] ArgV Argument value array
|
||||
|
||||
@retval 0 Successfully operation
|
||||
**/
|
||||
int
|
||||
RawIp4Rx (
|
||||
IN int ArgC,
|
||||
IN char **ArgV
|
||||
)
|
||||
{
|
||||
ssize_t BytesReceived;
|
||||
struct sockaddr_in LocalPort;
|
||||
socklen_t LocalPortLength;
|
||||
struct sockaddr_in RemotePort;
|
||||
socklen_t RemotePortLength;
|
||||
int RetVal;
|
||||
SOCKET s;
|
||||
UINT64 TotalBytesReceived;
|
||||
|
||||
//
|
||||
// Create the socket
|
||||
//
|
||||
s = socket ( AF_INET, SOCK_RAW, RAW_PROTOCOL );
|
||||
if ( -1 == s ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - socket error, errno: %d\r\n", RetVal );
|
||||
}
|
||||
else {
|
||||
//
|
||||
// Use for/break; instead of goto
|
||||
//
|
||||
for ( ; ; ) {
|
||||
//
|
||||
// Bind the socket to a known port
|
||||
//
|
||||
memset ( &LocalPort, 0, sizeof ( LocalPort ));
|
||||
SIN_LEN ( LocalPort ) = sizeof ( LocalPort );
|
||||
SIN_FAMILY ( LocalPort ) = AF_INET;
|
||||
SIN_ADDR ( LocalPort ) = 0;
|
||||
SIN_PORT ( LocalPort ) = 0;
|
||||
RetVal = bind ( s,
|
||||
(struct sockaddr *)&LocalPort,
|
||||
sizeof ( LocalPort ));
|
||||
if ( -1 == RetVal ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - bind error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Display the local address and protocol
|
||||
//
|
||||
LocalPortLength = sizeof ( LocalPort );
|
||||
RetVal = getsockname ( s, (struct sockaddr *)&LocalPort, &LocalPortLength );
|
||||
if ( 0 != RetVal ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - getsockname error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
printf ( "Local Address: %d.%d.%d.%d, Protocol: %d\r\n",
|
||||
(UINT8)SIN_ADDR ( LocalPort ),
|
||||
(UINT8)( SIN_ADDR ( LocalPort ) >> 8 ),
|
||||
(UINT8)( SIN_ADDR ( LocalPort ) >> 16 ),
|
||||
(UINT8)( SIN_ADDR ( LocalPort ) >> 24 ),
|
||||
RAW_PROTOCOL );
|
||||
|
||||
//
|
||||
// Use for/break instead of goto
|
||||
//
|
||||
TotalBytesReceived = 0;
|
||||
for ( ; ; ) {
|
||||
//
|
||||
// Receive data from the remote system
|
||||
//
|
||||
do {
|
||||
//
|
||||
// Attempt to receive a packet
|
||||
//
|
||||
RemotePortLength = sizeof ( RemotePort );
|
||||
BytesReceived = recvfrom ( s,
|
||||
&mBuffer[0],
|
||||
sizeof ( mBuffer ),
|
||||
0,
|
||||
(struct sockaddr *)&RemotePort,
|
||||
&RemotePortLength );
|
||||
RetVal = (UINT32)BytesReceived;
|
||||
if ( 0 < BytesReceived ) {
|
||||
//
|
||||
// Display the received data
|
||||
//
|
||||
printf ( "%4d bytes received from %d.%d.%d.%d:%d\r\n"
|
||||
"%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\r\n"
|
||||
"%02x %02x %02x %02x\r\n",
|
||||
(UINT32)BytesReceived,
|
||||
(UINT8)SIN_ADDR ( RemotePort ),
|
||||
(UINT8)( SIN_ADDR ( RemotePort ) >> 8 ),
|
||||
(UINT8)( SIN_ADDR ( RemotePort ) >> 16 ),
|
||||
(UINT8)( SIN_ADDR ( RemotePort ) >> 24 ),
|
||||
SIN_PORT ( RemotePort ),
|
||||
mBuffer[0],
|
||||
mBuffer[1],
|
||||
mBuffer[2],
|
||||
mBuffer[3],
|
||||
mBuffer[4],
|
||||
mBuffer[5],
|
||||
mBuffer[6],
|
||||
mBuffer[7],
|
||||
mBuffer[8],
|
||||
mBuffer[9],
|
||||
mBuffer[10],
|
||||
mBuffer[11],
|
||||
mBuffer[12],
|
||||
mBuffer[13],
|
||||
mBuffer[14],
|
||||
mBuffer[15],
|
||||
mBuffer[16],
|
||||
mBuffer[17],
|
||||
mBuffer[18],
|
||||
mBuffer[19]);
|
||||
TotalBytesReceived += BytesReceived;
|
||||
|
||||
//
|
||||
// All done when the correct packet is received
|
||||
//
|
||||
if ( mBuffer[9] == RAW_PROTOCOL ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if ( -1 == BytesReceived ) {
|
||||
//
|
||||
// Check for a timeout
|
||||
//
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - recv error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
} while ( 0 != RetVal );
|
||||
|
||||
//
|
||||
// Display the bytes received
|
||||
//
|
||||
if ( 0 == RetVal ) {
|
||||
printf ( "Total Bytes Received: %Ld\r\n", TotalBytesReceived );
|
||||
}
|
||||
|
||||
//
|
||||
// Test complete
|
||||
//
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Close the socket
|
||||
//
|
||||
CLOSE_SOCKET ( s );
|
||||
printf ( "Socket closed\r\n" );
|
||||
}
|
||||
|
||||
//
|
||||
// Return the operation status
|
||||
//
|
||||
return RetVal;
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
/** @file
|
||||
Definitions for the raw IP4 receive application
|
||||
|
||||
Copyright (c) 2011, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _RAW_IP4_RX_H_
|
||||
#define _RAW_IP4_RX_H_
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Include Files
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifdef BUILD_FOR_WINDOWS
|
||||
//
|
||||
// Build for Windows environment
|
||||
//
|
||||
|
||||
#include <winsock2.h>
|
||||
|
||||
#define CLOSE_SOCKET closesocket
|
||||
#define SIN_ADDR(port) port.sin_addr.S_un.S_addr
|
||||
#define SIN_FAMILY(port) port.sin_family
|
||||
#define SIN_LEN(port) port.sin_family
|
||||
#define SIN_PORT(port) port.sin_port
|
||||
#define GET_ERRNO WSAGetLastError ( )
|
||||
|
||||
#define ssize_t int
|
||||
#define socklen_t int
|
||||
|
||||
#else // BUILD_FOR_WINDOWS
|
||||
//
|
||||
// Build for EFI environment
|
||||
//
|
||||
|
||||
#include <Uefi.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <netinet/in.h>
|
||||
|
||||
#include <sys/EfiSysCall.h>
|
||||
#include <sys/endian.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#define CLOSE_SOCKET close
|
||||
#define SIN_ADDR(port) port.sin_addr.s_addr
|
||||
#define SIN_FAMILY(port) port.sin_family
|
||||
#define SIN_LEN(port) port.sin_len
|
||||
#define SIN_PORT(port) port.sin_port
|
||||
#define SOCKET int
|
||||
#define GET_ERRNO errno
|
||||
|
||||
#endif // BUILD_FOR_WINDOWS
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Constants
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//
|
||||
// See http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml
|
||||
// and http://tools.ietf.org/html/rfc3692
|
||||
//
|
||||
#define RAW_PROTOCOL 253
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// API
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
Run the raw IP4 receive application
|
||||
|
||||
@param [in] ArgC Argument count
|
||||
@param [in] ArgV Argument value array
|
||||
|
||||
@retval 0 Successfully operation
|
||||
**/
|
||||
|
||||
int
|
||||
RawIp4Rx (
|
||||
IN int ArgC,
|
||||
IN char **ArgV
|
||||
);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#endif // _RAW_IP4_RX_H_
|
|
@ -0,0 +1,64 @@
|
|||
#/** @file
|
||||
# RawIp4 Application
|
||||
#
|
||||
# This file contains an 'Intel Peripheral Driver' and is
|
||||
# licensed for Intel CPUs and chipsets under the terms of your
|
||||
# license agreement with Intel or your vendor. This file may
|
||||
# be modified by the user, subject to additional terms of the
|
||||
# license agreement
|
||||
#
|
||||
#
|
||||
# Copyright (c) 20011 Intel Corporation. All rights reserved
|
||||
# This software and associated documentation (if any) is furnished
|
||||
# under a license and may only be used or copied in accordance
|
||||
# with the terms of the license. Except as permitted by such
|
||||
# license, no part of this software or documentation may be
|
||||
# reproduced, stored in a retrieval system, or transmitted in any
|
||||
# form or by any means without the express written consent of
|
||||
# Intel Corporation.
|
||||
#
|
||||
##
|
||||
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = RawIp4Rx
|
||||
FILE_GUID = 8D7AE6A9-B490-45e1-8795-C2BEAADC3814
|
||||
MODULE_TYPE = UEFI_APPLICATION
|
||||
VERSION_STRING = 1.0
|
||||
ENTRY_POINT = ShellCEntryLib
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||
#
|
||||
|
||||
[Sources]
|
||||
Main.c
|
||||
RawIp4Rx.c
|
||||
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
ShellPkg/ShellPkg.dec
|
||||
StdLib/StdLib.dec
|
||||
|
||||
|
||||
[LibraryClasses]
|
||||
BaseMemoryLib
|
||||
BsdSocketLib
|
||||
DebugLib
|
||||
EfiSocketLib
|
||||
LibC
|
||||
LibMath
|
||||
ShellCEntryLib
|
||||
UefiBootServicesTableLib
|
||||
UefiLib
|
||||
# UseSocketDxe
|
||||
|
||||
[BuildOptions]
|
||||
INTEL:*_*_*_CC_FLAGS = /Qdiag-disable:181,186
|
||||
MSFT:*_*_*_CC_FLAGS = /Od
|
||||
GCC:*_*_*_CC_FLAGS = -O0 -Wno-unused-variable
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RawIp4Rx", "RawIp4Rx.vcproj", "{FAD3909F-E05E-4A2A-9681-7C474EAC5025}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{FAD3909F-E05E-4A2A-9681-7C474EAC5025}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{FAD3909F-E05E-4A2A-9681-7C474EAC5025}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{FAD3909F-E05E-4A2A-9681-7C474EAC5025}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{FAD3909F-E05E-4A2A-9681-7C474EAC5025}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,211 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="RawIp4Rx"
|
||||
ProjectGUID="{FAD3909F-E05E-4A2A-9681-7C474EAC5025}"
|
||||
RootNamespace="RawIp4Rx"
|
||||
Keyword="Win32Proj"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories=".."
|
||||
PreprocessorDefinitions="BUILD_FOR_WINDOWS"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
BrowseInformation="1"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="1"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=".."
|
||||
PreprocessorDefinitions="BUILD_FOR_WINDOWS"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
BrowseInformation="1"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\main.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\RawIp4Rx.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\RawIp4Rx.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
|
@ -0,0 +1,61 @@
|
|||
/** @file
|
||||
Windows version of the raw IP4 receive application
|
||||
|
||||
Copyright (c) 2011, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include <RawIp4Rx.h>
|
||||
|
||||
|
||||
/**
|
||||
Receive raw IP4 packets from a remote system.
|
||||
|
||||
Please note that this program must be run with administrator privileges!
|
||||
|
||||
@param [in] argc The number of arguments
|
||||
@param [in] argv The argument value array
|
||||
|
||||
@retval 0 The application exited normally.
|
||||
@retval Other An error occurred.
|
||||
**/
|
||||
int
|
||||
main(
|
||||
int argc,
|
||||
char ** argv
|
||||
)
|
||||
{
|
||||
int RetVal;
|
||||
WSADATA WsaData;
|
||||
|
||||
//
|
||||
// Initialize the WinSock layer
|
||||
//
|
||||
RetVal = WSAStartup ( MAKEWORD ( 2, 2 ), &WsaData );
|
||||
if ( 0 == RetVal ) {
|
||||
//
|
||||
// Start the application
|
||||
//
|
||||
RetVal = RawIp4Rx ( argc, argv );
|
||||
if ( WSAEACCES == RetVal ) {
|
||||
printf ( "Requires administrator privileges to run!\r\n" );
|
||||
}
|
||||
|
||||
//
|
||||
// Done with the WinSock layer
|
||||
//
|
||||
WSACleanup ( );
|
||||
}
|
||||
|
||||
//
|
||||
// Return the final result
|
||||
//
|
||||
return RetVal;
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/** @file
|
||||
Raw IP4 transmit test application
|
||||
|
||||
Copyright (c) 2011, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include "RawIp4Tx.h"
|
||||
|
||||
|
||||
/**
|
||||
Transmit raw IP4 packets to the remote system.
|
||||
|
||||
@param [in] Argc The number of arguments
|
||||
@param [in] Argv The argument value array
|
||||
|
||||
@retval 0 The application exited normally.
|
||||
@retval Other An error occurred.
|
||||
**/
|
||||
int
|
||||
main (
|
||||
IN int Argc,
|
||||
IN char **Argv
|
||||
)
|
||||
{
|
||||
int RetVal;
|
||||
|
||||
//
|
||||
// Run the application
|
||||
//
|
||||
RetVal = RawIp4Tx ( Argc, Argv );
|
||||
|
||||
//
|
||||
// Return the operation status
|
||||
//
|
||||
return RetVal;
|
||||
}
|
|
@ -0,0 +1,157 @@
|
|||
/** @file
|
||||
Raw IP4 transmit application
|
||||
|
||||
Copyright (c) 2011, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include "RawIp4Tx.h"
|
||||
|
||||
UINT8 mBuffer[1024];
|
||||
|
||||
/**
|
||||
Transmit raw IP4 packets to the remote system.
|
||||
|
||||
@param [in] ArgC Argument count
|
||||
@param [in] ArgV Argument value array
|
||||
|
||||
@retval 0 Successfully operation
|
||||
**/
|
||||
|
||||
int
|
||||
RawIp4Tx (
|
||||
IN int ArgC,
|
||||
IN char **ArgV
|
||||
)
|
||||
{
|
||||
UINT32 BytesSent;
|
||||
ssize_t BytesTransmitted;
|
||||
struct sockaddr_in LocalPort;
|
||||
UINT32 RemoteAddress[4];
|
||||
struct sockaddr_in RemotePort;
|
||||
int RetVal;
|
||||
UINT32 TotalSent;
|
||||
SOCKET s;
|
||||
|
||||
//
|
||||
// Create the socket
|
||||
//
|
||||
s = socket ( AF_INET, SOCK_RAW, RAW_PROTOCOL );
|
||||
if ( -1 == s ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - socket error, errno: %d\r\n", RetVal );
|
||||
}
|
||||
else {
|
||||
//
|
||||
// Use for/break; instead of goto
|
||||
//
|
||||
for ( ; ; ) {
|
||||
//
|
||||
// Validate the arguments
|
||||
//
|
||||
if (( 2 > ArgC )
|
||||
|| ( 4 != sscanf ( ArgV[1],
|
||||
"%d.%d.%d.%d",
|
||||
&RemoteAddress[0],
|
||||
&RemoteAddress[1],
|
||||
&RemoteAddress[2],
|
||||
&RemoteAddress[3]))
|
||||
|| ( 224 < RemoteAddress[0])
|
||||
|| ( 255 < RemoteAddress[1])
|
||||
|| ( 255 < RemoteAddress[2])
|
||||
|| ( 255 < RemoteAddress[3])
|
||||
|| (( 0 == RemoteAddress[0])
|
||||
&& ( 0 == RemoteAddress[1])
|
||||
&& ( 0 == RemoteAddress[2])
|
||||
&& ( 0 == RemoteAddress[3]))) {
|
||||
printf ( "%s <remote IP address>\r\n", ArgV[0]);
|
||||
RetVal = EINVAL;
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Bind the socket to a local port
|
||||
//
|
||||
memset ( &LocalPort, 0, sizeof ( LocalPort ));
|
||||
SIN_LEN ( LocalPort ) = sizeof ( LocalPort );
|
||||
SIN_FAMILY ( LocalPort ) = AF_INET;
|
||||
SIN_ADDR ( LocalPort ) = 0;
|
||||
SIN_PORT ( LocalPort ) = 0;
|
||||
RetVal = bind ( s,
|
||||
(struct sockaddr *)&LocalPort,
|
||||
sizeof ( LocalPort ));
|
||||
if ( -1 == RetVal ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - bind error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Specify the remote port
|
||||
//
|
||||
memset ( &RemotePort, 0, sizeof ( RemotePort ));
|
||||
SIN_LEN ( RemotePort ) = sizeof ( RemotePort );
|
||||
SIN_FAMILY ( RemotePort ) = AF_INET;
|
||||
SIN_ADDR ( RemotePort ) = ( RemoteAddress[3] << 24 )
|
||||
| ( RemoteAddress[2] << 16 )
|
||||
| ( RemoteAddress[1] << 8 )
|
||||
| RemoteAddress[0];
|
||||
SIN_PORT ( RemotePort ) = 0;
|
||||
|
||||
//
|
||||
// Initialize the messages
|
||||
//
|
||||
memset ( &mBuffer[0], 0, sizeof ( mBuffer ));
|
||||
|
||||
//
|
||||
// Send the data before the out-of-band message
|
||||
//
|
||||
TotalSent = 0;
|
||||
BytesSent = 0;
|
||||
do {
|
||||
BytesTransmitted = sendto ( s,
|
||||
&mBuffer[BytesSent],
|
||||
sizeof ( mBuffer ) - BytesSent,
|
||||
0,
|
||||
(struct sockaddr *)&RemotePort,
|
||||
sizeof ( RemotePort ));
|
||||
if ( -1 == BytesTransmitted ) {
|
||||
RetVal = GET_ERRNO;
|
||||
printf ( "ERROR - send before error, errno: %d\r\n", RetVal );
|
||||
break;
|
||||
}
|
||||
BytesSent += (UINT32)BytesTransmitted;
|
||||
RetVal = 0;
|
||||
} while ( sizeof ( mBuffer ) > BytesSent );
|
||||
if ( 0 != RetVal ) {
|
||||
break;
|
||||
}
|
||||
TotalSent += BytesSent;
|
||||
|
||||
//
|
||||
// Test completed successfully
|
||||
//
|
||||
if ( 0 == RetVal ) {
|
||||
printf ( "Bytes sent: %8d\r\n", TotalSent );
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Close the socket
|
||||
//
|
||||
CLOSE_SOCKET ( s );
|
||||
}
|
||||
|
||||
//
|
||||
// Return the operation status
|
||||
//
|
||||
return RetVal;
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
/** @file
|
||||
Definitions for the raw IP4 transmit application
|
||||
|
||||
Copyright (c) 2011, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _RAW_IP4_TX_H_
|
||||
#define _RAW_IP4_TX_H_
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Include Files
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifdef BUILD_FOR_WINDOWS
|
||||
//
|
||||
// Build for Windows environment
|
||||
//
|
||||
|
||||
#include <winsock2.h>
|
||||
|
||||
#define CHAR8 char
|
||||
#define CLOSE_SOCKET closesocket
|
||||
#define EINVAL 22 // Invalid argument
|
||||
#define GET_ERRNO WSAGetLastError ( )
|
||||
#define SIN_ADDR(port) port.sin_addr.S_un.S_addr
|
||||
#define SIN_FAMILY(port) port.sin_family
|
||||
#define SIN_LEN(port) port.sin_family
|
||||
#define SIN_PORT(port) port.sin_port
|
||||
#define socklen_t int
|
||||
#define ssize_t int
|
||||
|
||||
#else // BUILD_FOR_WINDOWS
|
||||
//
|
||||
// Build for EFI environment
|
||||
//
|
||||
|
||||
#include <Uefi.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <netinet/in.h>
|
||||
|
||||
#include <sys/EfiSysCall.h>
|
||||
#include <sys/endian.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#define CLOSE_SOCKET close
|
||||
#define GET_ERRNO errno
|
||||
#define SIN_ADDR(port) port.sin_addr.s_addr
|
||||
#define SIN_FAMILY(port) port.sin_family
|
||||
#define SIN_LEN(port) port.sin_len
|
||||
#define SIN_PORT(port) port.sin_port
|
||||
#define SOCKET int
|
||||
|
||||
#endif // BUILD_FOR_WINDOWS
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Constants
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//
|
||||
// See http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml
|
||||
// and http://tools.ietf.org/html/rfc3692
|
||||
//
|
||||
#define RAW_PROTOCOL 253
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// API
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
Transmit raw IP4 packets to the remote system.
|
||||
|
||||
@param [in] ArgC Argument count
|
||||
@param [in] ArgV Argument value array
|
||||
|
||||
@retval 0 Successfully operation
|
||||
**/
|
||||
|
||||
int
|
||||
RawIp4Tx (
|
||||
IN int ArgC,
|
||||
IN char **ArgV
|
||||
);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#endif // _RAW_IP4_TX_H_
|
|
@ -0,0 +1,64 @@
|
|||
#/** @file
|
||||
# RawIp4Tx Application
|
||||
#
|
||||
# This file contains an 'Intel Peripheral Driver' and is
|
||||
# licensed for Intel CPUs and chipsets under the terms of your
|
||||
# license agreement with Intel or your vendor. This file may
|
||||
# be modified by the user, subject to additional terms of the
|
||||
# license agreement
|
||||
#
|
||||
#
|
||||
# Copyright (c) 20011 Intel Corporation. All rights reserved
|
||||
# This software and associated documentation (if any) is furnished
|
||||
# under a license and may only be used or copied in accordance
|
||||
# with the terms of the license. Except as permitted by such
|
||||
# license, no part of this software or documentation may be
|
||||
# reproduced, stored in a retrieval system, or transmitted in any
|
||||
# form or by any means without the express written consent of
|
||||
# Intel Corporation.
|
||||
#
|
||||
##
|
||||
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = RawIp4Tx
|
||||
FILE_GUID = 3DFE0FAB-70C7-4b53-9855-985F14DB2DDA
|
||||
MODULE_TYPE = UEFI_APPLICATION
|
||||
VERSION_STRING = 1.0
|
||||
ENTRY_POINT = ShellCEntryLib
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||
#
|
||||
|
||||
[Sources]
|
||||
Main.c
|
||||
RawIp4Tx.c
|
||||
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
ShellPkg/ShellPkg.dec
|
||||
StdLib/StdLib.dec
|
||||
|
||||
|
||||
[LibraryClasses]
|
||||
BaseMemoryLib
|
||||
BsdSocketLib
|
||||
DebugLib
|
||||
EfiSocketLib
|
||||
LibC
|
||||
LibMath
|
||||
ShellCEntryLib
|
||||
UefiBootServicesTableLib
|
||||
UefiLib
|
||||
# UseSocketDxe
|
||||
|
||||
[BuildOptions]
|
||||
INTEL:*_*_*_CC_FLAGS = /Qdiag-disable:181,186
|
||||
MSFT:*_*_*_CC_FLAGS = /Od
|
||||
GCC:*_*_*_CC_FLAGS = -O0 -Wno-unused-variable
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RawIp4Tx", "RawIp4Tx.vcproj", "{11018D35-F3E3-40F4-9213-7D277AF01A17}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{11018D35-F3E3-40F4-9213-7D277AF01A17}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{11018D35-F3E3-40F4-9213-7D277AF01A17}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{11018D35-F3E3-40F4-9213-7D277AF01A17}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{11018D35-F3E3-40F4-9213-7D277AF01A17}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,211 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="RawIp4Tx"
|
||||
ProjectGUID="{11018D35-F3E3-40F4-9213-7D277AF01A17}"
|
||||
RootNamespace="RawIp4Tx"
|
||||
Keyword="Win32Proj"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories=".."
|
||||
PreprocessorDefinitions="BUILD_FOR_WINDOWS; _CRT_SECURE_NO_DEPRECATE"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
BrowseInformation="1"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="WS2_32.lib"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="1"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=".."
|
||||
PreprocessorDefinitions="BUILD_FOR_WINDOWS; _CRT_SECURE_NO_DEPRECATE"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
BrowseInformation="1"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="WS2_32.lib"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\main.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\RawIp4Tx.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\RawIp4Tx.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
|
@ -0,0 +1,62 @@
|
|||
/** @file
|
||||
Windows version of the raw IP4 transmit application
|
||||
|
||||
Copyright (c) 2011, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include <RawIp4Tx.h>
|
||||
|
||||
|
||||
/**
|
||||
Transmit raw IP4 packets to the remote system.
|
||||
|
||||
Please note that this program must be run with administrator privileges!
|
||||
|
||||
@param [in] argc The number of arguments
|
||||
@param [in] argv The argument value array
|
||||
|
||||
@retval 0 The application exited normally.
|
||||
@retval Other An error occurred.
|
||||
**/
|
||||
int
|
||||
main(
|
||||
int argc,
|
||||
char ** argv
|
||||
)
|
||||
{
|
||||
int RetVal;
|
||||
WSADATA WsaData;
|
||||
|
||||
//
|
||||
// Initialize the WinSock layer
|
||||
//
|
||||
RetVal = WSAStartup ( MAKEWORD ( 2, 2 ), &WsaData );
|
||||
if ( 0 == RetVal ) {
|
||||
//
|
||||
// Start the application
|
||||
// See http://msdn.microsoft.com/en-us/library/ms740548(v=vs.85).aspx
|
||||
//
|
||||
RetVal = RawIp4Tx ( argc, argv );
|
||||
if ( WSAEACCES == RetVal ) {
|
||||
printf ( "Requires administrator privileges to run!\r\n" );
|
||||
}
|
||||
|
||||
//
|
||||
// Done with the WinSock layer
|
||||
//
|
||||
WSACleanup ( );
|
||||
}
|
||||
|
||||
//
|
||||
// Return the final result
|
||||
//
|
||||
return RetVal;
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
Users of the socket library need to do the following:
|
||||
|
||||
• Use the development branch: https://edk2.svn.sourceforge.net/svnroot/edk2/branches/EADK/
|
||||
• Create an Efi\etc directory on their system or USB flash device
|
||||
• Copy the files from StdLib\Efi\etc into that directory
|
||||
• Edit the files appropriately
|
||||
o Set the correct DNS servers in resolv.conf
|
||||
o Set the search order in host.conf
|
||||
• At the EFI shell
|
||||
o Set the device containing the \Efi directory as the default device
|
||||
o Run the socket application
|
|
@ -25,7 +25,7 @@
|
|||
#include <sys/socket.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
UINT8 mBuffer [ 65536 ];
|
||||
UINT8 mBuffer[ 65536 ];
|
||||
|
||||
/**
|
||||
Receive a datagram
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
#include <sys/socket.h>
|
||||
|
||||
char mBuffer [65536];
|
||||
char mBuffer[65536];
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -39,7 +39,7 @@ typedef struct {
|
|||
DATA_TYPE DataType;
|
||||
} OPTIONS;
|
||||
|
||||
CONST OPTIONS mOptions [] = {
|
||||
CONST OPTIONS mOptions[] = {
|
||||
{ "SO_ACCEPTCONN", SO_ACCEPTCONN, SOL_SOCKET, FALSE, DATA_TYPE_UNKNOWN },
|
||||
{ "SO_BROADCAST", SO_BROADCAST, SOL_SOCKET, TRUE, DATA_TYPE_UNKNOWN },
|
||||
{ "SO_DEBUG", SO_DEBUG, SOL_SOCKET, TRUE, DATA_TYPE_UNKNOWN },
|
||||
|
@ -62,9 +62,9 @@ CONST OPTIONS mOptions [] = {
|
|||
};
|
||||
|
||||
|
||||
UINT8 mBuffer [ 65536 ];
|
||||
UINT8 mValue [ 65536 ];
|
||||
char * mSocketType [] = {
|
||||
UINT8 mBuffer[ 65536 ];
|
||||
UINT8 mValue[ 65536 ];
|
||||
char * mSocketType[] = {
|
||||
"SOCK_STREAM",
|
||||
"SOCK_DGRAM",
|
||||
"SOCK_RAW",
|
||||
|
@ -103,11 +103,10 @@ DisplayOption (
|
|||
// Display the value
|
||||
//
|
||||
Value.u8 = &mBuffer[0];
|
||||
switch ( pOption->DataType )
|
||||
{
|
||||
switch ( pOption->DataType ) {
|
||||
case DATA_TYPE_UNKNOWN:
|
||||
Print ( L"%a:", pOption->pOptionName );
|
||||
pEnd = &Value.u8 [ LengthInBytes ];
|
||||
pEnd = &Value.u8[ LengthInBytes ];
|
||||
while ( pEnd > Value.u8 ) {
|
||||
Print ( L" %02x", *Value.u8 );
|
||||
Value.u8 += 1;
|
||||
|
@ -127,7 +126,7 @@ DisplayOption (
|
|||
case DATA_TYPE_SOCKET_TYPE:
|
||||
if ( 4 == LengthInBytes ) {
|
||||
if (( SOCK_STREAM <= *Value.i32 ) && ( SOCK_SEQPACKET >= *Value.i32 )) {
|
||||
pString = mSocketType [ *Value.i32 - SOCK_STREAM ];
|
||||
pString = mSocketType[ *Value.i32 - SOCK_STREAM ];
|
||||
Print ( L"%a", pString );
|
||||
}
|
||||
else {
|
||||
|
@ -295,7 +294,7 @@ main (
|
|||
//
|
||||
BytesToWrite = 0;
|
||||
if (( 3 > Argc )
|
||||
|| ( 0 < ( BytesToWrite = GetOptionValue ( pOption, Argv [2])))) {
|
||||
|| ( 0 < ( BytesToWrite = GetOptionValue ( pOption, Argv[2])))) {
|
||||
//
|
||||
// Get the socket
|
||||
//
|
||||
|
|
|
@ -13,6 +13,10 @@
|
|||
AppPkg/Applications/Sockets/GetNetByName/GetNetByName.inf
|
||||
AppPkg/Applications/Sockets/GetServByName/GetServByName.inf
|
||||
AppPkg/Applications/Sockets/GetServByPort/GetServByPort.inf
|
||||
AppPkg/Applications/Sockets/OobRx/OobRx.inf
|
||||
AppPkg/Applications/Sockets/OobTx/OobTx.inf
|
||||
AppPkg/Applications/Sockets/RawIp4Rx/RawIp4Rx.inf
|
||||
AppPkg/Applications/Sockets/RawIp4Tx/RawIp4Tx.inf
|
||||
AppPkg/Applications/Sockets/RecvDgram/RecvDgram.inf
|
||||
AppPkg/Applications/Sockets/SetHostName/SetHostName.inf
|
||||
AppPkg/Applications/Sockets/SetSockOpt/SetSockOpt.inf
|
||||
|
|
|
@ -846,8 +846,7 @@ Print ( L"TFTP Opcode: 0x%08x\r\n", Opcode );
|
|||
bIgnorePacket = TRUE;
|
||||
break;
|
||||
}
|
||||
if ( pTftpServer->RxBytes > (ssize_t)( pContext->BlockSize + 2 + 2 ))
|
||||
{
|
||||
if ( pTftpServer->RxBytes > (ssize_t)( pContext->BlockSize + 2 + 2 )) {
|
||||
DEBUG (( DEBUG_ERROR,
|
||||
"ERROR - Receive data length of %d > %d bytes (maximum block size) for pContext 0x%08x\r\n",
|
||||
pTftpServer->RxBytes - 2 - 2,
|
||||
|
@ -1049,8 +1048,7 @@ pContext->File = (EFI_HANDLE)1;
|
|||
"ACK for block 0x%04x received\r\n",
|
||||
BlockNumber ));
|
||||
if (( !pContext->bExpectAck )
|
||||
|| ( BlockNumber != pContext->AckNext ))
|
||||
{
|
||||
|| ( BlockNumber != pContext->AckNext )) {
|
||||
DEBUG (( DEBUG_WARN | DEBUG_TFTP_ACK,
|
||||
"WARNING - Expecting ACK 0x%0x4 not received ACK 0x%08x\r\n",
|
||||
pContext->AckNext,
|
||||
|
@ -1248,8 +1246,7 @@ TftpServerTimer (
|
|||
pTftpServer->TftpPort.fd = socket ( AF_INET,
|
||||
SOCK_DGRAM,
|
||||
IPPROTO_UDP );
|
||||
if ( -1 != pTftpServer->TftpPort.fd )
|
||||
{
|
||||
if ( -1 != pTftpServer->TftpPort.fd ) {
|
||||
//
|
||||
// Set the socket address
|
||||
//
|
||||
|
|
|
@ -62,12 +62,12 @@
|
|||
// Constants
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define DEBUG_SOCKET_POLL 0x40000000 ///< Display the socket poll messages
|
||||
#define DEBUG_PORT_WORK 0x20000000 ///< Display the port work messages
|
||||
#define DEBUG_SERVER_TIMER 0x10000000 ///< Display the socket poll messages
|
||||
#define DEBUG_TFTP_PORT 0x08000000 ///< Display the TFTP port messages
|
||||
#define DEBUG_TFTP_REQUEST 0x04000000 ///< Display the TFTP request messages
|
||||
#define DEBUG_TX 0x02000000 ///< Display transmit messages
|
||||
#define DEBUG_PORT_WORK 0x40000000 ///< Display the port work messages
|
||||
#define DEBUG_SERVER_TIMER 0x20000000 ///< Display the socket poll messages
|
||||
#define DEBUG_TFTP_PORT 0x10000000 ///< Display the TFTP port messages
|
||||
#define DEBUG_TFTP_REQUEST 0x08000000 ///< Display the TFTP request messages
|
||||
#define DEBUG_TX 0x04000000 ///< Display transmit messages
|
||||
#define DEBUG_SOCKET_POLL 0x02000000 ///< Display the socket poll messages
|
||||
#define DEBUG_RX 0x01000000 ///< Display receive messages
|
||||
#define DEBUG_TFTP_ACK 0x00800000 ///< Display the TFTP ACK messages
|
||||
|
||||
|
@ -155,13 +155,13 @@ typedef struct _TSDT_CONNECTION_CONTEXT {
|
|||
BOOLEAN bEofSent; ///< End of file sent
|
||||
UINT8 * pBuffer; ///< Pointer into the file data
|
||||
UINT8 * pEnd; ///< End of the file data
|
||||
UINT8 FileData [ 64 * TFTP_MAX_BLOCK_SIZE ]; ///< File data to send
|
||||
UINT8 FileData[ 64 * TFTP_MAX_BLOCK_SIZE ]; ///< File data to send
|
||||
|
||||
//
|
||||
// Buffer management
|
||||
//
|
||||
ssize_t TxBytes; ///< Bytes in the TX buffer
|
||||
UINT8 TxBuffer [ 2 + 2 + TFTP_MAX_BLOCK_SIZE ]; ///< Transmit buffer
|
||||
UINT8 TxBuffer[ 2 + 2 + TFTP_MAX_BLOCK_SIZE ]; ///< Transmit buffer
|
||||
}GCC_TSDT_CONNECTION_CONTEXT;
|
||||
|
||||
/**
|
||||
|
@ -188,7 +188,7 @@ typedef struct {
|
|||
//
|
||||
struct sockaddr_in RemoteAddress; ///< Remote address
|
||||
ssize_t RxBytes; ///< Receive data length in bytes
|
||||
UINT8 RxBuffer [ 2 + 2 + TFTP_MAX_BLOCK_SIZE ]; ///< Receive buffer
|
||||
UINT8 RxBuffer[ 2 + 2 + TFTP_MAX_BLOCK_SIZE ]; ///< Receive buffer
|
||||
|
||||
//
|
||||
// Client port management
|
||||
|
|
|
@ -106,19 +106,19 @@ typedef struct {
|
|||
UINT16 IapcBootArch; // 109
|
||||
UINT8 Reserved2; // 111
|
||||
UINT32 Flags; // 112
|
||||
UINT32 ResetReg [3]; // 116
|
||||
UINT32 ResetReg[3]; // 116
|
||||
UINT8 ResetValue; // 128
|
||||
UINT8 Reserved3 [3]; // 129
|
||||
UINT8 Reserved3[3]; // 129
|
||||
UINT64 XFirmwareCtrl; // 132
|
||||
UINT64 XDsdt; // 140
|
||||
UINT32 XPm1aEvtBlk [3]; // 148
|
||||
UINT32 XPm1bEvtBlk [3]; // 160
|
||||
UINT32 XPm1aCntBlk [3]; // 172
|
||||
UINT32 XPm1bCntBlk [3]; // 184
|
||||
UINT32 XPm2CntBlk [3]; // 196
|
||||
UINT32 XPmTmrBlk [3]; // 208
|
||||
UINT32 XGpe0Blk [3]; // 220
|
||||
UINT32 XGpe1Blk [3]; // 232
|
||||
UINT32 XPm1aEvtBlk[3]; // 148
|
||||
UINT32 XPm1bEvtBlk[3]; // 160
|
||||
UINT32 XPm1aCntBlk[3]; // 172
|
||||
UINT32 XPm1bCntBlk[3]; // 184
|
||||
UINT32 XPm2CntBlk[3]; // 196
|
||||
UINT32 XPmTmrBlk[3]; // 208
|
||||
UINT32 XGpe0Blk[3]; // 220
|
||||
UINT32 XGpe1Blk[3]; // 232
|
||||
} ACPI_FADT;
|
||||
|
||||
|
||||
|
@ -146,7 +146,7 @@ typedef struct {
|
|||
} TABLE_SIGNATURE;
|
||||
|
||||
|
||||
CONST TABLE_SIGNATURE mTableId [] = {
|
||||
CONST TABLE_SIGNATURE mTableId[] = {
|
||||
{ DSDT_SIGNATURE, "DSDT", PAGE_ACPI_DSDT },
|
||||
{ FADT_SIGNATURE, "FADT", PAGE_ACPI_FADT }
|
||||
};
|
||||
|
@ -240,8 +240,8 @@ LocateTable (
|
|||
//
|
||||
// Walk the list of entries
|
||||
//
|
||||
pEntry = &pRsdt->Entry [ 0 ];
|
||||
pEnd = &pEntry [(( pRsdt->Length - sizeof ( *pRsdt )) >> 2 ) + 1 ];
|
||||
pEntry = &pRsdt->Entry[ 0 ];
|
||||
pEnd = &pEntry[(( pRsdt->Length - sizeof ( *pRsdt )) >> 2 ) + 1 ];
|
||||
while ( pEnd > pEntry ) {
|
||||
//
|
||||
// The entry is actually a 32-bit physical table address
|
||||
|
@ -324,7 +324,7 @@ RowAnsiArray (
|
|||
// Display the characters
|
||||
//
|
||||
pData = pChar;
|
||||
pEnd = &pChar [ Length ];
|
||||
pEnd = &pChar[ Length ];
|
||||
while ( pEnd > pData ) {
|
||||
Status = HttpSendCharacter ( SocketFD,
|
||||
pPort,
|
||||
|
@ -440,7 +440,7 @@ RowBytes (
|
|||
if ( EFI_ERROR ( Status )) {
|
||||
break;
|
||||
}
|
||||
pEnd = &pData [ ByteCount ];
|
||||
pEnd = &pData[ ByteCount ];
|
||||
while ( pEnd > pData ) {
|
||||
Status = HttpSendHexBits ( SocketFD,
|
||||
pPort,
|
||||
|
@ -784,8 +784,8 @@ SignatureLookup (
|
|||
// Walk the list of tables
|
||||
//
|
||||
Signature = *pSignature;
|
||||
pTableId = &mTableId [ 0 ];
|
||||
pEnd = &pTableId [ sizeof ( mTableId ) / sizeof ( mTableId [ 0 ])];
|
||||
pTableId = &mTableId[ 0 ];
|
||||
pEnd = &pTableId[ sizeof ( mTableId ) / sizeof ( mTableId[ 0 ])];
|
||||
while ( pEnd > pTableId ) {
|
||||
//
|
||||
// Attempt to locate the table signature
|
||||
|
@ -895,7 +895,7 @@ AcpiDsdtPage (
|
|||
pPort,
|
||||
"OEMID",
|
||||
sizeof ( pDsdt->OemId ),
|
||||
&pDsdt->OemId [ 0 ]);
|
||||
&pDsdt->OemId[ 0 ]);
|
||||
if ( EFI_ERROR ( Status )) {
|
||||
break;
|
||||
}
|
||||
|
@ -903,7 +903,7 @@ AcpiDsdtPage (
|
|||
pPort,
|
||||
"OEM Table ID",
|
||||
sizeof ( pDsdt->OemTableId ),
|
||||
&pDsdt->OemTableId [ 0 ]);
|
||||
&pDsdt->OemTableId[ 0 ]);
|
||||
if ( EFI_ERROR ( Status )) {
|
||||
break;
|
||||
}
|
||||
|
@ -1039,7 +1039,7 @@ AcpiFadtPage (
|
|||
pPort,
|
||||
"OEMID",
|
||||
sizeof ( pFadt->OemId ),
|
||||
&pFadt->OemId [ 0 ]);
|
||||
&pFadt->OemId[ 0 ]);
|
||||
if ( EFI_ERROR ( Status )) {
|
||||
break;
|
||||
}
|
||||
|
@ -1047,7 +1047,7 @@ AcpiFadtPage (
|
|||
pPort,
|
||||
"OEM Table ID",
|
||||
sizeof ( pFadt->OemTableId ),
|
||||
&pFadt->OemTableId [ 0 ]);
|
||||
&pFadt->OemTableId[ 0 ]);
|
||||
if ( EFI_ERROR ( Status )) {
|
||||
break;
|
||||
}
|
||||
|
@ -1576,7 +1576,7 @@ AcpiRsdp10Page (
|
|||
pPort,
|
||||
"OemId",
|
||||
sizeof ( pRsdp10b->OemId ),
|
||||
&pRsdp10b->OemId [ 0 ]);
|
||||
&pRsdp10b->OemId[ 0 ]);
|
||||
if ( EFI_ERROR ( Status )) {
|
||||
break;
|
||||
}
|
||||
|
@ -1679,7 +1679,7 @@ AcpiRsdp30Page (
|
|||
pPort,
|
||||
"OemId",
|
||||
sizeof ( pRsdp30->OemId ),
|
||||
&pRsdp30->OemId [ 0 ]);
|
||||
&pRsdp30->OemId[ 0 ]);
|
||||
if ( EFI_ERROR ( Status )) {
|
||||
break;
|
||||
}
|
||||
|
@ -1726,7 +1726,7 @@ AcpiRsdp30Page (
|
|||
pPort,
|
||||
"Reserved",
|
||||
sizeof ( pRsdp30->Reserved ),
|
||||
&pRsdp30->Reserved [ 0 ]);
|
||||
&pRsdp30->Reserved[ 0 ]);
|
||||
if ( EFI_ERROR ( Status )) {
|
||||
break;
|
||||
}
|
||||
|
@ -1771,7 +1771,7 @@ AcpiRsdtPage (
|
|||
CONST CHAR8 * pTableName;
|
||||
CONST CHAR16 * pWebPage;
|
||||
EFI_STATUS Status;
|
||||
UINT32 TableName [ 2 ];
|
||||
UINT32 TableName[ 2 ];
|
||||
|
||||
DBG_ENTER ( );
|
||||
|
||||
|
@ -1833,7 +1833,7 @@ AcpiRsdtPage (
|
|||
pPort,
|
||||
"OEMID",
|
||||
sizeof ( pRsdt->OemId ),
|
||||
&pRsdt->OemId [ 0 ]);
|
||||
&pRsdt->OemId[ 0 ]);
|
||||
if ( EFI_ERROR ( Status )) {
|
||||
break;
|
||||
}
|
||||
|
@ -1841,7 +1841,7 @@ AcpiRsdtPage (
|
|||
pPort,
|
||||
"OEM Table ID",
|
||||
sizeof ( pRsdt->OemTableId ),
|
||||
&pRsdt->OemTableId [ 0 ]);
|
||||
&pRsdt->OemTableId[ 0 ]);
|
||||
if ( EFI_ERROR ( Status )) {
|
||||
break;
|
||||
}
|
||||
|
@ -1871,16 +1871,16 @@ AcpiRsdtPage (
|
|||
//
|
||||
// Walk the list of entries
|
||||
//
|
||||
pEntry = &pRsdt->Entry [ 0 ];
|
||||
pEnd = &pEntry [(( pRsdt->Length - sizeof ( *pRsdt )) >> 2 ) + 1 ];
|
||||
TableName [ 1 ] = 0;
|
||||
pEntry = &pRsdt->Entry[ 0 ];
|
||||
pEnd = &pEntry[(( pRsdt->Length - sizeof ( *pRsdt )) >> 2 ) + 1 ];
|
||||
TableName[ 1 ] = 0;
|
||||
while ( pEnd > pEntry ) {
|
||||
//
|
||||
// The entry is actually a 32-bit physical table address
|
||||
// The first entry in the table is the 32-bit table signature
|
||||
//
|
||||
TableName [ 0 ] = *(UINT32 *)*pEntry;
|
||||
pWebPage = SignatureLookup ( &TableName [ 0 ], &pTableName );
|
||||
TableName[ 0 ] = *(UINT32 *)*pEntry;
|
||||
pWebPage = SignatureLookup ( &TableName[ 0 ], &pTableName );
|
||||
|
||||
//
|
||||
// Display the table address
|
||||
|
|
|
@ -38,7 +38,7 @@ typedef struct {
|
|||
CHAR16 * pWebPage;
|
||||
} GUID_NAME;
|
||||
|
||||
CONST GUID_NAME mGuidName [] = {
|
||||
CONST GUID_NAME mGuidName[] = {
|
||||
{ L"gEfiAcpi10TableGuid", &gEfiAcpi10TableGuid, PAGE_ACPI_RSDP_10B },
|
||||
{ L"gEfiAcpiTableGuid", &gEfiAcpiTableGuid, PAGE_ACPI_RSDP_30 },
|
||||
{ L"gEfiDebugImageInfoTableGuid", &gEfiDebugImageInfoTableGuid, NULL },
|
||||
|
@ -101,7 +101,7 @@ RowGuid (
|
|||
// Determine if this is a known GUID
|
||||
//
|
||||
pGuidName = &mGuidName[0];
|
||||
pGuidNameEnd = &pGuidName [ sizeof ( mGuidName ) / sizeof ( mGuidName[0])];
|
||||
pGuidNameEnd = &pGuidName[ sizeof ( mGuidName ) / sizeof ( mGuidName[0])];
|
||||
while ( pGuidNameEnd > pGuidName ) {
|
||||
if ( CompareGuid ( pGuidName->pGuid, pGuid )) {
|
||||
//
|
||||
|
@ -339,7 +339,7 @@ ConfigurationTablePage (
|
|||
// Determine the location of the configuration tables
|
||||
//
|
||||
pTable = gST->ConfigurationTable;
|
||||
pEnd = &pTable [ gST->NumberOfTableEntries ];
|
||||
pEnd = &pTable[ gST->NumberOfTableEntries ];
|
||||
while ( pEnd > pTable ) {
|
||||
Status = RowGuid ( SocketFD,
|
||||
pPort,
|
||||
|
|
|
@ -561,7 +561,7 @@ HttpRequest (
|
|||
// Attempt to parse the command
|
||||
//
|
||||
pData = &pPort->Request[0];
|
||||
pEnd = &pData [ pPort->RequestLength ];
|
||||
pEnd = &pData[ pPort->RequestLength ];
|
||||
pVerb = pData;
|
||||
pWebPage = HttpReplaceSpace ( pVerb, pEnd );
|
||||
if ( pEnd <= pWebPage ) {
|
||||
|
@ -589,7 +589,7 @@ HttpRequest (
|
|||
// Walk the page table
|
||||
//
|
||||
pPage = &mPageList[0];
|
||||
pPageEnd = &pPage [ mPageCount ];
|
||||
pPageEnd = &pPage[ mPageCount ];
|
||||
while ( pPageEnd > pPage ) {
|
||||
//
|
||||
// Determine if the page was located
|
||||
|
@ -668,15 +668,14 @@ HttpSend (
|
|||
//
|
||||
MaxBytes = sizeof ( pPort->TxBuffer );
|
||||
DataBytes = MaxBytes - pPort->TxBytes;
|
||||
if ( DataBytes > LengthInBytes )
|
||||
{
|
||||
if ( DataBytes > LengthInBytes ) {
|
||||
DataBytes = LengthInBytes;
|
||||
}
|
||||
|
||||
//
|
||||
// Copy the data into the buffer
|
||||
//
|
||||
CopyMem ( &pPort->TxBuffer [ pPort->TxBytes ],
|
||||
CopyMem ( &pPort->TxBuffer[ pPort->TxBytes ],
|
||||
pBuffer,
|
||||
DataBytes );
|
||||
|
||||
|
@ -910,7 +909,7 @@ HttpSendDump (
|
|||
//
|
||||
// Walk the bytes to be displayed
|
||||
//
|
||||
pEnd = &pData [ ByteCount ];
|
||||
pEnd = &pData[ ByteCount ];
|
||||
while ( pEnd > pData ) {
|
||||
//
|
||||
// Display the address
|
||||
|
@ -958,7 +957,7 @@ HttpSendDump (
|
|||
if (( BYTES_ON_A_LINE - InitialSpaces ) < BytesToDisplay ) {
|
||||
BytesToDisplay = BYTES_ON_A_LINE - InitialSpaces;
|
||||
}
|
||||
pDataEnd = &pData [ BytesToDisplay ];
|
||||
pDataEnd = &pData[ BytesToDisplay ];
|
||||
pTemp = pData;
|
||||
while ( pDataEnd > pTemp ) {
|
||||
Status = HttpSendHexBits ( SocketFD,
|
||||
|
@ -1151,7 +1150,7 @@ HttpSendGuid (
|
|||
Status = HttpSendHexBits ( SocketFD,
|
||||
pPort,
|
||||
8,
|
||||
pGuid->Data4 [ Index ]);
|
||||
pGuid->Data4[ Index ]);
|
||||
if ( EFI_ERROR ( Status )) {
|
||||
break;
|
||||
}
|
||||
|
@ -1488,7 +1487,7 @@ HttpSendValue (
|
|||
UINT64 Digit;
|
||||
CONST UINT64 * pEnd;
|
||||
CONST UINT64 * pDivisor;
|
||||
CONST UINT64 pDivisors [ ] = {
|
||||
CONST UINT64 pDivisors[ ] = {
|
||||
10000000000000000000L,
|
||||
1000000000000000000L,
|
||||
100000000000000000L,
|
||||
|
@ -1522,7 +1521,7 @@ HttpSendValue (
|
|||
//
|
||||
bDisplayZeros = FALSE;
|
||||
pDivisor = &pDivisors[0];
|
||||
pEnd = &pDivisor [ sizeof ( pDivisors ) / sizeof ( pDivisors [0])];
|
||||
pEnd = &pDivisor[ sizeof ( pDivisors ) / sizeof ( pDivisors[0])];
|
||||
while ( pEnd > pDivisor ) {
|
||||
//
|
||||
// Determine the next digit
|
||||
|
|
|
@ -29,7 +29,7 @@ Intel Corporation.
|
|||
/**
|
||||
List of pages in the system
|
||||
**/
|
||||
CONST DT_PAGE mPageList [] = {
|
||||
CONST DT_PAGE mPageList[] = {
|
||||
|
||||
//
|
||||
// The index page must be first
|
||||
|
|
|
@ -124,9 +124,9 @@ PortAdd (
|
|||
// Initialize the new entries in the FD list
|
||||
//
|
||||
for ( ; MaxEntriesNew > Index; Index++ ) {
|
||||
pFdListNew [ Index ].fd = -1;
|
||||
pFdListNew [ Index ].events = 0;
|
||||
pFdListNew [ Index ].revents = 0;
|
||||
pFdListNew[ Index ].fd = -1;
|
||||
pFdListNew[ Index ].events = 0;
|
||||
pFdListNew[ Index ].revents = 0;
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -156,7 +156,7 @@ PortAdd (
|
|||
// Initialize the new entries in the port list
|
||||
//
|
||||
for ( ; MaxEntriesNew > Index; Index++ ) {
|
||||
ppPortListNew [ Index ] = NULL;
|
||||
ppPortListNew[ Index ] = NULL;
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -200,15 +200,15 @@ PortAdd (
|
|||
//
|
||||
// Add the socket to the FD list
|
||||
//
|
||||
pFdList [ pWebServer->Entries ].fd = SocketFD;
|
||||
pFdList [ pWebServer->Entries ].events = POLLRDNORM
|
||||
pFdList[ pWebServer->Entries ].fd = SocketFD;
|
||||
pFdList[ pWebServer->Entries ].events = POLLRDNORM
|
||||
| POLLHUP;
|
||||
pFdList [ pWebServer->Entries ].revents = 0;
|
||||
pFdList[ pWebServer->Entries ].revents = 0;
|
||||
|
||||
//
|
||||
// Add the port to the port list
|
||||
//
|
||||
pWebServer->ppPortList [ pWebServer->Entries ] = pPort;
|
||||
pWebServer->ppPortList[ pWebServer->Entries ] = pPort;
|
||||
|
||||
//
|
||||
// Account for the new entry
|
||||
|
@ -263,7 +263,7 @@ PortRemove (
|
|||
//
|
||||
// Locate the specified socket file descriptor
|
||||
//
|
||||
if ( SocketFD == pFdList [ Index ].fd ) {
|
||||
if ( SocketFD == pFdList[ Index ].fd ) {
|
||||
//
|
||||
// Determine if this is the listen port
|
||||
//
|
||||
|
@ -279,7 +279,7 @@ PortRemove (
|
|||
//
|
||||
// Free the port structure
|
||||
//
|
||||
gBS->FreePool ( ppPortList [ Index ]);
|
||||
gBS->FreePool ( ppPortList[ Index ]);
|
||||
|
||||
//
|
||||
// Remove this port from the list by copying
|
||||
|
@ -287,13 +287,13 @@ PortRemove (
|
|||
//
|
||||
Entries -= 1;
|
||||
for ( ; Entries > Index; Index++ ) {
|
||||
pFdList [ Index ] = pFdList [ Index + 1 ];
|
||||
ppPortList [ Index ] = ppPortList [ Index + 1 ];
|
||||
pFdList[ Index ] = pFdList[ Index + 1 ];
|
||||
ppPortList[ Index ] = ppPortList[ Index + 1 ];
|
||||
}
|
||||
pFdList [ Index ].fd = -1;
|
||||
pFdList [ Index ].events = 0;
|
||||
pFdList [ Index ].revents = 0;
|
||||
ppPortList [ Index ] = NULL;
|
||||
pFdList[ Index ].fd = -1;
|
||||
pFdList[ Index ].events = 0;
|
||||
pFdList[ Index ].revents = 0;
|
||||
ppPortList[ Index ] = NULL;
|
||||
|
||||
//
|
||||
// Update the number of entries in the list
|
||||
|
@ -439,8 +439,7 @@ PortWork (
|
|||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
//
|
||||
// Receive the file data
|
||||
//
|
||||
|
@ -610,8 +609,7 @@ WebServerTimer (
|
|||
pWebServer->HttpListenPort = socket ( AF_INET,
|
||||
SOCK_STREAM,
|
||||
IPPROTO_TCP );
|
||||
if ( -1 != pWebServer->HttpListenPort )
|
||||
{
|
||||
if ( -1 != pWebServer->HttpListenPort ) {
|
||||
//
|
||||
// Set the socket address
|
||||
//
|
||||
|
|
|
@ -125,7 +125,7 @@
|
|||
|
||||
#endif // MDEPKG_NDEBUG
|
||||
|
||||
#define WEB_SERVER_SIGNATURE SIGNATURE_32('W','e','b','S') ///< DT_WEB_SERVER memory signature
|
||||
#define WEB_SERVER_SIGNATURE SIGNATURE_32 ('W','e','b','S') ///< DT_WEB_SERVER memory signature
|
||||
|
||||
#define SPACES_ADDRESS_TO_DATA 2
|
||||
#define BYTES_ON_A_LINE 16
|
||||
|
@ -154,9 +154,9 @@ typedef struct {
|
|||
//
|
||||
size_t RequestLength; ///< Request length in bytes
|
||||
size_t TxBytes; ///< Bytes in the TX buffer
|
||||
UINT8 Request [ 65536 ]; ///< Page request
|
||||
UINT8 RxBuffer [ 65536 ]; ///< Receive buffer
|
||||
UINT8 TxBuffer [ 65536 ]; ///< Transmit buffer
|
||||
UINT8 Request[ 65536 ]; ///< Page request
|
||||
UINT8 RxBuffer[ 65536 ]; ///< Receive buffer
|
||||
UINT8 TxBuffer[ 65536 ]; ///< Transmit buffer
|
||||
} WSDT_PORT;
|
||||
|
||||
/**
|
||||
|
@ -186,7 +186,7 @@ typedef struct {
|
|||
WSDT_PORT ** ppPortList; ///< List of port management structures
|
||||
} DT_WEB_SERVER;
|
||||
|
||||
//#define SERVER_FROM_SERVICE(a) CR(a, DT_WEB_SERVER, ServiceBinding, WEB_SERVER_SIGNATURE) ///< Locate DT_LAYER from service binding
|
||||
//#define SERVER_FROM_SERVICE(a) CR (a, DT_WEB_SERVER, ServiceBinding, WEB_SERVER_SIGNATURE) ///< Locate DT_LAYER from service binding
|
||||
|
||||
extern DT_WEB_SERVER mWebServer;
|
||||
|
||||
|
@ -217,7 +217,7 @@ typedef struct {
|
|||
UINT16 * pDescription; ///< Description of the page
|
||||
} DT_PAGE;
|
||||
|
||||
extern CONST DT_PAGE mPageList []; ///< List of pages
|
||||
extern CONST DT_PAGE mPageList[]; ///< List of pages
|
||||
extern CONST UINTN mPageCount; ///< Number of pages
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
|
Loading…
Reference in New Issue