TianoCore EDK2 master
|
#include "Mtftp4Impl.h"
Go to the source code of this file.
Variables | |
EFI_MTFTP4_PROTOCOL | gMtftp4ProtocolTemplate |
Interface routine for Mtftp4.
(C) Copyright 2014 Hewlett-Packard Development Company, L.P.
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
Definition in file Mtftp4Impl.c.
EFI_STATUS EFIAPI EfiMtftp4Configure | ( | IN EFI_MTFTP4_PROTOCOL * | This, |
IN EFI_MTFTP4_CONFIG_DATA * | ConfigData | ||
) |
Initializes, changes, or resets the default operational setting for this EFI MTFTPv4 Protocol driver instance.
The Configure() function is used to set and change the configuration data for this EFI MTFTPv4 Protocol driver instance. The configuration data can be reset to startup defaults by calling Configure() with MtftpConfigData set to NULL. Whenever the instance is reset, any pending operation is aborted. By changing the EFI MTFTPv4 Protocol driver instance configuration data, the client can connect to different MTFTPv4 servers. The configuration parameters in MtftpConfigData are used as the default parameters in later MTFTPv4 operations and can be overridden in later operations.
This | Pointer to the EFI_MTFTP4_PROTOCOL instance |
ConfigData | MtftpConfigDataPointer to the configuration data structure |
EFI_SUCCESS | The EFI MTFTPv4 Protocol driver was configured successfully. |
EFI_INVALID_PARAMETER | One or more following conditions are TRUE: 1.This is NULL. 2.MtftpConfigData.UseDefaultSetting is FALSE and MtftpConfigData.StationIp is not a valid IPv4 unicast address. 3.MtftpConfigData.UseDefaultSetting is FALSE and MtftpConfigData.SubnetMask is invalid. 4.MtftpConfigData.ServerIp is not a valid IPv4 unicast address. 5.MtftpConfigData.UseDefaultSetting is FALSE and MtftpConfigData.GatewayIp is not a valid IPv4 unicast address or is not in the same subnet with station address. |
EFI_ACCESS_DENIED | The EFI configuration could not be changed at this time because there is one MTFTP background operation in progress. |
EFI_NO_MAPPING | When using a default address, configuration (DHCP, BOOTP, RARP, etc.) has not finished yet. |
EFI_UNSUPPORTED | A configuration protocol (DHCP, BOOTP, RARP, etc.) could not be located when clients choose to use the default address settings. |
EFI_OUT_OF_RESOURCES | The EFI MTFTPv4 Protocol driver instance data could not be allocated. |
EFI_DEVICE_ERROR | An unexpected system or network error occurred. The EFI MTFTPv4 Protocol driver instance is not configured. |
Definition at line 624 of file Mtftp4Impl.c.
EFI_STATUS EFIAPI EfiMtftp4GetInfo | ( | IN EFI_MTFTP4_PROTOCOL * | This, |
IN EFI_MTFTP4_OVERRIDE_DATA *OverrideData | OPTIONAL, | ||
IN UINT8 * | Filename, | ||
IN UINT8 *ModeStr | OPTIONAL, | ||
IN UINT8 | OptionCount, | ||
IN EFI_MTFTP4_OPTION *OptionList | OPTIONAL, | ||
OUT UINT32 * | PacketLength, | ||
OUT EFI_MTFTP4_PACKET **Packet | OPTIONAL | ||
) |
Gets information about a file from an MTFTPv4 server.
The GetInfo() function assembles an MTFTPv4 request packet with options; sends it to the MTFTPv4 server; and may return an MTFTPv4 OACK, MTFTPv4 ERROR, or ICMP ERROR packet. Retries occur only if no response packets are received from the MTFTPv4 server before the timeout expires. It is implemented with EfiMtftp4ReadFile: build a token, then pass it to EfiMtftp4ReadFile. In its check packet callback abort the operations.
This | Pointer to the EFI_MTFTP4_PROTOCOL instance |
OverrideData | Data that is used to override the existing parameters. If NULL, the default parameters that were set in the EFI_MTFTP4_PROTOCOL.Configure() function are used |
Filename | Pointer to null-terminated ASCII file name string |
ModeStr | Pointer to null-terminated ASCII mode string. If NULL, "octet" will be used |
OptionCount | Number of option/value string pairs in OptionList |
OptionList | Pointer to array of option/value string pairs. Ignored if OptionCount is zero |
PacketLength | The number of bytes in the returned packet |
Packet | PacketThe pointer to the received packet. This buffer must be freed by the caller. |
EFI_SUCCESS | An MTFTPv4 OACK packet was received and is in the Buffer. |
EFI_INVALID_PARAMETER | One or more of the following conditions is TRUE: 1.This is NULL. 2.Filename is NULL. 3.OptionCount is not zero and OptionList is NULL. 4.One or more options in OptionList have wrong format. 5.PacketLength is NULL. 6.One or more IPv4 addresses in OverrideData are not valid unicast IPv4 addresses if OverrideData is not NULL. |
EFI_UNSUPPORTED | One or more options in the OptionList are in the unsupported list of structure EFI_MTFTP4_MODE_DATA |
EFI_NOT_STARTED | The EFI MTFTPv4 Protocol driver has not been started. |
EFI_NO_MAPPING | When using a default address, configuration (DHCP, BOOTP, RARP, etc.) has not finished yet. |
EFI_ACCESS_DENIED | The previous operation has not completed yet. |
EFI_OUT_OF_RESOURCES | Required system resources could not be allocated. |
EFI_TFTP_ERROR | An MTFTPv4 ERROR packet was received and is in the Buffer. |
EFI_ICMP_ERROR | An ICMP ERROR packet was received and the Packet is set to NULL. |
EFI_PROTOCOL_ERROR | An unexpected MTFTPv4 packet was received and is in the Buffer. |
EFI_TIMEOUT | No responses were received from the MTFTPv4 server. |
EFI_DEVICE_ERROR | An unexpected network error or system error occurred. |
EFI_NO_MEDIA | There was a media error. |
Definition at line 985 of file Mtftp4Impl.c.
EFI_STATUS EFIAPI EfiMtftp4GetModeData | ( | IN EFI_MTFTP4_PROTOCOL * | This, |
OUT EFI_MTFTP4_MODE_DATA * | ModeData | ||
) |
Reads the current operational settings.
The GetModeData()function reads the current operational settings of this EFI MTFTPv4 Protocol driver instance.
This | Pointer to the EFI_MTFTP4_PROTOCOL instance. |
ModeData | Pointer to storage for the EFI MTFTPv4 Protocol driver mode data. |
EFI_SUCCESS | The configuration data was successfully returned. |
EFI_OUT_OF_RESOURCES | The required mode data could not be allocated. |
EFI_INVALID_PARAMETER | This is NULL or ModeData is NULL. |
Definition at line 549 of file Mtftp4Impl.c.
EFI_STATUS EFIAPI EfiMtftp4ParseOptions | ( | IN EFI_MTFTP4_PROTOCOL * | This, |
IN UINT32 | PacketLen, | ||
IN EFI_MTFTP4_PACKET * | Packet, | ||
OUT UINT32 * | OptionCount, | ||
OUT EFI_MTFTP4_OPTION **OptionList | OPTIONAL | ||
) |
Parses the options in an MTFTPv4 OACK packet.
The ParseOptions() function parses the option fields in an MTFTPv4 OACK packet and returns the number of options that were found and optionally a list of pointers to the options in the packet. If one or more of the option fields are not valid, then EFI_PROTOCOL_ERROR is returned and *OptionCount and *OptionList stop at the last valid option. The OptionList is allocated by this function, and caller should free it when used.
This | Pointer to the EFI_MTFTP4_PROTOCOL instance. |
PacketLen | Length of the OACK packet to be parsed. |
Packet | Pointer to the OACK packet to be parsed. |
OptionCount | Pointer to the number of options in following OptionList. |
OptionList | Pointer to EFI_MTFTP4_OPTION storage. Call the EFI Boot Service FreePool() to release theOptionList if the options in this OptionList are not needed any more |
EFI_SUCCESS | The OACK packet was valid and the OptionCount and OptionList parameters have been updated. |
EFI_INVALID_PARAMETER | One or more of the following conditions is TRUE: 1.PacketLen is 0. 2.Packet is NULL or Packet is not a valid MTFTPv4 packet. 3.OptionCount is NULL. |
EFI_NOT_FOUND | No options were found in the OACK packet. |
EFI_OUT_OF_RESOURCES | Storage for the OptionList array cannot be allocated. |
EFI_PROTOCOL_ERROR | One or more of the option fields is invalid. |
Definition at line 731 of file Mtftp4Impl.c.
EFI_STATUS EFIAPI EfiMtftp4Poll | ( | IN EFI_MTFTP4_PROTOCOL * | This | ) |
Polls for incoming data packets and processes outgoing data packets.
The Poll() function can be used by network drivers and applications to increase the rate that data packets are moved between the communications device and the transmit and receive queues. In some systems, the periodic timer event in the managed network driver may not poll the underlying communications device fast enough to transmit and/or receive all data packets without missing incoming packets or dropping outgoing packets. Drivers and applications that are experiencing packet loss should try calling the Poll() function more often.
This | Pointer to the EFI_MTFTP4_PROTOCOL instance |
EFI_SUCCESS | Incoming or outgoing data was processed. |
EFI_NOT_STARTED | This EFI MTFTPv4 Protocol instance has not been started. |
EFI_NO_MAPPING | When using a default address, configuration (DHCP, BOOTP, RARP, etc.) is not finished yet. |
EFI_INVALID_PARAMETER | This is NULL. |
EFI_DEVICE_ERROR | An unexpected system or network error occurred. |
EFI_TIMEOUT | Data was dropped out of the transmit and/or receive queue. Consider increasing the polling rate. |
Definition at line 1067 of file Mtftp4Impl.c.
EFI_STATUS EFIAPI EfiMtftp4ReadDirectory | ( | IN EFI_MTFTP4_PROTOCOL * | This, |
IN EFI_MTFTP4_TOKEN * | Token | ||
) |
Downloads a data file "directory" from an MTFTPv4 server. May be unsupported in some EFI implementations
The ReadDirectory() function is used to return a list of files on the MTFTPv4 server that are logically (or operationally) related to Token.Filename. The directory request packet that is sent to the server is built with the option list that was provided by caller, if present. The file information that the server returns is put into either of the following locations: 1.A fixed buffer that is pointed to by Token.Buffer 2.A download service function that is pointed to by Token.CheckPacket If both Token.Buffer and Token.CheckPacket are used, then Token.CheckPacket will be called first. If the call is successful, the packet will be stored in Token.Buffer. The returned directory listing in the Token.Buffer or EFI_MTFTP4_PACKET consists of a list of two or three variable-length ASCII strings, each terminated by a null character, for each file in the directory. If the multicast option is involved, the first field of each directory entry is the static multicast IP address and UDP port number that is associated with the file name. The format of the field is ip:ip:ip:ip:port. If the multicast option is not involved, this field and its terminating null character are not present. The next field of each directory entry is the file name and the last field is the file information string. The information string contains the file size and the create/modify timestamp. The format of the information string is filesize yyyy-mm-dd hh:mm:ss:ffff. The timestamp is Coordinated Universal Time (UTC; also known as Greenwich Mean Time [GMT]). The only difference between ReadFile and ReadDirectory is the opcode used.
This | Pointer to the EFI_MTFTP4_PROTOCOL instance |
Token | Pointer to the token structure to provide the parameters that are used in this function |
EFI_SUCCESS | The MTFTPv4 related file "directory" has been downloaded. |
EFI_UNSUPPORTED | The operation is not supported by this implementation. |
EFI_INVALID_PARAMETER | One or more of the following conditions is TRUE:
|
EFI_UNSUPPORTED | One or more options in the Token.OptionList are in the unsupported list of structure EFI_MTFTP4_MODE_DATA. |
EFI_NOT_STARTED | The EFI MTFTPv4 Protocol driver has not been started. |
EFI_NO_MAPPING | When using a default address, configuration (DHCP, BOOTP, RARP, etc.) is not finished yet. |
EFI_ALREADY_STARTED | This Token is already being used in another MTFTPv4 session. |
EFI_OUT_OF_RESOURCES | Required system resources could not be allocated. |
EFI_ACCESS_DENIED | The previous operation has not completed yet. |
EFI_DEVICE_ERROR | An unexpected network error or system error occurred. |
Definition at line 921 of file Mtftp4Impl.c.
EFI_STATUS EFIAPI EfiMtftp4ReadFile | ( | IN EFI_MTFTP4_PROTOCOL * | This, |
IN EFI_MTFTP4_TOKEN * | Token | ||
) |
Downloads a file from an MTFTPv4 server.
The ReadFile() function is used to initialize and start an MTFTPv4 download process and optionally wait for completion. When the download operation completes, whether successfully or not, the Token.Status field is updated by the EFI MTFTPv4 Protocol driver and then Token.Event is signaled (if it is not NULL). Data can be downloaded from the MTFTPv4 server into either of the following locations: 1.A fixed buffer that is pointed to by Token.Buffer 2.A download service function that is pointed to by Token.CheckPacket If both Token.Buffer and Token.CheckPacket are used, then Token.CheckPacket will be called first. If the call is successful, the packet will be stored in Token.Buffer.
This | Pointer to the EFI_MTFTP4_PROTOCOL instance |
Token | Pointer to the token structure to provide the parameters that are used in this operation. |
EFI_SUCCESS | The data file has been transferred successfully. |
EFI_OUT_OF_RESOURCES | Required system resources could not be allocated. |
EFI_BUFFER_TOO_SMALL | BufferSize is not large enough to hold the downloaded data in downloading process. |
EFI_ABORTED | Current operation is aborted by user. |
EFI_ICMP_ERROR | An ICMP ERROR packet was received. |
EFI_TIMEOUT | No responses were received from the MTFTPv4 server. |
EFI_TFTP_ERROR | An MTFTPv4 ERROR packet was received. |
EFI_DEVICE_ERROR | An unexpected network error or system error occurred. |
EFI_NO_MEDIA | There was a media error. |
Definition at line 792 of file Mtftp4Impl.c.
EFI_STATUS EFIAPI EfiMtftp4WriteFile | ( | IN EFI_MTFTP4_PROTOCOL * | This, |
IN EFI_MTFTP4_TOKEN * | Token | ||
) |
Sends a data file to an MTFTPv4 server. May be unsupported in some EFI implementations
The WriteFile() function is used to initialize an uploading operation with the given option list and optionally wait for completion. If one or more of the options is not supported by the server, the unsupported options are ignored and a standard TFTP process starts instead. When the upload process completes, whether successfully or not, Token.Event is signaled, and the EFI MTFTPv4 Protocol driver updates Token.Status. The caller can supply the data to be uploaded in the following two modes: 1.Through the user-provided buffer 2.Through a callback function With the user-provided buffer, the Token.BufferSize field indicates the length of the buffer, and the driver will upload the data in the buffer. With an EFI_MTFTP4_PACKET_NEEDED callback function, the driver will call this callback function to get more data from the user to upload. See the definition of EFI_MTFTP4_PACKET_NEEDED for more information. These two modes cannot be used at the same time. The callback function will be ignored if the user provides the buffer.
This | Pointer to the EFI_MTFTP4_PROTOCOL instance. |
Token | Pointer to the token structure to provide the parameters that are used in this function |
EFI_SUCCESS | The upload session has started. |
EFI_UNSUPPORTED | The operation is not supported by this implementation. |
EFI_INVALID_PARAMETER | One or more of the following conditions is TRUE:
|
EFI_UNSUPPORTED | One or more options in the Token.OptionList are in the unsupported list of structure EFI_MTFTP4_MODE_DATA. |
EFI_NOT_STARTED | The EFI MTFTPv4 Protocol driver has not been started. |
EFI_NO_MAPPING | When using a default address, configuration (DHCP, BOOTP, RARP, etc.) is not finished yet. |
EFI_ALREADY_STARTED | This Token is already being used in another MTFTPv4 session. |
EFI_OUT_OF_RESOURCES | Required system resources could not be allocated. |
EFI_ACCESS_DENIED | The previous operation has not completed yet. |
EFI_DEVICE_ERROR | An unexpected network error or system error occurred. |
Definition at line 852 of file Mtftp4Impl.c.
VOID Mtftp4CleanOperation | ( | IN OUT MTFTP4_PROTOCOL * | Instance, |
IN EFI_STATUS | Result | ||
) |
Clean up the MTFTP session to get ready for new operation.
Instance | The MTFTP session to clean up |
Result | The result to return to the caller who initiated the operation. |
Definition at line 20 of file Mtftp4Impl.c.
EFI_STATUS Mtftp4ConfigUnicastPort | ( | IN UDP_IO * | UdpIo, |
IN MTFTP4_PROTOCOL * | Instance | ||
) |
Configure the UDP port for unicast receiving.
UdpIo | The UDP_IO instance |
Instance | The MTFTP session |
EFI_SUCCESS | The UDP port is successfully configured for the session to unicast receive. |
Definition at line 279 of file Mtftp4Impl.c.
EFI_STATUS EFIAPI Mtftp4GetInfoCheckPacket | ( | IN EFI_MTFTP4_PROTOCOL * | This, |
IN EFI_MTFTP4_TOKEN * | Token, | ||
IN UINT16 | PacketLen, | ||
IN EFI_MTFTP4_PACKET * | Packet | ||
) |
Check packet for GetInfo.
GetInfo is implemented with EfiMtftp4ReadFile. It use Mtftp4GetInfoCheckPacket to inspect the first packet from server, then abort the session.
This | The MTFTP4 protocol instance |
Token | The user's token |
PacketLen | The length of the packet |
Packet | The received packet. |
EFI_ABORTED | Abort the ReadFile operation and return. |
Definition at line 108 of file Mtftp4Impl.c.
BOOLEAN Mtftp4GetMapping | ( | IN MTFTP4_PROTOCOL * | Instance, |
IN UDP_IO * | UdpIo, | ||
IN EFI_UDP4_CONFIG_DATA * | UdpCfgData | ||
) |
Poll the UDP to get the IP4 default address, which may be retrieved by DHCP.
The default time out value is 5 seconds. If IP has retrieved the default address, the UDP is reconfigured.
Instance | The Mtftp instance |
UdpIo | The UDP_IO to poll |
UdpCfgData | The UDP configure data to reconfigure the UDP_IO |
TRUE | The default address is retrieved and UDP is reconfigured. |
FALSE | Some error occurred. |
Definition at line 229 of file Mtftp4Impl.c.
BOOLEAN Mtftp4OverrideValid | ( | IN MTFTP4_PROTOCOL * | Instance, |
IN EFI_MTFTP4_OVERRIDE_DATA * | Override | ||
) |
Check whether the override data is valid.
It will first validate whether the server is a valid unicast. If a gateway is provided in the Override, it also check that it is a unicast on the connected network.
Instance | The MTFTP instance |
Override | The override data to validate. |
TRUE | The override data is valid |
FALSE | The override data is invalid |
Definition at line 178 of file Mtftp4Impl.c.
EFI_STATUS Mtftp4Start | ( | IN EFI_MTFTP4_PROTOCOL * | This, |
IN EFI_MTFTP4_TOKEN * | Token, | ||
IN UINT16 | Operation | ||
) |
Start the MTFTP session to do the operation, such as read file, write file, and read directory.
This | The MTFTP session |
Token | The token than encapsules the user's request. |
Operation | The operation to do |
EFI_INVALID_PARAMETER | Some of the parameters are invalid. |
EFI_NOT_STARTED | The MTFTP session hasn't been configured. |
EFI_ALREADY_STARTED | There is pending operation for the session. |
EFI_SUCCESS | The operation is successfully started. |
Definition at line 350 of file Mtftp4Impl.c.
EFI_MTFTP4_PROTOCOL gMtftp4ProtocolTemplate |
Definition at line 1093 of file Mtftp4Impl.c.