]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: flags/stconn: use flag dumping for stconn and sedesc flags
authorWilly Tarreau <w@1wt.eu>
Fri, 9 Sep 2022 13:26:38 +0000 (15:26 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 9 Sep 2022 14:52:08 +0000 (16:52 +0200)
The two new functions are se_show_flags() and sc_show_flags().
Maybe something could be done for SC_ST_* values but as it's a
small enum, a simple switch/case should work fine.

dev/flags/flags.c
include/haproxy/stconn-t.h

index ede3510ed722b10ebe2da7efc3a34aa59bf3590c..a8eb81b566feb5f07b7afbfc473e87517a4fb442 100644 (file)
@@ -66,61 +66,14 @@ void show_conn_flags(unsigned int f)
 
 void show_sd_flags(unsigned int f)
 {
-       printf("sd->flags   = ");
-       if (!f) {
-               printf("0\n");
-               return;
-       }
-
-       SHOW_FLAG(f, SE_FL_APPLET_NEED_CONN);
-       SHOW_FLAG(f, SE_FL_HAVE_NO_DATA);
-       SHOW_FLAG(f, SE_FL_WONT_CONSUME);
-       SHOW_FLAG(f, SE_FL_WAIT_DATA);
-       SHOW_FLAG(f, SE_FL_KILL_CONN);
-       SHOW_FLAG(f, SE_FL_WAIT_FOR_HS);
-       SHOW_FLAG(f, SE_FL_WANT_ROOM);
-       SHOW_FLAG(f, SE_FL_RCV_MORE);
-       SHOW_FLAG(f, SE_FL_MAY_SPLICE);
-       SHOW_FLAG(f, SE_FL_ERR_PENDING);
-       SHOW_FLAG(f, SE_FL_ERROR);
-       SHOW_FLAG(f, SE_FL_EOS);
-       SHOW_FLAG(f, SE_FL_EOI);
-       SHOW_FLAG(f, SE_FL_WEBSOCKET);
-       SHOW_FLAG(f, SE_FL_NOT_FIRST);
-       SHOW_FLAG(f, SE_FL_SHWS);
-       SHOW_FLAG(f, SE_FL_SHWN);
-       SHOW_FLAG(f, SE_FL_SHRR);
-       SHOW_FLAG(f, SE_FL_SHRD);
-       SHOW_FLAG(f, SE_FL_ORPHAN);
-       SHOW_FLAG(f, SE_FL_DETACHED);
-       SHOW_FLAG(f, SE_FL_T_APPLET);
-       SHOW_FLAG(f, SE_FL_T_MUX);
-
-       if (f) {
-               printf("EXTRA(0x%08x)", f);
-       }
-       putchar('\n');
+       se_show_flags(tmpbuf, sizeof(tmpbuf), " | ", f);
+       printf("sd->flags = %s\n", tmpbuf);
 }
+
 void show_sc_flags(unsigned int f)
 {
-       printf("sc->flags   = ");
-       if (!f) {
-               printf("0\n");
-               return;
-       }
-       SHOW_FLAG(f, SC_FL_NEED_ROOM);
-       SHOW_FLAG(f, SC_FL_NEED_BUFF);
-       SHOW_FLAG(f, SC_FL_WONT_READ);
-       SHOW_FLAG(f, SC_FL_INDEP_STR);
-       SHOW_FLAG(f, SC_FL_DONT_WAKE);
-       SHOW_FLAG(f, SC_FL_NOHALF);
-       SHOW_FLAG(f, SC_FL_NOLINGER);
-       SHOW_FLAG(f, SC_FL_ISBACK);
-
-       if (f) {
-               printf("EXTRA(0x%08x)", f);
-       }
-       putchar('\n');
+       sc_show_flags(tmpbuf, sizeof(tmpbuf), " | ", f);
+       printf("sc->flags = %s\n", tmpbuf);
 }
 
 void show_strm_et(unsigned int f)
index 89f1009c9b19edb1385d3aa09f0cd79ced2647c0..61996f8048e57476dbb55765e873f6c74d4eeee9 100644 (file)
 
 #include <haproxy/obj_type-t.h>
 #include <haproxy/connection-t.h>
+#include <haproxy/show_flags-t.h>
 
-/* Stream Endpoint Flags */
+/* Stream Endpoint Flags.
+ * Please also update the se_show_flags() function below in case of changes.
+ */
 enum se_flags {
        SE_FL_NONE       = 0x00000000, /* For initialization purposes */
 
@@ -81,7 +84,32 @@ enum se_flags {
        SE_FL_APPLET_NEED_CONN = 0x40000000,  /* applet is waiting for the other side to (fail to) connect */
 };
 
-/* stconn flags */
+/* This function is used to report flags in debugging tools. Please reflect
+ * below any single-bit flag addition above in the same order via the
+ * __APPEND_FLAG macro. The new end of the buffer is returned.
+ */
+static forceinline char *se_show_flags(char *buf, size_t len, const char *delim, uint flg)
+{
+#define _(f, ...) __APPEND_FLAG(buf, len, delim, flg, f, #f, __VA_ARGS__)
+       /* prologue */
+       _(0);
+       /* flags */
+       _(SE_FL_T_MUX, _(SE_FL_T_APPLET, _(SE_FL_DETACHED, _(SE_FL_ORPHAN,
+       _(SE_FL_SHRD, _(SE_FL_SHRR, _(SE_FL_SHWN, _(SE_FL_SHWS,
+       _(SE_FL_NOT_FIRST, _(SE_FL_WEBSOCKET, _(SE_FL_EOI, _(SE_FL_EOS,
+       _(SE_FL_ERROR, _(SE_FL_ERR_PENDING, _(SE_FL_MAY_SPLICE,
+       _(SE_FL_RCV_MORE, _(SE_FL_WANT_ROOM, _(SE_FL_WAIT_FOR_HS,
+       _(SE_FL_KILL_CONN, _(SE_FL_WAIT_DATA, _(SE_FL_WONT_CONSUME,
+       _(SE_FL_HAVE_NO_DATA, _(SE_FL_APPLET_NEED_CONN)))))))))))))))))))))));
+       /* epilogue */
+       _(~0U);
+       return buf;
+#undef _
+}
+
+/* stconn flags.
+ * Please also update the sc_show_flags() function below in case of changes.
+ */
 enum sc_flags {
        SC_FL_NONE          = 0x00000000,  /* Just for initialization purposes */
        SC_FL_ISBACK        = 0x00000001,  /* Set for SC on back-side */
@@ -99,6 +127,25 @@ enum sc_flags {
        SC_FL_NEED_ROOM     = 0x00000200,  /* SC needs more room in the rx buffer to store incoming data */
 };
 
+/* This function is used to report flags in debugging tools. Please reflect
+ * below any single-bit flag addition above in the same order via the
+ * __APPEND_FLAG macro. The new end of the buffer is returned.
+ */
+static forceinline char *sc_show_flags(char *buf, size_t len, const char *delim, uint flg)
+{
+#define _(f, ...) __APPEND_FLAG(buf, len, delim, flg, f, #f, __VA_ARGS__)
+       /* prologue */
+       _(0);
+       /* flags */
+       _(SC_FL_ISBACK, _(SC_FL_NOLINGER, _(SC_FL_NOHALF,
+       _(SC_FL_DONT_WAKE, _(SC_FL_INDEP_STR, _(SC_FL_WONT_READ,
+       _(SC_FL_NEED_BUFF, _(SC_FL_NEED_ROOM))))))));
+       /* epilogue */
+       _(~0U);
+       return buf;
+#undef _
+}
+
 /* A conn stream must have its own errors independently of the buffer's, so that
  * applications can rely on what the buffer reports while the conn stream is
  * performing some retries (eg: connection error). Some states are transient and