From: Christopher Faulet Date: Thu, 23 Apr 2020 13:50:18 +0000 (+0200) Subject: BUG/MEDIUM: checks: Use the mux protocol specified on the server line X-Git-Tag: v2.2-dev7~81 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=12882cfaf85c6fdab78dd3372b25f7e728c6a180;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: checks: Use the mux protocol specified on the server line First, when a server health check is initialized, it inherits the mux protocol from the server if it is not already specified. Because there is no option to specify the mux protocol for the checks, it is always inherited from the server for now. Then, if the connect rule is configured to use the server options, the mux protocol of the check is used, if defined. Of course, if a mux protocol is already defined for the connect rule, it is used in priority. But for now, it is not possible. Thus, if a server is configured to use, for instance, the h2 protocol, it is possible to do the same for the health-checks. No backport needed. --- diff --git a/src/checks.c b/src/checks.c index 7dff7e959d..0bd84c0e9e 100644 --- a/src/checks.c +++ b/src/checks.c @@ -1743,12 +1743,13 @@ static enum tcpcheck_eval_ret tcpcheck_eval_connect(struct check *check, struct * check (email alerts) or if there is a mux proto specified or if there * is no alpn. */ - if (!s || connect->mux_proto || check->mux_proto || (!connect->alpn && !check->alpn_str)) { + if (!s || ((connect->options & TCPCHK_OPT_DEFAULT_CONNECT) && check->mux_proto) || + connect->mux_proto || (!connect->alpn && !check->alpn_str)) { const struct mux_ops *mux_ops; if (connect->mux_proto) mux_ops = connect->mux_proto->mux; - else if (check->mux_proto) + else if ((connect->options & TCPCHK_OPT_DEFAULT_CONNECT) && check->mux_proto) mux_ops = check->mux_proto->mux; else { int mode = ((check->tcpcheck_rules->flags & TCPCHK_RULES_PROTO_CHK) == TCPCHK_RULES_HTTP_CHK @@ -4724,6 +4725,12 @@ static int init_srv_check(struct server *srv) srv->check.send_proxy |= (srv->pp_opts); } + /* Inherit the mux protocol from the server if not already defined for + * the check + */ + if (srv->mux_proto && !srv->check.mux_proto) + srv->check.mux_proto = srv->mux_proto; + /* validate server health-check settings */ /* We need at least a service port, a check port or the first tcp-check