CLEANUP: protocol: remove family-specific fields from struct protocol

This removes the following fields from struct protocol that are now
retrieved from the protocol family instead: .sock_family, .sock_addrlen,
.l3_addrlen, .addrcmp, .bind, .get_src, .get_dst.

This also removes the UDP-specific udp{,6}_get_{src,dst}() functions
which were referenced but not used yet. Their goal was only to remap
the original AF_INET* addresses to AF_CUST_UDP*.

Note that .sock_domain is still there as it's used as a selector for
the protocol struct to be used.
diff --git a/include/haproxy/proto_udp.h b/include/haproxy/proto_udp.h
index 6b91cea..f9069d1 100644
--- a/include/haproxy/proto_udp.h
+++ b/include/haproxy/proto_udp.h
@@ -26,10 +26,6 @@
 
 int udp_bind_socket(int fd, int flags, struct sockaddr_storage *local, struct sockaddr_storage *remote);
 int udp_pause_listener(struct listener *l);
-int udp_get_src(int fd, struct sockaddr *sa, socklen_t salen, int dir);
-int udp6_get_src(int fd, struct sockaddr *sa, socklen_t salen, int dir);
-int udp_get_dst(int fd, struct sockaddr *sa, socklen_t salen, int dir);
-int udp6_get_dst(int fd, struct sockaddr *sa, socklen_t salen, int dir);
 
 #endif /* _PROTO_PROTO_UDP_H */
 
diff --git a/include/haproxy/protocol-t.h b/include/haproxy/protocol-t.h
index fe0c981..4f5aac2 100644
--- a/include/haproxy/protocol-t.h
+++ b/include/haproxy/protocol-t.h
@@ -84,21 +84,14 @@
 	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() */
-	sa_family_t sock_family;			/* socket family, for sockaddr */
-	socklen_t sock_addrlen;				/* socket address length, used by bind() */
-	int l3_addrlen;					/* layer3 address length, used by hashes */
 	void (*accept)(int fd);				/* generic accept function */
-	int (*bind)(struct receiver *rx, void (*handler)(int fd), char **errmsg); /* bind a receiver */
 	int (*listen)(struct listener *l, char *errmsg, int errlen); /* start a listener */
 	int (*enable_all)(struct protocol *proto);	/* enable all bound listeners */
 	int (*disable_all)(struct protocol *proto);	/* disable all bound listeners */
 	int (*connect)(struct connection *, int flags); /* connect function if any, see below for flags values */
-	int (*get_src)(int fd, struct sockaddr *, socklen_t, int dir); /* syscall used to retrieve src addr */
-	int (*get_dst)(int fd, struct sockaddr *, socklen_t, int dir); /* syscall used to retrieve dst addr */
 	int (*drain)(int fd);                           /* indicates whether we can safely close the fd */
 	int (*pause)(struct listener *l);               /* temporarily pause this listener for a soft restart */
 	void (*add)(struct listener *l, int port);      /* add a listener for this protocol and port */
-	int (*addrcmp)(const struct sockaddr_storage *, const struct sockaddr_storage *); /* compare addresses (like memcmp) */
 
 	struct list listeners;				/* list of listeners using this protocol (under proto_lock) */
 	int nb_listeners;				/* number of listeners (under proto_lock) */
diff --git a/src/proto_sockpair.c b/src/proto_sockpair.c
index a2a9607..6b1d69c 100644
--- a/src/proto_sockpair.c
+++ b/src/proto_sockpair.c
@@ -64,17 +64,11 @@
 	.sock_domain = AF_CUST_SOCKPAIR,
 	.sock_type = SOCK_STREAM,
 	.sock_prot = 0,
-	.sock_family = AF_UNIX,
-	.sock_addrlen = sizeof(struct sockaddr_un),
-	.l3_addrlen = sizeof(((struct sockaddr_un*)0)->sun_path),/* path len */
 	.accept = &listener_accept,
 	.connect = &sockpair_connect_server,
-	.bind = sockpair_bind_receiver,
 	.listen = sockpair_bind_listener,
 	.enable_all = enable_all_listeners,
 	.disable_all = disable_all_listeners,
