diff --git a/doc/design-thoughts/buffer-redesign.txt b/doc/design-thoughts/buffer-redesign.txt deleted file mode 100644 index c7d4345e7..000000000 --- a/doc/design-thoughts/buffer-redesign.txt +++ /dev/null @@ -1,129 +0,0 @@ -2012/02/27 - redesigning buffers for better simplicity - w@1wt.eu - -1) Analysis ------------ - -Buffer handling becomes complex because buffers are circular but many of their -users don't support wrapping operations (eg: HTTP parsing). Due to this fact, -some buffer operations automatically realign buffers as soon as possible when -the buffer is empty, which makes it very hard to track buffer pointers outside -of the buffer struct itself. The buffer contains a pointer to last processed -data (buf->lr) which is automatically realigned with such operations. But in -the end, its semantics are often unclear and whether it's safe or not to use it -isn't always obvious, as it has acquired multiple roles over the time. - -A "struct buffer" is declared this way : - - struct buffer { - unsigned int flags; /* BF_* */ - int rex; /* expiration date for a read, in ticks */ - int wex; /* expiration date for a write or connect, in ticks */ - int rto; /* read timeout, in ticks */ - int wto; /* write timeout, in ticks */ - unsigned int l; /* data length */ - char *r, *w, *lr; /* read ptr, write ptr, last read */ - unsigned int size; /* buffer size in bytes */ - unsigned int send_max; /* number of bytes the sender can consume om this buffer, <= l */ - unsigned int to_forward; /* number of bytes to forward after send_max without a wake-up */ - unsigned int analysers; /* bit field indicating what to do on the buffer */ - int analyse_exp; /* expiration date for current analysers (if set) */ - void (*hijacker)(struct session *, struct buffer *); /* alternative content producer */ - unsigned char xfer_large; /* number of consecutive large xfers */ - unsigned char xfer_small; /* number of consecutive small xfers */ - unsigned long long total; /* total data read */ - struct stream_interface *prod; /* producer attached to this buffer */ - struct stream_interface *cons; /* consumer attached to this buffer */ - struct pipe *pipe; /* non-NULL only when data present */ - char data[0]; /* bytes */ - }; - -In order to address this, a struct http_msg was created with other pointers to -the buffer. The issue is that some of these pointers are absolute and other -ones are relative, sometimes one to another, sometimes to the beginning of the -buffer, which doesn't help at all for the case where buffers get realigned. - -A "struct http_msg" is defined this way : - - struct http_msg { - unsigned int msg_state; - unsigned int flags; - unsigned int col, sov; /* current header: colon, start of value */ - unsigned int eoh; /* End Of Headers, relative to buffer */ - char *sol; /* start of line, also start of message when fully parsed */ - char *eol; /* end of line */ - unsigned int som; /* Start Of Message, relative to buffer */ - int err_pos; /* err handling: -2=block, -1=pass, 0+=detected */ - union { /* useful start line pointers, relative to ->sol */ - struct { - int l; /* request line length (not including CR) */ - int m_l; /* METHOD length (method starts at ->som) */ - int u, u_l; /* URI, length */ - int v, v_l; /* VERSION, length */ - } rq; /* request line : field, length */ - struct { - int l; /* status line length (not including CR) */ - int v_l; /* VERSION length (version starts at ->som) */ - int c, c_l; /* CODE, length */ - int r, r_l; /* REASON, length */ - } st; /* status line : field, length */ - } sl; /* start line */ - unsigned long long chunk_len; - unsigned long long body_len; - char **cap; - }; - - -The first immediate observation is that nothing in a buffer should be relative -to the beginning of the storage area, everything should be relative to the -buffer's origin as a floating location. Right now the buffer's origin is equal -to (buf->w + buf->send_max). It is the place where the first byte of data not -yet scheduled for being forwarded is found. - - - buf->w is an absolute pointer, just like buf->data. - - buf->send_max is a relative value which oscillates between 0 when nothing - has to be forwarded, and buf->l when the whole buffer must be forwarded. - - -2) Proposal ------------ - -By having such an origin, we could have everything in http_msg relative to this -origin. This would resist buffer realigns much better than right now. - -At the moment we have msg->som which is relative to buf->data and which points -to the beginning of the message. The beginning of the message should *always* -be the buffer's origin. If data are to be skipped in the message, just wait for -send_max to become zero and move the origin forwards ; this would definitely get -rid of msg->som. This is already what is done in the HTTP parser except that it -has to move both buf->lr and msg->som. - -Following the same principle, we should then have a relative pointer in -http_msg to replace buf->lr. It would be relative to the buffer's origin and -would simply recall what location was last visited. - -Doing all this could result in more complex operations where more time is spent -adding buf->w to buf->send_max and then to msg->anything. It would probably make -more sense to define the buffer's origin as an absolute pointer and to have -both the buf->h (head) and buf->t (tail) pointers be positive and negative -positions relative to this origin. Operating on the buffer would then look like -this : - - - no buf->l anymore. buf->l is replaced by (head + tail) - - no buf->lr anymore. Use origin + msg->last for instance - - recv() : head += recv(origin + head); - - send() : tail -= send(origin - tail, tail); - thus, buf->o effectively replaces buf->send_max. - - forward(N) : tail += N; origin += N; - - realign() : origin = data - - detect risk of wrapping of input : origin + head > data + size - -In general it looks like less pointers are manipulated for common operations -and that maybe an additional wrapping test (hand-made modulo) will have to be -added so send() and recv() operations. - - -3) Caveats ----------- - -The first caveat is that the elements to modify appear at a very large number -of places. diff --git a/doc/design-thoughts/buffers.fig b/doc/design-thoughts/buffers.fig deleted file mode 100644 index be6fac3cb..000000000 --- a/doc/design-thoughts/buffers.fig +++ /dev/null @@ -1,1052 +0,0 @@ -#FIG 3.2 Produced by xfig version 3.2.5-alpha5 -Portrait -Center -Metric -A4 -100.00 -Single --2 -1200 2 -6 630 900 1620 1395 -5 1 0 1 0 4 51 -1 20 0.000 0 1 0 0 900.000 1125.000 900 900 675 1125 900 1350 -6 900 900 1620 1350 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 900 900 900 1350 -4 0 0 50 -1 16 8 0.0000 4 120 570 1035 1245 descriptor\001 -4 0 0 50 -1 16 8 0.0000 4 105 165 1035 1080 file\001 --6 --6 -6 630 1530 1620 2070 -6 630 1530 1170 2070 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 900.000 1800.000 900 1575 1125 1800 900 2025 -5 1 0 1 0 4 51 -1 20 0.000 0 1 0 0 900.000 1800.000 900 1575 675 1800 900 2025 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 900 1575 900 2025 --6 -4 0 0 50 -1 16 8 0.0000 4 105 360 1260 1710 stream\001 -4 0 0 50 -1 16 8 0.0000 4 105 330 1260 1890 driver\001 --6 -6 675 2340 2070 2610 -6 675 2340 1575 2610 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 1530 2340 1530 2610 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 1485 2340 1485 2610 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 675 2340 1575 2340 1575 2610 675 2610 675 2340 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 720 2340 720 2610 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 765 2340 765 2610 --6 -4 0 0 50 -1 16 8 0.0000 4 105 330 1710 2475 buffer\001 --6 -6 2340 2205 3420 2745 -6 2340 2205 2610 2745 -5 1 0 1 0 14 51 -1 20 0.000 0 0 0 0 2475.000 2475.000 2610 2655 2475 2700 2340 2655 -5 1 0 1 0 14 51 -1 20 0.000 0 1 0 0 2475.000 2475.000 2610 2295 2475 2250 2340 2295 -2 2 0 1 14 14 52 -1 20 0.000 2 0 -1 0 0 5 - 2340 2295 2610 2295 2610 2655 2340 2655 2340 2295 --6 -4 0 0 50 -1 16 8 0.0000 4 105 645 2745 2430 schedulable\001 -4 0 0 50 -1 16 8 0.0000 4 105 225 2745 2595 task\001 --6 -6 4455 900 7200 2070 -6 4455 900 4725 1395 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 4455.000 1125.000 4455 900 4680 1125 4455 1350 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 4455 900 4455 1350 --6 -6 5130 1170 5715 2070 -4 0 0 50 -1 16 8 0.0000 4 105 585 5130 1305 functions :\001 -4 0 0 50 -1 16 6 0.0000 4 75 315 5130 1440 -queue\001 -4 0 0 50 -1 16 6 0.0000 4 90 525 5130 1590 -shutdown\001 -4 0 0 50 -1 16 6 0.0000 4 90 300 5130 1740 -flush\001 -4 0 0 50 -1 16 6 0.0000 4 90 285 5130 1890 -send\001 -4 0 0 50 -1 16 6 0.0000 4 60 270 5130 2040 -recv\001 --6 -6 6030 900 7200 2025 -4 0 0 50 -1 16 8 0.0000 4 105 555 6030 1035 callbacks :\001 -4 0 0 50 -1 16 6 0.0000 4 105 735 6030 1170 -read_complete\001 -4 0 0 50 -1 16 6 0.0000 4 105 780 6030 1320 -write_complete\001 -4 0 0 50 -1 16 6 0.0000 4 105 450 6030 1470 -wake_up\001 -4 0 0 50 -1 16 6 0.0000 4 105 1110 6030 1755 -context (for sessions)\001 -4 0 0 50 -1 16 6 0.0000 4 105 810 6030 1890 -source (=buffer)\001 -4 0 0 50 -1 16 6 0.0000 4 90 525 6030 2025 -condition\001 -4 0 0 50 -1 16 8 0.0000 4 120 1140 6030 1620 args for *_complete :\001 --6 -2 1 0 1 0 -1 50 -1 -1 0.000 1 0 -1 1 0 3 - 0 0 1.00 30.00 45.00 - 4635 990 4905 990 5985 990 -2 1 0 1 0 -1 50 -1 -1 0.000 1 0 -1 0 1 3 - 0 0 1.00 30.00 45.00 - 4635 1260 4905 1260 5085 1260 --6 -6 2205 1530 3420 2070 -6 2205 1530 2745 2070 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 2475.000 1800.000 2475 1575 2250 1800 2475 2025 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 2475.000 1800.000 2475 1575 2700 1800 2475 2025 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 2475 1575 2475 2025 --6 -4 0 0 50 -1 16 8 0.0000 4 105 360 2835 1755 stream\001 -4 0 0 50 -1 16 8 0.0000 4 90 555 2835 1935 processor\001 --6 -6 3825 2205 4905 2745 -6 3825 2205 4365 2745 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 4095.000 2475.000 4230 2295 4320 2475 4230 2655 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 4095.000 2475.000 3960 2295 3870 2475 3960 2655 -5 1 0 1 0 14 51 -1 20 0.000 0 0 0 0 4095.000 2475.000 4230 2655 4095 2700 3960 2655 -5 1 0 1 0 14 51 -1 20 0.000 0 1 0 0 4095.000 2475.000 4230 2295 4095 2250 3960 2295 -2 2 0 1 14 14 52 -1 20 0.000 2 0 -1 0 0 5 - 3960 2295 4230 2295 4230 2655 3960 2655 3960 2295 --6 -4 0 0 50 -1 16 8 0.0000 4 105 240 4455 2430 flow\001 -4 0 0 50 -1 16 8 0.0000 4 120 450 4455 2610 analyzer\001 --6 -6 2250 900 3960 1395 -6 2250 900 2520 1395 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 2250.000 1125.000 2250 900 2475 1125 2250 1350 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 2250 900 2250 1350 --6 -4 0 0 50 -1 16 8 0.0000 4 105 1320 2610 1245 callbacks and functions.\001 -4 0 0 50 -1 16 8 0.0000 4 105 1335 2610 1080 stream interface made of\001 --6 -6 7740 900 8775 3465 -6 7740 900 8640 1170 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 8595 900 8595 1170 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 8550 900 8550 1170 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 7740 900 8640 900 8640 1170 7740 1170 7740 900 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 7785 900 7785 1170 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 7830 900 7830 1170 -4 1 0 50 -1 16 6 0.0000 4 105 420 8190 1080 http_req\001 --6 -4 0 0 50 -1 16 8 0.0000 4 105 495 7740 1395 variables\001 -4 0 0 50 -1 16 6 0.0000 4 105 300 7740 1485 -flags\001 -4 0 0 50 -1 16 6 0.0000 4 105 720 7740 1755 -producer_task\001 -4 0 0 50 -1 16 6 0.0000 4 105 735 7740 1845 -consumer_task\001 -4 0 0 50 -1 16 6 0.0000 4 105 780 7740 1665 -write_complete\001 -4 0 0 50 -1 16 6 0.0000 4 105 735 7740 1575 -read_complete\001 -4 0 0 50 -1 16 8 0.0000 4 120 780 7740 2160 internal flags :\001 -4 0 0 50 -1 16 6 0.0000 4 90 960 7740 2295 -SHUTR_PENDING\001 -4 0 0 50 -1 16 6 0.0000 4 90 780 7740 2385 -SHUTR_DONE\001 -4 0 0 50 -1 16 6 0.0000 4 90 975 7740 2475 -SHUTW_PENDING\001 -4 0 0 50 -1 16 6 0.0000 4 90 795 7740 2565 -SHUTW_DONE\001 -4 0 0 50 -1 16 6 0.0000 4 75 450 7740 2655 -HOLDW\001 -4 0 0 50 -1 16 6 0.0000 4 90 585 7740 2745 -READ_EN\001 -4 0 0 50 -1 16 6 0.0000 4 90 600 7740 2835 -WRITE_EN\001 -4 0 0 50 -1 16 6 0.0000 4 105 945 7740 1935 -flow_analyzer_task\001 -4 0 0 50 -1 16 8 0.0000 4 105 540 7740 3015 interface :\001 -4 0 0 50 -1 16 6 0.0000 4 90 780 7740 3150 -1 stream reader\001 -4 0 0 50 -1 16 6 0.0000 4 90 780 7740 3285 -1 stream writer\001 -4 0 0 50 -1 16 6 0.0000 4 105 1020 7740 3420 -0..n stream analyzers\001 --6 -6 3555 3645 5895 6075 -6 3555 3915 4095 4455 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 3825.000 4185.000 3825 3960 4050 4185 3825 4410 -5 1 0 1 0 4 51 -1 20 0.000 0 1 0 0 3825.000 4185.000 3825 3960 3600 4185 3825 4410 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 3825 3960 3825 4410 --6 -6 5355 3915 5895 4455 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 5625.000 4185.000 5625 3960 5400 4185 5625 4410 -5 1 0 1 0 4 51 -1 20 0.000 0 0 0 0 5625.000 4185.000 5625 3960 5850 4185 5625 4410 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 5625 3960 5625 4410 --6 -6 3555 5265 4095 5805 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 3825.000 5535.000 3825 5310 4050 5535 3825 5760 -5 1 0 1 0 4 51 -1 20 0.000 0 1 0 0 3825.000 5535.000 3825 5310 3600 5535 3825 5760 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 3825 5310 3825 5760 --6 -6 5355 5265 5895 5805 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 5625.000 5535.000 5625 5310 5400 5535 5625 5760 -5 1 0 1 0 4 51 -1 20 0.000 0 0 0 0 5625.000 5535.000 5625 5310 5850 5535 5625 5760 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 5625 5310 5625 5760 --6 -6 4455 4590 4995 5130 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 4725.000 4860.000 4860 4680 4950 4860 4860 5040 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 4725.000 4860.000 4590 4680 4500 4860 4590 5040 -5 1 0 1 0 14 51 -1 20 0.000 0 0 0 0 4725.000 4860.000 4860 5040 4725 5085 4590 5040 -5 1 0 1 0 14 51 -1 20 0.000 0 1 0 0 4725.000 4860.000 4860 4680 4725 4635 4590 4680 -2 2 0 1 14 14 52 -1 20 0.000 2 0 -1 0 0 5 - 4590 4680 4860 4680 4860 5040 4590 5040 4590 4680 --6 -6 4275 5400 5175 5670 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5130 5400 5130 5670 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5085 5400 5085 5670 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 4275 5400 5175 5400 5175 5670 4275 5670 4275 5400 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 4320 5400 4320 5670 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 4365 5400 4365 5670 -4 1 0 50 -1 16 6 0.0000 4 105 465 4725 5580 http_resp\001 --6 -6 4275 4050 5175 4320 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5130 4050 5130 4320 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5085 4050 5085 4320 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 4275 4050 5175 4050 5175 4320 4275 4320 4275 4050 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 4320 4050 4320 4320 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 4365 4050 4365 4320 -4 1 0 50 -1 16 6 0.0000 4 105 420 4725 4230 http_req\001 --6 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 5175 4185 5400 4185 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 4050 4185 4275 4185 -2 1 0 1 0 14 50 -1 -1 0.000 1 0 -1 1 1 2 - 0 0 1.00 30.00 45.00 - 0 0 1.00 30.00 45.00 - 4725 4635 4725 4320 -2 1 0 1 0 14 50 -1 -1 0.000 1 0 -1 1 1 2 - 0 0 1.00 30.00 45.00 - 0 0 1.00 30.00 45.00 - 4725 5400 4725 5085 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 4275 5535 4050 5535 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 5400 5535 5175 5535 -4 1 0 50 -1 16 6 0.0000 4 90 285 5625 3870 driver\001 -4 1 0 50 -1 16 6 0.0000 4 105 300 5625 3735 output\001 -4 1 0 50 -1 16 6 0.0000 4 90 285 3825 3870 driver\001 -4 1 0 50 -1 16 6 0.0000 4 105 240 3825 3735 input\001 -4 0 0 50 -1 16 6 0.0000 4 90 405 5040 4950 eg: HTTP\001 -4 1 0 50 -1 16 6 0.0000 4 90 285 5625 6075 driver\001 -4 1 0 50 -1 16 6 0.0000 4 90 285 3825 6075 driver\001 -4 1 0 50 -1 16 6 0.0000 4 105 300 3825 5940 output\001 -4 1 0 50 -1 16 6 0.0000 4 105 240 5625 5940 input\001 -4 0 0 50 -1 16 6 0.0000 4 105 690 5040 4815 flow processor\001 --6 -6 6480 4050 8820 5400 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 7650.000 4725.000 7785 4545 7875 4725 7785 4905 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 7650.000 4725.000 7515 4545 7425 4725 7515 4905 -5 1 0 1 0 14 51 -1 20 0.000 0 0 0 0 7650.000 4725.000 7785 4905 7650 4950 7515 4905 -5 1 0 1 0 14 51 -1 20 0.000 0 1 0 0 7650.000 4725.000 7785 4545 7650 4500 7515 4545 -6 6480 4455 7020 4995 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 6750.000 4725.000 6750 4500 6975 4725 6750 4950 -5 1 0 1 0 4 51 -1 20 0.000 0 1 0 0 6750.000 4725.000 6750 4500 6525 4725 6750 4950 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 6750 4500 6750 4950 --6 -6 8280 4455 8820 4995 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 8550.000 4725.000 8550 4500 8325 4725 8550 4950 -5 1 0 1 0 4 51 -1 20 0.000 0 0 0 0 8550.000 4725.000 8550 4500 8775 4725 8550 4950 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 8550 4500 8550 4950 --6 -6 7200 4050 8100 4320 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 8055 4050 8055 4320 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 8010 4050 8010 4320 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 7245 4050 7245 4320 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 7200 4050 8100 4050 8100 4320 7200 4320 7200 4050 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 7290 4050 7290 4320 -4 1 0 50 -1 16 6 0.0000 4 105 420 7650 4230 http_req\001 --6 -6 7200 5130 8100 5400 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 8055 5130 8055 5400 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 8010 5130 8010 5400 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 7200 5130 8100 5130 8100 5400 7200 5400 7200 5130 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 7245 5130 7245 5400 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 7290 5130 7290 5400 -4 1 0 50 -1 16 6 0.0000 4 105 465 7650 5310 http_resp\001 --6 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 8100 4185 8370 4590 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 6930 4590 7200 4185 -2 1 0 1 0 14 50 -1 -1 0.000 1 0 -1 1 1 2 - 0 0 1.00 30.00 45.00 - 0 0 1.00 30.00 45.00 - 7650 4500 7650 4320 -2 1 0 1 0 14 50 -1 -1 0.000 1 0 -1 1 1 2 - 0 0 1.00 30.00 45.00 - 0 0 1.00 30.00 45.00 - 7650 5130 7650 4950 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 7200 5265 6930 4860 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 8370 4860 8100 5265 -2 2 0 1 14 14 52 -1 20 0.000 2 0 -1 0 0 5 - 7515 4545 7785 4545 7785 4905 7515 4905 7515 4545 -4 1 0 50 -1 16 6 0.0000 4 60 285 6750 4230 server\001 -4 1 0 50 -1 16 6 0.0000 4 90 285 6750 4365 socket\001 -4 1 0 50 -1 16 6 0.0000 4 90 255 8550 4230 client\001 -4 1 0 50 -1 16 6 0.0000 4 90 285 8550 4365 socket\001 -4 1 0 50 -1 16 6 0.0000 4 105 210 7650 4770 http\001 --6 -6 630 4005 2970 5490 -6 630 4680 1170 5220 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 900.000 4950.000 900 4725 1125 4950 900 5175 -5 1 0 1 0 4 51 -1 20 0.000 0 1 0 0 900.000 4950.000 900 4725 675 4950 900 5175 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 900 4725 900 5175 --6 -6 2430 4680 2970 5220 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 2700.000 4950.000 2700 4725 2475 4950 2700 5175 -5 1 0 1 0 4 51 -1 20 0.000 0 0 0 0 2700.000 4950.000 2700 4725 2925 4950 2700 5175 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 2700 4725 2700 5175 --6 -6 1530 4005 2070 4545 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 1800.000 4275.000 1935 4095 2025 4275 1935 4455 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 1800.000 4275.000 1665 4095 1575 4275 1665 4455 -5 1 0 1 0 14 51 -1 20 0.000 0 0 0 0 1800.000 4275.000 1935 4455 1800 4500 1665 4455 -5 1 0 1 0 14 51 -1 20 0.000 0 1 0 0 1800.000 4275.000 1935 4095 1800 4050 1665 4095 -2 2 0 1 14 14 52 -1 20 0.000 2 0 -1 0 0 5 - 1665 4095 1935 4095 1935 4455 1665 4455 1665 4095 --6 -6 1350 4815 2250 5085 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 2205 4815 2205 5085 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 2160 4815 2160 5085 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 1350 4815 2250 4815 2250 5085 1350 5085 1350 4815 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 1395 4815 1395 5085 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 1440 4815 1440 5085 -4 1 0 50 -1 16 6 0.0000 4 105 420 1800 4995 http_req\001 --6 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 2250 4950 2475 4950 -2 1 0 1 0 14 50 -1 -1 0.000 1 0 -1 1 1 2 - 0 0 1.00 30.00 45.00 - 0 0 1.00 30.00 45.00 - 1800 4815 1800 4500 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 1125 4950 1350 4950 -4 0 0 50 -1 16 6 0.0000 4 105 690 2115 4365 eg: HTTP_REQ\001 -4 1 0 50 -1 16 6 0.0000 4 105 300 2700 5355 output\001 -4 1 0 50 -1 16 6 0.0000 4 90 285 2700 5490 driver\001 -4 1 0 50 -1 16 6 0.0000 4 105 240 900 5355 input\001 -4 1 0 50 -1 16 6 0.0000 4 90 285 900 5490 driver\001 -4 0 0 50 -1 16 6 0.0000 4 105 690 2115 4230 flow processor\001 --6 -6 675 11025 6615 12555 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 3645.000 11790.000 3780 11610 3870 11790 3780 11970 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 3645.000 11790.000 3510 11610 3420 11790 3510 11970 -5 1 0 1 0 14 51 -1 20 0.000 0 0 0 0 3645.000 11790.000 3780 11970 3645 12015 3510 11970 -5 1 0 1 0 14 51 -1 20 0.000 0 1 0 0 3645.000 11790.000 3780 11610 3645 11565 3510 11610 -6 675 11520 1215 12060 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 945.000 11790.000 945 11565 1170 11790 945 12015 -5 1 0 1 0 4 51 -1 20 0.000 0 1 0 0 945.000 11790.000 945 11565 720 11790 945 12015 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 945 11565 945 12015 --6 -6 3195 11115 4095 11385 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 4050 11115 4050 11385 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 4005 11115 4005 11385 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 3240 11115 3240 11385 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 3195 11115 4095 11115 4095 11385 3195 11385 3195 11115 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 3285 11115 3285 11385 -4 1 0 50 -1 16 6 0.0000 4 105 420 3645 11295 http_req\001 --6 -6 3195 12195 4095 12465 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 4050 12195 4050 12465 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 4005 12195 4005 12465 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 3195 12195 4095 12195 4095 12465 3195 12465 3195 12195 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 3240 12195 3240 12465 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 3285 12195 3285 12465 -4 1 0 50 -1 16 6 0.0000 4 105 465 3645 12375 http_resp\001 --6 -6 4275 11520 4815 12060 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 4545.000 11790.000 4545 11565 4320 11790 4545 12015 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 4545.000 11790.000 4545 11565 4770 11790 4545 12015 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 4545 11565 4545 12015 --6 -6 2475 11520 3015 12060 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 2745.000 11790.000 2745 11565 2520 11790 2745 12015 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 2745.000 11790.000 2745 11565 2970 11790 2745 12015 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 2745 11565 2745 12015 --6 -6 4995 11115 5895 11385 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5850 11115 5850 11385 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5805 11115 5805 11385 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5040 11115 5040 11385 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 4995 11115 5895 11115 5895 11385 4995 11385 4995 11115 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5085 11115 5085 11385 -4 1 0 50 -1 16 6 0.0000 4 105 465 5445 11295 https_req\001 --6 -6 4995 12195 5895 12465 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5850 12195 5850 12465 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5805 12195 5805 12465 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 4995 12195 5895 12195 5895 12465 4995 12465 4995 12195 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5040 12195 5040 12465 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5085 12195 5085 12465 -4 1 0 50 -1 16 6 0.0000 4 105 510 5445 12375 https_resp\001 --6 -6 1395 11115 2295 11385 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 2250 11115 2250 11385 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 2205 11115 2205 11385 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 1440 11115 1440 11385 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 1395 11115 2295 11115 2295 11385 1395 11385 1395 11115 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 1485 11115 1485 11385 -4 1 0 50 -1 16 6 0.0000 4 105 465 1845 11295 https_req\001 --6 -6 1395 12195 2295 12465 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 2250 12195 2250 12465 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 2205 12195 2205 12465 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 1395 12195 2295 12195 2295 12465 1395 12465 1395 12195 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 1440 12195 1440 12465 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 1485 12195 1485 12465 -4 1 0 50 -1 16 6 0.0000 4 105 510 1845 12375 https_resp\001 --6 -6 6075 11520 6615 12060 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 6345.000 11790.000 6345 11565 6120 11790 6345 12015 -5 1 0 1 0 4 51 -1 20 0.000 0 0 0 0 6345.000 11790.000 6345 11565 6570 11790 6345 12015 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 6345 11565 6345 12015 --6 -6 675 12195 1170 12555 -2 4 0 1 16 17 53 -1 -1 0.000 0 0 7 0 0 5 - 1170 12555 1170 12195 675 12195 675 12555 1170 12555 -4 1 0 50 -1 16 6 0.0000 4 90 450 900 12420 TCPv4_S\001 --6 -6 6120 12195 6615 12555 -2 4 0 1 16 17 53 -1 -1 0.000 0 0 7 0 0 5 - 6615 12555 6615 12195 6120 12195 6120 12555 6615 12555 -4 1 0 50 -1 16 6 0.0000 4 90 450 6345 12420 TCPv4_S\001 --6 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 1125 11655 1395 11250 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 1395 12330 1125 11925 -2 1 0 1 0 14 50 -1 -1 0.000 1 0 -1 1 1 2 - 0 0 1.00 30.00 45.00 - 0 0 1.00 30.00 45.00 - 3645 11565 3645 11385 -2 1 0 1 0 14 50 -1 -1 0.000 1 0 -1 1 1 2 - 0 0 1.00 30.00 45.00 - 0 0 1.00 30.00 45.00 - 3645 12195 3645 12015 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 4995 12330 4725 11925 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 4725 11655 4995 11250 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 4375 11925 4105 12330 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 4095 11250 4365 11655 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 3195 12330 2925 11925 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 2925 11655 3195 11250 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 2575 11925 2305 12330 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 2295 11250 2565 11655 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 5895 11250 6165 11655 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 6165 11925 5895 12330 -2 2 0 1 14 14 52 -1 20 0.000 2 0 -1 0 0 5 - 3510 11610 3780 11610 3780 11970 3510 11970 3510 11610 -2 4 0 1 16 17 54 -1 20 0.000 0 0 7 0 0 5 - 3150 12555 3150 11025 675 11025 675 12555 3150 12555 -2 3 0 1 28 30 53 -1 20 0.000 1 0 -1 0 0 11 - 6120 11070 5895 11565 5895 12015 6120 12510 4950 12510 4410 12510 - 4185 12015 4185 11565 4410 11070 4995 11070 6120 11070 -2 4 0 1 16 17 54 -1 20 0.000 0 0 7 0 0 5 - 6615 12555 6615 11025 4140 11025 4140 12555 6615 12555 -2 3 0 1 28 30 53 -1 20 0.000 0 0 -1 0 0 11 - 1170 11070 1395 11565 1395 12015 1170 12510 2340 12510 2880 12510 - 3105 12015 3105 11565 2880 11070 2295 11070 1170 11070 -4 1 0 50 -1 16 6 0.0000 4 60 285 945 11295 server\001 -4 1 0 50 -1 16 6 0.0000 4 90 285 945 11430 socket\001 -4 1 0 50 -1 16 6 0.0000 4 75 210 4545 11430 SSL\001 -4 1 0 50 -1 16 6 0.0000 4 75 210 2745 11430 SSL\001 -4 1 0 50 -1 16 6 0.0000 4 90 255 6345 11295 client\001 -4 1 0 50 -1 16 6 0.0000 4 90 285 6345 11430 socket\001 -4 1 0 50 -1 16 6 0.0000 4 105 210 3645 11835 http\001 --6 -6 630 6750 2970 8100 -6 630 7155 1170 7695 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 900.000 7425.000 900 7200 1125 7425 900 7650 -5 1 0 1 0 4 51 -1 20 0.000 0 1 0 0 900.000 7425.000 900 7200 675 7425 900 7650 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 900 7200 900 7650 --6 -6 2430 7155 2970 7695 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 2700.000 7425.000 2700 7200 2475 7425 2700 7650 -5 1 0 1 0 4 51 -1 20 0.000 0 0 0 0 2700.000 7425.000 2700 7200 2925 7425 2700 7650 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 2700 7200 2700 7650 --6 -6 1350 6750 2250 7020 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 2205 6750 2205 7020 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 2160 6750 2160 7020 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 1395 6750 1395 7020 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 1350 6750 2250 6750 2250 7020 1350 7020 1350 6750 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 1440 6750 1440 7020 -4 1 0 50 -1 16 6 0.0000 4 105 420 1800 6930 http_req\001 --6 -6 1305 7020 1845 7830 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 1575.000 7425.000 1710 7245 1800 7425 1710 7605 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 1575.000 7425.000 1440 7245 1350 7425 1440 7605 -5 1 0 1 0 14 51 -1 20 0.000 0 0 0 0 1575.000 7425.000 1710 7605 1575 7650 1440 7605 -5 1 0 1 0 14 51 -1 20 0.000 0 1 0 0 1575.000 7425.000 1710 7245 1575 7200 1440 7245 -2 1 0 1 0 14 50 -1 -1 0.000 1 0 -1 1 1 2 - 0 0 1.00 30.00 45.00 - 0 0 1.00 30.00 45.00 - 1575 7200 1575 7020 -2 1 0 1 0 14 50 -1 -1 0.000 1 0 -1 1 1 2 - 0 0 1.00 30.00 45.00 - 0 0 1.00 30.00 45.00 - 1575 7830 1575 7650 -2 2 0 1 14 14 52 -1 20 0.000 2 0 -1 0 0 5 - 1440 7245 1710 7245 1710 7605 1440 7605 1440 7245 -4 1 0 50 -1 16 6 0.0000 4 105 210 1575 7470 http\001 --6 -6 1755 7020 2295 7830 -5 1 0 1 0 14 51 -1 20 0.000 0 0 0 0 2025.000 7425.000 2160 7605 2025 7650 1890 7605 -5 1 0 1 0 14 51 -1 20 0.000 0 1 0 0 2025.000 7425.000 2160 7245 2025 7200 1890 7245 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 2025.000 7425.000 1890 7245 1800 7425 1890 7605 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 2025.000 7425.000 2160 7245 2250 7425 2160 7605 -2 1 0 1 0 14 50 -1 -1 0.000 1 0 -1 1 1 2 - 0 0 1.00 30.00 45.00 - 0 0 1.00 30.00 45.00 - 2025 7200 2025 7020 -2 1 0 1 0 14 50 -1 -1 0.000 1 0 -1 1 1 2 - 0 0 1.00 30.00 45.00 - 0 0 1.00 30.00 45.00 - 2025 7830 2025 7650 -2 2 0 1 14 14 52 -1 20 0.000 2 0 -1 0 0 5 - 1890 7245 2160 7245 2160 7605 1890 7605 1890 7245 -4 1 0 50 -1 16 6 0.0000 4 105 390 2025 7470 filtering\001 --6 -6 1350 7830 2250 8100 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 2205 7830 2205 8100 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 2160 7830 2160 8100 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 1350 7830 2250 7830 2250 8100 1350 8100 1350 7830 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 1395 7830 1395 8100 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 1440 7830 1440 8100 -4 1 0 50 -1 16 6 0.0000 4 105 465 1800 8010 http_resp\001 --6 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 2250 6885 2520 7290 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 1080 7290 1350 6885 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 1350 7965 1080 7560 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 2520 7560 2250 7965 -4 1 0 50 -1 16 6 0.0000 4 60 285 900 6930 server\001 -4 1 0 50 -1 16 6 0.0000 4 90 285 900 7065 socket\001 -4 1 0 50 -1 16 6 0.0000 4 90 255 2700 6930 client\001 -4 1 0 50 -1 16 6 0.0000 4 90 285 2700 7065 socket\001 --6 -6 4680 9000 8820 10530 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 7650.000 9765.000 7785 9585 7875 9765 7785 9945 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 7650.000 9765.000 7515 9585 7425 9765 7515 9945 -5 1 0 1 0 14 51 -1 20 0.000 0 0 0 0 7650.000 9765.000 7785 9945 7650 9990 7515 9945 -5 1 0 1 0 14 51 -1 20 0.000 0 1 0 0 7650.000 9765.000 7785 9585 7650 9540 7515 9585 -6 4680 9495 5220 10035 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 4950.000 9765.000 4950 9540 5175 9765 4950 9990 -5 1 0 1 0 4 51 -1 20 0.000 0 1 0 0 4950.000 9765.000 4950 9540 4725 9765 4950 9990 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 4950 9540 4950 9990 --6 -6 8280 9495 8820 10035 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 8550.000 9765.000 8550 9540 8325 9765 8550 9990 -5 1 0 1 0 4 51 -1 20 0.000 0 0 0 0 8550.000 9765.000 8550 9540 8775 9765 8550 9990 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 8550 9540 8550 9990 --6 -6 7200 9090 8100 9360 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 8055 9090 8055 9360 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 8010 9090 8010 9360 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 7245 9090 7245 9360 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 7200 9090 8100 9090 8100 9360 7200 9360 7200 9090 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 7290 9090 7290 9360 -4 1 0 50 -1 16 6 0.0000 4 105 420 7650 9270 http_req\001 --6 -6 7200 10170 8100 10440 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 8055 10170 8055 10440 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 8010 10170 8010 10440 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 7200 10170 8100 10170 8100 10440 7200 10440 7200 10170 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 7245 10170 7245 10440 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 7290 10170 7290 10440 -4 1 0 50 -1 16 6 0.0000 4 105 465 7650 10350 http_resp\001 --6 -6 6480 9495 7020 10035 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 6750.000 9765.000 6750 9540 6525 9765 6750 9990 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 6750.000 9765.000 6750 9540 6975 9765 6750 9990 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 6750 9540 6750 9990 --6 -6 5400 10170 6300 10440 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 6255 10170 6255 10440 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 6210 10170 6210 10440 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 5400 10170 6300 10170 6300 10440 5400 10440 5400 10170 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5445 10170 5445 10440 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5490 10170 5490 10440 -4 1 0 50 -1 16 6 0.0000 4 105 510 5850 10350 https_resp\001 --6 -6 5400 9090 6300 9360 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 6255 9090 6255 9360 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 6210 9090 6210 9360 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5445 9090 5445 9360 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 5400 9090 6300 9090 6300 9360 5400 9360 5400 9090 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5490 9090 5490 9360 -4 1 0 50 -1 16 6 0.0000 4 105 465 5850 9270 https_req\001 --6 -6 4680 10170 5175 10530 -2 4 0 1 16 17 53 -1 -1 0.000 0 0 7 0 0 5 - 5175 10530 5175 10170 4680 10170 4680 10530 5175 10530 -4 1 0 50 -1 16 6 0.0000 4 90 450 4905 10395 TCPv4_S\001 --6 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 5130 9630 5400 9225 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 5400 10305 5130 9900 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 8100 9225 8370 9630 -2 1 0 1 0 14 50 -1 -1 0.000 1 0 -1 1 1 2 - 0 0 1.00 30.00 45.00 - 0 0 1.00 30.00 45.00 - 7650 9540 7650 9360 -2 1 0 1 0 14 50 -1 -1 0.000 1 0 -1 1 1 2 - 0 0 1.00 30.00 45.00 - 0 0 1.00 30.00 45.00 - 7650 10170 7650 9990 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 7200 10305 6930 9900 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 8370 9900 8100 10305 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 6930 9630 7200 9225 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 6580 9900 6310 10305 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 6300 9225 6570 9630 -2 2 0 1 14 14 52 -1 20 0.000 2 0 -1 0 0 5 - 7515 9585 7785 9585 7785 9945 7515 9945 7515 9585 -2 4 0 1 16 17 54 -1 20 0.000 0 0 7 0 0 5 - 7155 10530 7155 9000 4680 9000 4680 10530 7155 10530 -2 3 0 1 28 30 53 -1 20 0.000 1 0 -1 0 0 11 - 5175 9045 5400 9540 5400 9990 5175 10485 6345 10485 6885 10485 - 7110 9990 7110 9540 6885 9045 6300 9045 5175 9045 -4 1 0 50 -1 16 6 0.0000 4 60 285 4950 9270 server\001 -4 1 0 50 -1 16 6 0.0000 4 90 285 4950 9405 socket\001 -4 1 0 50 -1 16 6 0.0000 4 90 255 8550 9270 client\001 -4 1 0 50 -1 16 6 0.0000 4 90 285 8550 9405 socket\001 -4 1 0 50 -1 16 6 0.0000 4 75 210 6750 9405 SSL\001 -4 1 0 50 -1 16 6 0.0000 4 105 210 7650 9810 http\001 --6 -6 675 9000 4275 10575 -6 1800 9900 2250 10125 -2 2 0 1 29 30 51 -1 20 0.000 0 0 -1 0 0 5 - 1800 9900 2250 9900 2250 10125 1800 10125 1800 9900 -4 1 0 50 -1 16 6 0.0000 4 75 210 2025 10035 SSL\001 --6 -6 2700 9900 3150 10125 -2 2 0 1 29 30 51 -1 20 0.000 0 0 -1 0 0 5 - 2700 9900 3150 9900 3150 10125 2700 10125 2700 9900 -4 1 0 50 -1 16 6 0.0000 4 75 210 2925 10035 SSL\001 --6 -6 3600 9900 4050 10125 -2 2 0 1 29 30 51 -1 20 0.000 0 0 -1 0 0 5 - 3600 9900 4050 9900 4050 10125 3600 10125 3600 9900 -4 1 0 50 -1 16 6 0.0000 4 75 210 3825 10035 SSL\001 --6 -6 900 9900 1350 10125 -2 2 0 1 29 30 51 -1 20 0.000 0 0 -1 0 0 5 - 900 9900 1350 9900 1350 10125 900 10125 900 9900 -4 1 0 50 -1 16 6 0.0000 4 75 210 1125 10035 SSL\001 --6 -6 2520 10350 3330 10575 -2 2 0 1 16 17 51 -1 20 0.000 0 0 -1 0 0 5 - 2520 10350 3330 10350 3330 10575 2520 10575 2520 10350 -4 1 0 50 -1 16 6 0.0000 4 90 510 2925 10485 UNIX_STR\001 --6 -6 1125 9450 1575 9675 -2 2 0 1 9 11 51 -1 20 0.000 0 0 -1 0 0 5 - 1125 9450 1575 9450 1575 9675 1125 9675 1125 9450 -4 1 0 50 -1 16 6 0.0000 4 90 315 1350 9585 deflate\001 --6 -6 2025 9450 2475 9675 -2 2 0 1 9 11 51 -1 20 0.000 0 0 -1 0 0 5 - 2025 9450 2475 9450 2475 9675 2025 9675 2025 9450 -4 1 0 50 -1 16 6 0.0000 4 90 315 2250 9585 deflate\001 --6 -6 2925 9450 3375 9675 -2 2 0 1 9 11 51 -1 20 0.000 0 0 -1 0 0 5 - 2925 9450 3375 9450 3375 9675 2925 9675 2925 9450 -4 1 0 50 -1 16 6 0.0000 4 90 315 3150 9585 deflate\001 --6 -6 3825 9450 4275 9675 -2 2 0 1 9 11 51 -1 20 0.000 0 0 -1 0 0 5 - 3825 9450 4275 9450 4275 9675 3825 9675 3825 9450 -4 1 0 50 -1 16 6 0.0000 4 90 315 4050 9585 deflate\001 --6 -6 675 10350 1530 10575 -2 2 0 1 16 17 51 -1 20 0.000 0 0 -1 0 0 5 - 675 10350 1530 10350 1530 10575 675 10575 675 10350 -4 1 0 50 -1 16 6 0.0000 4 75 315 1125 10485 TCPv4\001 --6 -6 1620 10350 2430 10575 -2 2 0 1 16 17 51 -1 20 0.000 0 0 -1 0 0 5 - 1620 10350 2430 10350 2430 10575 1620 10575 1620 10350 -4 1 0 50 -1 16 6 0.0000 4 75 315 2025 10485 TCPv6\001 --6 -6 3420 10350 4275 10575 -2 2 0 1 16 17 51 -1 20 0.000 0 0 -1 0 0 5 - 3420 10350 4275 10350 4275 10575 3420 10575 3420 10350 -4 1 0 50 -1 16 6 0.0000 4 75 330 3825 10485 PIPES\001 --6 -6 675 9000 4275 9225 -2 2 0 1 12 14 51 -1 20 0.000 0 0 -1 0 0 5 - 675 9000 4275 9000 4275 9225 675 9225 675 9000 -4 1 0 50 -1 16 6 0.0000 4 105 1950 2475 9135 HTTP flow analyzer using stream interfaces\001 --6 -2 1 0 1 20 -1 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 765 10350 765 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 810 10350 810 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 990 9900 990 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 1035 9900 1035 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 1170 10350 1170 10125 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 1215 9900 1215 9675 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 1260 9900 1260 9675 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 1395 9450 1395 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 1440 10350 1440 9675 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 1485 10350 1485 9675 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 1665 10350 1665 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 1710 10350 1710 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 1890 9900 1890 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 1935 9900 1935 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 2070 10350 2070 10125 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 2115 9900 2115 9675 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 2160 9900 2160 9675 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 2295 9450 2295 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 2340 10350 2340 9675 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 2385 10350 2385 9675 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 2565 10350 2565 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 2610 10350 2610 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 2790 9900 2790 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 2835 9900 2835 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 3015 9900 3015 9675 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 3060 9900 3060 9675 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 2970 10350 2970 10125 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 3240 10350 3240 9675 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 3285 10350 3285 9675 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 3195 9450 3195 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 3465 10350 3465 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 3510 10350 3510 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 3690 9900 3690 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 3735 9900 3735 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 3870 10350 3870 10125 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 3915 9900 3915 9675 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 3960 9900 3960 9675 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 4140 10350 4140 9675 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 4185 10350 4185 9675 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 4095 9450 4095 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 1350 9450 1350 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 2250 9450 2250 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 3150 9450 3150 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 4050 9450 4050 9225 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 3825 10350 3825 10125 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 2925 10350 2925 10125 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 2025 10350 2025 10125 -2 1 0 1 20 14 50 -1 -1 0.000 1 0 -1 0 1 2 - 0 0 1.00 30.00 45.00 - 1125 10350 1125 10125 --6 -6 3780 6750 6120 8100 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 4725.000 7425.000 4860 7245 4950 7425 4860 7605 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 4725.000 7425.000 4590 7245 4500 7425 4590 7605 -5 1 0 1 0 14 51 -1 20 0.000 0 0 0 0 4725.000 7425.000 4860 7605 4725 7650 4590 7605 -5 1 0 1 0 14 51 -1 20 0.000 0 1 0 0 4725.000 7425.000 4860 7245 4725 7200 4590 7245 -5 1 0 1 0 14 51 -1 20 0.000 0 0 0 0 5175.000 7425.000 5310 7605 5175 7650 5040 7605 -5 1 0 1 0 14 51 -1 20 0.000 0 1 0 0 5175.000 7425.000 5310 7245 5175 7200 5040 7245 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 5175.000 7425.000 5040 7245 4950 7425 5040 7605 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 5175.000 7425.000 5310 7245 5400 7425 5310 7605 -6 3780 7155 4320 7695 -5 1 0 1 0 11 51 -1 20 0.000 0 0 0 0 4050.000 7425.000 4050 7200 4275 7425 4050 7650 -5 1 0 1 0 4 51 -1 20 0.000 0 1 0 0 4050.000 7425.000 4050 7200 3825 7425 4050 7650 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 4050 7200 4050 7650 --6 -6 5580 7155 6120 7695 -5 1 0 1 0 11 51 -1 20 0.000 0 1 0 0 5850.000 7425.000 5850 7200 5625 7425 5850 7650 -5 1 0 1 0 4 51 -1 20 0.000 0 0 0 0 5850.000 7425.000 5850 7200 6075 7425 5850 7650 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 5850 7200 5850 7650 --6 -6 4500 6750 5400 7020 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5355 6750 5355 7020 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5310 6750 5310 7020 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 4545 6750 4545 7020 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 4500 6750 5400 6750 5400 7020 4500 7020 4500 6750 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 4590 6750 4590 7020 -4 1 0 50 -1 16 6 0.0000 4 105 420 4950 6930 http_req\001 --6 -6 4500 7830 5400 8100 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5355 7830 5355 8100 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 5310 7830 5310 8100 -2 2 0 1 0 6 51 -1 20 0.000 1 0 -1 0 0 5 - 4500 7830 5400 7830 5400 8100 4500 8100 4500 7830 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 4545 7830 4545 8100 -2 1 0 1 0 14 50 -1 -1 0.000 0 0 -1 0 0 2 - 4590 7830 4590 8100 -4 1 0 50 -1 16 6 0.0000 4 105 465 4950 8010 http_resp\001 --6 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 5400 6885 5670 7290 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 4230 7290 4500 6885 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 4500 7965 4230 7560 -2 1 0 1 0 0 50 -1 -1 0.000 1 0 -1 1 0 2 - 0 0 1.00 30.00 45.00 - 5670 7560 5400 7965 -2 1 0 1 0 14 50 -1 -1 0.000 1 0 -1 1 1 2 - 0 0 1.00 30.00 45.00 - 0 0 1.00 30.00 45.00 - 4725 7200 4725 7020 -2 2 0 1 14 14 52 -1 20 0.000 2 0 -1 0 0 5 - 4590 7245 4860 7245 4860 7605 4590 7605 4590 7245 -2 1 0 1 0 14 50 -1 -1 0.000 1 0 -1 1 1 2 - 0 0 1.00 30.00 45.00 - 0 0 1.00 30.00 45.00 - 5175 7830 5175 7650 -2 2 0 1 14 14 52 -1 20 0.000 2 0 -1 0 0 5 - 5040 7245 5310 7245 5310 7605 5040 7605 5040 7245 -4 1 0 50 -1 16 6 0.0000 4 60 285 4050 6930 server\001 -4 1 0 50 -1 16 6 0.0000 4 90 285 4050 7065 socket\001 -4 1 0 50 -1 16 6 0.0000 4 90 255 5850 6930 client\001 -4 1 0 50 -1 16 6 0.0000 4 90 285 5850 7065 socket\001 -4 1 0 50 -1 16 6 0.0000 4 105 210 4725 7425 http\001 -4 1 0 50 -1 16 6 0.0000 4 75 150 4725 7515 req\001 -4 1 0 50 -1 16 6 0.0000 4 105 210 5175 7425 http\001 -4 1 0 50 -1 16 6 0.0000 4 75 195 5175 7515 resp\001 --6 -4 0 0 53 -1 19 11 0.0000 4 180 5520 675 8775 Multi-layer protocol encapsulation using intermediate buffers :\001 -4 0 0 53 -1 19 11 0.0000 4 180 4200 675 6525 Multiple protocol processing on the same flow :\001 -4 0 0 53 -1 19 11 0.0000 4 180 2085 675 3600 Principles of operation :\001 diff --git a/doc/internals/buffer-operations.txt b/doc/internals/buffer-operations.txt deleted file mode 100644 index 1692f2115..000000000 --- a/doc/internals/buffer-operations.txt +++ /dev/null @@ -1,128 +0,0 @@ -2012/02/27 - Operations on haproxy buffers - w@1wt.eu - - -1) Definitions --------------- - -A buffer is a unidirectional storage between two stream interfaces which are -most often composed of a socket file descriptor. This storage is fixed sized -and circular, which means that once data reach the end of the buffer, it loops -back at the beginning of the buffer : - - - Representation of a non-wrapping buffer - --------------------------------------- - - - beginning end - | -------- length --------> | - V V - +-------------------------------------------+ - | <--------------- size ----------------> | - +-------------------------------------------+ - - - Representation of a wrapping buffer - ----------------------------------- - - end beginning - +------> | | -------------+ - | V V | - | +-------------------------------------------+ | - | | <--------------- size ----------------> | | - | +-------------------------------------------+ | - | | - +--------------------- length -----------------------+ - - -Buffers are read by two entities : - - stream interfaces - - analysers - -Buffers are filled by two entities : - - stream interfaces - - hijackers - -A stream interface writes at the input of a buffer and reads at its output. An -analyser has to parse incoming buffer contents, so it reads the input. It does -not really write the output though it may change the buffer's contents at the -input, possibly causing data moves. A hijacker it able to write at the output -of a buffer. Hijackers are not used anymore at the moment though error outputs -still work the same way. - -Buffers are referenced in the session. Each session has two buffers which -interconnect the two stream interfaces. One buffer is called the request -buffer, it sees traffic flowing from the client to the server. The other buffer -is the response buffer, it sees traffic flowing from the server to the client. - -By convention, sessions are represented as 2 buffers one on top of the other, -and with 2 stream interfaces connected to the two buffers. The client connects -to the left stream interface (which then acts as a server), and the right -stream interface (which acts as a client) connects to the server. The data -circulate clockwise, so the upper buffer is the request buffer and the lower -buffer is the response buffer : - - ,------------------------. - ,-----> | request buffer | ------. - from ,--./ `------------------------' \,--. to - client ( ) ( ) server - `--' ,------------------------. /`--' - ^------- | response buffer | <-----' - `------------------------' - -2) Operations -------------- - -Socket-based stream interfaces write to buffers directly from the I/O layer -without relying on any specific function. - -Function-based stream interfaces do use a number of non-uniform functions to -read from the buffer's output and to write to the buffer's input. More suited -names could be : - - int buffer_output_peek_at(buf, ofs, ptr, size); - int buffer_output_peek(buf, ptr, size); - int buffer_output_read(buf, ptr, size); - int buffer_output_skip(buf, size); - int buffer_input_write(buf, ptr, size); - -Right now some stream interfaces use the following functions which also happen -to automatically schedule the response for automatic forward : - - buffer_put_block() [peers] - buffer_put_chunk() -> buffer_put_block() - buffer_feed_chunk() -> buffer_put_chunk() -> buffer_put_block() [dumpstats] - buffer_feed() -> buffer_put_string() -> buffer_put_block() [dumpstats] - - -The following stream-interface oriented functions are not used : - - buffer_get_char() - buffer_write_chunk() - - -Analysers read data from the buffers' input, and may sometimes write data -there too (or trim data). More suited names could be : - - int buffer_input_peek_at(buf, ofs, ptr, size); - int buffer_input_truncate_at(buf, ofs); - int buffer_input_peek(buf, ptr, size); - int buffer_input_read(buf, ptr, size); - int buffer_input_skip(buf, size); - int buffer_input_cut(buf, size); - int buffer_input_truncate(buf); - - -Functions that are available and need to be renamed : - - buffer_skip : buffer_output_skip - - buffer_ignore : buffer_input_skip ? => not exactly, more like - buffer_output_skip() without affecting sendmax ! - - buffer_cut_tail : deletes all pending data after sendmax. - -> buffer_input_truncate(). Used by si_retnclose() only. - - buffer_contig_data : buffer_output_contig_data - - buffer_pending : buffer_input_pending_data - - buffer_contig_space : buffer_input_contig_space - - -It looks like buf->lr could be removed and be stored in the HTTP message struct -since it's only used at the HTTP level. diff --git a/doc/internals/buffer-ops.fig b/doc/internals/buffer-ops.fig deleted file mode 100644 index 5cca1b606..000000000 --- a/doc/internals/buffer-ops.fig +++ /dev/null @@ -1,152 +0,0 @@ -#FIG 3.2 -Portrait -Center -Metric -A4 -100.00 -Single --2 -1200 2 -5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 1 3133.105 2868.088 2385 3465 3150 3825 3915 3420 - 0 0 1.00 60.00 120.00 - 0 0 1.00 60.00 120.00 -5 1 0 1 0 7 50 -1 -1 0.000 0 0 1 1 3134.312 2832.717 2340 3420 3150 1845 3960 3375 - 0 0 1.00 60.00 120.00 - 0 0 1.00 60.00 120.00 -5 1 1 1 0 7 50 -1 -1 3.000 0 0 0 0 3150.000 2848.393 2115 3510 3150 1620 4185 3510 -5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 1 3133.105 6423.088 2385 7020 3150 7380 3915 6975 - 0 0 1.00 60.00 120.00 - 0 0 1.00 60.00 120.00 -5 1 0 1 0 7 50 -1 -1 0.000 0 0 1 1 3134.312 6387.717 2340 6975 3150 5400 3960 6930 - 0 0 1.00 60.00 120.00 - 0 0 1.00 60.00 120.00 -5 1 1 1 0 7 50 -1 -1 3.000 0 0 0 0 3150.000 6403.393 2115 7065 3150 5175 4185 7065 -1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 3150 2835 1126 1126 3150 2835 3195 3960 -1 3 0 1 0 7 51 -1 -1 0.000 1 0.0000 3150 2835 1350 1350 3150 2835 4500 2835 -1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 3150 6390 1126 1126 3150 6390 3195 7515 -1 3 0 1 0 7 51 -1 -1 0.000 1 0.0000 3150 6390 1350 1350 3150 6390 4500 6390 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 3150 3960 3150 4185 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 4050 3510 4230 3690 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 2250 3510 2070 3690 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 4410 3285 4455 3150 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 4500 2655 4455 2475 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 4185 1980 4050 1845 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 3645 1575 3510 1530 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 2295 1800 2160 1890 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 1980 2160 1935 2250 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 1800 2655 1800 2790 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 1800 3105 1845 3240 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 2877 1519 2697 1564 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 3150 7515 3150 7740 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 4050 7065 4230 7245 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 2250 7065 2070 7245 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 4410 6840 4455 6705 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 4500 6210 4455 6030 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 4185 5535 4050 5400 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 3645 5130 3510 5085 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 2295 5355 2160 5445 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 1980 5715 1935 5805 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 1800 6210 1800 6345 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 1800 6660 1845 6795 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 2877 5074 2697 5119 -3 0 0 1 0 7 50 -1 -1 0.000 0 1 0 4 - 1 1 1.00 60.00 120.00 - 4950 3510 4635 3690 4545 3375 4185 3600 - 0.000 1.000 1.000 0.000 -3 0 0 1 0 7 50 -1 -1 0.000 0 1 0 4 - 1 1 1.00 60.00 120.00 - 2115 3600 1800 3330 1305 3285 1260 3780 - 0.000 1.000 1.000 0.000 -3 0 0 1 0 7 50 -1 -1 0.000 0 1 0 3 - 1 1 1.00 60.00 120.00 - 4635 2205 4545 1890 4185 2115 - 0.000 1.000 0.000 -3 0 0 1 0 7 50 -1 -1 0.000 0 1 0 4 - 1 1 1.00 60.00 120.00 - 4950 7065 4635 7245 4545 6930 4185 7155 - 0.000 1.000 1.000 0.000 -3 0 0 1 0 7 50 -1 -1 0.000 0 1 0 4 - 1 1 1.00 60.00 120.00 - 2115 7155 1800 6885 1305 6840 1260 7335 - 0.000 1.000 1.000 0.000 -3 0 0 1 0 7 50 -1 -1 0.000 0 1 0 3 - 1 1 1.00 60.00 120.00 - 4635 5760 4545 5445 4185 5670 - 0.000 1.000 0.000 -4 1 0 50 -1 12 8 0.0000 4 75 75 3150 3690 l\001 -4 1 0 50 -1 12 8 0.0000 4 75 450 3150 2025 size-l\001 -4 1 0 50 -1 12 8 5.4978 4 45 75 1935 3780 w\001 -4 1 0 50 -1 12 8 0.7854 4 45 75 4365 3825 r\001 -4 1 0 50 -1 12 8 0.0000 4 90 300 3150 4365 (lr)\001 -4 1 0 50 -1 14 10 5.7596 4 90 270 2520 3960 OUT\001 -4 1 0 50 -1 12 8 5.7596 4 75 525 2430 4140 sendmax\001 -4 1 0 50 -1 14 10 0.5236 4 90 180 3690 4005 IN\001 -4 1 0 50 -1 12 8 0.5236 4 75 675 3870 4185 l-sendmax\001 -4 0 0 50 -1 12 8 0.0000 4 90 750 4545 2340 free space\001 -4 0 0 50 -1 12 8 0.0000 4 90 975 4950 3555 [eg: recv()]\001 -4 1 0 50 -1 12 8 0.0000 4 90 900 1260 4095 [eg: send()]\001 -4 1 0 50 -1 16 12 0.0000 4 165 2370 3150 855 Principle of the circular buffer\001 -4 1 0 50 -1 12 8 0.0000 4 90 600 1260 3960 buffer_*\001 -4 0 0 50 -1 12 8 0.0000 4 90 600 4950 3420 buffer_*\001 -4 1 0 50 -1 16 12 0.0000 4 165 1605 3150 1125 Current (since v1.3)\001 -4 0 0 50 -1 12 8 0.0000 4 90 1050 4950 6975 buffer_input_*\001 -4 1 0 50 -1 14 10 5.7596 4 90 270 2520 7515 OUT\001 -4 1 0 50 -1 14 10 0.5236 4 90 180 3690 7560 IN\001 -4 1 0 50 -1 12 8 0.0000 4 90 1125 1260 7515 buffer_output_*\001 -4 0 0 50 -1 12 8 0.0000 4 90 750 4545 5895 free space\001 -4 0 0 50 -1 12 8 0.0000 4 90 975 4950 7110 [eg: recv()]\001 -4 1 0 50 -1 12 8 0.0000 4 90 900 1260 7650 [eg: send()]\001 -4 0 0 50 -1 0 10 0.0000 4 135 1860 6075 1755 Some http_msg fields point to\001 -4 0 0 50 -1 0 10 0.0000 4 120 2175 6075 1950 absolute locations within the buffer,\001 -4 0 0 50 -1 0 10 0.0000 4 135 2040 6075 2145 making realignments quite tricky.\001 -4 0 0 50 -1 0 10 0.0000 4 135 1890 6075 5400 http_msg owns a pointer to the\001 -4 0 0 50 -1 0 10 0.0000 4 135 2055 6075 5595 struct_buffer and only uses offsets\001 -4 0 0 50 -1 0 10 0.0000 4 135 1095 6075 5790 relative to buf->p.\001 -4 1 0 50 -1 12 8 0.0000 4 75 600 3150 5760 size-i-o\001 -4 1 0 50 -1 12 8 0.0000 4 75 225 3150 7200 o+i\001 -4 1 0 50 -1 12 8 5.7596 4 45 75 2430 7695 o\001 -4 1 0 50 -1 12 8 0.5236 4 75 75 3870 7740 i\001 -4 1 0 50 -1 16 12 0.0000 4 180 1965 3150 4905 New design (1.5-dev9+)\001 -4 1 0 50 -1 12 8 0.0000 4 60 75 3150 7920 p\001 diff --git a/doc/internals/buffer-rework.txt b/doc/internals/buffer-rework.txt deleted file mode 100644 index 136377fd0..000000000 --- a/doc/internals/buffer-rework.txt +++ /dev/null @@ -1,245 +0,0 @@ -2018-05-18 - Buffer rework - -1. Summary - -The situation with the current buffer structure is becoming problematic in -the newly introduced muxes and causes serious difficulties preventing muxes -from being used on both sides, unless requiring that all code is duplicated -to use buf->i on the Rx path and buf->o on the Tx path. - - -2. History - -A very long time ago, buffers were used to receive data using the recv() call, -to parse them, forward them, and send them over the network using the send() -call. Buffers were split into (buffer,channel) when some layers started to be -introduced, and were reorganized a few times to ease content processing and -rewriting. The current definition of the buffer structure is the following : - - struct buffer { - char *p; - uint size; - uint i; - uint o; - char data[0]; - }; - - data p - | | - V V - +-----------+--------------------+------------+-------------+ - | |////////////////////|////////////| | - +-----------+--------------------+------------+-------------+ - <---------------------------------------------------------> size - <------------------> <----------> - o i - -Pointer (p) is initialized to (data) when the buffer is empty. Data are -received after (p+i), increasing (i) by the number of bytes read. Data are sent -from (p-o) for up to (o) bytes, decreasing (o) by the number of bytes sent. -Forwarding data in the channel consists in advancing (p) by the number of bytes -to forward, increasing (o) and decreasing (i) by the same amount. - -This representation is convenient for channel operations because most of them -require to parse input data between (p) and (p+i), and to have a simple way to -forward data. Additionally, it's always easy to know if some data are scheduled -for departure (o), or if the buffer has some room available (size-i-o). - - -3. Problems - -When applets were introduced, the initial code that was made to write data into -the output part was modified to send it into the input part since we had to -rely on the stream code to forward these data via the channel. This explains -the flood of bi_* functions that were introduced to perform the same operations -as the initial bo_*, to write into an input buffer from an applet. - -Health checks however continue to use output because checks do not use streams -nor channels. Thus the check buffers use buf->o for requests and buf->i for -responses. - -The introduction of muxes has changed this again by requiring that most request -code was able to write to buf->i, pretending to be the equivalent of a socket -recv() call. New bi_* functions had to be created to write headers and chunks -from the HTTP/2 mux. Conversely, it was made necessary to parse HTTP traffic -from buf->o while all the original code was made to parse this from buf->i. - -Furthermore, implementing an outgoing mux (eg: HTTP/2) will require to -duplicate a lot of the code to use buf->i instead of buf->o and conversely, -just because the mux will not be placed on the same side of the buffer. Not -only it complicates code maintenance but it also emphasizes the risk to use -the wrong function at any moment. - -From a performance perspective, applets have to suffer a useless copy most of -the time, only due to API limitatoins : it is not possible to write directly to -an input buffer, one has to write to a chunk and then copy it into a buffer. A -compatible structure could allow to share the same data between the chunk and -the buffer without having to perform an extra copy. - - -4. Proposal - -In checks and muxes, it is obvious that a single "side" of the buffer is used, -and it generally is the one associated with the I/O to be performed. Only the -channel requires the distinction between (i) and (o). - -The proposal is to remove this distinction from the buffer and move ->o into -the channel. - -A buffer will then become only a linear (possibly wrapping) storage area with -a beginning, and an end. - -Given the experience gathered from past buffer API updates, we know that the -buffer's end is not as much important as its data length. This will give the -current representation : - - - struct buffer { - void *area; // start of the storage area - uint head; // start offset of remaining data relative to area - uint len; // contents length after head - uint size; // size of the storage area (wrapping point) - }; - - area - | - V - +-----------+---------------------------------+-------------+ - | |/////////////////////////////////| | - +-----------+---------------------------------+-------------+ - <---------------------------------------------------------> size - <---------> <-------------------------------> - head len - -The channel will contain an "output" field corresponding to the current buf->o, -indicating how many bytes of the current buffer are actually scheduled for -being forwarded and must not be considered anymore. It means that a stream -parser will simply start to parse from (buf->area + buf->head + chn->output) -and stop at (buf->area + buf->head + buf->len). - -For esnding data, the caller of cs_send() or whatever function will have to -pass the desired number of bytes to send, and one will not expect anymore that -all the buffer's contents have to be sent. In general the caller will have -access to chn->output if it needs to use this (typically from the stream -interface code at the moment). - - -5. First implementation step - -The first step will consist in limiting the changes to the current buffers. The -buffer structure will still contain both a descriptor and the storage area. A -buffer will first be declared this way : - - struct buffer { - uint head; // start offset of remaining data relative to area - uint len; // contents length after head - uint size; // size of the storage area (wrapping point) - void area[0]; // start of the storage area - }; - -Thanks to this, no changes will have to be performed on memory management, and -buffers will continue to be allocated from a pool of size (sizeof(buffer) + -tune.bufsize). - -The following translations will have to be performed on the code : - - occurrences of (buf->i + buf->o) will have to be replaced with (buf->len) - - bi_ptr() -> ci_ptr() ; bi_end() -> b_head()+b_size() ; bi_del() -> b_del() - - bo_ptr() -> b_head() ; bo_end() -> co_end() - - b_adv() -> c_adv() ; b_rew() -> c_rew() - - buf->o will have to be replaced with either chn->output or a function - argument containing a copy of chn->output. These ones should cancel out - at the end of the operation. - - buf->i -> (b_len(buf) - chn->output) - -Temporary difficulties : - - compression makes use of both (i) and (o), by taking care of only touching - (i) and never (o). The filters know how not to touch (o), and the internal - compression API needs a small update so that this previous ->o value is - passed as an argument that the filter will collect from the channel. If it - is simpler (it probably isn't), a temporary "struct oldbuf" could be - created to emulate the old behaviour and be fed/used by the filters code. - - - buffer_slow_realign() distinguishes input data from output data so that the - output data is always placed at the end, leaving a clean contigous buffer - once forwarded. Instead, a "split" argument will have to be added so that - the caller may decide where to split the contents. Muxes will pass zero - here while channels will pass chn->output. - - -6. Second implementation step - -The second step will consist in making "struct buffer" only hold the descriptor -and not the data anymore. It will then look like this : - - struct buffer { - void *area; // start of the storage area - uint head; // start offset of remaining data relative to area - uint len; // contents length after head - uint size; // size of the storage area (wrapping point) - }; - -Each buffer allocation will have to atomically allocate a struct buffer and an -area. Buffer copies will consist in exchanging the "struct buffer" contents -only. - -The chunk API must then be updated so that some new versions of chunk_putblk(), -chunk_printf() etc can write to a storage area, and so that bi_putchk() and -bo_putchk() instead can swap the storage areas when possible. - -At this point b_size() will be used to know where to release the allocated -area. The storage will simply consist in (start,len) which is perfectly suited -to have slabs. Just like chunks, b_size()==0 can be used to mention that no -free() must be done on the area. Doing so will make it much simpler to send -pre-formated messages (eg: error messages) into a buffer because such messages -will then be stored into a "struct ist" and sending such a message will be as -simple as doing : - - b->area = ist.str; - b->len = ist.len; - b->head = 0; - b->size = 0; - -The chunk struct can then be removed and replaced everywhere with a struct -buffer. Only the functions will remain, though they will likely have to be -renamed. Maybe the buffer manipulation functions will have to be split between -those which support wrapping and those which don't (chunks don't support -wrapping). - -The buf_empty structure will then disappear since a small 20-bytes structure -will be enough to represent an empty buffer. - - -7. Third implementation step - -The third step will consist in placing a struct buffer into the struct channel. -This way no allocation is needed at all, and any storage can be used to deliver -contents. This allows to trivially upgrade a buffer on the fly by picking from -a different slab. It also allows to deliver error messages without ever having -to perform a buffer allocation. Doing so removes the need for the early buffer -allocation for the response in process_stream(), as it is only needed to have a -reliable place to send an error message to. This will ensure the buffer -allocator can be simplified and made more robust against the risk of deadlock -on memory shortage. - - -8. Caveats - -The following points require extra care : - - there will be some subtracts to figure the buffer "input" length (formerly - buf->i). In the past it always used to be an unsigned value. Extreme care - will have to be taken to always use an inline function to compute this so - that it doesn't accidently become signed. - - - supporting buf->size==0 to point to a special string may require some extra - checks to avoid causing an integer underflow when calculating (size-len) or - (size-len-head) to figure the available room. - - - it is very likely that some further changes will be tempting to do in the - channel to better integrate the buffer (which becomes very similar to the - pipe), but we must not go as far as removing the visibility of the "struct - buffer" because it will be used as entry point for many functions. - - - it is likely that a number of the chunk_*, bi_* and bo_* variants have very - minor variations like return codes or error checking that can make their - replacement very tricky. Each set of such functions must be studied in - advance, and their users as well.