From: Willy Tarreau Date: Wed, 16 Sep 2020 15:50:45 +0000 (+0200) Subject: MINOR: protocol: add the control layer type in the protocol struct X-Git-Tag: v2.3-dev5~21 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a54553f74f060b34a6fdace895a7262668f5b2fe;p=thirdparty%2Fhaproxy.git MINOR: protocol: add the control layer type in the protocol struct This one will be needed to more accurately select a protocol. It may differ from the socket type for QUIC, which uses dgram at the socket layer and provides stream at the control layer. The upper level requests a control layer only so we need this field. --- diff --git a/include/haproxy/protocol-t.h b/include/haproxy/protocol-t.h index cacd3fc316..f74a2e1a6c 100644 --- a/include/haproxy/protocol-t.h +++ b/include/haproxy/protocol-t.h @@ -82,6 +82,7 @@ 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) */ int sock_domain; /* socket domain, as passed to socket() */ int sock_type; /* socket type, as passed to socket() */ int sock_prot; /* socket protocol, as passed to socket() */ diff --git a/src/proto_sockpair.c b/src/proto_sockpair.c index 6b1d69c7f9..fc26a80d5a 100644 --- a/src/proto_sockpair.c +++ b/src/proto_sockpair.c @@ -61,6 +61,7 @@ struct proto_fam proto_fam_sockpair = { static struct protocol proto_sockpair = { .name = "sockpair", .fam = &proto_fam_sockpair, + .ctrl_type = SOCK_STREAM, .sock_domain = AF_CUST_SOCKPAIR, .sock_type = SOCK_STREAM, .sock_prot = 0, diff --git a/src/proto_tcp.c b/src/proto_tcp.c index 33d39b3d58..09d3e86192 100644 --- a/src/proto_tcp.c +++ b/src/proto_tcp.c @@ -52,6 +52,7 @@ static void tcpv6_add_listener(struct listener *listener, int port); static struct protocol proto_tcpv4 = { .name = "tcpv4", .fam = &proto_fam_inet4, + .ctrl_type = SOCK_STREAM, .sock_domain = AF_INET, .sock_type = SOCK_STREAM, .sock_prot = IPPROTO_TCP, @@ -71,6 +72,7 @@ INITCALL1(STG_REGISTER, protocol_register, &proto_tcpv4); static struct protocol proto_tcpv6 = { .name = "tcpv6", .fam = &proto_fam_inet6, + .ctrl_type = SOCK_STREAM, .sock_domain = AF_INET6, .sock_type = SOCK_STREAM, .sock_prot = IPPROTO_TCP, diff --git a/src/proto_udp.c b/src/proto_udp.c index d408d7c26e..74408b4ec7 100644 --- a/src/proto_udp.c +++ b/src/proto_udp.c @@ -48,6 +48,7 @@ static void udp6_add_listener(struct listener *listener, int port); static struct protocol proto_udp4 = { .name = "udp4", .fam = &proto_fam_inet4, + .ctrl_type = SOCK_DGRAM, .sock_domain = AF_CUST_UDP4, .sock_type = SOCK_DGRAM, .sock_prot = IPPROTO_UDP, @@ -67,6 +68,7 @@ INITCALL1(STG_REGISTER, protocol_register, &proto_udp4); static struct protocol proto_udp6 = { .name = "udp6", .fam = &proto_fam_inet6, + .ctrl_type = SOCK_DGRAM, .sock_domain = AF_CUST_UDP6, .sock_type = SOCK_DGRAM, .sock_prot = IPPROTO_UDP, diff --git a/src/proto_uxst.c b/src/proto_uxst.c index 0dd03f85b6..6cf35b7546 100644 --- a/src/proto_uxst.c +++ b/src/proto_uxst.c @@ -49,6 +49,7 @@ static int uxst_pause_listener(struct listener *l); static struct protocol proto_unix = { .name = "unix_stream", .fam = &proto_fam_unix, + .ctrl_type = SOCK_STREAM, .sock_domain = PF_UNIX, .sock_type = SOCK_STREAM, .sock_prot = 0,