]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: stream-int: expand the flags to 32-bit
authorWilly Tarreau <w@1wt.eu>
Wed, 14 Nov 2018 09:53:42 +0000 (10:53 +0100)
committerWilly Tarreau <w@1wt.eu>
Sun, 18 Nov 2018 20:41:45 +0000 (21:41 +0100)
We used to have enough of 16 bits, with 3 still available but it's
not possible to add the rx/tx blocking bits there. Let's extend the
format to 32 bits and slightly reorder the fields to maintain the
struct size to 64 bytes. Nothing else was changed.

include/types/stream_interface.h

index 4d71c875a38770da9bc6a903015bc5afedc611a0..3d7883e466b42ef6e811c6b3c5159dbb33c8b21f 100644 (file)
@@ -59,22 +59,22 @@ enum {
        SI_ET_DATA_ABRT  = 0x0400,  /* data phase aborted by external cause */
 };
 
-/* flags set after I/O (16 bit) */
+/* flags set after I/O (32 bit) */
 enum {
-       SI_FL_NONE       = 0x0000,  /* nothing */
-       SI_FL_EXP        = 0x0001,  /* timeout has expired */
-       SI_FL_ERR        = 0x0002,  /* a non-recoverable error has occurred */
-       SI_FL_WAIT_ROOM  = 0x0004,  /* stream-int waits for space to store incoming data */
-       SI_FL_WAIT_DATA  = 0x0008,  /* stream-int waits for more outgoing data to send */
-       SI_FL_ISBACK     = 0x0010,  /* 0 for front-side SI, 1 for back-side */
-       SI_FL_DONT_WAKE  = 0x0020,  /* resync in progress, don't wake up */
-       SI_FL_INDEP_STR  = 0x0040,  /* independent streams = don't update rex on write */
-       SI_FL_NOLINGER   = 0x0080,  /* may close without lingering. One-shot. */
-       SI_FL_NOHALF     = 0x0100,  /* no half close, close both sides at once */
-       SI_FL_SRC_ADDR   = 0x1000,  /* get the source ip/port with getsockname */
-       SI_FL_WANT_PUT   = 0x2000,  /* a stream-int would like to put some data into the buffer */
-       SI_FL_WANT_GET   = 0x4000,  /* a stream-int would like to get some data from the buffer */
-       SI_FL_CLEAN_ABRT = 0x8000,  /* SI_FL_ERR is used to report aborts, and not SHUTR */
+       SI_FL_NONE       = 0x00000000,  /* nothing */
+       SI_FL_EXP        = 0x00000001,  /* timeout has expired */
+       SI_FL_ERR        = 0x00000002,  /* a non-recoverable error has occurred */
+       SI_FL_WAIT_ROOM  = 0x00000004,  /* stream-int waits for space to store incoming data */
+       SI_FL_WAIT_DATA  = 0x00000008,  /* stream-int waits for more outgoing data to send */
+       SI_FL_ISBACK     = 0x00000010,  /* 0 for front-side SI, 1 for back-side */
+       SI_FL_DONT_WAKE  = 0x00000020,  /* resync in progress, don't wake up */
+       SI_FL_INDEP_STR  = 0x00000040,  /* independent streams = don't update rex on write */
+       SI_FL_NOLINGER   = 0x00000080,  /* may close without lingering. One-shot. */
+       SI_FL_NOHALF     = 0x00000100,  /* no half close, close both sides at once */
+       SI_FL_SRC_ADDR   = 0x00001000,  /* get the source ip/port with getsockname */
+       SI_FL_WANT_PUT   = 0x00002000,  /* a stream-int would like to put some data into the buffer */
+       SI_FL_WANT_GET   = 0x00004000,  /* a stream-int would like to get some data from the buffer */
+       SI_FL_CLEAN_ABRT = 0x00008000,  /* SI_FL_ERR is used to report aborts, and not SHUTR */
 };
 
 /* A stream interface has 3 parts :
@@ -92,10 +92,11 @@ struct stream_interface {
        /* struct members used by the "buffer" side */
        enum si_state state;     /* SI_ST* */
        enum si_state prev_state;/* SI_ST*, copy of previous state */
-       unsigned short flags;    /* SI_FL_* */
-       unsigned int exp;       /* wake up time for connect, queue, turn-around, ... */
+       /* 16-bit hole here */
+       unsigned int flags;     /* SI_FL_* */
        enum obj_type *end;     /* points to the end point (connection or appctx) */
        struct si_ops *ops;     /* general operations at the stream interface layer */
+       unsigned int exp;       /* wake up time for connect, queue, turn-around, ... */
 
        /* struct members below are the "remote" part, as seen from the buffer side */
        unsigned int err_type;  /* first error detected, one of SI_ET_* */