git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4006 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			155 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
| 
 | |
| Copyright (c) 2004, Intel Corporation
 | |
| All rights reserved. This program and the accompanying materials
 | |
| are licensed and made available under the terms and conditions of the BSD License
 | |
| which accompanies this distribution.  The full text of the license may be found at
 | |
| http://opensource.org/licenses/bsd-license.php
 | |
| 
 | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| 
 | |
| Module Name:
 | |
|   tftp.h
 | |
| 
 | |
| Abstract:
 | |
| 
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __TFTP_H__
 | |
| #define __TFTP_H__
 | |
| 
 | |
| //
 | |
| // Definitions for trivial file transfer protocol functionality with IP v4
 | |
| // Per RFC 1350, July 1992 and RFC 2347, 8, and 9, May 1998
 | |
| //
 | |
| #pragma pack(1)
 | |
| //
 | |
| // max and min packet sizes
 | |
| // (all data packets in transmission except last)
 | |
| //
 | |
| #define MAX_TFTP_PKT_SIZE (BUFFER_ALLOCATE_SIZE - 512)
 | |
| #define MIN_TFTP_PKT_SIZE 512
 | |
| 
 | |
| //
 | |
| // TFTPv4 OpCodes
 | |
| //
 | |
| #define TFTP_RRQ    1 // read request
 | |
| #define TFTP_WRQ    2 // write request
 | |
| #define TFTP_DATA   3 // data
 | |
| #define TFTP_ACK    4 // acknowledgement
 | |
| #define TFTP_ERROR  5 // error packet
 | |
| #define TFTP_OACK   6 // option acknowledge
 | |
| #define TFTP_DIR    7 // read directory request
 | |
| #define TFTP_DATA8  8
 | |
| #define TFTP_ACK8   9
 | |
| 
 | |
| //
 | |
| // request packet (read or write)
 | |
| // Fields shown (except file name) are not to be referenced directly,
 | |
| // since their placement is variable within a request packet.
 | |
| // All are null terminated case insensitive ascii strings.
 | |
| //
 | |
| struct Tftpv4Req {
 | |
|   UINT16  OpCode;       // TFTP Op code
 | |
|   UINT8   FileName[2];  // file name
 | |
|   UINT8   Mode[2];      // "netascii" or "octet"
 | |
|   struct {              // optionally, one or more option requests
 | |
|     UINT8 Option[2];    // option name
 | |
|     UINT8 Value[2];     // value requested
 | |
|   } OpReq[1];
 | |
| };
 | |
| 
 | |
| //
 | |
| // modes
 | |
| //
 | |
| #define MODE_ASCII  "netascii"
 | |
| #define MODE_BINARY "octet"
 | |
| 
 | |
| //
 | |
| // option strings
 | |
| //
 | |
| #define OP_BLKSIZE    "blksize"   // block size option
 | |
| #define OP_TIMEOUT    "timeout"   // time to wait before retransmitting
 | |
| #define OP_TFRSIZE    "tsize"     // total transfer size option
 | |
| #define OP_OVERWRITE  "overwrite" // overwrite file option
 | |
| #define OP_BIGBLKNUM  "bigblk#"   // big block number
 | |
| // See RFC 2347, 8, and 9 for more information on TFTP options
 | |
| // option acknowledge packet (optional)
 | |
| // options not acknowledged are rejected
 | |
| //
 | |
| struct Tftpv4Oack {
 | |
|   UINT16  OpCode;     // TFTP Op code
 | |
|   struct {            // optionally, one or more option acknowledgements
 | |
|     UINT8 Option[2];  // option name (of those requested)
 | |
|     UINT8 Value[2];   // value acknowledged
 | |
|   } OpAck[1];
 | |
| };
 | |
| 
 | |
| //
 | |
| // acknowledge packet
 | |
| //
 | |
| struct Tftpv4Ack {
 | |
|   UINT16  OpCode; // TFTP Op code
 | |
|   UINT16  BlockNum;
 | |
| };
 | |
| 
 | |
| //
 | |
| // data packet
 | |
| //
 | |
| struct Tftpv4Data {
 | |
|   struct Tftpv4Ack  Header;
 | |
|   UINT8             Data[512];
 | |
| };
 | |
| 
 | |
| //
 | |
| // big block number ack packet
 | |
| //
 | |
| struct Tftpv4Ack8 {
 | |
|   UINT16  OpCode;
 | |
|   UINT64  BlockNum;
 | |
| };
 | |
| 
 | |
| //
 | |
| // big block number data packet
 | |
| //
 | |
| struct Tftpv4Data8 {
 | |
|   struct Tftpv4Ack8 Header;
 | |
|   UINT8             Data[506];
 | |
| };
 | |
| 
 | |
| //
 | |
| // error packet
 | |
| //
 | |
| struct Tftpv4Error {
 | |
|   UINT16  OpCode;     // TFTP Op code
 | |
|   UINT16  ErrCode;    // error code
 | |
|   UINT8   ErrMsg[1];  // error message (nul terminated)
 | |
| };
 | |
| 
 | |
| #pragma pack()
 | |
| //
 | |
| // error codes
 | |
| //
 | |
| #define TFTP_ERR_UNDEF      0 //     Not defined, see error message (if any).
 | |
| #define TFTP_ERR_NOT_FOUND  1 //     File not found.
 | |
| #define TFTP_ERR_ACCESS     2 //     Access violation.
 | |
| #define TFTP_ERR_FULL       3 //     Disk full or allocation exceeded.
 | |
| #define TFTP_ERR_ILLEGAL    4 //     Illegal TFTP operation.
 | |
| #define TFTP_ERR_BAD_ID     5 //     Unknown transfer ID.
 | |
| #define TFTP_ERR_EXISTS     6 //     File already exists.
 | |
| #define TFTP_ERR_NO_USER    7 //     No such user.
 | |
| #define TFTP_ERR_OPTION     8 //     Option negotiation termination
 | |
| //
 | |
| // some defines
 | |
| //
 | |
| #define REQ_RESP_TIMEOUT        5 // Wait five seconds for request response.
 | |
| #define ACK_TIMEOUT             4 // Wait four seconds for ack response.
 | |
| #define NUM_ACK_RETRIES         3
 | |
| #define NUM_MTFTP_OPEN_RETRIES  3
 | |
| 
 | |
| #endif /* __TFTP_H__ */
 | |
| 
 | |
| /* EOF - tftp.h */
 |