-	.get_src = NULL,
-	.get_dst = NULL,
 	.pause = NULL,
 	.add = sockpair_add_listener,
 	.listeners = LIST_HEAD_INIT(proto_sockpair.listeners),
diff --git a/src/proto_tcp.c b/src/proto_tcp.c
index cb4dc32..33d39b3 100644
--- a/src/proto_tcp.c
+++ b/src/proto_tcp.c
@@ -55,19 +55,12 @@
 	.sock_domain = AF_INET,
 	.sock_type = SOCK_STREAM,
 	.sock_prot = IPPROTO_TCP,
-	.sock_family = AF_INET,
-	.sock_addrlen = sizeof(struct sockaddr_in),
-	.l3_addrlen = 32/8,
 	.accept = &listener_accept,
 	.connect = tcp_connect_server,
-	.bind = sock_inet_bind_receiver,
 	.listen = tcp_bind_listener,
 	.enable_all = enable_all_listeners,
-	.get_src = sock_get_src,
-	.get_dst = sock_inet_get_dst,
 	.pause = tcp_pause_listener,
 	.add = tcpv4_add_listener,
-	.addrcmp = sock_inet4_addrcmp,
 	.listeners = LIST_HEAD_INIT(proto_tcpv4.listeners),
 	.nb_listeners = 0,
 };
@@ -81,19 +74,12 @@
 	.sock_domain = AF_INET6,
 	.sock_type = SOCK_STREAM,
 	.sock_prot = IPPROTO_TCP,
-	.sock_family = AF_INET6,
-	.sock_addrlen = sizeof(struct sockaddr_in6),
-	.l3_addrlen = 128/8,
 	.accept = &listener_accept,
 	.connect = tcp_connect_server,
-	.bind = sock_inet_bind_receiver,
 	.listen = tcp_bind_listener,
 	.enable_all = enable_all_listeners,
-	.get_src = sock_get_src,
-	.get_dst = sock_get_dst,
 	.pause = tcp_pause_listener,
 	.add = tcpv6_add_listener,
-	.addrcmp = sock_inet6_addrcmp,
 	.listeners = LIST_HEAD_INIT(proto_tcpv6.listeners),
 	.nb_listeners = 0,
 };
diff --git a/src/proto_udp.c b/src/proto_udp.c
index d4d6b2a..d408d7c 100644
--- a/src/proto_udp.c
+++ b/src/proto_udp.c
@@ -51,19 +51,12 @@
 	.sock_domain = AF_CUST_UDP4,
 	.sock_type = SOCK_DGRAM,
 	.sock_prot = IPPROTO_UDP,
-	.sock_family = AF_INET,
-	.sock_addrlen = sizeof(struct sockaddr_in),
-	.l3_addrlen = 32/8,
 	.accept = NULL,
 	.connect = NULL,
-	.bind = sock_inet_bind_receiver,
 	.listen = udp_bind_listener,
 	.enable_all = enable_all_listeners,
-	.get_src = udp_get_src,
-	.get_dst = udp_get_dst,
 	.pause = udp_pause_listener,
 	.add = udp4_add_listener,
-	.addrcmp = sock_inet4_addrcmp,
 	.listeners = LIST_HEAD_INIT(proto_udp4.listeners),
 	.nb_listeners = 0,
 };
@@ -77,95 +70,18 @@
 	.sock_domain = AF_CUST_UDP6,
 	.sock_type = SOCK_DGRAM,
 	.sock_prot = IPPROTO_UDP,
-	.sock_family = AF_INET6,
-	.sock_addrlen = sizeof(struct sockaddr_in6),
-	.l3_addrlen = 128/8,
 	.accept = NULL,
 	.connect = NULL,
-	.bind = sock_inet_bind_receiver,
 	.listen = udp_bind_listener,
 	.enable_all = enable_all_listeners,
-	.get_src = udp6_get_src,
-	.get_dst = udp6_get_dst,
 	.pause = udp_pause_listener,
 	.add = udp6_add_listener,
