MEDIUM: counters: support passing the counter number as a fetch argument

One very annoying issue when trying to extend the sticky counters beyond
the current 3 counters is that it requires a massive copy-paste of fetch
functions (we don't have to copy-paste code anymore), just so that the
fetch names exist.

So let's have an alternate form like "sc_*(num)" to allow passing the
counter number as an argument without having to redefine new fetch names.
The MAX_SESS_STKCTR macro defines the number of usable sticky counters,
which defaults to 3.
This commit is contained in:
Willy Tarreau 2013-07-23 19:33:46 +02:00
parent b4c8493a9f
commit 4d4149cf3e
2 changed files with 78 additions and 28 deletions

View File

@ -8939,7 +8939,10 @@ closest to the connection, where no content is yet made available. The fetch
methods described here are usable as low as the "tcp-request connection" rule methods described here are usable as low as the "tcp-request connection" rule
sets unless they require some future information. Those generally include sets unless they require some future information. Those generally include
TCP/IP addresses and ports, as well as elements from stick-tables related to TCP/IP addresses and ports, as well as elements from stick-tables related to
the incoming connection. the incoming connection. For retrieving a value from a sticky counters, the
counter number can be explicitly set as 0, 1, or 2 using the pre-defined
"sc0_", "sc1_", or "sc2_" prefix, or it can be specified as the first integer
argument when using the "sc_" prefix.
be_id : integer be_id : integer
Returns an integer containing the current backend's id. It can be used in Returns an integer containing the current backend's id. It can be used in
@ -8975,6 +8978,7 @@ fe_id : integer
backends to check from which backend it was called, or to stick all users backends to check from which backend it was called, or to stick all users
coming via a same frontend to the same server. coming via a same frontend to the same server.
sc_bytes_in_rate(<ctr>) : integer
sc0_bytes_in_rate : integer sc0_bytes_in_rate : integer
sc1_bytes_in_rate : integer sc1_bytes_in_rate : integer
sc2_bytes_in_rate : integer sc2_bytes_in_rate : integer
@ -8982,6 +8986,7 @@ sc2_bytes_in_rate : integer
counters, measured in amount of bytes over the period configured in the counters, measured in amount of bytes over the period configured in the
table. See also src_bytes_in_rate. table. See also src_bytes_in_rate.
sc_bytes_out_rate(<ctr>) : integer
sc0_bytes_out_rate : integer sc0_bytes_out_rate : integer
sc1_bytes_out_rate : integer sc1_bytes_out_rate : integer
sc2_bytes_out_rate : integer sc2_bytes_out_rate : integer
@ -8989,6 +8994,7 @@ sc2_bytes_out_rate : integer
counters, measured in amount of bytes over the period configured in the counters, measured in amount of bytes over the period configured in the
table. See also src_bytes_out_rate. table. See also src_bytes_out_rate.
sc_clr_gpc0(<ctr>) : integer
sc0_clr_gpc0 : integer sc0_clr_gpc0 : integer
sc1_clr_gpc0 : integer sc1_clr_gpc0 : integer
sc2_clr_gpc0 : integer sc2_clr_gpc0 : integer
@ -9006,12 +9012,14 @@ sc2_clr_gpc0 : integer
tcp-request connection accept if !abuse save tcp-request connection accept if !abuse save
tcp-request connection reject if abuse kill tcp-request connection reject if abuse kill
sc_conn_cnt(<ctr>) : integer
sc0_conn_cnt : integer sc0_conn_cnt : integer
sc1_conn_cnt : integer sc1_conn_cnt : integer
sc2_conn_cnt : integer sc2_conn_cnt : integer
Returns the cumulated number of incoming connections from currently tracked Returns the cumulated number of incoming connections from currently tracked
counters. See also src_conn_cnt. counters. See also src_conn_cnt.
sc_conn_cur(<ctr>) : integer
sc0_conn_cur : integer sc0_conn_cur : integer
sc1_conn_cur : integer sc1_conn_cur : integer
sc2_conn_cur : integer sc2_conn_cur : integer
@ -9019,6 +9027,7 @@ sc2_conn_cur : integer
tracked counters. This number is automatically incremented when tracking tracked counters. This number is automatically incremented when tracking
begins and decremented when tracking stops. See also src_conn_cur. begins and decremented when tracking stops. See also src_conn_cur.
sc_conn_rate(<ctr>) : integer
sc0_conn_rate : integer sc0_conn_rate : integer
sc1_conn_rate : integer sc1_conn_rate : integer
sc2_conn_rate : integer sc2_conn_rate : integer
@ -9026,22 +9035,25 @@ sc2_conn_rate : integer
measured in amount of connections over the period configured in the table. measured in amount of connections over the period configured in the table.
See also src_conn_rate. See also src_conn_rate.
sc_get_gpc0(<ctr>) : integer
sc0_get_gpc0 : integer sc0_get_gpc0 : integer
sc1_get_gpc0 : integer sc1_get_gpc0 : integer
sc2_get_gpc0 : integer sc2_get_gpc0 : integer
Returns the value of the first General Purpose Counter associated to the Returns the value of the first General Purpose Counter associated to the
currently tracked counters. See also src_get_gpc0 and sc0/sc1/sc2_get_gpc0. currently tracked counters. See also src_get_gpc0 and sc/sc0/sc1/sc2_inc_gpc0.
sc_gpc0_rate(<ctr>) : integer
sc0_gpc0_rate : integer sc0_gpc0_rate : integer
sc1_gpc0_rate : integer sc1_gpc0_rate : integer
sc2_gpc0_rate : integer sc2_gpc0_rate : integer
Returns the average increment rate of the first General Purpose Counter Returns the average increment rate of the first General Purpose Counter
associated to the currently tracked counters. It reports the frequency associated to the currently tracked counters. It reports the frequency
which the gpc0 counter was incremented over the configured period. See also which the gpc0 counter was incremented over the configured period. See also
src_gpc0_rate, sc0/sc1/sc2_get_gpc0, and sc0/sc1/sc2_inc_gpc0. Note that the src_gpc0_rate, sc/sc0/sc1/sc2_get_gpc0, and sc/sc0/sc1/sc2_inc_gpc0. Note
"gpc0_rate" counter must be stored in the stick-table for a value to be that the "gpc0_rate" counter must be stored in the stick-table for a value to
returned, as "gpc0" only holds the event count. be returned, as "gpc0" only holds the event count.
sc_http_err_cnt(<ctr>) : integer
sc0_http_err_cnt : integer sc0_http_err_cnt : integer
sc1_http_err_cnt : integer sc1_http_err_cnt : integer
sc2_http_err_cnt : integer sc2_http_err_cnt : integer
@ -9049,6 +9061,7 @@ sc2_http_err_cnt : integer
counters. This includes the both request errors and 4xx error responses. counters. This includes the both request errors and 4xx error responses.
See also src_http_err_cnt. See also src_http_err_cnt.
sc_http_err_rate(<ctr>) : integer
sc0_http_err_rate : integer sc0_http_err_rate : integer
sc1_http_err_rate : integer sc1_http_err_rate : integer
sc2_http_err_rate : integer sc2_http_err_rate : integer
@ -9057,6 +9070,7 @@ sc2_http_err_rate : integer
includes the both request errors and 4xx error responses. See also includes the both request errors and 4xx error responses. See also
src_http_err_rate. src_http_err_rate.
sc_http_req_cnt(<ctr>) : integer
sc0_http_req_cnt : integer sc0_http_req_cnt : integer
sc1_http_req_cnt : integer sc1_http_req_cnt : integer
sc2_http_req_cnt : integer sc2_http_req_cnt : integer
@ -9064,6 +9078,7 @@ sc2_http_req_cnt : integer
counters. This includes every started request, valid or not. See also counters. This includes every started request, valid or not. See also
src_http_req_cnt. src_http_req_cnt.
sc_http_req_rate(<ctr>) : integer
sc0_http_req_rate : integer sc0_http_req_rate : integer
sc1_http_req_rate : integer sc1_http_req_rate : integer
sc2_http_req_rate : integer sc2_http_req_rate : integer
@ -9072,6 +9087,7 @@ sc2_http_req_rate : integer
the table. This includes every started request, valid or not. See also the table. This includes every started request, valid or not. See also
src_http_req_rate. src_http_req_rate.
sc_inc_gpc0(<ctr>) : integer
sc0_inc_gpc0 : integer sc0_inc_gpc0 : integer
sc1_inc_gpc0 : integer sc1_inc_gpc0 : integer
sc2_inc_gpc0 : integer sc2_inc_gpc0 : integer
@ -9085,6 +9101,7 @@ sc2_inc_gpc0 : integer
acl kill sc0_inc_gpc0 gt 0 acl kill sc0_inc_gpc0 gt 0
tcp-request connection reject if abuse kill tcp-request connection reject if abuse kill
sc_kbytes_in(<ctr>) : integer
sc0_kbytes_in : integer sc0_kbytes_in : integer
sc1_kbytes_in : integer sc1_kbytes_in : integer
sc2_kbytes_in : integer sc2_kbytes_in : integer
@ -9093,6 +9110,7 @@ sc2_kbytes_in : integer
test is currently performed on 32-bit integers, which limits values to 4 test is currently performed on 32-bit integers, which limits values to 4
terabytes. See also src_kbytes_in. terabytes. See also src_kbytes_in.
sc_kbytes_out(<ctr>) : integer
sc0_kbytes_out : integer sc0_kbytes_out : integer
sc1_kbytes_out : integer sc1_kbytes_out : integer
sc2_kbytes_out : integer sc2_kbytes_out : integer
@ -9101,6 +9119,7 @@ sc2_kbytes_out : integer
test is currently performed on 32-bit integers, which limits values to 4 test is currently performed on 32-bit integers, which limits values to 4
terabytes. See also src_kbytes_out. terabytes. See also src_kbytes_out.
sc_sess_cnt(<ctr>) : integer
sc0_sess_cnt : integer sc0_sess_cnt : integer
sc1_sess_cnt : integer sc1_sess_cnt : integer
sc2_sess_cnt : integer sc2_sess_cnt : integer
@ -9111,6 +9130,7 @@ sc2_sess_cnt : integer
backend sessions if some HTTP keep-alive is performed over the connection backend sessions if some HTTP keep-alive is performed over the connection
with the client. See also src_sess_cnt. with the client. See also src_sess_cnt.
sc_sess_rate(<ctr>) : integer
sc0_sess_rate : integer sc0_sess_rate : integer
sc1_sess_rate : integer sc1_sess_rate : integer
sc2_sess_rate : integer sc2_sess_rate : integer
@ -9121,6 +9141,7 @@ sc2_sess_rate : integer
connection could result in many backend sessions if some HTTP keep-alive is connection could result in many backend sessions if some HTTP keep-alive is
performed over the connection with the client. See also src_sess_rate. performed over the connection with the client. See also src_sess_rate.
sc_tracked(<ctr>) : boolean
sc0_tracked : boolean sc0_tracked : boolean
sc1_tracked : boolean sc1_tracked : boolean
sc2_tracked : boolean sc2_tracked : boolean
@ -9128,6 +9149,7 @@ sc2_tracked : boolean
the current session. This can be useful when deciding whether or not we want the current session. This can be useful when deciding whether or not we want
to set some values in a header passed to the server. to set some values in a header passed to the server.
sc_trackers(<ctr>) : integer
sc0_trackers : integer sc0_trackers : integer
sc1_trackers : integer sc1_trackers : integer
sc2_trackers : integer sc2_trackers : integer
@ -9158,13 +9180,13 @@ src_bytes_in_rate([<table>]) : integer
Returns the average bytes rate from the incoming connection's source address Returns the average bytes rate from the incoming connection's source address
in the current proxy's stick-table or in the designated stick-table, measured in the current proxy's stick-table or in the designated stick-table, measured
in amount of bytes over the period configured in the table. If the address is in amount of bytes over the period configured in the table. If the address is
not found, zero is returned. See also sc0/sc1/sc2_bytes_in_rate. not found, zero is returned. See also sc/sc0/sc1/sc2_bytes_in_rate.
src_bytes_out_rate([<table>]) : integer src_bytes_out_rate([<table>]) : integer
Returns the average bytes rate to the incoming connection's source address in Returns the average bytes rate to the incoming connection's source address in
the current proxy's stick-table or in the designated stick-table, measured in the current proxy's stick-table or in the designated stick-table, measured in
amount of bytes over the period configured in the table. If the address is amount of bytes over the period configured in the table. If the address is
not found, zero is returned. See also sc0/sc1/sc2_bytes_out_rate. not found, zero is returned. See also sc/sc0/sc1/sc2_bytes_out_rate.
src_clr_gpc0([<table>]) : integer src_clr_gpc0([<table>]) : integer
Clears the first General Purpose Counter associated to the incoming Clears the first General Purpose Counter associated to the incoming
@ -9186,40 +9208,40 @@ src_conn_cnt([<table>]) : integer
Returns the cumulated number of connections initiated from the current Returns the cumulated number of connections initiated from the current
incoming connection's source address in the current proxy's stick-table or in incoming connection's source address in the current proxy's stick-table or in
the designated stick-table. If the address is not found, zero is returned. the designated stick-table. If the address is not found, zero is returned.
See also sc0/sc1/sc2_conn_cnt. See also sc/sc0/sc1/sc2_conn_cnt.
src_conn_cur([<table>]) : integer src_conn_cur([<table>]) : integer
Returns the current amount of concurrent connections initiated from the Returns the current amount of concurrent connections initiated from the
current incoming connection's source address in the current proxy's current incoming connection's source address in the current proxy's
stick-table or in the designated stick-table. If the address is not found, stick-table or in the designated stick-table. If the address is not found,
zero is returned. See also sc0/sc1/sc2_conn_cur. zero is returned. See also sc/sc0/sc1/sc2_conn_cur.
src_conn_rate([<table>]) : integer src_conn_rate([<table>]) : integer
Returns the average connection rate from the incoming connection's source Returns the average connection rate from the incoming connection's source
address in the current proxy's stick-table or in the designated stick-table, address in the current proxy's stick-table or in the designated stick-table,
measured in amount of connections over the period configured in the table. If measured in amount of connections over the period configured in the table. If
the address is not found, zero is returned. See also sc0/sc1/sc2_conn_rate. the address is not found, zero is returned. See also sc/sc0/sc1/sc2_conn_rate.
src_get_gpc0([<table>]) : integer src_get_gpc0([<table>]) : integer
Returns the value of the first General Purpose Counter associated to the Returns the value of the first General Purpose Counter associated to the
incoming connection's source address in the current proxy's stick-table or in incoming connection's source address in the current proxy's stick-table or in
the designated stick-table. If the address is not found, zero is returned. the designated stick-table. If the address is not found, zero is returned.
See also sc0/sc1/sc2_get_gpc0 and src_inc_gpc0. See also sc/sc0/sc1/sc2_get_gpc0 and src_inc_gpc0.
src_gpc0_rate([<table>]) : integer src_gpc0_rate([<table>]) : integer
Returns the average increment rate of the first General Purpose Counter Returns the average increment rate of the first General Purpose Counter
associated to the incoming connection's source address in the current proxy's associated to the incoming connection's source address in the current proxy's
stick-table or in the designated stick-table. It reports the frequency stick-table or in the designated stick-table. It reports the frequency
which the gpc0 counter was incremented over the configured period. See also which the gpc0 counter was incremented over the configured period. See also
sc0/sc1/sc2_gpc0_rate, src_get_gpc0, and sc0/sc1/sc2_inc_gpc0. Note that the sc/sc0/sc1/sc2_gpc0_rate, src_get_gpc0, and sc/sc0/sc1/sc2_inc_gpc0. Note
"gpc0_rate" counter must be stored in the stick-table for a value to be that the "gpc0_rate" counter must be stored in the stick-table for a value to
returned, as "gpc0" only holds the event count. be returned, as "gpc0" only holds the event count.
src_http_err_cnt([<table>]) : integer src_http_err_cnt([<table>]) : integer
Returns the cumulated number of HTTP errors from the incoming connection's Returns the cumulated number of HTTP errors from the incoming connection's
source address in the current proxy's stick-table or in the designated source address in the current proxy's stick-table or in the designated
stick-table. This includes the both request errors and 4xx error responses. stick-table. This includes the both request errors and 4xx error responses.
See also sc0/sc1/sc2_http_err_cnt. If the address is not found, zero is See also sc/sc0/sc1/sc2_http_err_cnt. If the address is not found, zero is
returned. returned.
src_http_err_rate([<table>]) : integer src_http_err_rate([<table>]) : integer
@ -9227,20 +9249,20 @@ src_http_err_rate([<table>]) : integer
address in the current proxy's stick-table or in the designated stick-table, address in the current proxy's stick-table or in the designated stick-table,
measured in amount of errors over the period configured in the table. This measured in amount of errors over the period configured in the table. This
includes the both request errors and 4xx error responses. If the address is includes the both request errors and 4xx error responses. If the address is
not found, zero is returned. See also sc0/sc1/sc2_http_err_rate. not found, zero is returned. See also sc/sc0/sc1/sc2_http_err_rate.
src_http_req_cnt([<table>]) : integer src_http_req_cnt([<table>]) : integer
Returns the cumulated number of HTTP requests from the incoming connection's Returns the cumulated number of HTTP requests from the incoming connection's
source address in the current proxy's stick-table or in the designated stick- source address in the current proxy's stick-table or in the designated stick-
table. This includes every started request, valid or not. If the address is table. This includes every started request, valid or not. If the address is
not found, zero is returned. See also sc0/sc1/sc2_http_req_cnt. not found, zero is returned. See also sc/sc0/sc1/sc2_http_req_cnt.
src_http_req_rate([<table>]) : integer src_http_req_rate([<table>]) : integer
Returns the average rate of HTTP requests from the incoming connection's Returns the average rate of HTTP requests from the incoming connection's
source address in the current proxy's stick-table or in the designated stick- source address in the current proxy's stick-table or in the designated stick-
table, measured in amount of requests over the period configured in the table, measured in amount of requests over the period configured in the
table. This includes every started request, valid or not. If the address is table. This includes every started request, valid or not. If the address is
not found, zero is returned. See also sc0/sc1/sc2_http_req_rate. not found, zero is returned. See also sc/sc0/sc1/sc2_http_req_rate.
src_inc_gpc0([<table>]) : integer src_inc_gpc0([<table>]) : integer
Increments the first General Purpose Counter associated to the incoming Increments the first General Purpose Counter associated to the incoming
@ -9259,14 +9281,15 @@ src_kbytes_in([<table>]) : integer
address in the current proxy's stick-table or in the designated stick-table, address in the current proxy's stick-table or in the designated stick-table,
measured in kilobytes over the period configured in the table. If the address measured in kilobytes over the period configured in the table. If the address
is not found, zero is returned. The test is currently performed on 32-bit is not found, zero is returned. The test is currently performed on 32-bit
integers, which limits values to 4 terabytes. See also sc0/sc1/sc2_kbytes_in. integers, which limits values to 4 terabytes. See also
sc/sc0/sc1/sc2_kbytes_in.
src_kbytes_out([<table>]) : integer src_kbytes_out([<table>]) : integer
Returns the amount of data sent to the incoming connection's source address Returns the amount of data sent to the incoming connection's source address
in the current proxy's stick-table or in the designated stick-table, measured in the current proxy's stick-table or in the designated stick-table, measured
in kilobytes over the period configured in the table. If the address is not in kilobytes over the period configured in the table. If the address is not
found, zero is returned. The test is currently performed on 32-bit integers, found, zero is returned. The test is currently performed on 32-bit integers,
which limits values to 4 terabytes. See also sc0/sc1/sc2_kbytes_out. which limits values to 4 terabytes. See also sc/sc0/sc1/sc2_kbytes_out.
src_port : integer src_port : integer
Returns an integer value corresponding to the TCP source port of the Returns an integer value corresponding to the TCP source port of the
@ -9279,14 +9302,14 @@ src_sess_cnt([<table>]) : integer
connection's source IPv4 address in the current proxy's stick-table or in the connection's source IPv4 address in the current proxy's stick-table or in the
designated stick-table, that were transformed into sessions, which means that designated stick-table, that were transformed into sessions, which means that
they were accepted by "tcp-request" rules. If the address is not found, zero they were accepted by "tcp-request" rules. If the address is not found, zero
is returned. See also sc0/sc1/sc2_sess_cnt. is returned. See also sc/sc0/sc1/sc2_sess_cnt.
src_sess_rate([<table>]) : integer src_sess_rate([<table>]) : integer
Returns the average session rate from the incoming connection's source Returns the average session rate from the incoming connection's source
address in the current proxy's stick-table or in the designated stick-table, address in the current proxy's stick-table or in the designated stick-table,
measured in amount of sessions over the period configured in the table. A measured in amount of sessions over the period configured in the table. A
session is a connection that went past the early "tcp-request" rules. If the session is a connection that went past the early "tcp-request" rules. If the
address is not found, zero is returned. See also sc0/sc1/sc2_sess_rate. address is not found, zero is returned. See also sc/sc0/sc1/sc2_sess_rate.
src_updt_conn_cnt([<table>]) : integer src_updt_conn_cnt([<table>]) : integer
Creates or updates the entry associated to the incoming connection's source Creates or updates the entry associated to the incoming connection's source

View File

@ -2578,10 +2578,11 @@ void session_shutdown(struct session *session, int why)
/* All supported ACL keywords must be declared here. */ /* All supported ACL keywords must be declared here. */
/************************************************************************/ /************************************************************************/
/* Returns a pointer to an stkctr depending on the fetch keyword name. /* Returns a pointer to a stkctr depending on the fetch keyword name.
* It is designed to be called as sc[0-9]_* or src_* exclusively. * It is designed to be called as sc[0-9]_* sc_* or src_* exclusively.
* sc[0-9]_* will return a pointer to the respective field in the * sc[0-9]_* will return a pointer to the respective field in the
* session <l4>. src_* will fill a locally allocated structure with * session <l4>. sc_* requires an UINT argument specifying the stick
* counter number. src_* will fill a locally allocated structure with
* the table and entry corresponding to what is specified with src_*. * the table and entry corresponding to what is specified with src_*.
* NULL may be returned if the designated stkctr is not tracked. * NULL may be returned if the designated stkctr is not tracked.
*/ */
@ -2589,10 +2590,17 @@ static struct stkctr *
smp_fetch_sc_stkctr(struct session *l4, const struct arg *args, const char *kw) smp_fetch_sc_stkctr(struct session *l4, const struct arg *args, const char *kw)
{ {
static struct stkctr stkctr; static struct stkctr stkctr;
unsigned char num = kw[2]; unsigned int num = kw[2] - '0';
if (num - '0' <= 9) { /* sc[0-9]_* variant */ if (num <= 9) { /* sc[0-9]_* variant */
return l4->stkctr[num - '0'].entry ? &l4->stkctr[num - '0'] : NULL; return l4->stkctr[num].entry ? &l4->stkctr[num] : NULL;
}
else if (num == '_' - '0') {
/* sc_* variant, arg[0] = ctr# (mandatory) */
num = args[0].data.uint;
if (num >= MAX_SESS_STKCTR)
return NULL;
return l4->stkctr[num].entry ? &l4->stkctr[num] : NULL;
} }
else { /* src_* variant, arg[0] = table */ else { /* src_* variant, arg[0] = table */
struct stktable_key *key = addr_to_stktable_key(&l4->si[0].conn->addr.from); struct stktable_key *key = addr_to_stktable_key(&l4->si[0].conn->addr.from);
@ -3154,6 +3162,25 @@ static struct acl_kw_list acl_kws = {ILH, {
* Please take care of keeping this list alphabetically sorted. * Please take care of keeping this list alphabetically sorted.
*/ */
static struct sample_fetch_kw_list smp_fetch_keywords = {ILH, { static struct sample_fetch_kw_list smp_fetch_keywords = {ILH, {
{ "sc_bytes_in_rate", smp_fetch_sc_bytes_in_rate, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc_bytes_out_rate", smp_fetch_sc_bytes_out_rate, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc_clr_gpc0", smp_fetch_sc_clr_gpc0, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc_conn_cnt", smp_fetch_sc_conn_cnt, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc_conn_cur", smp_fetch_sc_conn_cur, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc_conn_rate", smp_fetch_sc_conn_rate, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc_get_gpc0", smp_fetch_sc_get_gpc0, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc_gpc0_rate", smp_fetch_sc_gpc0_rate, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc_http_err_cnt", smp_fetch_sc_http_err_cnt, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc_http_err_rate", smp_fetch_sc_http_err_rate, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc_http_req_cnt", smp_fetch_sc_http_req_cnt, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc_http_req_rate", smp_fetch_sc_http_req_rate, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc_inc_gpc0", smp_fetch_sc_inc_gpc0, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc_kbytes_in", smp_fetch_sc_kbytes_in, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_L4CLI, },
{ "sc_kbytes_out", smp_fetch_sc_kbytes_out, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_L4CLI, },
{ "sc_sess_cnt", smp_fetch_sc_sess_cnt, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc_sess_rate", smp_fetch_sc_sess_rate, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc_tracked", smp_fetch_sc_tracked, ARG1(1,UINT), NULL, SMP_T_BOOL, SMP_USE_INTRN, },
{ "sc_trackers", smp_fetch_sc_trackers, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc0_bytes_in_rate", smp_fetch_sc_bytes_in_rate, 0, NULL, SMP_T_UINT, SMP_USE_INTRN, }, { "sc0_bytes_in_rate", smp_fetch_sc_bytes_in_rate, 0, NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc0_bytes_out_rate", smp_fetch_sc_bytes_out_rate, 0, NULL, SMP_T_UINT, SMP_USE_INTRN, }, { "sc0_bytes_out_rate", smp_fetch_sc_bytes_out_rate, 0, NULL, SMP_T_UINT, SMP_USE_INTRN, },
{ "sc0_clr_gpc0", smp_fetch_sc_clr_gpc0, 0, NULL, SMP_T_UINT, SMP_USE_INTRN, }, { "sc0_clr_gpc0", smp_fetch_sc_clr_gpc0, 0, NULL, SMP_T_UINT, SMP_USE_INTRN, },