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:
@ -51,9 +51,9 @@ BOOLEAN bTimerRunning;
|
|||||||
struct sockaddr_in LocalAddress;
|
struct sockaddr_in LocalAddress;
|
||||||
EFI_EVENT pTimer;
|
EFI_EVENT pTimer;
|
||||||
int ListenSocket;
|
int ListenSocket;
|
||||||
UINT8 Buffer [ DATA_BUFFER_SIZE ];
|
UINT8 Buffer[ DATA_BUFFER_SIZE ];
|
||||||
struct pollfd PollFd [ MAX_CONNECTIONS ];
|
struct pollfd PollFd[ MAX_CONNECTIONS ];
|
||||||
DT_PORT Port [ MAX_CONNECTIONS ];
|
DT_PORT Port[ MAX_CONNECTIONS ];
|
||||||
nfds_t MaxPort;
|
nfds_t MaxPort;
|
||||||
|
|
||||||
|
|
||||||
@ -136,17 +136,17 @@ SocketAccept (
|
|||||||
// Allocate a port
|
// Allocate a port
|
||||||
//
|
//
|
||||||
Index = MaxPort++;
|
Index = MaxPort++;
|
||||||
PollFd [ Index ].fd = ListenSocket;
|
PollFd[ Index ].fd = ListenSocket;
|
||||||
PollFd [ Index ].events = POLLRDNORM | POLLHUP;
|
PollFd[ Index ].events = POLLRDNORM | POLLHUP;
|
||||||
PollFd [ Index ].revents = 0;
|
PollFd[ Index ].revents = 0;
|
||||||
Port [ Index ].BytesAverage = 0;
|
Port[ Index ].BytesAverage = 0;
|
||||||
Port [ Index ].BytesPrevious = 0;
|
Port[ Index ].BytesPrevious = 0;
|
||||||
Port [ Index ].BytesTotal = 0;
|
Port[ Index ].BytesTotal = 0;
|
||||||
Port [ Index ].Samples = 0;
|
Port[ Index ].Samples = 0;
|
||||||
Port [ Index ].RemoteAddress.sin_len = 0;
|
Port[ Index ].RemoteAddress.sin_len = 0;
|
||||||
Port [ Index ].RemoteAddress.sin_family = 0;
|
Port[ Index ].RemoteAddress.sin_family = 0;
|
||||||
Port [ Index ].RemoteAddress.sin_port = 0;
|
Port[ Index ].RemoteAddress.sin_port = 0;
|
||||||
Port [ Index ].RemoteAddress.sin_addr.s_addr= 0;
|
Port[ Index ].RemoteAddress.sin_addr.s_addr= 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -242,8 +242,7 @@ SocketNew (
|
|||||||
"0x%08x: Socket created\r\n",
|
"0x%08x: Socket created\r\n",
|
||||||
ListenSocket ));
|
ListenSocket ));
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
Status = EFI_NOT_STARTED;
|
Status = EFI_NOT_STARTED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -312,16 +311,16 @@ SocketPoll (
|
|||||||
//
|
//
|
||||||
// Account for this descriptor
|
// Account for this descriptor
|
||||||
//
|
//
|
||||||
if ( 0 != PollFd [ Index ].revents ) {
|
if ( 0 != PollFd[ Index ].revents ) {
|
||||||
FdCount -= 1;
|
FdCount -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check for a broken connection
|
// Check for a broken connection
|
||||||
//
|
//
|
||||||
if ( 0 != ( PollFd [ Index ].revents & POLLHUP )) {
|
if ( 0 != ( PollFd[ Index ].revents & POLLHUP )) {
|
||||||
bRemoveSocket = TRUE;
|
bRemoveSocket = TRUE;
|
||||||
if ( ListenSocket == PollFd [ Index ].fd ) {
|
if ( ListenSocket == PollFd[ Index ].fd ) {
|
||||||
bListenError = TRUE;
|
bListenError = TRUE;
|
||||||
DEBUG (( DEBUG_ERROR,
|
DEBUG (( DEBUG_ERROR,
|
||||||
"ERROR - Network closed on listen socket, errno: %d\r\n",
|
"ERROR - Network closed on listen socket, errno: %d\r\n",
|
||||||
@ -330,37 +329,37 @@ SocketPoll (
|
|||||||
else {
|
else {
|
||||||
DEBUG (( DEBUG_ERROR,
|
DEBUG (( DEBUG_ERROR,
|
||||||
"ERROR - Network closed on socket %d.%d.%d.%d:%d, errno: %d\r\n",
|
"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 & 0xff,
|
||||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 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 >> 16 ) & 0xff,
|
||||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||||
htons ( Port [ Index ].RemoteAddress.sin_port ),
|
htons ( Port[ Index ].RemoteAddress.sin_port ),
|
||||||
errno ));
|
errno ));
|
||||||
|
|
||||||
//
|
//
|
||||||
// Close the socket
|
// Close the socket
|
||||||
//
|
//
|
||||||
CloseStatus = close ( PollFd [ Index ].fd );
|
CloseStatus = close ( PollFd[ Index ].fd );
|
||||||
if ( 0 == CloseStatus ) {
|
if ( 0 == CloseStatus ) {
|
||||||
bRemoveSocket = TRUE;
|
bRemoveSocket = TRUE;
|
||||||
DEBUG (( DEBUG_INFO,
|
DEBUG (( DEBUG_INFO,
|
||||||
"0x%08x: Socket closed for %d.%d.%d.%d:%d\r\n",
|
"0x%08x: Socket closed for %d.%d.%d.%d:%d\r\n",
|
||||||
PollFd [ Index ].fd,
|
PollFd[ Index ].fd,
|
||||||
Port [ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
Port[ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 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 >> 16 ) & 0xff,
|
||||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||||
htons ( Port [ Index ].RemoteAddress.sin_port )));
|
htons ( Port[ Index ].RemoteAddress.sin_port )));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DEBUG (( DEBUG_ERROR,
|
DEBUG (( DEBUG_ERROR,
|
||||||
"ERROR - Failed to close socket 0x%08x for %d.%d.%d.%d:%d, errno: %d\r\n",
|
"ERROR - Failed to close socket 0x%08x for %d.%d.%d.%d:%d, errno: %d\r\n",
|
||||||
PollFd [ Index ].fd,
|
PollFd[ Index ].fd,
|
||||||
Port [ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
Port[ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 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 >> 16 ) & 0xff,
|
||||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||||
htons ( Port [ Index ].RemoteAddress.sin_port ),
|
htons ( Port[ Index ].RemoteAddress.sin_port ),
|
||||||
errno ));
|
errno ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -369,11 +368,11 @@ SocketPoll (
|
|||||||
//
|
//
|
||||||
// Check for a connection or read data
|
// Check for a connection or read data
|
||||||
//
|
//
|
||||||
if ( 0 != ( PollFd [ Index ].revents & POLLRDNORM )) {
|
if ( 0 != ( PollFd[ Index ].revents & POLLRDNORM )) {
|
||||||
//
|
//
|
||||||
// Check for a connection
|
// Check for a connection
|
||||||
//
|
//
|
||||||
if ( ListenSocket == PollFd [ Index ].fd ) {
|
if ( ListenSocket == PollFd[ Index ].fd ) {
|
||||||
//
|
//
|
||||||
// Another client connection was received
|
// Another client connection was received
|
||||||
//
|
//
|
||||||
@ -416,7 +415,7 @@ SocketPoll (
|
|||||||
bRemoveSocket = TRUE;
|
bRemoveSocket = TRUE;
|
||||||
DEBUG (( DEBUG_INFO,
|
DEBUG (( DEBUG_INFO,
|
||||||
"0x%08x: Socket closed for %d.%d.%d.%d:%d\r\n",
|
"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 & 0xff,
|
||||||
( RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
( RemoteAddress.sin_addr.s_addr >> 8 ) & 0xff,
|
||||||
( RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
( RemoteAddress.sin_addr.s_addr >> 16 ) & 0xff,
|
||||||
@ -426,7 +425,7 @@ SocketPoll (
|
|||||||
else {
|
else {
|
||||||
DEBUG (( DEBUG_ERROR,
|
DEBUG (( DEBUG_ERROR,
|
||||||
"ERROR - Failed to close socket 0x%08x, errno: %d\r\n",
|
"ERROR - Failed to close socket 0x%08x, errno: %d\r\n",
|
||||||
PollFd [ Index ].fd,
|
PollFd[ Index ].fd,
|
||||||
errno ));
|
errno ));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -436,8 +435,7 @@ SocketPoll (
|
|||||||
//
|
//
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
//
|
//
|
||||||
// Display the connection
|
// Display the connection
|
||||||
//
|
//
|
||||||
@ -452,17 +450,17 @@ SocketPoll (
|
|||||||
// Allocate the client connection
|
// Allocate the client connection
|
||||||
//
|
//
|
||||||
Index = MaxPort++;
|
Index = MaxPort++;
|
||||||
Port [ Index ].BytesAverage = 0;
|
Port[ Index ].BytesAverage = 0;
|
||||||
Port [ Index ].BytesPrevious = 0;
|
Port[ Index ].BytesPrevious = 0;
|
||||||
Port [ Index ].BytesTotal = 0;
|
Port[ Index ].BytesTotal = 0;
|
||||||
Port [ Index ].Samples = 0;
|
Port[ Index ].Samples = 0;
|
||||||
Port [ Index ].RemoteAddress.sin_len = RemoteAddress.sin_len;
|
Port[ Index ].RemoteAddress.sin_len = RemoteAddress.sin_len;
|
||||||
Port [ Index ].RemoteAddress.sin_family = RemoteAddress.sin_family;
|
Port[ Index ].RemoteAddress.sin_family = RemoteAddress.sin_family;
|
||||||
Port [ Index ].RemoteAddress.sin_port = RemoteAddress.sin_port;
|
Port[ Index ].RemoteAddress.sin_port = RemoteAddress.sin_port;
|
||||||
Port [ Index ].RemoteAddress.sin_addr = RemoteAddress.sin_addr;
|
Port[ Index ].RemoteAddress.sin_addr = RemoteAddress.sin_addr;
|
||||||
PollFd [ Index ].fd = Socket;
|
PollFd[ Index ].fd = Socket;
|
||||||
PollFd [ Index ].events = POLLRDNORM | POLLHUP;
|
PollFd[ Index ].events = POLLRDNORM | POLLHUP;
|
||||||
PollFd [ Index ].revents = 0;
|
PollFd[ Index ].revents = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -470,7 +468,7 @@ SocketPoll (
|
|||||||
//
|
//
|
||||||
// Data received
|
// Data received
|
||||||
//
|
//
|
||||||
BytesReceived = read ( PollFd [ Index ].fd,
|
BytesReceived = read ( PollFd[ Index ].fd,
|
||||||
&Buffer,
|
&Buffer,
|
||||||
sizeof ( Buffer ));
|
sizeof ( Buffer ));
|
||||||
if ( 0 < BytesReceived ) {
|
if ( 0 < BytesReceived ) {
|
||||||
@ -479,13 +477,13 @@ SocketPoll (
|
|||||||
//
|
//
|
||||||
DEBUG (( DEBUG_INFO,
|
DEBUG (( DEBUG_INFO,
|
||||||
"0x%08x: Socket received 0x%08x bytes from %d.%d.%d.%d:%d\r\n",
|
"0x%08x: Socket received 0x%08x bytes from %d.%d.%d.%d:%d\r\n",
|
||||||
PollFd [ Index ].fd,
|
PollFd[ Index ].fd,
|
||||||
BytesReceived,
|
BytesReceived,
|
||||||
Port [ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
Port[ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 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 >> 16 ) & 0xff,
|
||||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||||
htons ( Port [ Index ].RemoteAddress.sin_port )));
|
htons ( Port[ Index ].RemoteAddress.sin_port )));
|
||||||
|
|
||||||
//
|
//
|
||||||
// Synchronize with the TimerCallback routine
|
// Synchronize with the TimerCallback routine
|
||||||
@ -495,7 +493,7 @@ SocketPoll (
|
|||||||
//
|
//
|
||||||
// Account for the data received
|
// Account for the data received
|
||||||
//
|
//
|
||||||
Port [ Index ].BytesTotal += BytesReceived;
|
Port[ Index ].BytesTotal += BytesReceived;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Release the synchronization with the TimerCallback routine
|
// Release the synchronization with the TimerCallback routine
|
||||||
@ -508,33 +506,33 @@ SocketPoll (
|
|||||||
//
|
//
|
||||||
DEBUG (( DEBUG_INFO,
|
DEBUG (( DEBUG_INFO,
|
||||||
"ERROR - Receive failure for %d.%d.%d.%d:%d, errno: %d\r\n",
|
"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 & 0xff,
|
||||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 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 >> 16 ) & 0xff,
|
||||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||||
htons ( Port [ Index ].RemoteAddress.sin_port ),
|
htons ( Port[ Index ].RemoteAddress.sin_port ),
|
||||||
errno ));
|
errno ));
|
||||||
CloseStatus = close ( PollFd [ Index ].fd );
|
CloseStatus = close ( PollFd[ Index ].fd );
|
||||||
if ( 0 == CloseStatus ) {
|
if ( 0 == CloseStatus ) {
|
||||||
bRemoveSocket = TRUE;
|
bRemoveSocket = TRUE;
|
||||||
DEBUG (( DEBUG_INFO,
|
DEBUG (( DEBUG_INFO,
|
||||||
"0x%08x: Socket closed for %d.%d.%d.%d:%d\r\n",
|
"0x%08x: Socket closed for %d.%d.%d.%d:%d\r\n",
|
||||||
PollFd [ Index ].fd,
|
PollFd[ Index ].fd,
|
||||||
Port [ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
Port[ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 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 >> 16 ) & 0xff,
|
||||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||||
htons ( Port [ Index ].RemoteAddress.sin_port )));
|
htons ( Port[ Index ].RemoteAddress.sin_port )));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DEBUG (( DEBUG_ERROR,
|
DEBUG (( DEBUG_ERROR,
|
||||||
"ERROR - Failed to close socket 0x%08x for %d.%d.%d.%d:%d, errno: %d\r\n",
|
"ERROR - Failed to close socket 0x%08x for %d.%d.%d.%d:%d, errno: %d\r\n",
|
||||||
PollFd [ Index ].fd,
|
PollFd[ Index ].fd,
|
||||||
Port [ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
Port[ Index ].RemoteAddress.sin_addr.s_addr & 0xff,
|
||||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 8 ) & 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 >> 16 ) & 0xff,
|
||||||
( Port [ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
( Port[ Index ].RemoteAddress.sin_addr.s_addr >> 24 ) & 0xff,
|
||||||
htons ( Port [ Index ].RemoteAddress.sin_port ),
|
htons ( Port[ Index ].RemoteAddress.sin_port ),
|
||||||
errno ));
|
errno ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -553,23 +551,23 @@ SocketPoll (
|
|||||||
if ( bRemoveSocket ) {
|
if ( bRemoveSocket ) {
|
||||||
DEBUG (( DEBUG_INFO,
|
DEBUG (( DEBUG_INFO,
|
||||||
"0x%08x: Socket removed from polling\r\n",
|
"0x%08x: Socket removed from polling\r\n",
|
||||||
PollFd [ Index ].fd ));
|
PollFd[ Index ].fd ));
|
||||||
MaxPort -= 1;
|
MaxPort -= 1;
|
||||||
for ( Entry = Index + 1; MaxPort >= Entry; Entry++ ) {
|
for ( Entry = Index + 1; MaxPort >= Entry; Entry++ ) {
|
||||||
EntryPrevious = Entry;
|
EntryPrevious = Entry;
|
||||||
Port [ EntryPrevious ].BytesAverage = Port [ Entry ].BytesAverage;
|
Port[ EntryPrevious ].BytesAverage = Port[ Entry ].BytesAverage;
|
||||||
Port [ EntryPrevious ].BytesPrevious = Port [ Entry ].BytesPrevious;
|
Port[ EntryPrevious ].BytesPrevious = Port[ Entry ].BytesPrevious;
|
||||||
Port [ EntryPrevious ].BytesTotal = Port [ Entry ].BytesTotal;
|
Port[ EntryPrevious ].BytesTotal = Port[ Entry ].BytesTotal;
|
||||||
Port [ EntryPrevious ].RemoteAddress.sin_len = Port [ Entry ].RemoteAddress.sin_len;
|
Port[ EntryPrevious ].RemoteAddress.sin_len = Port[ Entry ].RemoteAddress.sin_len;
|
||||||
Port [ EntryPrevious ].RemoteAddress.sin_family = Port [ Entry ].RemoteAddress.sin_family;
|
Port[ EntryPrevious ].RemoteAddress.sin_family = Port[ Entry ].RemoteAddress.sin_family;
|
||||||
Port [ EntryPrevious ].RemoteAddress.sin_port = Port [ Entry ].RemoteAddress.sin_port;
|
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 ].RemoteAddress.sin_addr.s_addr = Port[ Entry ].RemoteAddress.sin_addr.s_addr;
|
||||||
Port [ EntryPrevious ].Samples = Port [ Entry ].Samples;
|
Port[ EntryPrevious ].Samples = Port[ Entry ].Samples;
|
||||||
PollFd [ EntryPrevious ].events = PollFd [ Entry ].events;
|
PollFd[ EntryPrevious ].events = PollFd[ Entry ].events;
|
||||||
PollFd [ EntryPrevious ].fd = PollFd [ Entry ].fd;
|
PollFd[ EntryPrevious ].fd = PollFd[ Entry ].fd;
|
||||||
PollFd [ EntryPrevious ].revents = PollFd [ Entry ].revents;
|
PollFd[ EntryPrevious ].revents = PollFd[ Entry ].revents;
|
||||||
}
|
}
|
||||||
PollFd [ MaxPort ].fd = -1;
|
PollFd[ MaxPort ].fd = -1;
|
||||||
Index -= 1;
|
Index -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -625,31 +623,31 @@ TimerCallback (
|
|||||||
//
|
//
|
||||||
// Determine if any data was received
|
// Determine if any data was received
|
||||||
//
|
//
|
||||||
BytesReceived = Port [ Index ].BytesTotal;
|
BytesReceived = Port[ Index ].BytesTotal;
|
||||||
if (( ListenSocket != PollFd [ Index ].fd )
|
if (( ListenSocket != PollFd[ Index ].fd )
|
||||||
&& ( 0 != BytesReceived )) {
|
&& ( 0 != BytesReceived )) {
|
||||||
//
|
//
|
||||||
// Update the average bytes per second
|
// Update the average bytes per second
|
||||||
//
|
//
|
||||||
DeltaBytes = Port [ Index ].BytesAverage >> AVERAGE_SHIFT_COUNT;
|
DeltaBytes = Port[ Index ].BytesAverage >> AVERAGE_SHIFT_COUNT;
|
||||||
Port [ Index ].BytesAverage -= DeltaBytes;
|
Port[ Index ].BytesAverage -= DeltaBytes;
|
||||||
DeltaBytes = BytesReceived - Port [ Index ].BytesPrevious;
|
DeltaBytes = BytesReceived - Port[ Index ].BytesPrevious;
|
||||||
Port [ Index ].BytesPrevious = BytesReceived;
|
Port[ Index ].BytesPrevious = BytesReceived;
|
||||||
Port [ Index ].BytesAverage += DeltaBytes;
|
Port[ Index ].BytesAverage += DeltaBytes;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Separate the samples
|
// 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" );
|
Print ( L"---------- Stable average ----------\r\n" );
|
||||||
}
|
}
|
||||||
Port [ Index ].Samples += 1;
|
Port[ Index ].Samples += 1;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Display the data rate
|
// Display the data rate
|
||||||
//
|
//
|
||||||
Delta = (UINT32)( DeltaBytes >> DATA_RATE_UPDATE_SHIFT );
|
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 ) {
|
if ( Average < RANGE_SWITCH ) {
|
||||||
Print ( L"%d Bytes/sec, Ave: %d Bytes/Sec\r\n",
|
Print ( L"%d Bytes/sec, Ave: %d Bytes/Sec\r\n",
|
||||||
Delta,
|
Delta,
|
||||||
@ -919,8 +917,7 @@ main (
|
|||||||
//
|
//
|
||||||
// Use for/break instead of goto
|
// Use for/break instead of goto
|
||||||
//
|
//
|
||||||
for ( ; ; )
|
for ( ; ; ) {
|
||||||
{
|
|
||||||
//
|
//
|
||||||
// Create the timer
|
// Create the timer
|
||||||
//
|
//
|
||||||
|
@ -84,7 +84,7 @@ UINT64 TotalBytesSent;
|
|||||||
UINT64 PreviousBytes;
|
UINT64 PreviousBytes;
|
||||||
UINT64 AverageBytes;
|
UINT64 AverageBytes;
|
||||||
UINT64 Samples;
|
UINT64 Samples;
|
||||||
UINT8 Buffer [ DATA_BUFFER_SIZE ];
|
UINT8 Buffer[ DATA_BUFFER_SIZE ];
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -146,8 +146,7 @@ GetDigit (
|
|||||||
// Walk the digits
|
// Walk the digits
|
||||||
//
|
//
|
||||||
Value = 0;
|
Value = 0;
|
||||||
while (( '0' <= *pDigit ) && ( '9' >= *pDigit ))
|
while (( '0' <= *pDigit ) && ( '9' >= *pDigit )) {
|
||||||
{
|
|
||||||
//
|
//
|
||||||
// Make room for the new least significant digit
|
// Make room for the new least significant digit
|
||||||
//
|
//
|
||||||
@ -313,7 +312,7 @@ SocketConnect (
|
|||||||
//
|
//
|
||||||
// Check for user stop request
|
// Check for user stop request
|
||||||
//
|
//
|
||||||
while ( ! bTick ) {
|
while ( !bTick ) {
|
||||||
Status = ControlCCheck ( );
|
Status = ControlCCheck ( );
|
||||||
if ( EFI_ERROR ( Status )) {
|
if ( EFI_ERROR ( Status )) {
|
||||||
break;
|
break;
|
||||||
@ -494,8 +493,7 @@ SocketOpen (
|
|||||||
//
|
//
|
||||||
// Use do/while and break instead of goto
|
// Use do/while and break instead of goto
|
||||||
//
|
//
|
||||||
do
|
do {
|
||||||
{
|
|
||||||
//
|
//
|
||||||
// Wait for the network layer to initialize
|
// Wait for the network layer to initialize
|
||||||
//
|
//
|
||||||
@ -801,7 +799,7 @@ Tcp4Locate (
|
|||||||
//
|
//
|
||||||
// Open the network controller's service protocol
|
// Open the network controller's service protocol
|
||||||
//
|
//
|
||||||
Tcp4Controller = pHandles [ Tcp4Index++ ];
|
Tcp4Controller = pHandles[ Tcp4Index++ ];
|
||||||
Status = gBS->OpenProtocol (
|
Status = gBS->OpenProtocol (
|
||||||
Tcp4Controller,
|
Tcp4Controller,
|
||||||
&gEfiTcp4ServiceBindingProtocolGuid,
|
&gEfiTcp4ServiceBindingProtocolGuid,
|
||||||
@ -1499,12 +1497,15 @@ main (
|
|||||||
//
|
//
|
||||||
// Validate the command line
|
// Validate the command line
|
||||||
//
|
//
|
||||||
if ( 2 != Argc ) {
|
if ( 2 > Argc ) {
|
||||||
Print ( L"%s <remote IP address>\r\n", Argv[0] );
|
Print ( L"%s <remote IP address> [Use TCP]\r\n", Argv[0] );
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bTcp4 = TRUE;
|
//
|
||||||
|
// Determine if TCP should be used
|
||||||
|
//
|
||||||
|
bTcp4 = (BOOLEAN)( 2 < Argc );
|
||||||
|
|
||||||
//
|
//
|
||||||
// Determine the support routines
|
// Determine the support routines
|
||||||
@ -1522,8 +1523,7 @@ bTcp4 = TRUE;
|
|||||||
//
|
//
|
||||||
// Use for/break instead of goto
|
// Use for/break instead of goto
|
||||||
//
|
//
|
||||||
for ( ; ; )
|
for ( ; ; ) {
|
||||||
{
|
|
||||||
//
|
//
|
||||||
// No bytes sent so far
|
// No bytes sent so far
|
||||||
//
|
//
|
||||||
@ -1540,14 +1540,10 @@ bTcp4 = TRUE;
|
|||||||
RemoteHostAddress.sin_family = AF_INET;
|
RemoteHostAddress.sin_family = AF_INET;
|
||||||
RemoteHostAddress.sin_port = htons ( PcdGet16 ( DataSource_Port ));
|
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
|
// Get the IP address
|
||||||
//
|
//
|
||||||
pRemoteHost = Argv [1];
|
pRemoteHost = Argv[1];
|
||||||
Status = IpAddress ( );
|
Status = IpAddress ( );
|
||||||
if ( EFI_ERROR ( Status )) {
|
if ( EFI_ERROR ( Status )) {
|
||||||
break;
|
break;
|
||||||
|
@ -59,10 +59,10 @@ main (
|
|||||||
&RemoteAddress[1],
|
&RemoteAddress[1],
|
||||||
&RemoteAddress[2],
|
&RemoteAddress[2],
|
||||||
&RemoteAddress[3]))
|
&RemoteAddress[3]))
|
||||||
|| ( 255 < RemoteAddress [0])
|
|| ( 255 < RemoteAddress[0])
|
||||||
|| ( 255 < RemoteAddress [1])
|
|| ( 255 < RemoteAddress[1])
|
||||||
|| ( 255 < RemoteAddress [2])
|
|| ( 255 < RemoteAddress[2])
|
||||||
|| ( 255 < RemoteAddress [3])) {
|
|| ( 255 < RemoteAddress[3])) {
|
||||||
Print ( L"%a <IPv4 Address>\r\n", Argv[0]);
|
Print ( L"%a <IPv4 Address>\r\n", Argv[0]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -78,7 +78,7 @@ main (
|
|||||||
Print ( L"ERROR - host not found, errno: %d\r\n", errno );
|
Print ( L"ERROR - host not found, errno: %d\r\n", errno );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
pIpAddress = (UINT8 *)pHost->h_addr_list [ 0 ];
|
pIpAddress = (UINT8 *)pHost->h_addr_list[ 0 ];
|
||||||
Print ( L"%d.%d.%d.%d, %a\r\n",
|
Print ( L"%d.%d.%d.%d, %a\r\n",
|
||||||
pIpAddress[0],
|
pIpAddress[0],
|
||||||
pIpAddress[1],
|
pIpAddress[1],
|
||||||
|
@ -23,9 +23,9 @@
|
|||||||
|
|
||||||
#include <sys/socket.h>
|
#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>
|
#include <sys/socket.h>
|
||||||
|
|
||||||
char mBuffer [65536];
|
char mBuffer[65536];
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -53,10 +53,10 @@ main (
|
|||||||
&RemoteAddress[1],
|
&RemoteAddress[1],
|
||||||
&RemoteAddress[2],
|
&RemoteAddress[2],
|
||||||
&RemoteAddress[3]))
|
&RemoteAddress[3]))
|
||||||
|| ( 255 < RemoteAddress [0])
|
|| ( 255 < RemoteAddress[0])
|
||||||
|| ( 255 < RemoteAddress [1])
|
|| ( 255 < RemoteAddress[1])
|
||||||
|| ( 255 < RemoteAddress [2])
|
|| ( 255 < RemoteAddress[2])
|
||||||
|| ( 255 < RemoteAddress [3])) {
|
|| ( 255 < RemoteAddress[3])) {
|
||||||
Print ( L"%a <IPv4 Address>\r\n", Argv[0]);
|
Print ( L"%a <IPv4 Address>\r\n", Argv[0]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
|
||||||
char mBuffer [65536];
|
char mBuffer[65536];
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
|
||||||
char mBuffer [65536];
|
char mBuffer[65536];
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
|
||||||
char mBuffer [65536];
|
char mBuffer[65536];
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
44
AppPkg/Applications/Sockets/OobRx/Main.c
Normal file
44
AppPkg/Applications/Sockets/OobRx/Main.c
Normal file
@ -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;
|
||||||
|
}
|
253
AppPkg/Applications/Sockets/OobRx/OobRx.c
Normal file
253
AppPkg/Applications/Sockets/OobRx/OobRx.c
Normal file
@ -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;
|
||||||
|
}
|
96
AppPkg/Applications/Sockets/OobRx/OobRx.h
Normal file
96
AppPkg/Applications/Sockets/OobRx/OobRx.h
Normal file
@ -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_
|
64
AppPkg/Applications/Sockets/OobRx/OobRx.inf
Normal file
64
AppPkg/Applications/Sockets/OobRx/OobRx.inf
Normal file
@ -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
|
||||||
|
|
20
AppPkg/Applications/Sockets/OobRx/Windows/OobRx.sln
Normal file
20
AppPkg/Applications/Sockets/OobRx/Windows/OobRx.sln
Normal file
@ -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
|
BIN
AppPkg/Applications/Sockets/OobRx/Windows/OobRx.suo
Normal file
BIN
AppPkg/Applications/Sockets/OobRx/Windows/OobRx.suo
Normal file
Binary file not shown.
211
AppPkg/Applications/Sockets/OobRx/Windows/OobRx.vcproj
Normal file
211
AppPkg/Applications/Sockets/OobRx/Windows/OobRx.vcproj
Normal file
@ -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>
|
56
AppPkg/Applications/Sockets/OobRx/Windows/main.c
Normal file
56
AppPkg/Applications/Sockets/OobRx/Windows/main.c
Normal file
@ -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;
|
||||||
|
}
|
44
AppPkg/Applications/Sockets/OobTx/Main.c
Normal file
44
AppPkg/Applications/Sockets/OobTx/Main.c
Normal file
@ -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;
|
||||||
|
}
|
248
AppPkg/Applications/Sockets/OobTx/OobTx.c
Normal file
248
AppPkg/Applications/Sockets/OobTx/OobTx.c
Normal file
@ -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;
|
||||||
|
}
|
97
AppPkg/Applications/Sockets/OobTx/OobTx.h
Normal file
97
AppPkg/Applications/Sockets/OobTx/OobTx.h
Normal file
@ -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_
|
64
AppPkg/Applications/Sockets/OobTx/OobTx.inf
Normal file
64
AppPkg/Applications/Sockets/OobTx/OobTx.inf
Normal file
@ -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
|
||||||
|
|
20
AppPkg/Applications/Sockets/OobTx/Windows/OobTx.sln
Normal file
20
AppPkg/Applications/Sockets/OobTx/Windows/OobTx.sln
Normal file
@ -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
|
BIN
AppPkg/Applications/Sockets/OobTx/Windows/OobTx.suo
Normal file
BIN
AppPkg/Applications/Sockets/OobTx/Windows/OobTx.suo
Normal file
Binary file not shown.
211
AppPkg/Applications/Sockets/OobTx/Windows/OobTx.vcproj
Normal file
211
AppPkg/Applications/Sockets/OobTx/Windows/OobTx.vcproj
Normal file
@ -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>
|
56
AppPkg/Applications/Sockets/OobTx/Windows/main.c
Normal file
56
AppPkg/Applications/Sockets/OobTx/Windows/main.c
Normal file
@ -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;
|
||||||
|
}
|
44
AppPkg/Applications/Sockets/RawIp4Rx/Main.c
Normal file
44
AppPkg/Applications/Sockets/RawIp4Rx/Main.c
Normal file
@ -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;
|
||||||
|
}
|
188
AppPkg/Applications/Sockets/RawIp4Rx/RawIp4Rx.c
Normal file
188
AppPkg/Applications/Sockets/RawIp4Rx/RawIp4Rx.c
Normal file
@ -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;
|
||||||
|
}
|
98
AppPkg/Applications/Sockets/RawIp4Rx/RawIp4Rx.h
Normal file
98
AppPkg/Applications/Sockets/RawIp4Rx/RawIp4Rx.h
Normal file
@ -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_
|
64
AppPkg/Applications/Sockets/RawIp4Rx/RawIp4Rx.inf
Normal file
64
AppPkg/Applications/Sockets/RawIp4Rx/RawIp4Rx.inf
Normal file
@ -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
|
||||||
|
|
20
AppPkg/Applications/Sockets/RawIp4Rx/Windows/RawIp4Rx.sln
Normal file
20
AppPkg/Applications/Sockets/RawIp4Rx/Windows/RawIp4Rx.sln
Normal file
@ -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
|
211
AppPkg/Applications/Sockets/RawIp4Rx/Windows/RawIp4Rx.vcproj
Normal file
211
AppPkg/Applications/Sockets/RawIp4Rx/Windows/RawIp4Rx.vcproj
Normal file
@ -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>
|
61
AppPkg/Applications/Sockets/RawIp4Rx/Windows/main.c
Normal file
61
AppPkg/Applications/Sockets/RawIp4Rx/Windows/main.c
Normal file
@ -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;
|
||||||
|
}
|
44
AppPkg/Applications/Sockets/RawIp4Tx/Main.c
Normal file
44
AppPkg/Applications/Sockets/RawIp4Tx/Main.c
Normal file
@ -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;
|
||||||
|
}
|
157
AppPkg/Applications/Sockets/RawIp4Tx/RawIp4Tx.c
Normal file
157
AppPkg/Applications/Sockets/RawIp4Tx/RawIp4Tx.c
Normal file
@ -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;
|
||||||
|
}
|
98
AppPkg/Applications/Sockets/RawIp4Tx/RawIp4Tx.h
Normal file
98
AppPkg/Applications/Sockets/RawIp4Tx/RawIp4Tx.h
Normal file
@ -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_
|
64
AppPkg/Applications/Sockets/RawIp4Tx/RawIp4Tx.inf
Normal file
64
AppPkg/Applications/Sockets/RawIp4Tx/RawIp4Tx.inf
Normal file
@ -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
|
||||||
|
|
20
AppPkg/Applications/Sockets/RawIp4Tx/Windows/RawIp4Tx.sln
Normal file
20
AppPkg/Applications/Sockets/RawIp4Tx/Windows/RawIp4Tx.sln
Normal file
@ -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
|
211
AppPkg/Applications/Sockets/RawIp4Tx/Windows/RawIp4Tx.vcproj
Normal file
211
AppPkg/Applications/Sockets/RawIp4Tx/Windows/RawIp4Tx.vcproj
Normal file
@ -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>
|
62
AppPkg/Applications/Sockets/RawIp4Tx/Windows/main.c
Normal file
62
AppPkg/Applications/Sockets/RawIp4Tx/Windows/main.c
Normal file
@ -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;
|
||||||
|
}
|
11
AppPkg/Applications/Sockets/ReadMe.txt
Normal file
11
AppPkg/Applications/Sockets/ReadMe.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
Users of the socket library need to do the following:
|
||||||
|
|
||||||
|
<EFBFBD> Use the development branch: https://edk2.svn.sourceforge.net/svnroot/edk2/branches/EADK/
|
||||||
|
<EFBFBD> Create an Efi\etc directory on their system or USB flash device
|
||||||
|
<EFBFBD> Copy the files from StdLib\Efi\etc into that directory
|
||||||
|
<EFBFBD> Edit the files appropriately
|
||||||
|
o Set the correct DNS servers in resolv.conf
|
||||||
|
o Set the search order in host.conf
|
||||||
|
<EFBFBD> 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/socket.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
UINT8 mBuffer [ 65536 ];
|
UINT8 mBuffer[ 65536 ];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Receive a datagram
|
Receive a datagram
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
|
||||||
char mBuffer [65536];
|
char mBuffer[65536];
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -39,7 +39,7 @@ typedef struct {
|
|||||||
DATA_TYPE DataType;
|
DATA_TYPE DataType;
|
||||||
} OPTIONS;
|
} OPTIONS;
|
||||||
|
|
||||||
CONST OPTIONS mOptions [] = {
|
CONST OPTIONS mOptions[] = {
|
||||||
{ "SO_ACCEPTCONN", SO_ACCEPTCONN, SOL_SOCKET, FALSE, DATA_TYPE_UNKNOWN },
|
{ "SO_ACCEPTCONN", SO_ACCEPTCONN, SOL_SOCKET, FALSE, DATA_TYPE_UNKNOWN },
|
||||||
{ "SO_BROADCAST", SO_BROADCAST, SOL_SOCKET, TRUE, DATA_TYPE_UNKNOWN },
|
{ "SO_BROADCAST", SO_BROADCAST, SOL_SOCKET, TRUE, DATA_TYPE_UNKNOWN },
|
||||||
{ "SO_DEBUG", SO_DEBUG, 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 mBuffer[ 65536 ];
|
||||||
UINT8 mValue [ 65536 ];
|
UINT8 mValue[ 65536 ];
|
||||||
char * mSocketType [] = {
|
char * mSocketType[] = {
|
||||||
"SOCK_STREAM",
|
"SOCK_STREAM",
|
||||||
"SOCK_DGRAM",
|
"SOCK_DGRAM",
|
||||||
"SOCK_RAW",
|
"SOCK_RAW",
|
||||||
@ -103,11 +103,10 @@ DisplayOption (
|
|||||||
// Display the value
|
// Display the value
|
||||||
//
|
//
|
||||||
Value.u8 = &mBuffer[0];
|
Value.u8 = &mBuffer[0];
|
||||||
switch ( pOption->DataType )
|
switch ( pOption->DataType ) {
|
||||||
{
|
|
||||||
case DATA_TYPE_UNKNOWN:
|
case DATA_TYPE_UNKNOWN:
|
||||||
Print ( L"%a:", pOption->pOptionName );
|
Print ( L"%a:", pOption->pOptionName );
|
||||||
pEnd = &Value.u8 [ LengthInBytes ];
|
pEnd = &Value.u8[ LengthInBytes ];
|
||||||
while ( pEnd > Value.u8 ) {
|
while ( pEnd > Value.u8 ) {
|
||||||
Print ( L" %02x", *Value.u8 );
|
Print ( L" %02x", *Value.u8 );
|
||||||
Value.u8 += 1;
|
Value.u8 += 1;
|
||||||
@ -127,7 +126,7 @@ DisplayOption (
|
|||||||
case DATA_TYPE_SOCKET_TYPE:
|
case DATA_TYPE_SOCKET_TYPE:
|
||||||
if ( 4 == LengthInBytes ) {
|
if ( 4 == LengthInBytes ) {
|
||||||
if (( SOCK_STREAM <= *Value.i32 ) && ( SOCK_SEQPACKET >= *Value.i32 )) {
|
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 );
|
Print ( L"%a", pString );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -295,7 +294,7 @@ main (
|
|||||||
//
|
//
|
||||||
BytesToWrite = 0;
|
BytesToWrite = 0;
|
||||||
if (( 3 > Argc )
|
if (( 3 > Argc )
|
||||||
|| ( 0 < ( BytesToWrite = GetOptionValue ( pOption, Argv [2])))) {
|
|| ( 0 < ( BytesToWrite = GetOptionValue ( pOption, Argv[2])))) {
|
||||||
//
|
//
|
||||||
// Get the socket
|
// Get the socket
|
||||||
//
|
//
|
||||||
|
@ -13,6 +13,10 @@
|
|||||||
AppPkg/Applications/Sockets/GetNetByName/GetNetByName.inf
|
AppPkg/Applications/Sockets/GetNetByName/GetNetByName.inf
|
||||||
AppPkg/Applications/Sockets/GetServByName/GetServByName.inf
|
AppPkg/Applications/Sockets/GetServByName/GetServByName.inf
|
||||||
AppPkg/Applications/Sockets/GetServByPort/GetServByPort.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/RecvDgram/RecvDgram.inf
|
||||||
AppPkg/Applications/Sockets/SetHostName/SetHostName.inf
|
AppPkg/Applications/Sockets/SetHostName/SetHostName.inf
|
||||||
AppPkg/Applications/Sockets/SetSockOpt/SetSockOpt.inf
|
AppPkg/Applications/Sockets/SetSockOpt/SetSockOpt.inf
|
||||||
|
@ -846,8 +846,7 @@ Print ( L"TFTP Opcode: 0x%08x\r\n", Opcode );
|
|||||||
bIgnorePacket = TRUE;
|
bIgnorePacket = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ( pTftpServer->RxBytes > (ssize_t)( pContext->BlockSize + 2 + 2 ))
|
if ( pTftpServer->RxBytes > (ssize_t)( pContext->BlockSize + 2 + 2 )) {
|
||||||
{
|
|
||||||
DEBUG (( DEBUG_ERROR,
|
DEBUG (( DEBUG_ERROR,
|
||||||
"ERROR - Receive data length of %d > %d bytes (maximum block size) for pContext 0x%08x\r\n",
|
"ERROR - Receive data length of %d > %d bytes (maximum block size) for pContext 0x%08x\r\n",
|
||||||
pTftpServer->RxBytes - 2 - 2,
|
pTftpServer->RxBytes - 2 - 2,
|
||||||
@ -1049,8 +1048,7 @@ pContext->File = (EFI_HANDLE)1;
|
|||||||
"ACK for block 0x%04x received\r\n",
|
"ACK for block 0x%04x received\r\n",
|
||||||
BlockNumber ));
|
BlockNumber ));
|
||||||
if (( !pContext->bExpectAck )
|
if (( !pContext->bExpectAck )
|
||||||
|| ( BlockNumber != pContext->AckNext ))
|
|| ( BlockNumber != pContext->AckNext )) {
|
||||||
{
|
|
||||||
DEBUG (( DEBUG_WARN | DEBUG_TFTP_ACK,
|
DEBUG (( DEBUG_WARN | DEBUG_TFTP_ACK,
|
||||||
"WARNING - Expecting ACK 0x%0x4 not received ACK 0x%08x\r\n",
|
"WARNING - Expecting ACK 0x%0x4 not received ACK 0x%08x\r\n",
|
||||||
pContext->AckNext,
|
pContext->AckNext,
|
||||||
@ -1248,8 +1246,7 @@ TftpServerTimer (
|
|||||||
pTftpServer->TftpPort.fd = socket ( AF_INET,
|
pTftpServer->TftpPort.fd = socket ( AF_INET,
|
||||||
SOCK_DGRAM,
|
SOCK_DGRAM,
|
||||||
IPPROTO_UDP );
|
IPPROTO_UDP );
|
||||||
if ( -1 != pTftpServer->TftpPort.fd )
|
if ( -1 != pTftpServer->TftpPort.fd ) {
|
||||||
{
|
|
||||||
//
|
//
|
||||||
// Set the socket address
|
// Set the socket address
|
||||||
//
|
//
|
||||||
|
@ -62,12 +62,12 @@
|
|||||||
// Constants
|
// Constants
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
#define DEBUG_SOCKET_POLL 0x40000000 ///< Display the socket poll messages
|
#define DEBUG_PORT_WORK 0x40000000 ///< Display the port work messages
|
||||||
#define DEBUG_PORT_WORK 0x20000000 ///< Display the port work messages
|
#define DEBUG_SERVER_TIMER 0x20000000 ///< Display the socket poll messages
|
||||||
#define DEBUG_SERVER_TIMER 0x10000000 ///< Display the socket poll messages
|
#define DEBUG_TFTP_PORT 0x10000000 ///< Display the TFTP port messages
|
||||||
#define DEBUG_TFTP_PORT 0x08000000 ///< Display the TFTP port messages
|
#define DEBUG_TFTP_REQUEST 0x08000000 ///< Display the TFTP request messages
|
||||||
#define DEBUG_TFTP_REQUEST 0x04000000 ///< Display the TFTP request messages
|
#define DEBUG_TX 0x04000000 ///< Display transmit messages
|
||||||
#define DEBUG_TX 0x02000000 ///< Display transmit messages
|
#define DEBUG_SOCKET_POLL 0x02000000 ///< Display the socket poll messages
|
||||||
#define DEBUG_RX 0x01000000 ///< Display receive messages
|
#define DEBUG_RX 0x01000000 ///< Display receive messages
|
||||||
#define DEBUG_TFTP_ACK 0x00800000 ///< Display the TFTP ACK 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
|
BOOLEAN bEofSent; ///< End of file sent
|
||||||
UINT8 * pBuffer; ///< Pointer into the file data
|
UINT8 * pBuffer; ///< Pointer into the file data
|
||||||
UINT8 * pEnd; ///< End of 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
|
// Buffer management
|
||||||
//
|
//
|
||||||
ssize_t TxBytes; ///< Bytes in the TX buffer
|
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;
|
}GCC_TSDT_CONNECTION_CONTEXT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -188,7 +188,7 @@ typedef struct {
|
|||||||
//
|
//
|
||||||
struct sockaddr_in RemoteAddress; ///< Remote address
|
struct sockaddr_in RemoteAddress; ///< Remote address
|
||||||
ssize_t RxBytes; ///< Receive data length in bytes
|
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
|
// Client port management
|
||||||
|
@ -106,19 +106,19 @@ typedef struct {
|
|||||||
UINT16 IapcBootArch; // 109
|
UINT16 IapcBootArch; // 109
|
||||||
UINT8 Reserved2; // 111
|
UINT8 Reserved2; // 111
|
||||||
UINT32 Flags; // 112
|
UINT32 Flags; // 112
|
||||||
UINT32 ResetReg [3]; // 116
|
UINT32 ResetReg[3]; // 116
|
||||||
UINT8 ResetValue; // 128
|
UINT8 ResetValue; // 128
|
||||||
UINT8 Reserved3 [3]; // 129
|
UINT8 Reserved3[3]; // 129
|
||||||
UINT64 XFirmwareCtrl; // 132
|
UINT64 XFirmwareCtrl; // 132
|
||||||
UINT64 XDsdt; // 140
|
UINT64 XDsdt; // 140
|
||||||
UINT32 XPm1aEvtBlk [3]; // 148
|
UINT32 XPm1aEvtBlk[3]; // 148
|
||||||
UINT32 XPm1bEvtBlk [3]; // 160
|
UINT32 XPm1bEvtBlk[3]; // 160
|
||||||
UINT32 XPm1aCntBlk [3]; // 172
|
UINT32 XPm1aCntBlk[3]; // 172
|
||||||
UINT32 XPm1bCntBlk [3]; // 184
|
UINT32 XPm1bCntBlk[3]; // 184
|
||||||
UINT32 XPm2CntBlk [3]; // 196
|
UINT32 XPm2CntBlk[3]; // 196
|
||||||
UINT32 XPmTmrBlk [3]; // 208
|
UINT32 XPmTmrBlk[3]; // 208
|
||||||
UINT32 XGpe0Blk [3]; // 220
|
UINT32 XGpe0Blk[3]; // 220
|
||||||
UINT32 XGpe1Blk [3]; // 232
|
UINT32 XGpe1Blk[3]; // 232
|
||||||
} ACPI_FADT;
|
} ACPI_FADT;
|
||||||
|
|
||||||
|
|
||||||
@ -146,7 +146,7 @@ typedef struct {
|
|||||||
} TABLE_SIGNATURE;
|
} TABLE_SIGNATURE;
|
||||||
|
|
||||||
|
|
||||||
CONST TABLE_SIGNATURE mTableId [] = {
|
CONST TABLE_SIGNATURE mTableId[] = {
|
||||||
{ DSDT_SIGNATURE, "DSDT", PAGE_ACPI_DSDT },
|
{ DSDT_SIGNATURE, "DSDT", PAGE_ACPI_DSDT },
|
||||||
{ FADT_SIGNATURE, "FADT", PAGE_ACPI_FADT }
|
{ FADT_SIGNATURE, "FADT", PAGE_ACPI_FADT }
|
||||||
};
|
};
|
||||||
@ -240,8 +240,8 @@ LocateTable (
|
|||||||
//
|
//
|
||||||
// Walk the list of entries
|
// Walk the list of entries
|
||||||
//
|
//
|
||||||
pEntry = &pRsdt->Entry [ 0 ];
|
pEntry = &pRsdt->Entry[ 0 ];
|
||||||
pEnd = &pEntry [(( pRsdt->Length - sizeof ( *pRsdt )) >> 2 ) + 1 ];
|
pEnd = &pEntry[(( pRsdt->Length - sizeof ( *pRsdt )) >> 2 ) + 1 ];
|
||||||
while ( pEnd > pEntry ) {
|
while ( pEnd > pEntry ) {
|
||||||
//
|
//
|
||||||
// The entry is actually a 32-bit physical table address
|
// The entry is actually a 32-bit physical table address
|
||||||
@ -324,7 +324,7 @@ RowAnsiArray (
|
|||||||
// Display the characters
|
// Display the characters
|
||||||
//
|
//
|
||||||
pData = pChar;
|
pData = pChar;
|
||||||
pEnd = &pChar [ Length ];
|
pEnd = &pChar[ Length ];
|
||||||
while ( pEnd > pData ) {
|
while ( pEnd > pData ) {
|
||||||
Status = HttpSendCharacter ( SocketFD,
|
Status = HttpSendCharacter ( SocketFD,
|
||||||
pPort,
|
pPort,
|
||||||
@ -440,7 +440,7 @@ RowBytes (
|
|||||||
if ( EFI_ERROR ( Status )) {
|
if ( EFI_ERROR ( Status )) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
pEnd = &pData [ ByteCount ];
|
pEnd = &pData[ ByteCount ];
|
||||||
while ( pEnd > pData ) {
|
while ( pEnd > pData ) {
|
||||||
Status = HttpSendHexBits ( SocketFD,
|
Status = HttpSendHexBits ( SocketFD,
|
||||||
pPort,
|
pPort,
|
||||||
@ -784,8 +784,8 @@ SignatureLookup (
|
|||||||
// Walk the list of tables
|
// Walk the list of tables
|
||||||
//
|
//
|
||||||
Signature = *pSignature;
|
Signature = *pSignature;
|
||||||
pTableId = &mTableId [ 0 ];
|
pTableId = &mTableId[ 0 ];
|
||||||
pEnd = &pTableId [ sizeof ( mTableId ) / sizeof ( mTableId [ 0 ])];
|
pEnd = &pTableId[ sizeof ( mTableId ) / sizeof ( mTableId[ 0 ])];
|
||||||
while ( pEnd > pTableId ) {
|
while ( pEnd > pTableId ) {
|
||||||
//
|
//
|
||||||
// Attempt to locate the table signature
|
// Attempt to locate the table signature
|
||||||
@ -895,7 +895,7 @@ AcpiDsdtPage (
|
|||||||
pPort,
|
pPort,
|
||||||
"OEMID",
|
"OEMID",
|
||||||
sizeof ( pDsdt->OemId ),
|
sizeof ( pDsdt->OemId ),
|
||||||
&pDsdt->OemId [ 0 ]);
|
&pDsdt->OemId[ 0 ]);
|
||||||
if ( EFI_ERROR ( Status )) {
|
if ( EFI_ERROR ( Status )) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -903,7 +903,7 @@ AcpiDsdtPage (
|
|||||||
pPort,
|
pPort,
|
||||||
"OEM Table ID",
|
"OEM Table ID",
|
||||||
sizeof ( pDsdt->OemTableId ),
|
sizeof ( pDsdt->OemTableId ),
|
||||||
&pDsdt->OemTableId [ 0 ]);
|
&pDsdt->OemTableId[ 0 ]);
|
||||||
if ( EFI_ERROR ( Status )) {
|
if ( EFI_ERROR ( Status )) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1039,7 +1039,7 @@ AcpiFadtPage (
|
|||||||
pPort,
|
pPort,
|
||||||
"OEMID",
|
"OEMID",
|
||||||
sizeof ( pFadt->OemId ),
|
sizeof ( pFadt->OemId ),
|
||||||
&pFadt->OemId [ 0 ]);
|
&pFadt->OemId[ 0 ]);
|
||||||
if ( EFI_ERROR ( Status )) {
|
if ( EFI_ERROR ( Status )) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1047,7 +1047,7 @@ AcpiFadtPage (
|
|||||||
pPort,
|
pPort,
|
||||||
"OEM Table ID",
|
"OEM Table ID",
|
||||||
sizeof ( pFadt->OemTableId ),
|
sizeof ( pFadt->OemTableId ),
|
||||||
&pFadt->OemTableId [ 0 ]);
|
&pFadt->OemTableId[ 0 ]);
|
||||||
if ( EFI_ERROR ( Status )) {
|
if ( EFI_ERROR ( Status )) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1576,7 +1576,7 @@ AcpiRsdp10Page (
|
|||||||
pPort,
|
pPort,
|
||||||
"OemId",
|
"OemId",
|
||||||
sizeof ( pRsdp10b->OemId ),
|
sizeof ( pRsdp10b->OemId ),
|
||||||
&pRsdp10b->OemId [ 0 ]);
|
&pRsdp10b->OemId[ 0 ]);
|
||||||
if ( EFI_ERROR ( Status )) {
|
if ( EFI_ERROR ( Status )) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1679,7 +1679,7 @@ AcpiRsdp30Page (
|
|||||||
pPort,
|
pPort,
|
||||||
"OemId",
|
"OemId",
|
||||||
sizeof ( pRsdp30->OemId ),
|
sizeof ( pRsdp30->OemId ),
|
||||||
&pRsdp30->OemId [ 0 ]);
|
&pRsdp30->OemId[ 0 ]);
|
||||||
if ( EFI_ERROR ( Status )) {
|
if ( EFI_ERROR ( Status )) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1726,7 +1726,7 @@ AcpiRsdp30Page (
|
|||||||
pPort,
|
pPort,
|
||||||
"Reserved",
|
"Reserved",
|
||||||
sizeof ( pRsdp30->Reserved ),
|
sizeof ( pRsdp30->Reserved ),
|
||||||
&pRsdp30->Reserved [ 0 ]);
|
&pRsdp30->Reserved[ 0 ]);
|
||||||
if ( EFI_ERROR ( Status )) {
|
if ( EFI_ERROR ( Status )) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1771,7 +1771,7 @@ AcpiRsdtPage (
|
|||||||
CONST CHAR8 * pTableName;
|
CONST CHAR8 * pTableName;
|
||||||
CONST CHAR16 * pWebPage;
|
CONST CHAR16 * pWebPage;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINT32 TableName [ 2 ];
|
UINT32 TableName[ 2 ];
|
||||||
|
|
||||||
DBG_ENTER ( );
|
DBG_ENTER ( );
|
||||||
|
|
||||||
@ -1833,7 +1833,7 @@ AcpiRsdtPage (
|
|||||||
pPort,
|
pPort,
|
||||||
"OEMID",
|
"OEMID",
|
||||||
sizeof ( pRsdt->OemId ),
|
sizeof ( pRsdt->OemId ),
|
||||||
&pRsdt->OemId [ 0 ]);
|
&pRsdt->OemId[ 0 ]);
|
||||||
if ( EFI_ERROR ( Status )) {
|
if ( EFI_ERROR ( Status )) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1841,7 +1841,7 @@ AcpiRsdtPage (
|
|||||||
pPort,
|
pPort,
|
||||||
"OEM Table ID",
|
"OEM Table ID",
|
||||||
sizeof ( pRsdt->OemTableId ),
|
sizeof ( pRsdt->OemTableId ),
|
||||||
&pRsdt->OemTableId [ 0 ]);
|
&pRsdt->OemTableId[ 0 ]);
|
||||||
if ( EFI_ERROR ( Status )) {
|
if ( EFI_ERROR ( Status )) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1871,16 +1871,16 @@ AcpiRsdtPage (
|
|||||||
//
|
//
|
||||||
// Walk the list of entries
|
// Walk the list of entries
|
||||||
//
|
//
|
||||||
pEntry = &pRsdt->Entry [ 0 ];
|
pEntry = &pRsdt->Entry[ 0 ];
|
||||||
pEnd = &pEntry [(( pRsdt->Length - sizeof ( *pRsdt )) >> 2 ) + 1 ];
|
pEnd = &pEntry[(( pRsdt->Length - sizeof ( *pRsdt )) >> 2 ) + 1 ];
|
||||||
TableName [ 1 ] = 0;
|
TableName[ 1 ] = 0;
|
||||||
while ( pEnd > pEntry ) {
|
while ( pEnd > pEntry ) {
|
||||||
//
|
//
|
||||||
// The entry is actually a 32-bit physical table address
|
// The entry is actually a 32-bit physical table address
|
||||||
// The first entry in the table is the 32-bit table signature
|
// The first entry in the table is the 32-bit table signature
|
||||||
//
|
//
|
||||||
TableName [ 0 ] = *(UINT32 *)*pEntry;
|
TableName[ 0 ] = *(UINT32 *)*pEntry;
|
||||||
pWebPage = SignatureLookup ( &TableName [ 0 ], &pTableName );
|
pWebPage = SignatureLookup ( &TableName[ 0 ], &pTableName );
|
||||||
|
|
||||||
//
|
//
|
||||||
// Display the table address
|
// Display the table address
|
||||||
|
@ -38,7 +38,7 @@ typedef struct {
|
|||||||
CHAR16 * pWebPage;
|
CHAR16 * pWebPage;
|
||||||
} GUID_NAME;
|
} GUID_NAME;
|
||||||
|
|
||||||
CONST GUID_NAME mGuidName [] = {
|
CONST GUID_NAME mGuidName[] = {
|
||||||
{ L"gEfiAcpi10TableGuid", &gEfiAcpi10TableGuid, PAGE_ACPI_RSDP_10B },
|
{ L"gEfiAcpi10TableGuid", &gEfiAcpi10TableGuid, PAGE_ACPI_RSDP_10B },
|
||||||
{ L"gEfiAcpiTableGuid", &gEfiAcpiTableGuid, PAGE_ACPI_RSDP_30 },
|
{ L"gEfiAcpiTableGuid", &gEfiAcpiTableGuid, PAGE_ACPI_RSDP_30 },
|
||||||
{ L"gEfiDebugImageInfoTableGuid", &gEfiDebugImageInfoTableGuid, NULL },
|
{ L"gEfiDebugImageInfoTableGuid", &gEfiDebugImageInfoTableGuid, NULL },
|
||||||
@ -101,7 +101,7 @@ RowGuid (
|
|||||||
// Determine if this is a known GUID
|
// Determine if this is a known GUID
|
||||||
//
|
//
|
||||||
pGuidName = &mGuidName[0];
|
pGuidName = &mGuidName[0];
|
||||||
pGuidNameEnd = &pGuidName [ sizeof ( mGuidName ) / sizeof ( mGuidName[0])];
|
pGuidNameEnd = &pGuidName[ sizeof ( mGuidName ) / sizeof ( mGuidName[0])];
|
||||||
while ( pGuidNameEnd > pGuidName ) {
|
while ( pGuidNameEnd > pGuidName ) {
|
||||||
if ( CompareGuid ( pGuidName->pGuid, pGuid )) {
|
if ( CompareGuid ( pGuidName->pGuid, pGuid )) {
|
||||||
//
|
//
|
||||||
@ -339,7 +339,7 @@ ConfigurationTablePage (
|
|||||||
// Determine the location of the configuration tables
|
// Determine the location of the configuration tables
|
||||||
//
|
//
|
||||||
pTable = gST->ConfigurationTable;
|
pTable = gST->ConfigurationTable;
|
||||||
pEnd = &pTable [ gST->NumberOfTableEntries ];
|
pEnd = &pTable[ gST->NumberOfTableEntries ];
|
||||||
while ( pEnd > pTable ) {
|
while ( pEnd > pTable ) {
|
||||||
Status = RowGuid ( SocketFD,
|
Status = RowGuid ( SocketFD,
|
||||||
pPort,
|
pPort,
|
||||||
|
@ -561,7 +561,7 @@ HttpRequest (
|
|||||||
// Attempt to parse the command
|
// Attempt to parse the command
|
||||||
//
|
//
|
||||||
pData = &pPort->Request[0];
|
pData = &pPort->Request[0];
|
||||||
pEnd = &pData [ pPort->RequestLength ];
|
pEnd = &pData[ pPort->RequestLength ];
|
||||||
pVerb = pData;
|
pVerb = pData;
|
||||||
pWebPage = HttpReplaceSpace ( pVerb, pEnd );
|
pWebPage = HttpReplaceSpace ( pVerb, pEnd );
|
||||||
if ( pEnd <= pWebPage ) {
|
if ( pEnd <= pWebPage ) {
|
||||||
@ -589,7 +589,7 @@ HttpRequest (
|
|||||||
// Walk the page table
|
// Walk the page table
|
||||||
//
|
//
|
||||||
pPage = &mPageList[0];
|
pPage = &mPageList[0];
|
||||||
pPageEnd = &pPage [ mPageCount ];
|
pPageEnd = &pPage[ mPageCount ];
|
||||||
while ( pPageEnd > pPage ) {
|
while ( pPageEnd > pPage ) {
|
||||||
//
|
//
|
||||||
// Determine if the page was located
|
// Determine if the page was located
|
||||||
@ -668,15 +668,14 @@ HttpSend (
|
|||||||
//
|
//
|
||||||
MaxBytes = sizeof ( pPort->TxBuffer );
|
MaxBytes = sizeof ( pPort->TxBuffer );
|
||||||
DataBytes = MaxBytes - pPort->TxBytes;
|
DataBytes = MaxBytes - pPort->TxBytes;
|
||||||
if ( DataBytes > LengthInBytes )
|
if ( DataBytes > LengthInBytes ) {
|
||||||
{
|
|
||||||
DataBytes = LengthInBytes;
|
DataBytes = LengthInBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Copy the data into the buffer
|
// Copy the data into the buffer
|
||||||
//
|
//
|
||||||
CopyMem ( &pPort->TxBuffer [ pPort->TxBytes ],
|
CopyMem ( &pPort->TxBuffer[ pPort->TxBytes ],
|
||||||
pBuffer,
|
pBuffer,
|
||||||
DataBytes );
|
DataBytes );
|
||||||
|
|
||||||
@ -910,7 +909,7 @@ HttpSendDump (
|
|||||||
//
|
//
|
||||||
// Walk the bytes to be displayed
|
// Walk the bytes to be displayed
|
||||||
//
|
//
|
||||||
pEnd = &pData [ ByteCount ];
|
pEnd = &pData[ ByteCount ];
|
||||||
while ( pEnd > pData ) {
|
while ( pEnd > pData ) {
|
||||||
//
|
//
|
||||||
// Display the address
|
// Display the address
|
||||||
@ -958,7 +957,7 @@ HttpSendDump (
|
|||||||
if (( BYTES_ON_A_LINE - InitialSpaces ) < BytesToDisplay ) {
|
if (( BYTES_ON_A_LINE - InitialSpaces ) < BytesToDisplay ) {
|
||||||
BytesToDisplay = BYTES_ON_A_LINE - InitialSpaces;
|
BytesToDisplay = BYTES_ON_A_LINE - InitialSpaces;
|
||||||
}
|
}
|
||||||
pDataEnd = &pData [ BytesToDisplay ];
|
pDataEnd = &pData[ BytesToDisplay ];
|
||||||
pTemp = pData;
|
pTemp = pData;
|
||||||
while ( pDataEnd > pTemp ) {
|
while ( pDataEnd > pTemp ) {
|
||||||
Status = HttpSendHexBits ( SocketFD,
|
Status = HttpSendHexBits ( SocketFD,
|
||||||
@ -1151,7 +1150,7 @@ HttpSendGuid (
|
|||||||
Status = HttpSendHexBits ( SocketFD,
|
Status = HttpSendHexBits ( SocketFD,
|
||||||
pPort,
|
pPort,
|
||||||
8,
|
8,
|
||||||
pGuid->Data4 [ Index ]);
|
pGuid->Data4[ Index ]);
|
||||||
if ( EFI_ERROR ( Status )) {
|
if ( EFI_ERROR ( Status )) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1488,7 +1487,7 @@ HttpSendValue (
|
|||||||
UINT64 Digit;
|
UINT64 Digit;
|
||||||
CONST UINT64 * pEnd;
|
CONST UINT64 * pEnd;
|
||||||
CONST UINT64 * pDivisor;
|
CONST UINT64 * pDivisor;
|
||||||
CONST UINT64 pDivisors [ ] = {
|
CONST UINT64 pDivisors[ ] = {
|
||||||
10000000000000000000L,
|
10000000000000000000L,
|
||||||
1000000000000000000L,
|
1000000000000000000L,
|
||||||
100000000000000000L,
|
100000000000000000L,
|
||||||
@ -1522,7 +1521,7 @@ HttpSendValue (
|
|||||||
//
|
//
|
||||||
bDisplayZeros = FALSE;
|
bDisplayZeros = FALSE;
|
||||||
pDivisor = &pDivisors[0];
|
pDivisor = &pDivisors[0];
|
||||||
pEnd = &pDivisor [ sizeof ( pDivisors ) / sizeof ( pDivisors [0])];
|
pEnd = &pDivisor[ sizeof ( pDivisors ) / sizeof ( pDivisors[0])];
|
||||||
while ( pEnd > pDivisor ) {
|
while ( pEnd > pDivisor ) {
|
||||||
//
|
//
|
||||||
// Determine the next digit
|
// Determine the next digit
|
||||||
|
@ -29,7 +29,7 @@ Intel Corporation.
|
|||||||
/**
|
/**
|
||||||
List of pages in the system
|
List of pages in the system
|
||||||
**/
|
**/
|
||||||
CONST DT_PAGE mPageList [] = {
|
CONST DT_PAGE mPageList[] = {
|
||||||
|
|
||||||
//
|
//
|
||||||
// The index page must be first
|
// The index page must be first
|
||||||
|
@ -124,9 +124,9 @@ PortAdd (
|
|||||||
// Initialize the new entries in the FD list
|
// Initialize the new entries in the FD list
|
||||||
//
|
//
|
||||||
for ( ; MaxEntriesNew > Index; Index++ ) {
|
for ( ; MaxEntriesNew > Index; Index++ ) {
|
||||||
pFdListNew [ Index ].fd = -1;
|
pFdListNew[ Index ].fd = -1;
|
||||||
pFdListNew [ Index ].events = 0;
|
pFdListNew[ Index ].events = 0;
|
||||||
pFdListNew [ Index ].revents = 0;
|
pFdListNew[ Index ].revents = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -156,7 +156,7 @@ PortAdd (
|
|||||||
// Initialize the new entries in the port list
|
// Initialize the new entries in the port list
|
||||||
//
|
//
|
||||||
for ( ; MaxEntriesNew > Index; Index++ ) {
|
for ( ; MaxEntriesNew > Index; Index++ ) {
|
||||||
ppPortListNew [ Index ] = NULL;
|
ppPortListNew[ Index ] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -200,15 +200,15 @@ PortAdd (
|
|||||||
//
|
//
|
||||||
// Add the socket to the FD list
|
// Add the socket to the FD list
|
||||||
//
|
//
|
||||||
pFdList [ pWebServer->Entries ].fd = SocketFD;
|
pFdList[ pWebServer->Entries ].fd = SocketFD;
|
||||||
pFdList [ pWebServer->Entries ].events = POLLRDNORM
|
pFdList[ pWebServer->Entries ].events = POLLRDNORM
|
||||||
| POLLHUP;
|
| POLLHUP;
|
||||||
pFdList [ pWebServer->Entries ].revents = 0;
|
pFdList[ pWebServer->Entries ].revents = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Add the port to the port list
|
// Add the port to the port list
|
||||||
//
|
//
|
||||||
pWebServer->ppPortList [ pWebServer->Entries ] = pPort;
|
pWebServer->ppPortList[ pWebServer->Entries ] = pPort;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Account for the new entry
|
// Account for the new entry
|
||||||
@ -263,7 +263,7 @@ PortRemove (
|
|||||||
//
|
//
|
||||||
// Locate the specified socket file descriptor
|
// Locate the specified socket file descriptor
|
||||||
//
|
//
|
||||||
if ( SocketFD == pFdList [ Index ].fd ) {
|
if ( SocketFD == pFdList[ Index ].fd ) {
|
||||||
//
|
//
|
||||||
// Determine if this is the listen port
|
// Determine if this is the listen port
|
||||||
//
|
//
|
||||||
@ -279,7 +279,7 @@ PortRemove (
|
|||||||
//
|
//
|
||||||
// Free the port structure
|
// Free the port structure
|
||||||
//
|
//
|
||||||
gBS->FreePool ( ppPortList [ Index ]);
|
gBS->FreePool ( ppPortList[ Index ]);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Remove this port from the list by copying
|
// Remove this port from the list by copying
|
||||||
@ -287,13 +287,13 @@ PortRemove (
|
|||||||
//
|
//
|
||||||
Entries -= 1;
|
Entries -= 1;
|
||||||
for ( ; Entries > Index; Index++ ) {
|
for ( ; Entries > Index; Index++ ) {
|
||||||
pFdList [ Index ] = pFdList [ Index + 1 ];
|
pFdList[ Index ] = pFdList[ Index + 1 ];
|
||||||
ppPortList [ Index ] = ppPortList [ Index + 1 ];
|
ppPortList[ Index ] = ppPortList[ Index + 1 ];
|
||||||
}
|
}
|
||||||
pFdList [ Index ].fd = -1;
|
pFdList[ Index ].fd = -1;
|
||||||
pFdList [ Index ].events = 0;
|
pFdList[ Index ].events = 0;
|
||||||
pFdList [ Index ].revents = 0;
|
pFdList[ Index ].revents = 0;
|
||||||
ppPortList [ Index ] = NULL;
|
ppPortList[ Index ] = NULL;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Update the number of entries in the list
|
// Update the number of entries in the list
|
||||||
@ -439,8 +439,7 @@ PortWork (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
//
|
//
|
||||||
// Receive the file data
|
// Receive the file data
|
||||||
//
|
//
|
||||||
@ -610,8 +609,7 @@ WebServerTimer (
|
|||||||
pWebServer->HttpListenPort = socket ( AF_INET,
|
pWebServer->HttpListenPort = socket ( AF_INET,
|
||||||
SOCK_STREAM,
|
SOCK_STREAM,
|
||||||
IPPROTO_TCP );
|
IPPROTO_TCP );
|
||||||
if ( -1 != pWebServer->HttpListenPort )
|
if ( -1 != pWebServer->HttpListenPort ) {
|
||||||
{
|
|
||||||
//
|
//
|
||||||
// Set the socket address
|
// Set the socket address
|
||||||
//
|
//
|
||||||
|
@ -125,7 +125,7 @@
|
|||||||
|
|
||||||
#endif // MDEPKG_NDEBUG
|
#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 SPACES_ADDRESS_TO_DATA 2
|
||||||
#define BYTES_ON_A_LINE 16
|
#define BYTES_ON_A_LINE 16
|
||||||
@ -154,9 +154,9 @@ typedef struct {
|
|||||||
//
|
//
|
||||||
size_t RequestLength; ///< Request length in bytes
|
size_t RequestLength; ///< Request length in bytes
|
||||||
size_t TxBytes; ///< Bytes in the TX buffer
|
size_t TxBytes; ///< Bytes in the TX buffer
|
||||||
UINT8 Request [ 65536 ]; ///< Page request
|
UINT8 Request[ 65536 ]; ///< Page request
|
||||||
UINT8 RxBuffer [ 65536 ]; ///< Receive buffer
|
UINT8 RxBuffer[ 65536 ]; ///< Receive buffer
|
||||||
UINT8 TxBuffer [ 65536 ]; ///< Transmit buffer
|
UINT8 TxBuffer[ 65536 ]; ///< Transmit buffer
|
||||||
} WSDT_PORT;
|
} WSDT_PORT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -186,7 +186,7 @@ typedef struct {
|
|||||||
WSDT_PORT ** ppPortList; ///< List of port management structures
|
WSDT_PORT ** ppPortList; ///< List of port management structures
|
||||||
} DT_WEB_SERVER;
|
} 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;
|
extern DT_WEB_SERVER mWebServer;
|
||||||
|
|
||||||
@ -217,7 +217,7 @@ typedef struct {
|
|||||||
UINT16 * pDescription; ///< Description of the page
|
UINT16 * pDescription; ///< Description of the page
|
||||||
} DT_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
|
extern CONST UINTN mPageCount; ///< Number of pages
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user