/*
 * $Header: /smsa/bsd:include/arpa/tftp.h:bsd  1.4  $
 * $Source: /smsa/bsd:include/arpa/tftp.h: $
 *
 * Copyright (c) 1988 Acorn Computers Ltd., Cambridge, England
 */
/*
 * Copyright (c) 1983 Regents of the University of California.
 * All rights reserved.  The Berkeley software License Agreement
 * specifies the terms and conditions for redistribution.
 *
 *      @(#)tftp.h      5.1 (Berkeley) 5/30/85
 */

#ifndef __arpa_tftp_h
#define __arpa_tftp_h

/*
 * Trivial File Transfer Protocol (IEN-133)
 */
#define SEGSIZE         512             /* data segment size */

/*
 * Packet types.
 */
#define RRQ     01                      /* read request */
#define WRQ     02                      /* write request */
#define DATA    03                      /* data packet */
#define ACK     04                      /* acknowledgement */
#define ERROR   05                      /* error code */

struct  tftphdr {
    union {
        struct { u_short opcode; char stuff[514]; } _rrq;
        struct { u_short opcode, block; char data[512]; } _data;
        struct { u_short opcode, block; } _ack;
        struct { u_short opcode, code;  char msg[512]; } _err;
    } th_u;
};
#define th_opcode       th_u._rrq.opcode
#define th_block        th_u._data.block
#define th_code         th_u._err.code
#define th_stuff        th_u._rrq.stuff
#define th_data         th_u._data.data
#define th_msg          th_u._err.msg

/*
 * Error codes.
 */
#define EUNDEF          0               /* not defined */
#define ENOTFOUND       1               /* file not found */
#define EACCESS         2               /* access violation */
#define ENOSPACE        3               /* disk full or allocation exceeded */
#define EBADOP          4               /* illegal TFTP operation */
#define EBADID          5               /* unknown transfer ID */
#define EEXISTS         6               /* file already exists */
#define ENOUSER         7               /* no such user */

#endif/*__arpa_tftp_h*/

/* EOF arpa/tftp.h */
