[MINOR] Add some tests on sockets family for port remapping and mode transparent.

This commit is contained in:
Emeric Brun 2010-10-22 16:36:33 +02:00 committed by Willy Tarreau
parent ab844ea9e1
commit ec810d1dc7

View File

@ -669,8 +669,10 @@ int assign_server_address(struct session *s)
if (!(s->be->options & PR_O_TRANSP) && !(s->flags & SN_FRT_ADDR_SET)) if (!(s->be->options & PR_O_TRANSP) && !(s->flags & SN_FRT_ADDR_SET))
get_frt_addr(s); get_frt_addr(s);
if (s->frt_addr.ss_family == AF_INET) {
s->srv_addr.sin_addr = ((struct sockaddr_in *)&s->frt_addr)->sin_addr; s->srv_addr.sin_addr = ((struct sockaddr_in *)&s->frt_addr)->sin_addr;
} }
}
/* if this server remaps proxied ports, we'll use /* if this server remaps proxied ports, we'll use
* the port the client connected to with an offset. */ * the port the client connected to with an offset. */
@ -680,7 +682,8 @@ int assign_server_address(struct session *s)
if (s->frt_addr.ss_family == AF_INET) { if (s->frt_addr.ss_family == AF_INET) {
s->srv_addr.sin_port = htons(ntohs(s->srv_addr.sin_port) + s->srv_addr.sin_port = htons(ntohs(s->srv_addr.sin_port) +
ntohs(((struct sockaddr_in *)&s->frt_addr)->sin_port)); ntohs(((struct sockaddr_in *)&s->frt_addr)->sin_port));
} else { }
else if (s->frt_addr.ss_family == AF_INET6) {
s->srv_addr.sin_port = htons(ntohs(s->srv_addr.sin_port) + s->srv_addr.sin_port = htons(ntohs(s->srv_addr.sin_port) +
ntohs(((struct sockaddr_in6 *)&s->frt_addr)->sin6_port)); ntohs(((struct sockaddr_in6 *)&s->frt_addr)->sin6_port));
} }
@ -695,7 +698,9 @@ int assign_server_address(struct session *s)
if (!(s->flags & SN_FRT_ADDR_SET)) if (!(s->flags & SN_FRT_ADDR_SET))
get_frt_addr(s); get_frt_addr(s);
if (s->frt_addr.ss_family == AF_INET) {
memcpy(&s->srv_addr, &s->frt_addr, MIN(sizeof(s->srv_addr), sizeof(s->frt_addr))); memcpy(&s->srv_addr, &s->frt_addr, MIN(sizeof(s->srv_addr), sizeof(s->frt_addr)));
}
/* when we support IPv6 on the backend, we may add other tests */ /* when we support IPv6 on the backend, we may add other tests */
//qfprintf(stderr, "Cannot get original server address.\n"); //qfprintf(stderr, "Cannot get original server address.\n");
//return SRV_STATUS_INTERNAL; //return SRV_STATUS_INTERNAL;
@ -846,7 +851,7 @@ static void assign_tproxy_address(struct session *s)
break; break;
case SRV_TPROXY_CLI: case SRV_TPROXY_CLI:
case SRV_TPROXY_CIP: case SRV_TPROXY_CIP:
/* FIXME: what can we do if the client connects in IPv6 ? */ /* FIXME: what can we do if the client connects in IPv6 or unix socket ? */
s->from_addr = *(struct sockaddr_in *)&s->cli_addr; s->from_addr = *(struct sockaddr_in *)&s->cli_addr;
break; break;
case SRV_TPROXY_DYN: case SRV_TPROXY_DYN:
@ -871,7 +876,7 @@ static void assign_tproxy_address(struct session *s)
break; break;
case PR_O_TPXY_CLI: case PR_O_TPXY_CLI:
case PR_O_TPXY_CIP: case PR_O_TPXY_CIP:
/* FIXME: what can we do if the client connects in IPv6 ? */ /* FIXME: what can we do if the client connects in IPv6 or socket unix? */
s->from_addr = *(struct sockaddr_in *)&s->cli_addr; s->from_addr = *(struct sockaddr_in *)&s->cli_addr;
break; break;
case PR_O_TPXY_DYN: case PR_O_TPXY_DYN: