I am trying to make an UEFI application with EDK2 that connects to a TCP server. This is what I got right now:
#include "Tcp.h"
EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable) {
EFI_STATUS Status = EFI_SUCCESS;
// Declare pointer to TCP4 protocol
EFI_TCP4_PROTOCOL *Tcp4Protocol;
// Locate TCP4 protocol
Status = gBS->LocateProtocol(&gEfiTcp4ProtocolGuid, NULL, (VOID**)&Tcp4Protocol);
if (EFI_ERROR(Status)) {
Print(L"Failed locating TCP4 protocol. Status: %rn", Status);
return Status;
}
// Declare TCP4 configuration data
EFI_TCP4_CONFIG_DATA TcpConfigData;
TcpConfigData.TypeOfService = 0;
TcpConfigData.TimeToLive = 255;
// Initialize TCP4 configuration data
ZeroMem(&TcpConfigData, sizeof(TcpConfigData));
TcpConfigData.TypeOfService = 0; // Sets Type of Service field in the IPv4 header to 0
TcpConfigData.TimeToLive = 255; // Sets Time to Live field in the IPv4 header to 0
// Configure TCP4 protocol
Status = Tcp4Protocol->Configure(Tcp4Protocol, &TcpConfigData);
if (EFI_ERROR(Status)) {
Print(L"Failed configuring TCP4 protocol. Status: %rn", Status);
return Status;
}
// Declare connection token
EFI_TCP4_CONNECTION_TOKEN TcpToken;
// Initialize connection token
ZeroMem(&TcpToken, sizeof(TcpToken));
TcpToken.CompletionToken.Status = EFI_NOT_READY;
// Open a TCP4 connection
Status = Tcp4Protocol->Connect(Tcp4Protocol, &TcpToken);
if (EFI_ERROR(Status)) {
Print(L"Failed to open a TCP connection. Status: %rn", Status);
}
return Status;
}
I always get “Failed to open a TCP connection. Status: Invalid parameters”
I don’t know what I’m doing wrong, maybe something with the connection token?