MINOR: flags/stconn: use flag dumping for stconn and sedesc flags

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.
This commit is contained in:
Willy Tarreau 2022-09-09 15:26:38 +02:00
parent 9d9e101689
commit 4bab7d81b6
2 changed files with 54 additions and 54 deletions

View 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)

View File

@ -24,8 +24,11 @@
#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