]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: xprt: add a new show_fd() helper to complete some "show fd" dumps.
authorWilly Tarreau <w@1wt.eu>
Wed, 20 Jan 2021 14:30:56 +0000 (15:30 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 20 Jan 2021 16:17:39 +0000 (17:17 +0100)
Just like we did for the muxes, now the transport layers will have the
ability to provide helpers to report more detailed information about their
internal context. When the helper is not known, the pointer continues to
be dumped as-is if it's not NULL. This way a transport with no context nor
dump function will not add a useless "xprt_ctx=(nil)" but the pointer will
be emitted if valid or if a helper is defined.

include/haproxy/connection-t.h
src/cli.c

index 91048d52880f40b2c331a230e8aeb5441839a7f8..7dd3d15d9046da34fbd842a714355b20294cb567 100644 (file)
@@ -381,6 +381,7 @@ struct xprt_ops {
        int (*unsubscribe)(struct connection *conn, void *xprt_ctx, int event_type, struct wait_event *es); /* Unsubscribe <es> from events */
        int (*remove_xprt)(struct connection *conn, void *xprt_ctx, void *toremove_ctx, const struct xprt_ops *newops, void *newctx); /* Remove an xprt from the connection, used by temporary xprt such as the handshake one */
        int (*add_xprt)(struct connection *conn, void *xprt_ctx, void *toadd_ctx, const struct xprt_ops *toadd_ops, void **oldxprt_ctx, const struct xprt_ops **oldxprt_ops); /* Add a new XPRT as the new xprt, and return the old one */
+       void (*show_fd)(struct buffer *, const struct connection *, const void *ctx); /* append some data about xprt for "show fd" */
 };
 
 /* mux_ops describes the mux operations, which are to be performed at the
index b7378019d2344e794d6c5dcb31c4c71f2ae3dacf..060372988e7a51de75ebf09f8fd04244df20e331 100644 (file)
--- a/src/cli.c
+++ b/src/cli.c
@@ -1106,8 +1106,12 @@ static int cli_io_handler_show_fd(struct appctx *appctx)
                                chunk_appendf(&trash, " nomux");
 
                        chunk_appendf(&trash, " xprt=%s", xprt ? xprt->name : "");
-                       if (xprt)
-                               chunk_appendf(&trash, " xprt_ctx=%p", xprt_ctx);
+                       if (xprt) {
+                               if (xprt_ctx || xprt->show_fd)
+                                       chunk_appendf(&trash, " xprt_ctx=%p", xprt_ctx);
+                               if (xprt->show_fd)
+                                       xprt->show_fd(&trash, conn, xprt_ctx);
+                       }
                }
                else if (fdt.iocb == sock_accept_iocb) {
                        chunk_appendf(&trash, ") l.st=%s fe=%s",