/** @file | |
Routines to process MTFTP4 options. | |
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef __EFI_MTFTP4_OPTION_H__ | |
#define __EFI_MTFTP4_OPTION_H__ | |
#define MTFTP4_SUPPORTED_OPTIONS 5 | |
#define MTFTP4_OPCODE_LEN 2 | |
#define MTFTP4_ERRCODE_LEN 2 | |
#define MTFTP4_BLKNO_LEN 2 | |
#define MTFTP4_DATA_HEAD_LEN 4 | |
#define MTFTP4_BLKSIZE_EXIST 0x01 | |
#define MTFTP4_TIMEOUT_EXIST 0x02 | |
#define MTFTP4_TSIZE_EXIST 0x04 | |
#define MTFTP4_MCAST_EXIST 0x08 | |
#define MTFTP4_WINDOWSIZE_EXIST 0x10 | |
typedef struct { | |
UINT16 BlkSize; | |
UINT16 WindowSize; | |
UINT8 Timeout; | |
UINT32 Tsize; | |
IP4_ADDR McastIp; | |
UINT16 McastPort; | |
BOOLEAN Master; | |
UINT32 Exist; | |
} MTFTP4_OPTION; | |
/** | |
Allocate and fill in a array of Mtftp options from the Packet. | |
It first calls Mtftp4FillOption to get the option number, then allocate | |
the array, at last, call Mtftp4FillOption again to save the options. | |
@param Packet The packet to parse | |
@param PacketLen The length of the packet | |
@param OptionCount The number of options in the packet | |
@param OptionList The point to get the option array. | |
@retval EFI_INVALID_PARAMETER The parametera are invalid or packet isn't a | |
well-formatted OACK packet. | |
@retval EFI_SUCCESS The option array is build | |
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory for the array | |
**/ | |
EFI_STATUS | |
Mtftp4ExtractOptions ( | |
IN EFI_MTFTP4_PACKET *Packet, | |
IN UINT32 PacketLen, | |
OUT UINT32 *OptionCount, | |
OUT EFI_MTFTP4_OPTION **OptionList OPTIONAL | |
); | |
/** | |
Parse the option in Options array to MTFTP4_OPTION which program | |
can access directly. | |
@param Options The option array, which contains addresses of each | |
option's name/value string. | |
@param Count The number of options in the Options | |
@param Request Whether this is a request or OACK. The format of | |
multicast is different according to this setting. | |
@param Operation The current performed operation. | |
@param MtftpOption The MTFTP4_OPTION for easy access. | |
@retval EFI_INVALID_PARAMETER The option is malformatted | |
@retval EFI_UNSUPPORTED Some option isn't supported | |
@retval EFI_SUCCESS The option are OK and has been parsed. | |
**/ | |
EFI_STATUS | |
Mtftp4ParseOption ( | |
IN EFI_MTFTP4_OPTION *Options, | |
IN UINT32 Count, | |
IN BOOLEAN Request, | |
IN UINT16 Operation, | |
OUT MTFTP4_OPTION *MtftpOption | |
); | |
/** | |
Parse the options in the OACK packet to MTFTP4_OPTION which program | |
can access directly. | |
@param Packet The OACK packet to parse | |
@param PacketLen The length of the packet | |
@param Operation The current performed operation. | |
@param MtftpOption The MTFTP_OPTION for easy access. | |
@retval EFI_INVALID_PARAMETER The packet option is malformatted | |
@retval EFI_UNSUPPORTED Some option isn't supported | |
@retval EFI_SUCCESS The option are OK and has been parsed. | |
**/ | |
EFI_STATUS | |
Mtftp4ParseOptionOack ( | |
IN EFI_MTFTP4_PACKET *Packet, | |
IN UINT32 PacketLen, | |
IN UINT16 Operation, | |
OUT MTFTP4_OPTION *MtftpOption | |
); | |
extern CHAR8 *mMtftp4SupportedOptions[MTFTP4_SUPPORTED_OPTIONS]; | |
#endif |