BIOS: TFTP: try UDP/69 if specified port fails

This commit is contained in:
Ewen McNeill 2018-01-18 13:10:28 +11:00
parent cb31266500
commit 5ce8ca8e9b
1 changed files with 15 additions and 4 deletions

View File

@ -210,8 +210,9 @@ int serialboot(void)
#define REMOTEIP4 100 #define REMOTEIP4 100
#endif #endif
#define DEFAULT_TFTP_SERVER_PORT 69 /* IANA well known port: UDP/69 */
#ifndef TFTP_SERVER_PORT #ifndef TFTP_SERVER_PORT
#define TFTP_SERVER_PORT 69 /* IANA well known port: UDP/69 */ #define TFTP_SERVER_PORT DEFAULT_TFTP_SERVER_PORT
#endif #endif
static int tftp_get_v(unsigned int ip, unsigned short server_port, static int tftp_get_v(unsigned int ip, unsigned short server_port,
@ -247,8 +248,18 @@ void netboot(void)
tftp_port = TFTP_SERVER_PORT; tftp_port = TFTP_SERVER_PORT;
printf("Fetching from: UDP/%d\n", tftp_port); printf("Fetching from: UDP/%d\n", tftp_port);
if(tftp_get_v(ip, tftp_port, "boot.bin", (void *)MAIN_RAM_BASE) <= 0) { size = tftp_get_v(ip, tftp_port, "boot.bin", (void *)MAIN_RAM_BASE);
/* XXX: Try alternate TFTP port here? */
if ((size <= 0) && (tftp_port != DEFAULT_TFTP_SERVER_PORT)) {
/* Try default TFTP port if timed out on non-standard port */
tftp_port = DEFAULT_TFTP_SERVER_PORT;
printf("Fetching from: UDP/%d\n", tftp_port);
size = tftp_get_v(ip, tftp_port, "boot.bin",
(void *)MAIN_RAM_BASE);
}
if (size <= 0) {
printf("Network boot failed\n"); printf("Network boot failed\n");
return; return;
} }