Merge branch 'master' of git://github.com/illumos/illumos-gate
[unleashed.git] / usr / src / grub / grub-0.97 / netboot / tftp.h
blobdec4a3c0bc0339c951f80d272a512cfba68e88cd
1 #ifndef _TFTP_H
2 #define _TFTP_H
4 #include "if_ether.h"
5 #include "ip.h"
6 #include "udp.h"
8 #ifndef MAX_TFTP_RETRIES
9 #define MAX_TFTP_RETRIES 20
10 #endif
12 /* These settings have sense only if compiled with -DCONGESTED */
13 /* total retransmission timeout in ticks */
14 #define TFTP_TIMEOUT (30*TICKS_PER_SEC)
15 /* packet retransmission timeout in ticks */
16 #define TFTP_REXMT (3*TICKS_PER_SEC)
18 #define TFTP_PORT 69
19 #define TFTP_DEFAULTSIZE_PACKET 512
20 #define TFTP_MAX_PACKET 1432 /* 512 */
22 #define TFTP_RRQ 1
23 #define TFTP_WRQ 2
24 #define TFTP_DATA 3
25 #define TFTP_ACK 4
26 #define TFTP_ERROR 5
27 #define TFTP_OACK 6
29 #define TFTP_CODE_EOF 1
30 #define TFTP_CODE_MORE 2
31 #define TFTP_CODE_ERROR 3
32 #define TFTP_CODE_BOOT 4
33 #define TFTP_CODE_CFG 5
35 struct tftp_t {
36 struct iphdr ip;
37 struct udphdr udp;
38 uint16_t opcode;
39 union {
40 uint8_t rrq[TFTP_DEFAULTSIZE_PACKET];
41 struct {
42 uint16_t block;
43 uint8_t download[TFTP_MAX_PACKET];
44 } data;
45 struct {
46 uint16_t block;
47 } ack;
48 struct {
49 uint16_t errcode;
50 uint8_t errmsg[TFTP_DEFAULTSIZE_PACKET];
51 } err;
52 struct {
53 uint8_t data[TFTP_DEFAULTSIZE_PACKET+2];
54 } oack;
55 } u;
58 /* define a smaller tftp packet solely for making requests to conserve stack
59 512 bytes should be enough */
60 struct tftpreq_t {
61 struct iphdr ip;
62 struct udphdr udp;
63 uint16_t opcode;
64 union {
65 uint8_t rrq[512];
66 struct {
67 uint16_t block;
68 } ack;
69 struct {
70 uint16_t errcode;
71 uint8_t errmsg[512-2];
72 } err;
73 } u;
76 #define TFTP_MIN_PACKET (sizeof(struct iphdr) + sizeof(struct udphdr) + 4)
78 typedef int (*read_actor_t)(unsigned char *, unsigned int, unsigned int, int);
80 int tftp_file_read(const char *name, read_actor_t);
82 #endif /* _TFTP_H */