MEDIUM: checks: Implement redis check using tcp-check rules

A share tcp-check ruleset is now created to support redis checks. This way no
extra memory is used if several backends use a redis check.

The following sequence is used :

  tcp-check send "*1\r\n$4\r\nPING\r\n"

  tcp-check expect string "+PONG\r\n" error-status "L7STS" \
      on-error "%[check.payload(),cut_crlf]" on-success "Redis server is ok"
diff --git a/include/common/defaults.h b/include/common/defaults.h
index 43d287d..d52e005 100644
--- a/include/common/defaults.h
+++ b/include/common/defaults.h
@@ -179,7 +179,7 @@
 #define DEF_CHECK_PATH  ""
 #define DEF_SMTP_CHECK_REQ   "HELO localhost\r\n"
 #define DEF_LDAP_CHECK_REQ   "\x30\x0c\x02\x01\x01\x60\x07\x02\x01\x03\x04\x00\x80\x00"
-#define DEF_REDIS_CHECK_REQ  "*1\r\n$4\r\nPING\r\n"
+
 
 #define DEF_HANA_ONERR		HANA_ONERR_FAILCHK
 #define DEF_HANA_ERRLIMIT	10
diff --git a/include/proto/checks.h b/include/proto/checks.h
index d0c827b..1c76a89 100644
--- a/include/proto/checks.h
+++ b/include/proto/checks.h
@@ -69,6 +69,8 @@
 int spoe_prepare_healthcheck_request(char **req, int *len);
 int spoe_handle_healthcheck_response(char *frame, size_t size, char *err, int errlen);
 
+int proxy_parse_redis_check_opt(char **args, int cur_arg, struct proxy *curpx, struct proxy *defpx,
+				const char *file, int line);
 #endif /* _PROTO_CHECKS_H */
 
 /*
diff --git a/include/types/checks.h b/include/types/checks.h
index 30f7d75..b5f4649 100644
--- a/include/types/checks.h
+++ b/include/types/checks.h
@@ -308,9 +308,11 @@
 	};
 };
 
-#define TCPCHK_RULES_NONE   0x00000000
-#define TCPCHK_RULES_SHARED 0x00000001 /* Set for shared list of tcp-check rules */
-#define TCPCHK_RULES_DEF    0x00000002 /* Ruleset inherited from the default section */
+#define TCPCHK_RULES_NONE        0x00000000
+#define TCPCHK_RULES_SHARED      0x00000001 /* Set for shared list of tcp-check rules */
+#define TCPCHK_RULES_DEF         0x00000002 /* Ruleset inherited from the default section */
+
+#define TCPCHK_RULES_REDIS_CHK   0x00000020
 
 /* A list of tcp-check vars, to be registered before executing a ruleset */
 struct tcpcheck_var {
diff --git a/include/types/proxy.h b/include/types/proxy.h
index 270445a..792c252 100644
--- a/include/types/proxy.h
+++ b/include/types/proxy.h
@@ -170,7 +170,7 @@
 /* server health checks */
 #define PR_O2_CHK_NONE  0x00000000      /* no L7 health checks configured (TCP by default) */
 #define PR_O2_PGSQL_CHK 0x10000000      /* use PGSQL check for server health */
-#define PR_O2_REDIS_CHK 0x20000000      /* use LDAP check for server health */
+/* unused: 0x20000000 */
 #define PR_O2_SMTP_CHK  0x30000000      /* use SMTP EHLO check for server health - pvandijk@vision6.com.au */
 #define PR_O2_HTTP_CHK  0x40000000      /* use HTTP 'OPTIONS' method to check server health */
 #define PR_O2_MYSQL_CHK 0x50000000      /* use MYSQL check for server health */