From: Willy Tarreau Date: Fri, 15 Sep 2017 05:44:44 +0000 (+0200) Subject: MINOR: protocols: always pass a "port" argument to the listener creation X-Git-Tag: v1.8-dev3~98 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3228238c73e944d7e1efef5093d8bdb0de706dd0;p=thirdparty%2Fhaproxy.git MINOR: protocols: always pass a "port" argument to the listener creation It's a shame that cfgparse() has to make special cases of each protocol just to cast the port to the target address family. Let's pass the port in argument to the function. The unix listener simply ignores it. --- diff --git a/include/proto/proto_tcp.h b/include/proto/proto_tcp.h index 13d7a788bf..94a84153b1 100644 --- a/include/proto/proto_tcp.h +++ b/include/proto/proto_tcp.h @@ -28,8 +28,8 @@ #include int tcp_bind_socket(int fd, int flags, struct sockaddr_storage *local, struct sockaddr_storage *remote); -void tcpv4_add_listener(struct listener *listener); -void tcpv6_add_listener(struct listener *listener); +void tcpv4_add_listener(struct listener *listener, int port); +void tcpv6_add_listener(struct listener *listener, int port); int tcp_pause_listener(struct listener *l); int tcp_connect_server(struct connection *conn, int data, int delack); int tcp_connect_probe(struct connection *conn); diff --git a/include/proto/proto_uxst.h b/include/proto/proto_uxst.h index d7bcaa6efa..63de24f53d 100644 --- a/include/proto/proto_uxst.h +++ b/include/proto/proto_uxst.h @@ -26,7 +26,7 @@ #include #include -void uxst_add_listener(struct listener *listener); +void uxst_add_listener(struct listener *listener, int port); int uxst_pause_listener(struct listener *l); int uxst_get_src(int fd, struct sockaddr *sa, socklen_t salen, int dir); int uxst_get_dst(int fd, struct sockaddr *sa, socklen_t salen, int dir); diff --git a/src/cfgparse.c b/src/cfgparse.c index fc346b99fc..9752b81e29 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -299,15 +299,13 @@ int str2listener(char *str, struct proxy *curproxy, struct bind_conf *bind_conf, l->state = LI_INIT; if (ss.ss_family == AF_INET) { - ((struct sockaddr_in *)(&l->addr))->sin_port = htons(port); - tcpv4_add_listener(l); + tcpv4_add_listener(l, port); } else if (ss.ss_family == AF_INET6) { - ((struct sockaddr_in6 *)(&l->addr))->sin6_port = htons(port); - tcpv6_add_listener(l); + tcpv6_add_listener(l, port); } else { - uxst_add_listener(l); + uxst_add_listener(l, port); } jobs++; diff --git a/src/proto_tcp.c b/src/proto_tcp.c index 2bbde7a210..6b1505a3a5 100644 --- a/src/proto_tcp.c +++ b/src/proto_tcp.c @@ -1137,30 +1137,32 @@ static int tcp_bind_listeners(struct protocol *proto, char *errmsg, int errlen) return err; } -/* Add listener to the list of tcpv4 listeners. The listener's state - * is automatically updated from LI_INIT to LI_ASSIGNED. The number of - * listeners is updated. This is the function to use to add a new listener. +/* Add to the list of tcpv4 listeners, on port . The + * listener's state is automatically updated from LI_INIT to LI_ASSIGNED. + * The number of listeners for the protocol is updated. */ -void tcpv4_add_listener(struct listener *listener) +void tcpv4_add_listener(struct listener *listener, int port) { if (listener->state != LI_INIT) return; listener->state = LI_ASSIGNED; listener->proto = &proto_tcpv4; + ((struct sockaddr_in *)(&listener->addr))->sin_port = htons(port); LIST_ADDQ(&proto_tcpv4.listeners, &listener->proto_list); proto_tcpv4.nb_listeners++; } -/* Add listener to the list of tcpv4 listeners. The listener's state - * is automatically updated from LI_INIT to LI_ASSIGNED. The number of - * listeners is updated. This is the function to use to add a new listener. +/* Add to the list of tcpv6 listeners, on port . The + * listener's state is automatically updated from LI_INIT to LI_ASSIGNED. + * The number of listeners for the protocol is updated. */ -void tcpv6_add_listener(struct listener *listener) +void tcpv6_add_listener(struct listener *listener, int port) { if (listener->state != LI_INIT) return; listener->state = LI_ASSIGNED; listener->proto = &proto_tcpv6; + ((struct sockaddr_in *)(&listener->addr))->sin_port = htons(port); LIST_ADDQ(&proto_tcpv6.listeners, &listener->proto_list); proto_tcpv6.nb_listeners++; } diff --git a/src/proto_uxst.c b/src/proto_uxst.c index ac14d3b49a..767cd16fd3 100644 --- a/src/proto_uxst.c +++ b/src/proto_uxst.c @@ -365,11 +365,11 @@ static int uxst_unbind_listener(struct listener *listener) return ERR_NONE; } -/* Add a listener to the list of unix stream listeners. The listener's state - * is automatically updated from LI_INIT to LI_ASSIGNED. The number of - * listeners is updated. This is the function to use to add a new listener. +/* Add to the list of unix stream listeners (port is ignored). The + * listener's state is automatically updated from LI_INIT to LI_ASSIGNED. + * The number of listeners for the protocol is updated. */ -void uxst_add_listener(struct listener *listener) +void uxst_add_listener(struct listener *listener, int port) { if (listener->state != LI_INIT) return;