From: Krzysztof Piotr Oledzki Date: Tue, 12 Jan 2010 20:59:30 +0000 (+0100) Subject: [MINOR] acl: add fe_id/so_id to match frontend's and socket's id X-Git-Tag: v1.4-dev7~20 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=346f76ddbdc9d98ef87b700496ea325cce6f4040;p=thirdparty%2Fhaproxy.git [MINOR] acl: add fe_id/so_id to match frontend's and socket's id --- diff --git a/doc/configuration.txt b/doc/configuration.txt index 6ca20b9a61..9d98074853 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -5604,6 +5604,13 @@ fe_conn(frontend) considered saturated. See also the "dst_conn", "be_conn" and "fe_sess_rate" criteria. +fe_id + Applies to the fronted's id. Can be used in backends to check from which + frontend it was called. + +so_id + Applies to the socket's id. Useful in frontends with many bind keywords. + be_conn be_conn(frontend) Applies to the number of currently established connections on the backend, diff --git a/src/client.c b/src/client.c index 16ee2d09f0..458bb1c2c9 100644 --- a/src/client.c +++ b/src/client.c @@ -610,6 +610,30 @@ acl_fetch_dconn(struct proxy *px, struct session *l4, void *l7, int dir, return 1; } +/* set test->i to the id of the frontend */ +static int +acl_fetch_fe_id(struct proxy *px, struct session *l4, void *l7, int dir, + struct acl_expr *expr, struct acl_test *test) { + + test->flags = ACL_TEST_F_READ_ONLY; + + test->i = l4->fe->uuid; + + return 1; +} + +/* set test->i to the id of the socket (listener) */ +static int +acl_fetch_so_id(struct proxy *px, struct session *l4, void *l7, int dir, + struct acl_expr *expr, struct acl_test *test) { + + test->flags = ACL_TEST_F_READ_ONLY; + + test->i = l4->listener->luid; + + return 1; +} + /* Note: must not be declared as its list will be overwritten */ static struct acl_kw_list acl_kws = {{ },{ @@ -621,6 +645,8 @@ static struct acl_kw_list acl_kws = {{ },{ { "src_limit", acl_parse_int, acl_fetch_sconn, acl_match_int }, #endif { "dst_conn", acl_parse_int, acl_fetch_dconn, acl_match_int, ACL_USE_NOTHING }, + { "fe_id", acl_parse_int, acl_fetch_fe_id, acl_match_int, ACL_USE_NOTHING }, + { "so_id", acl_parse_int, acl_fetch_so_id, acl_match_int, ACL_USE_NOTHING }, { NULL, NULL, NULL, NULL }, }};