]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[tcp] Display "connecting" status until connection is established
authorMichael Brown <mcb30@ipxe.org>
Sun, 10 Mar 2019 17:29:06 +0000 (17:29 +0000)
committerMichael Brown <mcb30@ipxe.org>
Sun, 10 Mar 2019 17:29:06 +0000 (17:29 +0000)
Provide increased visibility into the progress of TCP connections by
displaying an explicit "connecting" status message while waiting for
the TCP handshake to complete.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/net/tcp.c

index c445100ad254705a96b7e783d6ed4617847103aa..6bba4428273d8ca413aa6777c6f01359670fe901 100644 (file)
@@ -17,6 +17,7 @@
 #include <ipxe/netdevice.h>
 #include <ipxe/profile.h>
 #include <ipxe/process.h>
+#include <ipxe/job.h>
 #include <ipxe/tcpip.h>
 #include <ipxe/tcp.h>
 
@@ -1704,10 +1705,30 @@ static int tcp_xfer_deliver ( struct tcp_connection *tcp,
        return 0;
 }
 
+/**
+ * Report job progress
+ *
+ * @v tcp              TCP connection
+ * @v progress         Progress report to fill in
+ * @ret ongoing_rc     Ongoing job status code (if known)
+ */
+static int tcp_progress ( struct tcp_connection *tcp,
+                         struct job_progress *progress ) {
+
+       /* Report connection in progress if applicable */
+       if ( ! TCP_HAS_BEEN_ESTABLISHED ( tcp->tcp_state ) ) {
+               snprintf ( progress->message, sizeof ( progress->message ),
+                          "connecting" );
+       }
+
+       return 0;
+}
+
 /** TCP data transfer interface operations */
 static struct interface_operation tcp_xfer_operations[] = {
        INTF_OP ( xfer_deliver, struct tcp_connection *, tcp_xfer_deliver ),
        INTF_OP ( xfer_window, struct tcp_connection *, tcp_xfer_window ),
+       INTF_OP ( job_progress, struct tcp_connection *, tcp_progress ),
        INTF_OP ( intf_close, struct tcp_connection *, tcp_xfer_close ),
 };