]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: connection: add new src and dst fields
authorWilly Tarreau <w@1wt.eu>
Wed, 17 Jul 2019 12:33:15 +0000 (14:33 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 19 Jul 2019 11:50:09 +0000 (13:50 +0200)
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.

include/proto/connection.h
include/types/connection.h

index af9b777226854e1b99e5875596fe51e2ed8c8ad2..7ee54f2cab1a2c43ee2ccceed59d6ea5da412bc3 100644 (file)
@@ -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 */
index 6609f8b3d7bb3a6dde51da47e436183769fe848b..816e06d0a8edbac5173d9b56543bf8c4818f1a88 100644 (file)
@@ -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 */