xemu/slirp/tftp.h
Bernhard Übelacker 5f22b054f2 Increase maximum number of session of the internal TFTP server.
Grub fails to boot from internal TFTP server when loading more than
3 initrd files.

Grub first opens a session to the TFTP server for every initrd file and
retrieves only the file size for all.
Then it wants to download the content using the old sessions which are
already expired.

Increasing the maximum number of session of the internal TFTP
server avoids this issue.

The error message reads as following:
error: timeout reading
`/boot/ISO.ROOT/BOOTMGR'.

Press any key to continue...

Signed-off-by: Bernhard Übelacker <bernhardu@vr-web.de>
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
2014-06-24 20:01:24 +04:00

50 lines
786 B
C

/* tftp defines */
#ifndef SLIRP_TFTP_H
#define SLIRP_TFTP_H 1
#define TFTP_SESSIONS_MAX 20
#define TFTP_SERVER 69
#define TFTP_RRQ 1
#define TFTP_WRQ 2
#define TFTP_DATA 3
#define TFTP_ACK 4
#define TFTP_ERROR 5
#define TFTP_OACK 6
#define TFTP_FILENAME_MAX 512
struct tftp_t {
struct ip ip;
struct udphdr udp;
uint16_t tp_op;
union {
struct {
uint16_t tp_block_nr;
uint8_t tp_buf[512];
} tp_data;
struct {
uint16_t tp_error_code;
uint8_t tp_msg[512];
} tp_error;
char tp_buf[512 + 2];
} x;
};
struct tftp_session {
Slirp *slirp;
char *filename;
int fd;
struct in_addr client_ip;
uint16_t client_port;
uint32_t block_nr;
int timestamp;
};
void tftp_input(struct mbuf *m);
#endif