]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: protocols: always pass a "port" argument to the listener creation
authorWilly Tarreau <w@1wt.eu>
Fri, 15 Sep 2017 05:44:44 +0000 (07:44 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 15 Sep 2017 09:49:52 +0000 (11:49 +0200)
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.

include/proto/proto_tcp.h
include/proto/proto_uxst.h
src/cfgparse.c
src/proto_tcp.c
src/proto_uxst.c

index 13d7a788bf8327ac4f31240c8a49e09999674c64..94a84153b168b44d9f7c391050af9f576d847830 100644 (file)
@@ -28,8 +28,8 @@
 #include <proto/stick_table.h>
 
 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);
index d7bcaa6efa2d071fd05b976c3b683d9863474727..63de24f53dcaf898018635e4e3f04c1452832910 100644 (file)
@@ -26,7 +26,7 @@
 #include <types/stream.h>
 #include <types/task.h>
 
-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);
index fc346b99fc0789332e738f337d6fc2ac70207f8a..9752b81e29f6a4aecbaf4c46772d46b0669cd16e 100644 (file)
@@ -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++;
index 2bbde7a210cc30814def827c430d6ae53c5f15a6..6b1505a3a5ff2ac949eb2fc4dfc5a964a01f8759 100644 (file)
@@ -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 <listener> to the list of tcpv4 listeners, on port <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 <listener> to the list of tcpv6 listeners, on port <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++;
 }
index ac14d3b49a82b468cac2f241963934dc9f57624f..767cd16fd35bf3332f06ad05a639fcb54349fb59 100644 (file)
@@ -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 <listener> 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;