1 /** @file 2 Mtftp6 option parse functions declaration. 3 4 Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR> 5 6 This program and the accompanying materials 7 are licensed and made available under the terms and conditions of the BSD License 8 which accompanies this distribution. The full text of the license may be found at 9 http://opensource.org/licenses/bsd-license.php. 10 11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 14 **/ 15 16 #ifndef __EFI_MTFTP6_OPTION_H__ 17 #define __EFI_MTFTP6_OPTION_H__ 18 19 #include <Uefi.h> 20 21 #include <Protocol/ServiceBinding.h> 22 23 #include <Library/NetLib.h> 24 #include <Library/UdpIoLib.h> 25 #include <Library/BaseMemoryLib.h> 26 #include <Library/MemoryAllocationLib.h> 27 #include <Library/UefiRuntimeServicesTableLib.h> 28 29 #define MTFTP6_SUPPORTED_OPTIONS_NUM 4 30 #define MTFTP6_OPCODE_LEN 2 31 #define MTFTP6_ERRCODE_LEN 2 32 #define MTFTP6_BLKNO_LEN 2 33 #define MTFTP6_DATA_HEAD_LEN 4 34 35 // 36 // The bit map definition for Mtftp6 extension options. 37 // 38 #define MTFTP6_OPT_BLKSIZE_BIT 0x01 39 #define MTFTP6_OPT_TIMEOUT_BIT 0x02 40 #define MTFTP6_OPT_TSIZE_BIT 0x04 41 #define MTFTP6_OPT_MCAST_BIT 0x08 42 43 extern CHAR8 *mMtftp6SupportedOptions[MTFTP6_SUPPORTED_OPTIONS_NUM]; 44 45 typedef struct { 46 UINT16 BlkSize; 47 UINT8 Timeout; 48 UINT32 Tsize; 49 EFI_IPv6_ADDRESS McastIp; 50 UINT16 McastPort; 51 BOOLEAN IsMaster; 52 UINT32 BitMap; 53 } MTFTP6_EXT_OPTION_INFO; 54 55 /** 56 Parse the Ascii string of multi-cast option. 57 58 @param[in] Str The pointer to the Ascii string of multi-cast option. 59 @param[in] ExtInfo The pointer to the option information to be filled. 60 61 @retval EFI_SUCCESS Parse the multicast option successfully. 62 @retval EFI_INVALID_PARAMETER The string is malformatted. 63 64 **/ 65 EFI_STATUS 66 Mtftp6ParseMcastOption ( 67 IN UINT8 *Str, 68 IN MTFTP6_EXT_OPTION_INFO *ExtInfo 69 ); 70 71 72 /** 73 Parse the MTFTP6 extesion options. 74 75 @param[in] Options The pointer to the extension options list. 76 @param[in] Count The num of the extension options. 77 @param[in] IsRequest If FALSE, the extension options is included 78 by a request packet. 79 @param[in] ExtInfo The pointer to the option information to be filled. 80 81 @retval EFI_SUCCESS Parse the multi-cast option successfully. 82 @retval EFI_INVALID_PARAMETER An option is malformatted. 83 @retval EFI_UNSUPPORTED An option is not supported. 84 85 **/ 86 EFI_STATUS 87 Mtftp6ParseExtensionOption ( 88 IN EFI_MTFTP6_OPTION *Options, 89 IN UINT32 Count, 90 IN BOOLEAN IsRequest, 91 IN MTFTP6_EXT_OPTION_INFO *ExtInfo 92 ); 93 94 95 /** 96 Go through the packet to fill the options array with the start 97 addresses of each MTFTP option name/value pair. 98 99 @param[in] Packet The packet to be checked. 100 @param[in] PacketLen The length of the packet. 101 @param[in, out] Count The num of the Options on input. 102 The actual one on output. 103 @param[in] Options The option array to be filled 104 it's optional. 105 106 @retval EFI_SUCCESS The packet has been parsed successfully. 107 @retval EFI_INVALID_PARAMETER The packet is malformatted 108 @retval EFI_BUFFER_TOO_SMALL The Options array is too small 109 @retval EFI_PROTOCOL_ERROR An unexpected MTFTPv6 packet was received. 110 111 **/ 112 EFI_STATUS 113 Mtftp6ParsePacketOption ( 114 IN EFI_MTFTP6_PACKET *Packet, 115 IN UINT32 PacketLen, 116 IN OUT UINT32 *Count, 117 IN EFI_MTFTP6_OPTION *Options OPTIONAL 118 ); 119 120 121 /** 122 Go through the packet, generate option list array and fill it 123 by the result of parse options. 124 125 @param[in] Packet The packet to be checked. 126 @param[in] PacketLen The length of the packet. 127 @param[in, out] OptionCount The num of the Options on input. 128 The actual one on output. 129 @param[out] OptionList The option list array to be generated 130 and filled. It is optional. 131 132 @retval EFI_SUCCESS The packet has been parsed successfully. 133 @retval EFI_INVALID_PARAMETER The packet is malformatted. 134 @retval EFI_PROTOCOL_ERROR An option is malformatted. 135 @retval EFI_NOT_FOUND The packet has no options. 136 @retval EFI_OUT_OF_RESOURCES Failed to allocate memory for the array. 137 @retval EFI_BUFFER_TOO_SMALL The size of option list array is too small. 138 139 **/ 140 EFI_STATUS 141 Mtftp6ParseStart ( 142 IN EFI_MTFTP6_PACKET *Packet, 143 IN UINT32 PacketLen, 144 IN OUT UINT32 *OptionCount, 145 OUT EFI_MTFTP6_OPTION **OptionList OPTIONAL 146 ); 147 148 #endif 149