[PATCH v2] net/tftp: make tftpput working with servers that do not use OACK
Mikhail Kshevetskiy
mikhail.kshevetskiy at iopsys.eu
Fri Jul 5 14:50:20 CEST 2024
Option Acknowledgment (OACK) is an extension of TFTP protocol (see rfc2347).
Not all tftp servers implements it. U-Boot supports two tftp specific
commands:
* tftpboot works with both types of servers,
* tftpput waits for OACK from the server, so the data transfer does not
start if the servers does not support OACK extension.
This patch fix an issue, so tftpput works fine with both types of servers.
Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy at iopsys.eu>
---
Changes v2:
* update patch description
---
net/tftp.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/net/tftp.c b/net/tftp.c
index 2e335413492..2534dec1c9f 100644
--- a/net/tftp.c
+++ b/net/tftp.c
@@ -494,8 +494,15 @@ static void tftp_handler(uchar *pkt, unsigned dest, struct in_addr sip,
tftp_prev_block = tftp_cur_block;
tftp_cur_block = (unsigned short)(block + 1);
update_block_number();
- if (ack_ok)
+ if (ack_ok) {
+ if (block == 0 &&
+ tftp_state == STATE_SEND_WRQ){
+ /* connection's first ACK */
+ tftp_state = STATE_DATA;
+ tftp_remote_port = src;
+ }
tftp_send(); /* Send next data block */
+ }
}
}
#endif
--
2.39.2
More information about the U-Boot
mailing list