Re: [PATCH v3] MINOR: stick-table: allow sc-set-gpt0 to set value from an expression
[confirmed now: (subscribing/)sending to the *list* from Thunderbird via GMail SMTP does not work; resending via its Web UI] Hello Willy, On 07/11/2019 18:58, Willy Tarreau wrote: > Hi Cédric, > > On Wed, Nov 06, 2019 at 06:38:53PM +0100, Cédric Dufour wrote: > > Just let me know if you want me to merge this one now or if you made some > extra changes since you posted. You can go ahead with PATCH v3. I triple-checked it against our use-case (along haproxy 2.0.5, the latest Ubuntu-packaged version which we base our re-packaging on) and all seems well. > Thanks, > Willy Thank you very much for your help and merging. Toute bonne journée par chez vous ;-) Cédric
[PATCH v3] MINOR: stick-table: allow sc-set-gpt0 to set value from an expression
[sorry for mis-threading; hoping I got the git send-mail --in-reply-to right] Hello Willy! Actually, reading through your original and last comments, I realize I must have misunderstood the sample_expr() part and got carried away. Unless I'm mistaken, we can use the existing sample_fetch_as_type() function directly (without any further addition to sample.c). Or am I missing something ? This leaves the switch(rule->from) <-> smpt_opt_dir stuff. Since there is nothing about act_rule in sample.c so I felt it has no place there. Wouldn't an extra function call just to deal with this switch() be overkill ? Let me know if you still think this ought to go in a separate function (like if anticipating set_gpt1 :-) ). Best, Cédric [patch] Allow the sc-set-gpt0 action to set GPT0 to a value dynamically evaluated from its argument (in addition to the existing static alternative). --- doc/configuration.txt | 44 +--- include/types/action.h | 1 + src/stick_table.c | 57 +++--- 3 files changed, 79 insertions(+), 23 deletions(-) diff --git a/doc/configuration.txt b/doc/configuration.txt index 8dedbfc48..bea62bd98 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -4465,11 +4465,13 @@ http-request sc-inc-gpc1() [ { if | unless } ] counter designated by . If an error occurs, this action silently fails and the actions evaluation continues. -http-request sc-set-gpt0() [ { if | unless } ] +http-request sc-set-gpt0() { | } + [ { if | unless } ] - This action sets the GPT0 tag according to the sticky counter designated by - and the value of . The expected result is a boolean. If an error - occurs, this action silently fails and the actions evaluation continues. + This action sets the 32-bit unsigned GPT0 tag according to the sticky counter + designated by and the value of /. The expected result is a + boolean. If an error occurs, this action silently fails and the actions + evaluation continues. http-request set-dst [ { if | unless } ] @@ -4974,11 +4976,13 @@ http-response sc-inc-gpc1() [ { if | unless } ] counter designated by . If an error occurs, this action silently fails and the actions evaluation continues. -http-response sc-set-gpt0() [ { if | unless } ] +http-response sc-set-gpt0() { | } + [ { if | unless } ] - This action sets the GPT0 tag according to the sticky counter designated by - and the value of . The expected result is a boolean. If an error - occurs, this action silently fails and the actions evaluation continues. + This action sets the 32-bit unsigned GPT0 tag according to the sticky counter + designated by and the value of /. The expected result is a + boolean. If an error occurs, this action silently fails and the actions + evaluation continues. http-response send-spoe-group [ { if | unless } ] @@ -9394,11 +9398,11 @@ tcp-request connection [{if | unless} ] counter designated by . If an error occurs, this action silently fails and the actions evaluation continues. -- sc-set-gpt0() : -This action sets the GPT0 tag according to the sticky counter designated -by and the value of . The expected result is a boolean. If -an error occurs, this action silently fails and the actions evaluation -continues. +- sc-set-gpt0() { | }: +This action sets the 32-bit unsigned GPT0 tag according to the sticky +counter designated by and the value of /. The +expected result is a boolean. If an error occurs, this action silently +fails and the actions evaluation continues. - set-src : Is used to set the source IP address to the value of specified @@ -9556,7 +9560,7 @@ tcp-request content [{if | unless} ] - { track-sc0 | track-sc1 | track-sc2 } [table ] - sc-inc-gpc0() - sc-inc-gpc1() -- sc-set-gpt0() +- sc-set-gpt0() { | } - set-dst - set-dst-port - set-var() @@ -9820,11 +9824,11 @@ tcp-response content [{if | unless} ] counter designated by . If an error occurs, this action fails silently and the actions evaluation continues. -- sc-set-gpt0() : -This action sets the GPT0 tag according to the sticky counter designated -by and the value of . The expected result is a boolean. If -an error occurs, this action silently fails and the actions evaluation -continues. +- sc-set-gpt0() { | } +This action sets the 32-bit unsigned GPT0 tag according to the sticky +counter designated by and the value of /. The +expected result is a boolean. If an error occurs, this action silently +fails and the actions evaluation continues. - "silent-drop" : This stops the evaluation of the rules and makes the client-facing @@ -9945,7 +9949,7 @@ tcp-request sess
[PATCH v2] MINOR: stick-table: allow sc-set-gpt0 to set value from an expression
[Sorry for multiple posting. I'm having trouble with sending this patch via GMail *SMTP*; trying the WUI...] Thanks Willy for your feedback. I'm not sure whether I should further split stktable_fetch_expr() into some new sample_...() in sample.c or if there is some other *.c file where a generic function, including the required act_rule, would make sense. Also, I'm not HAProxy-savvy enough to know whether this proposal is multi-thread safe (is it ?). [patch] Allow the sc-set-gpt0 action to set GPT0 to a value dynamically evaluated from its argument (in addition to the existing static alternative). --- doc/configuration.txt | 44 --- include/types/action.h | 1 + src/stick_table.c | 82 +++--- 3 files changed, 102 insertions(+), 25 deletions(-) diff --git a/doc/configuration.txt b/doc/configuration.txt index 8dedbfc48..bea62bd98 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -4465,11 +4465,13 @@ http-request sc-inc-gpc1() [ { if | unless } ] counter designated by . If an error occurs, this action silently fails and the actions evaluation continues. -http-request sc-set-gpt0() [ { if | unless } ] +http-request sc-set-gpt0() { | } + [ { if | unless } ] - This action sets the GPT0 tag according to the sticky counter designated by - and the value of . The expected result is a boolean. If an error - occurs, this action silently fails and the actions evaluation continues. + This action sets the 32-bit unsigned GPT0 tag according to the sticky counter + designated by and the value of /. The expected result is a + boolean. If an error occurs, this action silently fails and the actions + evaluation continues. http-request set-dst [ { if | unless } ] @@ -4974,11 +4976,13 @@ http-response sc-inc-gpc1() [ { if | unless } ] counter designated by . If an error occurs, this action silently fails and the actions evaluation continues. -http-response sc-set-gpt0() [ { if | unless } ] +http-response sc-set-gpt0() { | } + [ { if | unless } ] - This action sets the GPT0 tag according to the sticky counter designated by - and the value of . The expected result is a boolean. If an error - occurs, this action silently fails and the actions evaluation continues. + This action sets the 32-bit unsigned GPT0 tag according to the sticky counter + designated by and the value of /. The expected result is a + boolean. If an error occurs, this action silently fails and the actions + evaluation continues. http-response send-spoe-group [ { if | unless } ] @@ -9394,11 +9398,11 @@ tcp-request connection [{if | unless} ] counter designated by . If an error occurs, this action silently fails and the actions evaluation continues. -- sc-set-gpt0() : -This action sets the GPT0 tag according to the sticky counter designated -by and the value of . The expected result is a boolean. If -an error occurs, this action silently fails and the actions evaluation -continues. +- sc-set-gpt0() { | }: +This action sets the 32-bit unsigned GPT0 tag according to the sticky +counter designated by and the value of /. The +expected result is a boolean. If an error occurs, this action silently +fails and the actions evaluation continues. - set-src : Is used to set the source IP address to the value of specified @@ -9556,7 +9560,7 @@ tcp-request content [{if | unless} ] - { track-sc0 | track-sc1 | track-sc2 } [table ] - sc-inc-gpc0() - sc-inc-gpc1() -- sc-set-gpt0() +- sc-set-gpt0() { | } - set-dst - set-dst-port - set-var() @@ -9820,11 +9824,11 @@ tcp-response content [{if | unless} ] counter designated by . If an error occurs, this action fails silently and the actions evaluation continues. -- sc-set-gpt0() : -This action sets the GPT0 tag according to the sticky counter designated -by and the value of . The expected result is a boolean. If -an error occurs, this action silently fails and the actions evaluation -continues. +- sc-set-gpt0() { | } +This action sets the 32-bit unsigned GPT0 tag according to the sticky +counter designated by and the value of /. The +expected result is a boolean. If an error occurs, this action silently +fails and the actions evaluation continues. - "silent-drop" : This stops the evaluation of the rules and makes the client-facing @@ -9945,7 +9949,7 @@ tcp-request session [{if | unless} ] - { track-sc0 | track-sc1 | track-sc2 } [table ] - sc-inc-gpc0() - sc-inc-gpc1() -- sc-set-gpt0() +- sc-set-gpt0() { | } - set-var() - unset-var() - silent-drop diff --git a/include/types/action.h b/include/types/action.h index 54a6f71a4..