mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-03-10 21:38:16 +00:00
MINOR: connection: add new src and dst fields
At the moment we're facing difficulties with connection reuse based on the fact that connections may be allocated very early only to set a target address in transparent mode. With the imminent removal of the legacy mode, the connection reuse by a same stream will not exist anymore and all this awful complexity is not justified anymore. However we still need to be able to assign addresses somewhere. Thus instead of allocating a connection, we'll only place addresses where needed in the stream during operations. But this takes quite some room (typically 128 bytes). This is a nice opportunity for cleaning all this up and dynamically allocatating the addresses fields, which will result in actually saving memory from connection structs since most of the time the client's "to" address is not used and the server's "from" is not used either, thus saving ~256 bytes per end-to-end connection. For now these new "src" and "dst" pointers point to addr.from and addr.to. This will allow us to smoothly update the whole code to use these pointers prior to going further and switching them to pools.
This commit is contained in:
parent
cc4df3b3de
commit
1ef4cbc693
@ -468,6 +468,8 @@ static inline void conn_init(struct connection *conn)
|
||||
conn->send_wait = NULL;
|
||||
conn->recv_wait = NULL;
|
||||
conn->idle_time = 0;
|
||||
conn->src = &conn->addr.from;
|
||||
conn->dst = &conn->addr.to;
|
||||
}
|
||||
|
||||
/* sets <owner> as the connection's owner */
|
||||
|
@ -459,6 +459,8 @@ struct connection {
|
||||
|
||||
/* third cache line and beyond */
|
||||
void (*destroy_cb)(struct connection *conn); /* callback to notify of imminent death of the connection */
|
||||
struct sockaddr_storage *src; /* source address (pool), when known, otherwise NULL */
|
||||
struct sockaddr_storage *dst; /* destination address (pool), when known, otherwise NULL */
|
||||
struct {
|
||||
struct sockaddr_storage from; /* client address, or address to spoof when connecting to the server */
|
||||
struct sockaddr_storage to; /* address reached by the client, or address to connect to */
|
||||
|
Loading…
Reference in New Issue
Block a user