-	.addrcmp = sock_inet6_addrcmp,
 	.listeners = LIST_HEAD_INIT(proto_udp6.listeners),
 	.nb_listeners = 0,
 };
 
 INITCALL1(STG_REGISTER, protocol_register, &proto_udp6);
 
-/*
- * Retrieves the source address for the socket <fd>, with <dir> indicating
- * if we're a listener (=0) or an initiator (!=0). It returns 0 in case of
- * success, -1 in case of error. The socket's source address is stored in
- * <sa> for <salen> bytes.
- */
-int udp_get_src(int fd, struct sockaddr *sa, socklen_t salen, int dir)
-{
-	int ret;
-
-	ret = sock_get_src(fd, sa, salen, dir);
-	if (!ret)
-		sa->sa_family = AF_CUST_UDP4;
-
-	return ret;
-}
-
-/*
- * Retrieves the source address for the socket <fd>, with <dir> indicating
- * if we're a listener (=0) or an initiator (!=0). It returns 0 in case of
- * success, -1 in case of error. The socket's source address is stored in
- * <sa> for <salen> bytes.
- */
-int udp6_get_src(int fd, struct sockaddr *sa, socklen_t salen, int dir)
-{
-	int ret;
-
-	ret = sock_get_src(fd, sa, salen, dir);
-	if (!ret)
-		sa->sa_family = AF_CUST_UDP6;
-
-	return ret;
-}
-
-/*
- * Retrieves the original destination address for the socket <fd>, with <dir>
- * indicating if we're a listener (=0) or an initiator (!=0). In the case of a
- * listener, if the original destination address was translated, the original
- * address is retrieved. It returns 0 in case of success, -1 in case of error.
- * The socket's source address is stored in <sa> for <salen> bytes.
- */
-int udp_get_dst(int fd, struct sockaddr *sa, socklen_t salen, int dir)
-{
-	int ret;
-
-	ret = sock_inet_get_dst(fd, sa, salen, dir);
-	if (!ret)
-		sa->sa_family = AF_CUST_UDP4;
-
-	return ret;
-}
-
-/*
- * Retrieves the original destination address for the socket <fd>, with <dir>
- * indicating if we're a listener (=0) or an initiator (!=0). In the case of a
- * listener, if the original destination address was translated, the original
- * address is retrieved. It returns 0 in case of success, -1 in case of error.
- * The socket's source address is stored in <sa> for <salen> bytes.
- */
-int udp6_get_dst(int fd, struct sockaddr *sa, socklen_t salen, int dir)
-{
-	int ret;
-
-	ret = sock_get_dst(fd, sa, salen, dir);
-	if (!ret)
-		sa->sa_family = AF_CUST_UDP6;
-
-	return ret;
-}
-
 /* This function tries to bind a UDPv4/v6 listener. It may return a warning or
  * an error message in <errmsg> if the message is at most <errlen> bytes long
  * (including '\0'). Note that <errmsg> may be NULL if <errlen> is also zero.
diff --git a/src/proto_uxst.c b/src/proto_uxst.c
index 0b8e176..0dd03f8 100644
--- a/src/proto_uxst.c
+++ b/src/proto_uxst.c
@@ -52,20 +52,13 @@
 	.sock_domain = PF_UNIX,
 	.sock_type = SOCK_STREAM,
 	.sock_prot = 0,
-	.sock_family = AF_UNIX,
-	.sock_addrlen = sizeof(struct sockaddr_un),
-	.l3_addrlen = sizeof(((struct sockaddr_un*)0)->sun_path),/* path len */
 	.accept = &listener_accept,
 	.connect = &uxst_connect_server,
-	.bind = sock_unix_bind_receiver,
 	.listen = uxst_bind_listener,
 	.enable_all = enable_all_listeners,
 	.disable_all = disable_all_listeners,
-	.get_src = sock_get_src,
-	.get_dst = sock_get_dst,
 	.pause = uxst_pause_listener,
 	.add = uxst_add_listener,
-	.addrcmp = sock_unix_addrcmp,
 	.listeners = LIST_HEAD_INIT(proto_unix.listeners),
 	.nb_listeners = 0,
 };