1/* SPDX-License-Identifier: BSD-3-Clause */
2/* tftp defines */
3
4#ifndef SLIRP_TFTP_H
5#define SLIRP_TFTP_H
6
7#define TFTP_SESSIONS_MAX 20
8
9#define TFTP_SERVER 69
10
11#define TFTP_RRQ 1
12#define TFTP_WRQ 2
13#define TFTP_DATA 3
14#define TFTP_ACK 4
15#define TFTP_ERROR 5
16#define TFTP_OACK 6
17
18#define TFTP_FILENAME_MAX 512
19#define TFTP_BLOCKSIZE_MAX 1428
20
21struct tftp_t {
22 struct udphdr udp;
23 uint16_t tp_op;
24 union {
25 struct {
26 uint16_t tp_block_nr;
27 uint8_t tp_buf[TFTP_BLOCKSIZE_MAX];
28 } tp_data;
29 struct {
30 uint16_t tp_error_code;
31 uint8_t tp_msg[TFTP_BLOCKSIZE_MAX];
32 } tp_error;
33 char tp_buf[TFTP_BLOCKSIZE_MAX + 2];
34 } x;
35} __attribute__((packed));
36
37struct tftp_session {
38 Slirp *slirp;
39 char *filename;
40 int fd;
41 uint16_t block_size;
42
43 struct sockaddr_storage client_addr;
44 uint16_t client_port;
45 uint32_t block_nr;
46
47 int timestamp;
48};
49
50void tftp_input(struct sockaddr_storage *srcsas, struct mbuf *m);
51
52#endif
53