CLEANUP: protocol: group protocol struct members by usage

For the sake of an improved readability, let's group the protocol
field members according to where they're supposed to be defined:
  - connection layer (note: for now even UDP needs one)
  - binding layer
  - address family
  - socket layer
Nothing else was changed.
This commit is contained in:
Willy Tarreau 2020-12-08 14:54:20 +01:00
parent b9b2fd7cf4
commit b366c9a59a
5 changed files with 177 additions and 128 deletions

View File

@ -95,20 +95,20 @@ struct protocol {
int (*suspend)(struct listener *l); /* try to suspend the listener */ int (*suspend)(struct listener *l); /* try to suspend the listener */
int (*resume)(struct listener *l); /* try to resume a suspended listener */ int (*resume)(struct listener *l); /* try to resume a suspended listener */
struct connection *(*accept_conn)(struct listener *l, int *status); /* accept a new connection */ struct connection *(*accept_conn)(struct listener *l, int *status); /* accept a new connection */
/* functions acting on connections */
int (*connect)(struct connection *, int flags); /* connect function if any, see below for flags values */
/* functions acting on the receiver */ /* functions acting on the receiver */
int (*rx_suspend)(struct receiver *rx); /* temporarily suspend this receiver for a soft restart */
int (*rx_resume)(struct receiver *rx); /* try to resume a temporarily suspended receiver */
void (*rx_enable)(struct receiver *rx); /* enable receiving on the receiver */ void (*rx_enable)(struct receiver *rx); /* enable receiving on the receiver */
void (*rx_disable)(struct receiver *rx); /* disable receiving on the receiver */ void (*rx_disable)(struct receiver *rx); /* disable receiving on the receiver */
void (*rx_unbind)(struct receiver *rx); /* unbind the receiver, most often closing the FD */ void (*rx_unbind)(struct receiver *rx); /* unbind the receiver, most often closing the FD */
int (*rx_suspend)(struct receiver *rx); /* temporarily suspend this receiver for a soft restart */
int (*rx_resume)(struct receiver *rx); /* try to resume a temporarily suspended receiver */
int (*rx_listening)(const struct receiver *rx); /* is the receiver listening ? 0=no, >0=OK, <0=unrecoverable */ int (*rx_listening)(const struct receiver *rx); /* is the receiver listening ? 0=no, >0=OK, <0=unrecoverable */
/* default I/O handler */ /* default I/O handler */
void (*default_iocb)(int fd); /* generic I/O handler (typically accept callback) */ void (*default_iocb)(int fd); /* generic I/O handler (typically accept callback) */
/* functions acting on connections */
int (*connect)(struct connection *, int flags); /* connect function if any, see below for flags values */
struct list receivers; /* list of receivers using this protocol (under proto_lock) */ struct list receivers; /* list of receivers using this protocol (under proto_lock) */
int nb_receivers; /* number of receivers (under proto_lock) */ int nb_receivers; /* number of receivers (under proto_lock) */

View File

@ -64,25 +64,34 @@ struct proto_fam proto_fam_sockpair = {
/* Note: must not be declared <const> as its list will be overwritten */ /* Note: must not be declared <const> as its list will be overwritten */
struct protocol proto_sockpair = { struct protocol proto_sockpair = {
.name = "sockpair", .name = "sockpair",
.fam = &proto_fam_sockpair,
.ctrl_type = SOCK_STREAM, /* connection layer */
.sock_type = SOCK_STREAM, .ctrl_type = SOCK_STREAM,
.sock_prot = 0, .listen = sockpair_bind_listener,
.add = default_add_listener, .enable = sockpair_enable_listener,
.listen = sockpair_bind_listener, .disable = sockpair_disable_listener,
.enable = sockpair_enable_listener, .add = default_add_listener,
.disable = sockpair_disable_listener, .unbind = default_unbind_listener,
.unbind = default_unbind_listener, .accept_conn = sockpair_accept_conn,
.accept_conn = sockpair_accept_conn, .connect = sockpair_connect_server,
.rx_unbind = sock_unbind,
.rx_enable = sock_enable, /* binding layer */
.rx_disable = sock_disable, /* Note: suspend/resume not supported */
.rx_listening = sockpair_accepting_conn,
.default_iocb = &sock_accept_iocb, /* address family */
.connect = &sockpair_connect_server, .fam = &proto_fam_sockpair,
.receivers = LIST_HEAD_INIT(proto_sockpair.receivers),
.nb_receivers = 0, /* socket layer */
.sock_type = SOCK_STREAM,
.sock_prot = 0,
.rx_enable = sock_enable,
.rx_disable = sock_disable,
.rx_unbind = sock_unbind,
.rx_listening = sockpair_accepting_conn,
.default_iocb = sock_accept_iocb,
.receivers = LIST_HEAD_INIT(proto_sockpair.receivers),
.nb_receivers = 0,
}; };
INITCALL1(STG_REGISTER, protocol_register, &proto_sockpair); INITCALL1(STG_REGISTER, protocol_register, &proto_sockpair);

View File

@ -52,58 +52,74 @@ static void tcp_disable_listener(struct listener *listener);
/* Note: must not be declared <const> as its list will be overwritten */ /* Note: must not be declared <const> as its list will be overwritten */
struct protocol proto_tcpv4 = { struct protocol proto_tcpv4 = {
.name = "tcpv4", .name = "tcpv4",
.fam = &proto_fam_inet4,
.ctrl_type = SOCK_STREAM, /* connection layer */
.sock_type = SOCK_STREAM, .ctrl_type = SOCK_STREAM,
.sock_prot = IPPROTO_TCP, .listen = tcp_bind_listener,
.add = default_add_listener, .enable = tcp_enable_listener,
.listen = tcp_bind_listener, .disable = tcp_disable_listener,
.enable = tcp_enable_listener, .add = default_add_listener,
.disable = tcp_disable_listener, .unbind = default_unbind_listener,
.unbind = default_unbind_listener, .suspend = default_suspend_listener,
.suspend = default_suspend_listener, .resume = default_resume_listener,
.resume = default_resume_listener, .accept_conn = sock_accept_conn,
.accept_conn = sock_accept_conn, .connect = tcp_connect_server,
.rx_enable = sock_enable,
.rx_disable = sock_disable, /* binding layer */
.rx_unbind = sock_unbind, .rx_suspend = tcp_suspend_receiver,
.rx_suspend = tcp_suspend_receiver, .rx_resume = tcp_resume_receiver,
.rx_resume = tcp_resume_receiver,
.rx_listening = sock_accepting_conn, /* address family */
.default_iocb = &sock_accept_iocb, .fam = &proto_fam_inet4,
.connect = tcp_connect_server,
.receivers = LIST_HEAD_INIT(proto_tcpv4.receivers), /* socket layer */
.nb_receivers = 0, .sock_type = SOCK_STREAM,
.sock_prot = IPPROTO_TCP,
.rx_enable = sock_enable,
.rx_disable = sock_disable,
.rx_unbind = sock_unbind,
.rx_listening = sock_accepting_conn,
.default_iocb = sock_accept_iocb,
.receivers = LIST_HEAD_INIT(proto_tcpv4.receivers),
.nb_receivers = 0,
}; };
INITCALL1(STG_REGISTER, protocol_register, &proto_tcpv4); INITCALL1(STG_REGISTER, protocol_register, &proto_tcpv4);
/* Note: must not be declared <const> as its list will be overwritten */ /* Note: must not be declared <const> as its list will be overwritten */
struct protocol proto_tcpv6 = { struct protocol proto_tcpv6 = {
.name = "tcpv6", .name = "tcpv6",
.fam = &proto_fam_inet6,
.ctrl_type = SOCK_STREAM, /* connection layer */
.sock_type = SOCK_STREAM, .ctrl_type = SOCK_STREAM,
.sock_prot = IPPROTO_TCP, .listen = tcp_bind_listener,
.add = default_add_listener, .enable = tcp_enable_listener,
.listen = tcp_bind_listener, .disable = tcp_disable_listener,
.enable = tcp_enable_listener, .add = default_add_listener,
.disable = tcp_disable_listener, .unbind = default_unbind_listener,
.unbind = default_unbind_listener, .suspend = default_suspend_listener,
.suspend = default_suspend_listener, .resume = default_resume_listener,
.resume = default_resume_listener, .accept_conn = sock_accept_conn,
.accept_conn = sock_accept_conn, .connect = tcp_connect_server,
.rx_enable = sock_enable,
.rx_disable = sock_disable, /* binding layer */
.rx_unbind = sock_unbind, .rx_suspend = tcp_suspend_receiver,
.rx_suspend = tcp_suspend_receiver, .rx_resume = tcp_resume_receiver,
.rx_resume = tcp_resume_receiver,
.rx_listening = sock_accepting_conn, /* address family */
.default_iocb = &sock_accept_iocb, .fam = &proto_fam_inet6,
.connect = tcp_connect_server,
.receivers = LIST_HEAD_INIT(proto_tcpv6.receivers), /* socket layer */
.nb_receivers = 0, .sock_type = SOCK_STREAM,
.sock_prot = IPPROTO_TCP,
.rx_enable = sock_enable,
.rx_disable = sock_disable,
.rx_unbind = sock_unbind,
.rx_listening = sock_accepting_conn,
.default_iocb = sock_accept_iocb,
.receivers = LIST_HEAD_INIT(proto_tcpv6.receivers),
.nb_receivers = 0,
}; };
INITCALL1(STG_REGISTER, protocol_register, &proto_tcpv6); INITCALL1(STG_REGISTER, protocol_register, &proto_tcpv6);

View File

@ -48,50 +48,66 @@ static void udp_disable_listener(struct listener *listener);
/* Note: must not be declared <const> as its list will be overwritten */ /* Note: must not be declared <const> as its list will be overwritten */
struct protocol proto_udp4 = { struct protocol proto_udp4 = {
.name = "udp4", .name = "udp4",
.fam = &proto_fam_inet4,
.ctrl_type = SOCK_DGRAM, /* connection layer */
.sock_type = SOCK_DGRAM, .ctrl_type = SOCK_DGRAM,
.sock_prot = IPPROTO_UDP, .listen = udp_bind_listener,
.add = default_add_listener, .enable = udp_enable_listener,
.listen = udp_bind_listener, .disable = udp_disable_listener,
.enable = udp_enable_listener, .add = default_add_listener,
.disable = udp_disable_listener, .unbind = default_unbind_listener,
.unbind = default_unbind_listener, .suspend = default_suspend_listener,
.suspend = default_suspend_listener, .resume = default_resume_listener,
.resume = default_resume_listener,
.rx_enable = sock_enable, /* binding layer */
.rx_disable = sock_disable, .rx_suspend = udp_suspend_receiver,
.rx_unbind = sock_unbind, .rx_resume = udp_resume_receiver,
.rx_suspend = udp_suspend_receiver,
.rx_resume = udp_resume_receiver, /* address family */
.receivers = LIST_HEAD_INIT(proto_udp4.receivers), .fam = &proto_fam_inet4,
.nb_receivers = 0,
/* socket layer */
.sock_type = SOCK_DGRAM,
.sock_prot = IPPROTO_UDP,
.rx_enable = sock_enable,
.rx_disable = sock_disable,
.rx_unbind = sock_unbind,
.receivers = LIST_HEAD_INIT(proto_udp4.receivers),
.nb_receivers = 0,
}; };
INITCALL1(STG_REGISTER, protocol_register, &proto_udp4); INITCALL1(STG_REGISTER, protocol_register, &proto_udp4);
/* Note: must not be declared <const> as its list will be overwritten */ /* Note: must not be declared <const> as its list will be overwritten */
struct protocol proto_udp6 = { struct protocol proto_udp6 = {
.name = "udp6", .name = "udp6",
.fam = &proto_fam_inet6,
.ctrl_type = SOCK_DGRAM, /* connection layer */
.sock_type = SOCK_DGRAM, .ctrl_type = SOCK_DGRAM,
.sock_prot = IPPROTO_UDP, .listen = udp_bind_listener,
.add = default_add_listener, .enable = udp_enable_listener,
.listen = udp_bind_listener, .disable = udp_disable_listener,
.enable = udp_enable_listener, .add = default_add_listener,
.disable = udp_disable_listener, .unbind = default_unbind_listener,
.unbind = default_unbind_listener, .suspend = default_suspend_listener,
.suspend = default_suspend_listener, .resume = default_resume_listener,
.resume = default_resume_listener,
.rx_enable = sock_enable, /* binding layer */
.rx_disable = sock_disable, .rx_suspend = udp_suspend_receiver,
.rx_unbind = sock_unbind, .rx_resume = udp_resume_receiver,
.rx_suspend = udp_suspend_receiver,
.rx_resume = udp_resume_receiver, /* address family */
.receivers = LIST_HEAD_INIT(proto_udp6.receivers), .fam = &proto_fam_inet6,
.nb_receivers = 0,
/* socket layer */
.sock_type = SOCK_DGRAM,
.sock_prot = IPPROTO_UDP,
.rx_enable = sock_enable,
.rx_disable = sock_disable,
.rx_unbind = sock_unbind,
.receivers = LIST_HEAD_INIT(proto_udp6.receivers),
.nb_receivers = 0,
}; };
INITCALL1(STG_REGISTER, protocol_register, &proto_udp6); INITCALL1(STG_REGISTER, protocol_register, &proto_udp6);

View File

@ -49,27 +49,35 @@ static int uxst_suspend_receiver(struct receiver *rx);
/* Note: must not be declared <const> as its list will be overwritten */ /* Note: must not be declared <const> as its list will be overwritten */
struct protocol proto_uxst = { struct protocol proto_uxst = {
.name = "unix_stream", .name = "unix_stream",
.fam = &proto_fam_unix,
.ctrl_type = SOCK_STREAM, /* connection layer */
.sock_type = SOCK_STREAM, .ctrl_type = SOCK_STREAM,
.sock_prot = 0, .listen = uxst_bind_listener,
.add = default_add_listener, .enable = uxst_enable_listener,
.listen = uxst_bind_listener, .disable = uxst_disable_listener,
.enable = uxst_enable_listener, .add = default_add_listener,
.disable = uxst_disable_listener, .unbind = default_unbind_listener,
.unbind = default_unbind_listener, .suspend = default_suspend_listener,
.suspend = default_suspend_listener, .accept_conn = sock_accept_conn,
.accept_conn = sock_accept_conn, .connect = uxst_connect_server,
.rx_enable = sock_enable,
.rx_disable = sock_disable, /* binding layer */
.rx_unbind = sock_unbind, .rx_suspend = uxst_suspend_receiver,
.rx_suspend = uxst_suspend_receiver,
.rx_listening = sock_accepting_conn, /* address family */
.default_iocb = &sock_accept_iocb, .fam = &proto_fam_unix,
.connect = &uxst_connect_server,
.receivers = LIST_HEAD_INIT(proto_uxst.receivers), /* socket layer */
.nb_receivers = 0, .sock_type = SOCK_STREAM,
.sock_prot = 0,
.rx_enable = sock_enable,
.rx_disable = sock_disable,
.rx_unbind = sock_unbind,
.rx_listening = sock_accepting_conn,
.default_iocb = sock_accept_iocb,
.receivers = LIST_HEAD_INIT(proto_uxst.receivers),
.nb_receivers = 0,
}; };
INITCALL1(STG_REGISTER, protocol_register, &proto_uxst); INITCALL1(STG_REGISTER, protocol_register, &proto_uxst);