>From 5fb748f1caa19b0e9b31629e6ddd5bb4dde29196 Mon Sep 17 00:00:00 2001
From: Krzysztof Piotr Oledzki <[email protected]>
Date: Tue, 12 Jan 2010 21:59:30 +0100
Subject: [MINOR] acl: add fe_id/so_id to match frontend's and socket's id
---
doc/configuration.txt | 7 +++++++
src/client.c | 26 ++++++++++++++++++++++++++
2 files changed, 33 insertions(+), 0 deletions(-)
diff --git a/doc/configuration.txt b/doc/configuration.txt
index c5dd105..fde12b1 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -5314,6 +5314,13 @@ fe_conn(frontend) <integer>
considered saturated. See also the "dst_conn", "be_conn" and "fe_sess_rate"
criteria.
+fe_id <integer>
+ Applies to the fronted's id. Can be used in backends to check from which
+ frontend it was called.
+
+so_id <integer>
+ Applies to the socket's id. Useful in frontends with many bind keywords.
+
be_conn <integer>
be_conn(frontend) <integer>
Applies to the number of currently established connections on the backend,
diff --git a/src/client.c b/src/client.c
index b0184bb..21b8318 100644
--- a/src/client.c
+++ b/src/client.c
@@ -580,6 +580,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 <const> as its list will be overwritten */
static struct acl_kw_list acl_kws = {{ },{
@@ -591,6 +615,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 },
}};
--
1.6.4.2