summaryrefslogtreecommitdiffstats
path: root/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c
diff options
context:
space:
mode:
Diffstat (limited to 'NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c')
-rw-r--r--NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c693
1 files changed, 356 insertions, 337 deletions
diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c b/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c
index 2e9d31547d..0a4baf6f90 100644
--- a/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c
+++ b/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c
@@ -9,7 +9,6 @@
#include "PxeBcImpl.h"
-
/**
Enables the use of the PXE Base Code Protocol functions.
@@ -42,8 +41,8 @@
EFI_STATUS
EFIAPI
EfiPxeBcStart (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN BOOLEAN UseIpv6
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,
+ IN BOOLEAN UseIpv6
)
{
PXEBC_PRIVATE_DATA *Private;
@@ -65,9 +64,9 @@ EfiPxeBcStart (
//
// Detect whether using IPv6 or not, and set it into mode data.
//
- if (UseIpv6 && Mode->Ipv6Available && Mode->Ipv6Supported && Private->Ip6Nic != NULL) {
+ if (UseIpv6 && Mode->Ipv6Available && Mode->Ipv6Supported && (Private->Ip6Nic != NULL)) {
Mode->UsingIpv6 = TRUE;
- } else if (!UseIpv6 && Private->Ip4Nic != NULL) {
+ } else if (!UseIpv6 && (Private->Ip4Nic != NULL)) {
Mode->UsingIpv6 = FALSE;
} else {
return EFI_UNSUPPORTED;
@@ -90,7 +89,7 @@ EfiPxeBcStart (
// Configure block size for TFTP as a default value to handle all link layers.
//
Private->BlockSize = Private->Ip6MaxPacketSize -
- PXEBC_DEFAULT_UDP_OVERHEAD_SIZE - PXEBC_DEFAULT_TFTP_OVERHEAD_SIZE;
+ PXEBC_DEFAULT_UDP_OVERHEAD_SIZE - PXEBC_DEFAULT_TFTP_OVERHEAD_SIZE;
//
// PXE over IPv6 starts here, initialize the fields and list header.
@@ -108,13 +107,13 @@ EfiPxeBcStart (
// Create event and set status for token to capture ICMP6 error message.
//
Private->Icmp6Token.Status = EFI_NOT_READY;
- Status = gBS->CreateEvent (
- EVT_NOTIFY_SIGNAL,
- TPL_NOTIFY,
- PxeBcIcmp6ErrorUpdate,
- Private,
- &Private->Icmp6Token.Event
- );
+ Status = gBS->CreateEvent (
+ EVT_NOTIFY_SIGNAL,
+ TPL_NOTIFY,
+ PxeBcIcmp6ErrorUpdate,
+ Private,
+ &Private->Icmp6Token.Event
+ );
if (EFI_ERROR (Status)) {
goto ON_ERROR;
}
@@ -143,7 +142,7 @@ EfiPxeBcStart (
// Configure block size for TFTP as a default value to handle all link layers.
//
Private->BlockSize = Private->Ip4MaxPacketSize -
- PXEBC_DEFAULT_UDP_OVERHEAD_SIZE - PXEBC_DEFAULT_TFTP_OVERHEAD_SIZE;
+ PXEBC_DEFAULT_UDP_OVERHEAD_SIZE - PXEBC_DEFAULT_TFTP_OVERHEAD_SIZE;
//
// PXE over IPv4 starts here, initialize the fields.
@@ -188,23 +187,23 @@ EfiPxeBcStart (
// Create event and set status for token to capture ICMP error message.
//
Private->Icmp6Token.Status = EFI_NOT_READY;
- Status = gBS->CreateEvent (
- EVT_NOTIFY_SIGNAL,
- TPL_NOTIFY,
- PxeBcIcmpErrorUpdate,
- Private,
- &Private->IcmpToken.Event
- );
+ Status = gBS->CreateEvent (
+ EVT_NOTIFY_SIGNAL,
+ TPL_NOTIFY,
+ PxeBcIcmpErrorUpdate,
+ Private,
+ &Private->IcmpToken.Event
+ );
if (EFI_ERROR (Status)) {
goto ON_ERROR;
}
//
- //DHCP4 service allows only one of its children to be configured in
- //the active state, If the DHCP4 D.O.R.A started by IP4 auto
- //configuration and has not been completed, the Dhcp4 state machine
- //will not be in the right state for the PXE to start a new round D.O.R.A.
- //so we need to switch its policy to static.
+ // DHCP4 service allows only one of its children to be configured in
+ // the active state, If the DHCP4 D.O.R.A started by IP4 auto
+ // configuration and has not been completed, the Dhcp4 state machine
+ // will not be in the right state for the PXE to start a new round D.O.R.A.
+ // so we need to switch its policy to static.
//
Status = PxeBcSetIp4Policy (Private);
if (EFI_ERROR (Status)) {
@@ -216,7 +215,7 @@ EfiPxeBcStart (
// If PcdTftpBlockSize is set to non-zero, override the default value.
//
if (PcdGet64 (PcdTftpBlockSize) != 0) {
- Private->BlockSize = (UINTN) PcdGet64 (PcdTftpBlockSize);
+ Private->BlockSize = (UINTN)PcdGet64 (PcdTftpBlockSize);
}
//
@@ -244,6 +243,7 @@ ON_ERROR:
gBS->CloseEvent (Private->Icmp6Token.Event);
Private->Icmp6Token.Event = NULL;
}
+
Private->Udp6Read->Configure (Private->Udp6Read, NULL);
Private->Ip6->Configure (Private->Ip6, NULL);
} else {
@@ -251,17 +251,19 @@ ON_ERROR:
gBS->CloseEvent (Private->ArpUpdateEvent);
Private->ArpUpdateEvent = NULL;
}
+
if (Private->IcmpToken.Event != NULL) {
gBS->CloseEvent (Private->IcmpToken.Event);
Private->IcmpToken.Event = NULL;
}
+
Private->Udp4Read->Configure (Private->Udp4Read, NULL);
Private->Ip4->Configure (Private->Ip4, NULL);
}
+
return Status;
}
-
/**
Disable the use of the PXE Base Code Protocol functions.
@@ -282,7 +284,7 @@ ON_ERROR:
EFI_STATUS
EFIAPI
EfiPxeBcStop (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This
)
{
PXEBC_PRIVATE_DATA *Private;
@@ -321,10 +323,12 @@ EfiPxeBcStop (
gBS->CloseEvent (Private->Icmp6Token.Event);
Private->Icmp6Token.Event = NULL;
}
+
if (Private->Dhcp6Request != NULL) {
FreePool (Private->Dhcp6Request);
Private->Dhcp6Request = NULL;
}
+
if (Private->BootFileName != NULL) {
FreePool (Private->BootFileName);
Private->BootFileName = NULL;
@@ -348,10 +352,12 @@ EfiPxeBcStop (
gBS->CloseEvent (Private->ArpUpdateEvent);
Private->ArpUpdateEvent = NULL;
}
+
if (Private->IcmpToken.Event != NULL) {
gBS->CloseEvent (Private->IcmpToken.Event);
Private->IcmpToken.Event = NULL;
}
+
Private->BootFileName = NULL;
}
@@ -378,7 +384,6 @@ EfiPxeBcStop (
return EFI_SUCCESS;
}
-
/**
Attempts to complete a DHCPv4 D.O.R.A. (discover / offer / request / acknowledge) or DHCPv6
S.A.R.R (solicit / advertise / request / reply) sequence.
@@ -410,8 +415,8 @@ EfiPxeBcStop (
EFI_STATUS
EFIAPI
EfiPxeBcDhcp (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN BOOLEAN SortOffers
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,
+ IN BOOLEAN SortOffers
)
{
PXEBC_PRIVATE_DATA *Private;
@@ -437,7 +442,6 @@ EfiPxeBcDhcp (
}
if (Mode->UsingIpv6) {
-
//
// Stop Udp6Read instance
//
@@ -448,7 +452,6 @@ EfiPxeBcDhcp (
//
Status = PxeBcDhcp6Sarr (Private, Private->Dhcp6);
} else {
-
//
// Stop Udp4Read instance
//
@@ -468,18 +471,18 @@ EfiPxeBcDhcp (
} else {
Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData);
}
+
//
// Dhcp(), Discover(), and Mtftp() set the IP filter, and return with the IP
// receive filter list emptied and the filter set to EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP.
//
- ZeroMem(&IpFilter, sizeof (EFI_PXE_BASE_CODE_IP_FILTER));
+ ZeroMem (&IpFilter, sizeof (EFI_PXE_BASE_CODE_IP_FILTER));
IpFilter.Filters = EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP;
This->SetIpFilter (This, &IpFilter);
return Status;
}
-
/**
Attempts to complete the PXE Boot Server and/or boot image discovery sequence.
@@ -534,15 +537,15 @@ EfiPxeBcDiscover (
IN EFI_PXE_BASE_CODE_DISCOVER_INFO *Info OPTIONAL
)
{
- PXEBC_PRIVATE_DATA *Private;
- EFI_PXE_BASE_CODE_MODE *Mode;
- EFI_PXE_BASE_CODE_DISCOVER_INFO DefaultInfo;
- EFI_PXE_BASE_CODE_SRVLIST *SrvList;
- PXEBC_BOOT_SVR_ENTRY *BootSvrEntry;
- UINT16 Index;
- EFI_STATUS Status;
- EFI_PXE_BASE_CODE_IP_FILTER IpFilter;
- EFI_PXE_BASE_CODE_DISCOVER_INFO *NewCreatedInfo;
+ PXEBC_PRIVATE_DATA *Private;
+ EFI_PXE_BASE_CODE_MODE *Mode;
+ EFI_PXE_BASE_CODE_DISCOVER_INFO DefaultInfo;
+ EFI_PXE_BASE_CODE_SRVLIST *SrvList;
+ PXEBC_BOOT_SVR_ENTRY *BootSvrEntry;
+ UINT16 Index;
+ EFI_STATUS Status;
+ EFI_PXE_BASE_CODE_IP_FILTER IpFilter;
+ EFI_PXE_BASE_CODE_DISCOVER_INFO *NewCreatedInfo;
if (This == NULL) {
return EFI_INVALID_PARAMETER;
@@ -569,13 +572,11 @@ EfiPxeBcDiscover (
}
if (Mode->UsingIpv6) {
-
//
// Stop Udp6Read instance
//
Private->Udp6Read->Configure (Private->Udp6Read, NULL);
} else {
-
//
// Stop Udp4Read instance
//
@@ -592,7 +593,8 @@ EfiPxeBcDiscover (
//
if (!Mode->PxeDiscoverValid ||
!Mode->PxeReplyReceived ||
- (!Mode->PxeBisReplyReceived && UseBis)) {
+ (!Mode->PxeBisReplyReceived && UseBis))
+ {
Status = EFI_INVALID_PARAMETER;
goto ON_EXIT;
}
@@ -605,16 +607,16 @@ EfiPxeBcDiscover (
SrvList[0].AcceptAnyResponse = FALSE;
CopyMem (&SrvList->IpAddr, &Private->ServerIp, sizeof (EFI_IP_ADDRESS));
-
} else if (Info == NULL) {
//
// 2. Extract the discover information from the cached packets if unspecified.
//
NewCreatedInfo = &DefaultInfo;
- Status = PxeBcExtractDiscoverInfo (Private, Type, &NewCreatedInfo, &BootSvrEntry, &SrvList);
+ Status = PxeBcExtractDiscoverInfo (Private, Type, &NewCreatedInfo, &BootSvrEntry, &SrvList);
if (EFI_ERROR (Status)) {
goto ON_EXIT;
}
+
ASSERT (NewCreatedInfo != NULL);
Info = NewCreatedInfo;
} else {
@@ -629,6 +631,7 @@ EfiPxeBcDiscover (
break;
}
}
+
if (Index != Info->IpCnt) {
//
// It's invalid if the first server doesn't accept any response
@@ -644,7 +647,8 @@ EfiPxeBcDiscover (
// Info and BootSvrEntry/SrvList are all ready by now, so execute discover by UniCast/BroadCast/MultiCast.
//
if ((!Info->UseUCast && !Info->UseBCast && !Info->UseMCast) ||
- (Info->MustUseList && Info->IpCnt == 0)) {
+ (Info->MustUseList && (Info->IpCnt == 0)))
+ {
Status = EFI_INVALID_PARAMETER;
goto ON_EXIT;
}
@@ -664,7 +668,6 @@ EfiPxeBcDiscover (
Info->IpCnt,
SrvList
);
-
} else if (Info->UseBCast) {
//
// Do discover by broadcast, but only valid for IPv4.
@@ -679,7 +682,6 @@ EfiPxeBcDiscover (
Info->IpCnt,
SrvList
);
-
} else if (Info->UseUCast) {
//
// Do discover by unicast.
@@ -702,7 +704,7 @@ EfiPxeBcDiscover (
Info->IpCnt,
SrvList
);
- }
+ }
}
if (!EFI_ERROR (Status)) {
@@ -736,7 +738,7 @@ EfiPxeBcDiscover (
ON_EXIT:
- if (NewCreatedInfo != NULL && NewCreatedInfo != &DefaultInfo) {
+ if ((NewCreatedInfo != NULL) && (NewCreatedInfo != &DefaultInfo)) {
FreePool (NewCreatedInfo);
}
@@ -750,14 +752,13 @@ ON_EXIT:
// Dhcp(), Discover(), and Mtftp() set the IP filter, and return with the IP
// receive filter list emptied and the filter set to EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP.
//
- ZeroMem(&IpFilter, sizeof (EFI_PXE_BASE_CODE_IP_FILTER));
+ ZeroMem (&IpFilter, sizeof (EFI_PXE_BASE_CODE_IP_FILTER));
IpFilter.Filters = EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP;
This->SetIpFilter (This, &IpFilter);
return Status;
}
-
/**
Used to perform TFTP and MTFTP services.
@@ -824,60 +825,62 @@ ON_EXIT:
EFI_STATUS
EFIAPI
EfiPxeBcMtftp (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation,
- IN OUT VOID *BufferPtr OPTIONAL,
- IN BOOLEAN Overwrite,
- IN OUT UINT64 *BufferSize,
- IN UINTN *BlockSize OPTIONAL,
- IN EFI_IP_ADDRESS *ServerIp,
- IN UINT8 *Filename,
- IN EFI_PXE_BASE_CODE_MTFTP_INFO *Info OPTIONAL,
- IN BOOLEAN DontUseBuffer
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,
+ IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation,
+ IN OUT VOID *BufferPtr OPTIONAL,
+ IN BOOLEAN Overwrite,
+ IN OUT UINT64 *BufferSize,
+ IN UINTN *BlockSize OPTIONAL,
+ IN EFI_IP_ADDRESS *ServerIp,
+ IN UINT8 *Filename,
+ IN EFI_PXE_BASE_CODE_MTFTP_INFO *Info OPTIONAL,
+ IN BOOLEAN DontUseBuffer
)
{
- PXEBC_PRIVATE_DATA *Private;
- EFI_PXE_BASE_CODE_MODE *Mode;
- EFI_MTFTP4_CONFIG_DATA Mtftp4Config;
- EFI_MTFTP6_CONFIG_DATA Mtftp6Config;
- VOID *Config;
- EFI_STATUS Status;
- EFI_PXE_BASE_CODE_IP_FILTER IpFilter;
- UINTN WindowSize;
+ PXEBC_PRIVATE_DATA *Private;
+ EFI_PXE_BASE_CODE_MODE *Mode;
+ EFI_MTFTP4_CONFIG_DATA Mtftp4Config;
+ EFI_MTFTP6_CONFIG_DATA Mtftp6Config;
+ VOID *Config;
+ EFI_STATUS Status;
+ EFI_PXE_BASE_CODE_IP_FILTER IpFilter;
+ UINTN WindowSize;
if ((This == NULL) ||
(Filename == NULL) ||
(BufferSize == NULL) ||
(ServerIp == NULL) ||
- ((BlockSize != NULL) && (*BlockSize < PXE_MTFTP_DEFAULT_BLOCK_SIZE))) {
+ ((BlockSize != NULL) && (*BlockSize < PXE_MTFTP_DEFAULT_BLOCK_SIZE)))
+ {
return EFI_INVALID_PARAMETER;
}
- if (Operation == EFI_PXE_BASE_CODE_TFTP_READ_FILE ||
- Operation == EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY ||
- Operation == EFI_PXE_BASE_CODE_MTFTP_READ_FILE ||
- Operation == EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY) {
- if (BufferPtr == NULL && !DontUseBuffer) {
+ if ((Operation == EFI_PXE_BASE_CODE_TFTP_READ_FILE) ||
+ (Operation == EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY) ||
+ (Operation == EFI_PXE_BASE_CODE_MTFTP_READ_FILE) ||
+ (Operation == EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY))
+ {
+ if ((BufferPtr == NULL) && !DontUseBuffer) {
return EFI_INVALID_PARAMETER;
}
}
- Config = NULL;
- Status = EFI_DEVICE_ERROR;
- Private = PXEBC_PRIVATE_DATA_FROM_PXEBC (This);
- Mode = Private->PxeBc.Mode;
+ Config = NULL;
+ Status = EFI_DEVICE_ERROR;
+ Private = PXEBC_PRIVATE_DATA_FROM_PXEBC (This);
+ Mode = Private->PxeBc.Mode;
//
// Get PcdPxeTftpWindowSize.
//
- WindowSize = (UINTN) PcdGet64 (PcdPxeTftpWindowSize);
+ WindowSize = (UINTN)PcdGet64 (PcdPxeTftpWindowSize);
if (Mode->UsingIpv6) {
if (!NetIp6IsValidUnicast (&ServerIp->v6)) {
return EFI_INVALID_PARAMETER;
}
} else {
- if (IP4_IS_UNSPECIFIED (NTOHL (ServerIp->Addr[0])) || IP4_IS_LOCAL_BROADCAST (NTOHL (ServerIp->Addr[0]))) {
+ if (IP4_IS_UNSPECIFIED (NTOHL (ServerIp->Addr[0])) || IP4_IS_LOCAL_BROADCAST (NTOHL (ServerIp->Addr[0]))) {
return EFI_INVALID_PARAMETER;
}
}
@@ -887,9 +890,9 @@ EfiPxeBcMtftp (
// Set configuration data for Mtftp6 instance.
//
ZeroMem (&Mtftp6Config, sizeof (EFI_MTFTP6_CONFIG_DATA));
- Config = &Mtftp6Config;
- Mtftp6Config.TimeoutValue = PXEBC_MTFTP_TIMEOUT;
- Mtftp6Config.TryCount = PXEBC_MTFTP_RETRIES;
+ Config = &Mtftp6Config;
+ Mtftp6Config.TimeoutValue = PXEBC_MTFTP_TIMEOUT;
+ Mtftp6Config.TryCount = PXEBC_MTFTP_RETRIES;
CopyMem (&Mtftp6Config.StationIp, &Private->StationIp.v6, sizeof (EFI_IPv6_ADDRESS));
CopyMem (&Mtftp6Config.ServerIp, &ServerIp->v6, sizeof (EFI_IPv6_ADDRESS));
//
@@ -919,83 +922,82 @@ EfiPxeBcMtftp (
Mode->IcmpErrorReceived = FALSE;
switch (Operation) {
+ case EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE:
+ //
+ // Send TFTP request to get file size.
+ //
+ Status = PxeBcTftpGetFileSize (
+ Private,
+ Config,
+ Filename,
+ BlockSize,
+ (WindowSize > 1) ? &WindowSize : NULL,
+ BufferSize
+ );
- case EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE:
- //
- // Send TFTP request to get file size.
- //
- Status = PxeBcTftpGetFileSize (
- Private,
- Config,
- Filename,
- BlockSize,
- (WindowSize > 1) ? &WindowSize : NULL,
- BufferSize
- );
-
- break;
+ break;
- case EFI_PXE_BASE_CODE_TFTP_READ_FILE:
- //
- // Send TFTP request to read file.
- //
- Status = PxeBcTftpReadFile (
- Private,
- Config,
- Filename,
- BlockSize,
- (WindowSize > 1) ? &WindowSize : NULL,
- BufferPtr,
- BufferSize,
- DontUseBuffer
- );
+ case EFI_PXE_BASE_CODE_TFTP_READ_FILE:
+ //
+ // Send TFTP request to read file.
+ //
+ Status = PxeBcTftpReadFile (
+ Private,
+ Config,
+ Filename,
+ BlockSize,
+ (WindowSize > 1) ? &WindowSize : NULL,
+ BufferPtr,
+ BufferSize,
+ DontUseBuffer
+ );
- break;
+ break;
- case EFI_PXE_BASE_CODE_TFTP_WRITE_FILE:
- //
- // Send TFTP request to write file.
- //
- Status = PxeBcTftpWriteFile (
- Private,
- Config,
- Filename,
- Overwrite,
- BlockSize,
- BufferPtr,
- BufferSize
- );
+ case EFI_PXE_BASE_CODE_TFTP_WRITE_FILE:
+ //
+ // Send TFTP request to write file.
+ //
+ Status = PxeBcTftpWriteFile (
+ Private,
+ Config,
+ Filename,
+ Overwrite,
+ BlockSize,
+ BufferPtr,
+ BufferSize
+ );
- break;
+ break;
- case EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY:
- //
- // Send TFTP request to read directory.
- //
- Status = PxeBcTftpReadDirectory (
- Private,
- Config,
- Filename,
- BlockSize,
- (WindowSize > 1) ? &WindowSize : NULL,
- BufferPtr,
- BufferSize,
- DontUseBuffer
- );
+ case EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY:
+ //
+ // Send TFTP request to read directory.
+ //
+ Status = PxeBcTftpReadDirectory (
+ Private,
+ Config,
+ Filename,
+ BlockSize,
+ (WindowSize > 1) ? &WindowSize : NULL,
+ BufferPtr,
+ BufferSize,
+ DontUseBuffer
+ );
- break;
+ break;
- case EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE:
- case EFI_PXE_BASE_CODE_MTFTP_READ_FILE:
- case EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY:
- Status = EFI_UNSUPPORTED;
+ case EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE:
+ case EFI_PXE_BASE_CODE_MTFTP_READ_FILE:
+ case EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY:
+ Status = EFI_UNSUPPORTED;
- break;
+ break;
- default:
- Status = EFI_INVALID_PARAMETER;
+ default:
+ Status = EFI_INVALID_PARAMETER;
- break;
+ break;
}
if (Status == EFI_ICMP_ERROR) {
@@ -1010,18 +1012,18 @@ EfiPxeBcMtftp (
} else {
Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData);
}
+
//
// Dhcp(), Discover(), and Mtftp() set the IP filter, and return with the IP
// receive filter list emptied and the filter set to EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP.
//
- ZeroMem(&IpFilter, sizeof (EFI_PXE_BASE_CODE_IP_FILTER));
+ ZeroMem (&IpFilter, sizeof (EFI_PXE_BASE_CODE_IP_FILTER));
IpFilter.Filters = EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP;
This->SetIpFilter (This, &IpFilter);
return Status;
}
-
/**
Writes a UDP packet to the network interface.
@@ -1062,27 +1064,27 @@ EfiPxeBcMtftp (
EFI_STATUS
EFIAPI
EfiPxeBcUdpWrite (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN UINT16 OpFlags,
- IN EFI_IP_ADDRESS *DestIp,
- IN EFI_PXE_BASE_CODE_UDP_PORT *DestPort,
- IN EFI_IP_ADDRESS *GatewayIp OPTIONAL,
- IN EFI_IP_ADDRESS *SrcIp OPTIONAL,
- IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort OPTIONAL,
- IN UINTN *HeaderSize OPTIONAL,
- IN VOID *HeaderPtr OPTIONAL,
- IN UINTN *BufferSize,
- IN VOID *BufferPtr
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,
+ IN UINT16 OpFlags,
+ IN EFI_IP_ADDRESS *DestIp,
+ IN EFI_PXE_BASE_CODE_UDP_PORT *DestPort,
+ IN EFI_IP_ADDRESS *GatewayIp OPTIONAL,
+ IN EFI_IP_ADDRESS *SrcIp OPTIONAL,
+ IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort OPTIONAL,
+ IN UINTN *HeaderSize OPTIONAL,
+ IN VOID *HeaderPtr OPTIONAL,
+ IN UINTN *BufferSize,
+ IN VOID *BufferPtr
)
{
- PXEBC_PRIVATE_DATA *Private;
- EFI_PXE_BASE_CODE_MODE *Mode;
- EFI_UDP4_SESSION_DATA Udp4Session;
- EFI_UDP6_SESSION_DATA Udp6Session;
- EFI_STATUS Status;
- BOOLEAN DoNotFragment;
-
- if (This == NULL || DestIp == NULL || DestPort == NULL) {
+ PXEBC_PRIVATE_DATA *Private;
+ EFI_PXE_BASE_CODE_MODE *Mode;
+ EFI_UDP4_SESSION_DATA Udp4Session;
+ EFI_UDP6_SESSION_DATA Udp6Session;
+ EFI_STATUS Status;
+ BOOLEAN DoNotFragment;
+
+ if ((This == NULL) || (DestIp == NULL) || (DestPort == NULL)) {
return EFI_INVALID_PARAMETER;
}
@@ -1095,19 +1097,20 @@ EfiPxeBcUdpWrite (
DoNotFragment = TRUE;
}
- if (!Mode->UsingIpv6 && GatewayIp != NULL && Mode->SubnetMask.Addr[0] != 0 &&
- !NetIp4IsUnicast (NTOHL (GatewayIp->Addr[0]), EFI_NTOHL(Mode->SubnetMask))) {
+ if (!Mode->UsingIpv6 && (GatewayIp != NULL) && (Mode->SubnetMask.Addr[0] != 0) &&
+ !NetIp4IsUnicast (NTOHL (GatewayIp->Addr[0]), EFI_NTOHL (Mode->SubnetMask)))
+ {
//
// Gateway is provided but it's not a unicast IPv4 address, while it will be ignored for IPv6.
//
return EFI_INVALID_PARAMETER;
}
- if (HeaderSize != NULL && (*HeaderSize == 0 || HeaderPtr == NULL)) {
+ if ((HeaderSize != NULL) && ((*HeaderSize == 0) || (HeaderPtr == NULL))) {
return EFI_INVALID_PARAMETER;
}
- if (BufferSize == NULL || (*BufferSize != 0 && BufferPtr == NULL)) {
+ if ((BufferSize == NULL) || ((*BufferSize != 0) && (BufferPtr == NULL))) {
return EFI_INVALID_PARAMETER;
}
@@ -1115,12 +1118,13 @@ EfiPxeBcUdpWrite (
return EFI_NOT_STARTED;
}
- if (!Private->IsAddressOk && SrcIp == NULL) {
+ if (!Private->IsAddressOk && (SrcIp == NULL)) {
return EFI_INVALID_PARAMETER;
}
- if (Private->CurSrcPort == 0 ||
- (SrcPort != NULL && *SrcPort != Private->CurSrcPort)) {
+ if ((Private->CurSrcPort == 0) ||
+ ((SrcPort != NULL) && (*SrcPort != Private->CurSrcPort)))
+ {
//
// Reconfigure UDPv4/UDPv6 for UdpWrite if the source port changed.
//
@@ -1173,6 +1177,7 @@ EfiPxeBcUdpWrite (
if (SrcIp != NULL) {
CopyMem (&Udp6Session.SourceAddress, SrcIp, sizeof (EFI_IPv6_ADDRESS));
}
+
if (SrcPort != NULL) {
Udp6Session.SourcePort = *SrcPort;
}
@@ -1196,9 +1201,11 @@ EfiPxeBcUdpWrite (
if (SrcIp != NULL) {
CopyMem (&Udp4Session.SourceAddress, SrcIp, sizeof (EFI_IPv4_ADDRESS));
}
+
if (SrcPort != NULL) {
Udp4Session.SourcePort = *SrcPort;
}
+
//
// Override the gateway information if user specified.
//
@@ -1206,7 +1213,7 @@ EfiPxeBcUdpWrite (
Private->Udp4Write,
&Udp4Session,
Private->UdpTimeOutEvent,
- (EFI_IPv4_ADDRESS *) GatewayIp,
+ (EFI_IPv4_ADDRESS *)GatewayIp,
HeaderSize,
HeaderPtr,
BufferSize,
@@ -1216,7 +1223,6 @@ EfiPxeBcUdpWrite (
gBS->SetTimer (Private->UdpTimeOutEvent, TimerCancel, 0);
-
//
// Reset the UdpWrite instance.
//
@@ -1229,7 +1235,6 @@ EfiPxeBcUdpWrite (
return Status;
}
-
/**
Reads a UDP packet from the network interface.
+
@@ -1270,34 +1275,34 @@ EfiPxeBcUdpWrite (
EFI_STATUS
EFIAPI
EfiPxeBcUdpRead (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN UINT16 OpFlags,
- IN OUT EFI_IP_ADDRESS *DestIp OPTIONAL,
- IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort OPTIONAL,
- IN OUT EFI_IP_ADDRESS *SrcIp OPTIONAL,
- IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort OPTIONAL,
- IN UINTN *HeaderSize OPTIONAL,
- IN VOID *HeaderPtr OPTIONAL,
- IN OUT UINTN *BufferSize,
- IN VOID *BufferPtr
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,
+ IN UINT16 OpFlags,
+ IN OUT EFI_IP_ADDRESS *DestIp OPTIONAL,
+ IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort OPTIONAL,
+ IN OUT EFI_IP_ADDRESS *SrcIp OPTIONAL,
+ IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort OPTIONAL,
+ IN UINTN *HeaderSize OPTIONAL,
+ IN VOID *HeaderPtr OPTIONAL,
+ IN OUT UINTN *BufferSize,
+ IN VOID *BufferPtr
)
{
- PXEBC_PRIVATE_DATA *Private;
- EFI_PXE_BASE_CODE_MODE *Mode;
- EFI_UDP4_COMPLETION_TOKEN Udp4Token;
- EFI_UDP6_COMPLETION_TOKEN Udp6Token;
- EFI_UDP4_RECEIVE_DATA *Udp4Rx;
- EFI_UDP6_RECEIVE_DATA *Udp6Rx;
- EFI_STATUS Status;
- BOOLEAN IsDone;
- BOOLEAN IsMatched;
- UINTN CopiedLen;
- UINTN HeaderLen;
- UINTN HeaderCopiedLen;
- UINTN BufferCopiedLen;
- UINT32 FragmentLength;
- UINTN FragmentIndex;
- UINT8 *FragmentBuffer;
+ PXEBC_PRIVATE_DATA *Private;
+ EFI_PXE_BASE_CODE_MODE *Mode;
+ EFI_UDP4_COMPLETION_TOKEN Udp4Token;
+ EFI_UDP6_COMPLETION_TOKEN Udp6Token;
+ EFI_UDP4_RECEIVE_DATA *Udp4Rx;
+ EFI_UDP6_RECEIVE_DATA *Udp6Rx;
+ EFI_STATUS Status;
+ BOOLEAN IsDone;
+ BOOLEAN IsMatched;
+ UINTN CopiedLen;
+ UINTN HeaderLen;
+ UINTN HeaderCopiedLen;
+ UINTN BufferCopiedLen;
+ UINT32 FragmentLength;
+ UINTN FragmentIndex;
+ UINT8 *FragmentBuffer;
if (This == NULL) {
return EFI_INVALID_PARAMETER;
@@ -1310,13 +1315,14 @@ EfiPxeBcUdpRead (
Udp4Rx = NULL;
Udp6Rx = NULL;
- if (((OpFlags & EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT) == 0 && DestPort == NULL) ||
- ((OpFlags & EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP) == 0 && SrcIp == NULL) ||
- ((OpFlags & EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT) == 0 && SrcPort == NULL)) {
+ if ((((OpFlags & EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT) == 0) && (DestPort == NULL)) ||
+ (((OpFlags & EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP) == 0) && (SrcIp == NULL)) ||
+ (((OpFlags & EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT) == 0) && (SrcPort == NULL)))
+ {
return EFI_INVALID_PARAMETER;
}
- if ((HeaderSize != NULL && *HeaderSize == 0) || (HeaderSize != NULL && HeaderPtr == NULL)) {
+ if (((HeaderSize != NULL) && (*HeaderSize == 0)) || ((HeaderSize != NULL) && (HeaderPtr == NULL))) {
return EFI_INVALID_PARAMETER;
}
@@ -1396,16 +1402,18 @@ EfiPxeBcUdpRead (
}
}
- if (Status == EFI_ICMP_ERROR ||
- Status == EFI_NETWORK_UNREACHABLE ||
- Status == EFI_HOST_UNREACHABLE ||
- Status == EFI_PROTOCOL_UNREACHABLE ||
- Status == EFI_PORT_UNREACHABLE) {
+ if ((Status == EFI_ICMP_ERROR) ||
+ (Status == EFI_NETWORK_UNREACHABLE) ||
+ (Status == EFI_HOST_UNREACHABLE) ||
+ (Status == EFI_PROTOCOL_UNREACHABLE) ||
+ (Status == EFI_PORT_UNREACHABLE))
+ {
//
// Get different return status for icmp error from Udp, refers to UEFI spec.
//
Mode->IcmpErrorReceived = TRUE;
}
+
gBS->SetTimer (Private->UdpTimeOutEvent, TimerCancel, 0);
if (IsMatched) {
@@ -1427,6 +1435,7 @@ EfiPxeBcUdpRead (
if (HeaderSize != NULL) {
*HeaderSize = HeaderLen;
}
+
*BufferSize = Udp6Rx->DataLength - HeaderLen;
HeaderCopiedLen = 0;
@@ -1438,30 +1447,31 @@ EfiPxeBcUdpRead (
//
// Copy the header part of received data.
//
- CopyMem ((UINT8 *) HeaderPtr + HeaderCopiedLen, FragmentBuffer, FragmentLength);
+ CopyMem ((UINT8 *)HeaderPtr + HeaderCopiedLen, FragmentBuffer, FragmentLength);
HeaderCopiedLen += FragmentLength;
} else if (HeaderCopiedLen < HeaderLen) {
//
// Copy the header part of received data.
//
CopiedLen = HeaderLen - HeaderCopiedLen;
- CopyMem ((UINT8 *) HeaderPtr + HeaderCopiedLen, FragmentBuffer, CopiedLen);
+ CopyMem ((UINT8 *)HeaderPtr + HeaderCopiedLen, FragmentBuffer, CopiedLen);
HeaderCopiedLen += CopiedLen;
//
// Copy the other part of received data.
//
- CopyMem ((UINT8 *) BufferPtr + BufferCopiedLen, FragmentBuffer + CopiedLen, FragmentLength - CopiedLen);
+ CopyMem ((UINT8 *)BufferPtr + BufferCopiedLen, FragmentBuffer + CopiedLen, FragmentLength - CopiedLen);
BufferCopiedLen += (FragmentLength - CopiedLen);
} else {
//
// Copy the other part of received data.
//
- CopyMem ((UINT8 *) BufferPtr + BufferCopiedLen, FragmentBuffer, FragmentLength);
+ CopyMem ((UINT8 *)BufferPtr + BufferCopiedLen, FragmentBuffer, FragmentLength);
BufferCopiedLen += FragmentLength;
}
}
}
+
//
// Recycle the receiving buffer after copy to user.
//
@@ -1481,6 +1491,7 @@ EfiPxeBcUdpRead (
if (HeaderSize != NULL) {
*HeaderSize = HeaderLen;
}
+
*BufferSize = Udp4Rx->DataLength - HeaderLen;
HeaderCopiedLen = 0;
@@ -1492,30 +1503,31 @@ EfiPxeBcUdpRead (
//
// Copy the header part of received data.
//
- CopyMem ((UINT8 *) HeaderPtr + HeaderCopiedLen, FragmentBuffer, FragmentLength);
+ CopyMem ((UINT8 *)HeaderPtr + HeaderCopiedLen, FragmentBuffer, FragmentLength);
HeaderCopiedLen += FragmentLength;
} else if (HeaderCopiedLen < HeaderLen) {
//
// Copy the header part of received data.
//
CopiedLen = HeaderLen - HeaderCopiedLen;
- CopyMem ((UINT8 *) HeaderPtr + HeaderCopiedLen, FragmentBuffer, CopiedLen);
+ CopyMem ((UINT8 *)HeaderPtr + HeaderCopiedLen, FragmentBuffer, CopiedLen);
HeaderCopiedLen += CopiedLen;
//
// Copy the other part of received data.
//
- CopyMem ((UINT8 *) BufferPtr + BufferCopiedLen, FragmentBuffer + CopiedLen, FragmentLength - CopiedLen);
+ CopyMem ((UINT8 *)BufferPtr + BufferCopiedLen, FragmentBuffer + CopiedLen, FragmentLength - CopiedLen);
BufferCopiedLen += (FragmentLength - CopiedLen);
} else {
//
// Copy the other part of received data.
//
- CopyMem ((UINT8 *) BufferPtr + BufferCopiedLen, FragmentBuffer, FragmentLength);
+ CopyMem ((UINT8 *)BufferPtr + BufferCopiedLen, FragmentBuffer, FragmentLength);
BufferCopiedLen += FragmentLength;
}
}
}
+
//
// Recycle the receiving buffer after copy to user.
//
@@ -1534,7 +1546,6 @@ EfiPxeBcUdpRead (
return Status;
}
-
/**
Updates the IP receive filters of a network device and enables software filtering.
@@ -1570,22 +1581,22 @@ EfiPxeBcUdpRead (
EFI_STATUS
EFIAPI
EfiPxeBcSetIpFilter (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN EFI_PXE_BASE_CODE_IP_FILTER *NewFilter
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,
+ IN EFI_PXE_BASE_CODE_IP_FILTER *NewFilter
)
{
- EFI_STATUS Status;
- PXEBC_PRIVATE_DATA *Private;
- EFI_PXE_BASE_CODE_MODE *Mode;
- EFI_UDP4_CONFIG_DATA *Udp4Cfg;
- EFI_UDP6_CONFIG_DATA *Udp6Cfg;
- UINTN Index;
- BOOLEAN NeedPromiscuous;
- BOOLEAN AcceptPromiscuous;
- BOOLEAN AcceptBroadcast;
- BOOLEAN MultiCastUpdate;
-
- if (This == NULL || NewFilter == NULL) {
+ EFI_STATUS Status;
+ PXEBC_PRIVATE_DATA *Private;
+ EFI_PXE_BASE_CODE_MODE *Mode;
+ EFI_UDP4_CONFIG_DATA *Udp4Cfg;
+ EFI_UDP6_CONFIG_DATA *Udp6Cfg;
+ UINTN Index;
+ BOOLEAN NeedPromiscuous;
+ BOOLEAN AcceptPromiscuous;
+ BOOLEAN AcceptBroadcast;
+ BOOLEAN MultiCastUpdate;
+
+ if ((This == NULL) || (NewFilter == NULL)) {
return EFI_INVALID_PARAMETER;
}
@@ -1601,22 +1612,26 @@ EfiPxeBcSetIpFilter (
for (Index = 0; Index < NewFilter->IpCnt; Index++) {
ASSERT (Index < EFI_PXE_BASE_CODE_MAX_IPCNT);
if (!Mode->UsingIpv6 &&
- IP4_IS_LOCAL_BROADCAST (EFI_IP4 (NewFilter->IpList[Index].v4))) {
+ IP4_IS_LOCAL_BROADCAST (EFI_IP4 (NewFilter->IpList[Index].v4)))
+ {
//
// IPv4 broadcast address should not be in IP filter.
//
return EFI_INVALID_PARAMETER;
}
+
if (Mode->UsingIpv6) {
- if ((NewFilter->Filters & EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP) != 0 &&
- NetIp6IsValidUnicast (&NewFilter->IpList[Index].v6)) {
+ if (((NewFilter->Filters & EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP) != 0) &&
+ NetIp6IsValidUnicast (&NewFilter->IpList[Index].v6))
+ {
NeedPromiscuous = TRUE;
}
- } else if ((EFI_NTOHL(Mode->StationIp) != 0) &&
- (EFI_NTOHL(Mode->SubnetMask) != 0) &&
- IP4_NET_EQUAL(EFI_NTOHL(Mode->StationIp), EFI_NTOHL(NewFilter->IpList[Index].v4), EFI_NTOHL(Mode->SubnetMask.v4)) &&
- NetIp4IsUnicast (EFI_IP4 (NewFilter->IpList[Index].v4), EFI_NTOHL(Mode->SubnetMask)) &&
- ((NewFilter->Filters & EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP) != 0)) {
+ } else if ((EFI_NTOHL (Mode->StationIp) != 0) &&
+ (EFI_NTOHL (Mode->SubnetMask) != 0) &&
+ IP4_NET_EQUAL (EFI_NTOHL (Mode->StationIp), EFI_NTOHL (NewFilter->IpList[Index].v4), EFI_NTOHL (Mode->SubnetMask.v4)) &&
+ NetIp4IsUnicast (EFI_IP4 (NewFilter->IpList[Index].v4), EFI_NTOHL (Mode->SubnetMask)) &&
+ ((NewFilter->Filters & EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP) != 0))
+ {
NeedPromiscuous = TRUE;
}
}
@@ -1626,8 +1641,9 @@ EfiPxeBcSetIpFilter (
MultiCastUpdate = FALSE;
if (NeedPromiscuous ||
- (NewFilter->Filters & EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS) != 0 ||
- (NewFilter->Filters & EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST) != 0) {
+ ((NewFilter->Filters & EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS) != 0) ||
+ ((NewFilter->Filters & EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST) != 0))
+ {
//
// Configure UDPv4/UDPv6 as promiscuous mode to receive all packets.
//
@@ -1636,7 +1652,7 @@ EfiPxeBcSetIpFilter (
//
// Configure UDPv4 to receive all broadcast packets.
//
- AcceptBroadcast = TRUE;
+ AcceptBroadcast = TRUE;
}
//
@@ -1661,7 +1677,8 @@ EfiPxeBcSetIpFilter (
//
Udp4Cfg = &Private->Udp4CfgData;
if ((AcceptPromiscuous != Udp4Cfg->AcceptPromiscuous) ||
- (AcceptBroadcast != Udp4Cfg->AcceptBroadcast) || MultiCastUpdate) {
+ (AcceptBroadcast != Udp4Cfg->AcceptBroadcast) || MultiCastUpdate)
+ {
//
// Clear the UDP4 instance configuration, all joined groups will be left
// during the operation.
@@ -1673,7 +1690,7 @@ EfiPxeBcSetIpFilter (
//
Udp4Cfg->AcceptPromiscuous = AcceptPromiscuous;
Udp4Cfg->AcceptBroadcast = AcceptBroadcast;
- Status = Private->Udp4Read->Configure (Private->Udp4Read, Udp4Cfg);
+ Status = Private->Udp4Read->Configure (Private->Udp4Read, Udp4Cfg);
if (EFI_ERROR (Status)) {
return Status;
}
@@ -1711,7 +1728,7 @@ EfiPxeBcSetIpFilter (
// Configure the UDP instance with the new configuration.
//
Udp6Cfg->AcceptPromiscuous = AcceptPromiscuous;
- Status = Private->Udp6Read->Configure (Private->Udp6Read, Udp6Cfg);
+ Status = Private->Udp6Read->Configure (Private->Udp6Read, Udp6Cfg);
if (EFI_ERROR (Status)) {
return Status;
}
@@ -1743,7 +1760,6 @@ EfiPxeBcSetIpFilter (
return Status;
}
-
/**
Uses the ARP protocol to resolve a MAC address. It is not supported for IPv6.
@@ -1772,9 +1788,9 @@ EfiPxeBcSetIpFilter (
EFI_STATUS
EFIAPI
EfiPxeBcArp (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN EFI_IP_ADDRESS *IpAddr,
- IN EFI_MAC_ADDRESS *MacAddr OPTIONAL
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,
+ IN EFI_IP_ADDRESS *IpAddr,
+ IN EFI_MAC_ADDRESS *MacAddr OPTIONAL
)
{
PXEBC_PRIVATE_DATA *Private;
@@ -1785,7 +1801,7 @@ EfiPxeBcArp (
EFI_MAC_ADDRESS ZeroMac;
BOOLEAN IsResolved;
- if (This == NULL || IpAddr == NULL) {
+ if ((This == NULL) || (IpAddr == NULL)) {
return EFI_INVALID_PARAMETER;
}
@@ -1839,7 +1855,7 @@ EfiPxeBcArp (
// If AutoArp is TRUE, try to send Arp request on initiative.
//
Status = Private->Arp->Request (Private->Arp, &IpAddr->v4, ResolvedEvent, &TempMac);
- if (EFI_ERROR (Status) && Status != EFI_NOT_READY) {
+ if (EFI_ERROR (Status) && (Status != EFI_NOT_READY)) {
goto ON_EXIT;
}
@@ -1848,6 +1864,7 @@ EfiPxeBcArp (
break;
}
}
+
if (CompareMem (&TempMac, &ZeroMac, sizeof (EFI_MAC_ADDRESS)) != 0) {
Status = EFI_SUCCESS;
} else {
@@ -1858,7 +1875,7 @@ EfiPxeBcArp (
//
// Copy the Mac address to user if needed.
//
- if (MacAddr != NULL && !EFI_ERROR (Status)) {
+ if ((MacAddr != NULL) && !EFI_ERROR (Status)) {
CopyMem (MacAddr, &TempMac, sizeof (EFI_MAC_ADDRESS));
}
@@ -1866,10 +1883,10 @@ ON_EXIT:
if (ResolvedEvent != NULL) {
gBS->CloseEvent (ResolvedEvent);
}
+
return Status;
}
-
/**
Updates the parameters that affect the operation of the PXE Base Code Protocol.
@@ -1905,12 +1922,12 @@ ON_EXIT:
EFI_STATUS
EFIAPI
EfiPxeBcSetParameters (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN BOOLEAN *NewAutoArp OPTIONAL,
- IN BOOLEAN *NewSendGUID OPTIONAL,
- IN UINT8 *NewTTL OPTIONAL,
- IN UINT8 *NewToS OPTIONAL,
- IN BOOLEAN *NewMakeCallback OPTIONAL
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,
+ IN BOOLEAN *NewAutoArp OPTIONAL,
+ IN BOOLEAN *NewSendGUID OPTIONAL,
+ IN UINT8 *NewTTL OPTIONAL,
+ IN UINT8 *NewToS OPTIONAL,
+ IN BOOLEAN *NewMakeCallback OPTIONAL
)
{
PXEBC_PRIVATE_DATA *Private;
@@ -1937,7 +1954,7 @@ EfiPxeBcSetParameters (
Status = gBS->HandleProtocol (
Mode->UsingIpv6 ? Private->Ip6Nic->Controller : Private->Ip4Nic->Controller,
&gEfiPxeBaseCodeCallbackProtocolGuid,
- (VOID **) &Private->PxeBcCallback
+ (VOID **)&Private->PxeBcCallback
);
if (EFI_ERROR (Status) || (Private->PxeBcCallback->Callback == NULL)) {
@@ -1946,6 +1963,7 @@ EfiPxeBcSetParameters (
} else {
Private->PxeBcCallback = NULL;
}
+
Mode->MakeCallbacks = *NewMakeCallback;
}
@@ -1954,6 +1972,7 @@ EfiPxeBcSetParameters (
DEBUG ((DEBUG_WARN, "PXE: Failed to read system GUID from the smbios table!\n"));
return EFI_INVALID_PARAMETER;
}
+
Mode->SendGUID = *NewSendGUID;
}
@@ -1972,7 +1991,6 @@ EfiPxeBcSetParameters (
return EFI_SUCCESS;
}
-
/**
Updates the station IP address and/or subnet mask values of a network device.
@@ -1997,9 +2015,9 @@ EfiPxeBcSetParameters (
EFI_STATUS
EFIAPI
EfiPxeBcSetStationIP (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN EFI_IP_ADDRESS *NewStationIp OPTIONAL,
- IN EFI_IP_ADDRESS *NewSubnetMask OPTIONAL
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,
+ IN EFI_IP_ADDRESS *NewStationIp OPTIONAL,
+ IN EFI_IP_ADDRESS *NewSubnetMask OPTIONAL
)
{
EFI_STATUS Status;
@@ -2010,7 +2028,7 @@ EfiPxeBcSetStationIP (
return EFI_INVALID_PARAMETER;
}
- if (NewStationIp != NULL && !NetIp6IsValidUnicast (&NewStationIp->v6)) {
+ if ((NewStationIp != NULL) && !NetIp6IsValidUnicast (&NewStationIp->v6)) {
return EFI_INVALID_PARAMETER;
}
@@ -2019,15 +2037,17 @@ EfiPxeBcSetStationIP (
Status = EFI_SUCCESS;
if (!Mode->UsingIpv6 &&
- NewSubnetMask != NULL &&
- !IP4_IS_VALID_NETMASK (NTOHL (NewSubnetMask->Addr[0]))) {
+ (NewSubnetMask != NULL) &&
+ !IP4_IS_VALID_NETMASK (NTOHL (NewSubnetMask->Addr[0])))
+ {
return EFI_INVALID_PARAMETER;
}
- if (!Mode->UsingIpv6 && NewStationIp != NULL) {
- if (IP4_IS_UNSPECIFIED(NTOHL (NewStationIp->Addr[0])) ||
- IP4_IS_LOCAL_BROADCAST(NTOHL (NewStationIp->Addr[0])) ||
- (NewSubnetMask != NULL && NewSubnetMask->Addr[0] != 0 && !NetIp4IsUnicast (NTOHL (NewStationIp->Addr[0]), NTOHL (NewSubnetMask->Addr[0])))) {
+ if (!Mode->UsingIpv6 && (NewStationIp != NULL)) {
+ if (IP4_IS_UNSPECIFIED (NTOHL (NewStationIp->Addr[0])) ||
+ IP4_IS_LOCAL_BROADCAST (NTOHL (NewStationIp->Addr[0])) ||
+ ((NewSubnetMask != NULL) && (NewSubnetMask->Addr[0] != 0) && !NetIp4IsUnicast (NTOHL (NewStationIp->Addr[0]), NTOHL (NewSubnetMask->Addr[0]))))
+ {
return EFI_INVALID_PARAMETER;
}
}
@@ -2036,7 +2056,7 @@ EfiPxeBcSetStationIP (
return EFI_NOT_STARTED;
}
- if (Mode->UsingIpv6 && NewStationIp != NULL) {
+ if (Mode->UsingIpv6 && (NewStationIp != NULL)) {
//
// Set the IPv6 address by Ip6Config protocol.
//
@@ -2051,9 +2071,9 @@ EfiPxeBcSetStationIP (
CopyMem (&Private->StationIp, NewStationIp, sizeof (EFI_IP_ADDRESS));
}
- if (!Mode->UsingIpv6 && NewSubnetMask != NULL) {
+ if (!Mode->UsingIpv6 && (NewSubnetMask != NULL)) {
CopyMem (&Mode->SubnetMask, NewSubnetMask, sizeof (EFI_IP_ADDRESS));
- CopyMem (&Private->SubnetMask ,NewSubnetMask, sizeof (EFI_IP_ADDRESS));
+ CopyMem (&Private->SubnetMask, NewSubnetMask, sizeof (EFI_IP_ADDRESS));
}
Status = PxeBcFlushStationIp (Private, NewStationIp, NewSubnetMask);
@@ -2065,7 +2085,6 @@ ON_EXIT:
return Status;
}
-
/**
Updates the contents of the cached DHCP and Discover packets.
@@ -2101,19 +2120,19 @@ ON_EXIT:
EFI_STATUS
EFIAPI
EfiPxeBcSetPackets (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN BOOLEAN *NewDhcpDiscoverValid OPTIONAL,
- IN BOOLEAN *NewDhcpAckReceived OPTIONAL,
- IN BOOLEAN *NewProxyOfferReceived OPTIONAL,
- IN BOOLEAN *NewPxeDiscoverValid OPTIONAL,
- IN BOOLEAN *NewPxeReplyReceived OPTIONAL,
- IN BOOLEAN *NewPxeBisReplyReceived OPTIONAL,
- IN EFI_PXE_BASE_CODE_PACKET *NewDhcpDiscover OPTIONAL,
- IN EFI_PXE_BASE_CODE_PACKET *NewDhcpAck OPTIONAL,
- IN EFI_PXE_BASE_CODE_PACKET *NewProxyOffer OPTIONAL,
- IN EFI_PXE_BASE_CODE_PACKET *NewPxeDiscover OPTIONAL,
- IN EFI_PXE_BASE_CODE_PACKET *NewPxeReply OPTIONAL,
- IN EFI_PXE_BASE_CODE_PACKET *NewPxeBisReply OPTIONAL
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,
+ IN BOOLEAN *NewDhcpDiscoverValid OPTIONAL,
+ IN BOOLEAN *NewDhcpAckReceived OPTIONAL,
+ IN BOOLEAN *NewProxyOfferReceived OPTIONAL,
+ IN BOOLEAN *NewPxeDiscoverValid OPTIONAL,
+ IN BOOLEAN *NewPxeReplyReceived OPTIONAL,
+ IN BOOLEAN *NewPxeBisReplyReceived OPTIONAL,
+ IN EFI_PXE_BASE_CODE_PACKET *NewDhcpDiscover OPTIONAL,
+ IN EFI_PXE_BASE_CODE_PACKET *NewDhcpAck OPTIONAL,
+ IN EFI_PXE_BASE_CODE_PACKET *NewProxyOffer OPTIONAL,
+ IN EFI_PXE_BASE_CODE_PACKET *NewPxeDiscover OPTIONAL,
+ IN EFI_PXE_BASE_CODE_PACKET *NewPxeReply OPTIONAL,
+ IN EFI_PXE_BASE_CODE_PACKET *NewPxeBisReply OPTIONAL
)
{
PXEBC_PRIVATE_DATA *Private;
@@ -2198,7 +2217,6 @@ EFI_PXE_BASE_CODE_PROTOCOL gPxeBcProtocolTemplate = {
NULL
};
-
/**
Callback function that is invoked when the PXE Base Code Protocol is about to transmit, has
received, or is waiting to receive a packet.
@@ -2236,8 +2254,8 @@ EfiPxeLoadFileCallback (
IN EFI_PXE_BASE_CODE_PACKET *PacketPtr OPTIONAL
)
{
- EFI_INPUT_KEY Key;
- EFI_STATUS Status;
+ EFI_INPUT_KEY Key;
+ EFI_STATUS Status;
//
// Catch Ctrl-C or ESC to abort.
@@ -2245,43 +2263,43 @@ EfiPxeLoadFileCallback (
Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);
if (!EFI_ERROR (Status)) {
-
- if (Key.ScanCode == SCAN_ESC || Key.UnicodeChar == (0x1F & 'c')) {
-
+ if ((Key.ScanCode == SCAN_ESC) || (Key.UnicodeChar == (0x1F & 'c'))) {
return EFI_PXE_BASE_CODE_CALLBACK_STATUS_ABORT;
}
}
+
//
// No print if receive packet
//
if (Received) {
return EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE;
}
+
//
// Print only for three functions
//
switch (Function) {
-
- case EFI_PXE_BASE_CODE_FUNCTION_MTFTP:
- //
- // Print only for open MTFTP packets, not every MTFTP packets
- //
- if (PacketLength != 0 && PacketPtr != NULL) {
- if (PacketPtr->Raw[0x1C] != 0x00 || PacketPtr->Raw[0x1D] != 0x01) {
- return EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE;
+ case EFI_PXE_BASE_CODE_FUNCTION_MTFTP:
+ //
+ // Print only for open MTFTP packets, not every MTFTP packets
+ //
+ if ((PacketLength != 0) && (PacketPtr != NULL)) {
+ if ((PacketPtr->Raw[0x1C] != 0x00) || (PacketPtr->Raw[0x1D] != 0x01)) {
+ return EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE;
+ }
}
- }
- break;
- case EFI_PXE_BASE_CODE_FUNCTION_DHCP:
- case EFI_PXE_BASE_CODE_FUNCTION_DISCOVER:
- break;
+ break;
- default:
- return EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE;
+ case EFI_PXE_BASE_CODE_FUNCTION_DHCP:
+ case EFI_PXE_BASE_CODE_FUNCTION_DISCOVER:
+ break;
+
+ default:
+ return EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE;
}
- if (PacketLength != 0 && PacketPtr != NULL) {
+ if ((PacketLength != 0) && (PacketPtr != NULL)) {
//
// Print '.' when transmit a packet
//
@@ -2291,12 +2309,11 @@ EfiPxeLoadFileCallback (
return EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE;
}
-EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL gPxeBcCallBackTemplate = {
+EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL gPxeBcCallBackTemplate = {
EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL_REVISION,
EfiPxeLoadFileCallback
};
-
/**
Causes the driver to load a specified file.
@@ -2328,11 +2345,11 @@ EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL gPxeBcCallBackTemplate = {
EFI_STATUS
EFIAPI
EfiPxeLoadFile (
- IN EFI_LOAD_FILE_PROTOCOL *This,
- IN EFI_DEVICE_PATH_PROTOCOL *FilePath,
- IN BOOLEAN BootPolicy,
- IN OUT UINTN *BufferSize,
- IN VOID *Buffer OPTIONAL
+ IN EFI_LOAD_FILE_PROTOCOL *This,
+ IN EFI_DEVICE_PATH_PROTOCOL *FilePath,
+ IN BOOLEAN BootPolicy,
+ IN OUT UINTN *BufferSize,
+ IN VOID *Buffer OPTIONAL
)
{
PXEBC_PRIVATE_DATA *Private;
@@ -2342,7 +2359,7 @@ EfiPxeLoadFile (
EFI_STATUS Status;
EFI_STATUS MediaStatus;
- if (This == NULL || BufferSize == NULL || FilePath == NULL || !IsDevicePathEnd (FilePath)) {
+ if ((This == NULL) || (BufferSize == NULL) || (FilePath == NULL) || !IsDevicePathEnd (FilePath)) {
return EFI_INVALID_PARAMETER;
}
@@ -2379,7 +2396,7 @@ EfiPxeLoadFile (
// Start Pxe Base Code to initialize PXE boot.
//
Status = PxeBc->Start (PxeBc, UsingIpv6);
- if (Status == EFI_ALREADY_STARTED && UsingIpv6 != PxeBc->Mode->UsingIpv6) {
+ if ((Status == EFI_ALREADY_STARTED) && (UsingIpv6 != PxeBc->Mode->UsingIpv6)) {
//
// PxeBc protocol has already been started but not on the required IP version, restart it.
//
@@ -2388,13 +2405,15 @@ EfiPxeLoadFile (
Status = PxeBc->Start (PxeBc, UsingIpv6);
}
}
- if (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED) {
+
+ if ((Status == EFI_SUCCESS) || (Status == EFI_ALREADY_STARTED)) {
Status = PxeBcLoadBootFile (Private, BufferSize, Buffer);
}
- if (Status != EFI_SUCCESS &&
- Status != EFI_UNSUPPORTED &&
- Status != EFI_BUFFER_TOO_SMALL) {
+ if ((Status != EFI_SUCCESS) &&
+ (Status != EFI_UNSUPPORTED) &&
+ (Status != EFI_BUFFER_TOO_SMALL))
+ {
//
// There are three cases, which needn't stop pxebc here.
// 1. success to download file.