From: Willy Tarreau Date: Fri, 20 May 2022 14:36:46 +0000 (+0200) Subject: MINOR: protocol: replace ctrl_type with xprt_type and clarify it X-Git-Tag: v2.6-dev11~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=91b47263f7d534d818cabfa013ca090cc9302b4c;p=thirdparty%2Fhaproxy.git MINOR: protocol: replace ctrl_type with xprt_type and clarify it There's been some great confusion between proto_type, ctrl_type and sock_type. It turns out that ctrl_type was improperly chosen because it's not the control layer that is of this or that type, but the transport layer, and it turns out that the transport layer doesn't (normally) denaturate the underlying control layer, except for QUIC which turns dgrams to streams. The fact that the SOCK_{DGRAM|STREAM} set of values was used added to the confusion. Let's replace it with xprt_type which reuses the later introduced PROTO_TYPE_* values, and update the comments to explain which one works at what level. --- diff --git a/include/haproxy/protocol-t.h b/include/haproxy/protocol-t.h index 8f51a7a51c..b0765cf872 100644 --- a/include/haproxy/protocol-t.h +++ b/include/haproxy/protocol-t.h @@ -89,8 +89,8 @@ struct proto_fam { struct protocol { char name[PROTO_NAME_LEN]; /* protocol name, zero-terminated */ struct proto_fam *fam; /* protocol family */ - int ctrl_type; /* control layer type (SOCK_STREAM/SOCK_DGRAM) */ - enum proto_type proto_type; /* protocol type (PROTO_TYPE_*) */ + int xprt_type; /* transport layer type (PROTO_TYPE_STREAM/PROTO_TYPE_DGRAM) */ + enum proto_type proto_type; /* protocol type at the socket layer (PROTO_TYPE_*) */ int sock_type; /* socket type, as passed to socket() */ int sock_prot; /* socket protocol, as passed to socket() */ diff --git a/src/cfgparse.c b/src/cfgparse.c index 3364529496..d841223979 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -161,7 +161,7 @@ int str2listener(char *str, struct proxy *curproxy, struct bind_conf *bind_conf, * is selected, regardless of bind_conf settings. We then need * to initialize QUIC params. */ - if (proto->proto_type == PROTO_TYPE_DGRAM && proto->ctrl_type == SOCK_STREAM) { + if (proto->proto_type == PROTO_TYPE_DGRAM && proto->xprt_type == PROTO_TYPE_STREAM) { bind_conf->xprt = xprt_get(XPRT_QUIC); quic_transport_params_init(&bind_conf->quic_params, 1); } diff --git a/src/log.c b/src/log.c index be989828b2..1294262243 100644 --- a/src/log.c +++ b/src/log.c @@ -1005,7 +1005,7 @@ int parse_logsrv(char **args, struct list *logsrvs, int do_del, const char *file set_host_port(&logsrv->addr, SYSLOG_PORT); } - if (proto && proto->ctrl_type == SOCK_STREAM) { + if (proto && proto->xprt_type == PROTO_TYPE_STREAM) { static unsigned long ring_ids; /* Implicit sink buffer will be diff --git a/src/proto_quic.c b/src/proto_quic.c index 5c20045276..55aa4b50fe 100644 --- a/src/proto_quic.c +++ b/src/proto_quic.c @@ -65,7 +65,7 @@ struct protocol proto_quic4 = { .name = "quic4", /* connection layer */ - .ctrl_type = SOCK_STREAM, + .xprt_type = PROTO_TYPE_STREAM, .listen = quic_bind_listener, .enable = quic_enable_listener, .disable = quic_disable_listener, @@ -105,7 +105,7 @@ struct protocol proto_quic6 = { .name = "quic6", /* connection layer */ - .ctrl_type = SOCK_STREAM, + .xprt_type = PROTO_TYPE_STREAM, .listen = quic_bind_listener, .enable = quic_enable_listener, .disable = quic_disable_listener, diff --git a/src/proto_sockpair.c b/src/proto_sockpair.c index 9126fe63de..54cc34f236 100644 --- a/src/proto_sockpair.c +++ b/src/proto_sockpair.c @@ -65,7 +65,7 @@ struct protocol proto_sockpair = { .name = "sockpair", /* connection layer */ - .ctrl_type = SOCK_STREAM, + .xprt_type = PROTO_TYPE_STREAM, .listen = sockpair_bind_listener, .enable = sockpair_enable_listener, .disable = sockpair_disable_listener, diff --git a/src/proto_tcp.c b/src/proto_tcp.c index 42342d652c..2dbfb64f89 100644 --- a/src/proto_tcp.c +++ b/src/proto_tcp.c @@ -54,7 +54,7 @@ struct protocol proto_tcpv4 = { .name = "tcpv4", /* connection layer */ - .ctrl_type = SOCK_STREAM, + .xprt_type = PROTO_TYPE_STREAM, .listen = tcp_bind_listener, .enable = tcp_enable_listener, .disable = tcp_disable_listener, @@ -97,7 +97,7 @@ struct protocol proto_tcpv6 = { .name = "tcpv6", /* connection layer */ - .ctrl_type = SOCK_STREAM, + .xprt_type = PROTO_TYPE_STREAM, .listen = tcp_bind_listener, .enable = tcp_enable_listener, .disable = tcp_disable_listener, diff --git a/src/proto_udp.c b/src/proto_udp.c index 3474d4e787..542d287c01 100644 --- a/src/proto_udp.c +++ b/src/proto_udp.c @@ -49,7 +49,7 @@ struct protocol proto_udp4 = { .name = "udp4", /* connection layer */ - .ctrl_type = SOCK_DGRAM, + .xprt_type = PROTO_TYPE_DGRAM, .listen = udp_bind_listener, .enable = udp_enable_listener, .disable = udp_disable_listener, @@ -83,7 +83,7 @@ struct protocol proto_udp6 = { .name = "udp6", /* connection layer */ - .ctrl_type = SOCK_DGRAM, + .xprt_type = PROTO_TYPE_DGRAM, .listen = udp_bind_listener, .enable = udp_enable_listener, .disable = udp_disable_listener, diff --git a/src/proto_uxdg.c b/src/proto_uxdg.c index 8951651f49..41e01004fa 100644 --- a/src/proto_uxdg.c +++ b/src/proto_uxdg.c @@ -40,7 +40,7 @@ struct protocol proto_uxdg = { .name = "uxdg", /* connection layer */ - .ctrl_type = SOCK_DGRAM, + .xprt_type = PROTO_TYPE_DGRAM, .listen = uxdg_bind_listener, .enable = uxdg_enable_listener, .disable = uxdg_disable_listener, diff --git a/src/proto_uxst.c b/src/proto_uxst.c index 2a32fa677d..c9639e76ee 100644 --- a/src/proto_uxst.c +++ b/src/proto_uxst.c @@ -50,7 +50,7 @@ struct protocol proto_uxst = { .name = "unix_stream", /* connection layer */ - .ctrl_type = SOCK_STREAM, + .xprt_type = PROTO_TYPE_STREAM, .listen = uxst_bind_listener, .enable = uxst_enable_listener, .disable = uxst_disable_listener, diff --git a/src/protocol.c b/src/protocol.c index 3d908a1335..7da0727386 100644 --- a/src/protocol.c +++ b/src/protocol.c @@ -44,7 +44,7 @@ void protocol_register(struct protocol *proto) LIST_APPEND(&protocols, &proto->list); __protocol_by_family[sock_domain] [proto->proto_type] - [proto->ctrl_type == SOCK_DGRAM] = proto; + [proto->xprt_type == PROTO_TYPE_DGRAM] = proto; HA_SPIN_UNLOCK(PROTO_LOCK, &proto_lock); } diff --git a/src/resolvers.c b/src/resolvers.c index aba2d245f7..c221f82c77 100644 --- a/src/resolvers.c +++ b/src/resolvers.c @@ -3455,7 +3455,7 @@ int cfg_parse_resolvers(const char *file, int linenum, char **args, int kwm) goto out; } - if (proto && proto->ctrl_type == SOCK_STREAM) { + if (proto && proto->xprt_type == PROTO_TYPE_STREAM) { err_code |= parse_server(file, linenum, args, curr_resolvers->px, NULL, SRV_PARSE_PARSE_ADDR|SRV_PARSE_INITIAL_RESOLVE); if (err_code & (ERR_FATAL|ERR_ABORT)) {