enum {
SESS_FL_NONE = 0x00000000, /* nothing */
SESS_FL_PREFER_LAST = 0x00000001, /* NTML authent, we should reuse last conn */
- SESS_FL_ADDR_FROM_SET = 0x00000002,
- SESS_FL_ADDR_TO_SET = 0x00000004,
};
/* max number of idle server connections kept attached to a session */
{
struct connection *cli_conn = objt_conn(sess->origin);
- if (sess->flags & SESS_FL_ADDR_FROM_SET)
+ if (sess->src)
return sess->src;
if (cli_conn && conn_get_src(cli_conn))
return conn_src(cli_conn);
{
struct connection *cli_conn = objt_conn(sess->origin);
- if (sess->flags & SESS_FL_ADDR_TO_SET)
+ if (sess->dst)
return sess->dst;
if (cli_conn && conn_get_dst(cli_conn))
return conn_dst(cli_conn);
struct connection *cli_conn = objt_conn(sess->origin);
const struct sockaddr_storage *src = NULL;
- if (sess->flags & SESS_FL_ADDR_FROM_SET)
+ if (sess->src)
return 1;
if (cli_conn && conn_get_src(cli_conn))
if (!sockaddr_alloc(&sess->src, src, sizeof(*src)))
return 0;
- sess->flags |= SESS_FL_ADDR_FROM_SET;
return 1;
}
struct connection *cli_conn = objt_conn(sess->origin);
const struct sockaddr_storage *dst = NULL;
- if (sess->flags & SESS_FL_ADDR_TO_SET)
+ if (sess->dst)
return 1;
if (cli_conn && conn_get_dst(cli_conn))
if (!sockaddr_alloc(&sess->dst, dst, sizeof(*dst)))
return 0;
- sess->flags |= SESS_FL_ADDR_TO_SET;
return 1;
}
((struct sockaddr_in *)sess->dst)->sin_family = AF_INET;
((struct sockaddr_in *)sess->dst)->sin_addr.s_addr = htonl(dst3);
((struct sockaddr_in *)sess->dst)->sin_port = htons(dport);
- sess->flags |= SESS_FL_ADDR_FROM_SET | SESS_FL_ADDR_TO_SET;
}
else if (memcmp(line, "TCP6 ", 5) == 0) {
u32 sport, dport;
((struct sockaddr_in6 *)sess->dst)->sin6_family = AF_INET6;
memcpy(&((struct sockaddr_in6 *)sess->dst)->sin6_addr, &dst3, sizeof(struct in6_addr));
((struct sockaddr_in6 *)sess->dst)->sin6_port = htons(dport);
- sess->flags |= SESS_FL_ADDR_FROM_SET | SESS_FL_ADDR_TO_SET;
}
else if (memcmp(line, "UNKNOWN\r\n", 9) == 0) {
/* This can be a UNIX socket forwarded by an haproxy upstream */
((struct sockaddr_in *)sess->dst)->sin_family = AF_INET;
((struct sockaddr_in *)sess->dst)->sin_addr.s_addr = hdr_v2->addr.ip4.dst_addr;
((struct sockaddr_in *)sess->dst)->sin_port = hdr_v2->addr.ip4.dst_port;
- sess->flags |= SESS_FL_ADDR_FROM_SET | SESS_FL_ADDR_TO_SET;
tlv_offset = PP2_HEADER_LEN + PP2_ADDR_LEN_INET;
break;
case 0x21: /* TCPv6 */
((struct sockaddr_in6 *)sess->dst)->sin6_family = AF_INET6;
memcpy(&((struct sockaddr_in6 *)sess->dst)->sin6_addr, hdr_v2->addr.ip6.dst_addr, 16);
((struct sockaddr_in6 *)sess->dst)->sin6_port = hdr_v2->addr.ip6.dst_port;
- sess->flags |= SESS_FL_ADDR_FROM_SET | SESS_FL_ADDR_TO_SET;
tlv_offset = PP2_HEADER_LEN + PP2_ADDR_LEN_INET6;
break;
}
((struct sockaddr_in *)sess->dst)->sin_family = AF_INET;
((struct sockaddr_in *)sess->dst)->sin_addr.s_addr = hdr_ip4->ip_dst.s_addr;
((struct sockaddr_in *)sess->dst)->sin_port = hdr_tcp->dest;
-
- sess->flags |= SESS_FL_ADDR_FROM_SET | SESS_FL_ADDR_TO_SET;
}
else if (ip_ver == 6) {
struct ip6_hdr *hdr_ip6;
((struct sockaddr_in6 *)sess->dst)->sin6_family = AF_INET6;
((struct sockaddr_in6 *)sess->dst)->sin6_addr = hdr_ip6->ip6_dst;
((struct sockaddr_in6 *)sess->dst)->sin6_port = hdr_tcp->dest;
-
- sess->flags |= SESS_FL_ADDR_FROM_SET | SESS_FL_ADDR_TO_SET;
}
else {
/* The protocol does not match something known (IPv4/IPv6) */