]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: stream: Use backend stream-interface dst address instead of target_addr
authorChristopher Faulet <cfaulet@haproxy.com>
Wed, 27 Oct 2021 07:34:56 +0000 (09:34 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Wed, 27 Oct 2021 09:35:59 +0000 (11:35 +0200)
target_addr field in the stream structure is removed. The backend
stream-interface destination address is now used.

include/haproxy/stream-t.h
src/backend.c
src/cli.c
src/dns.c
src/hlua.c
src/http_client.c
src/peers.c
src/sink.c
src/stream.c

index 67b04e2d7201761536badf98396d8ba994abb489..b8e31658f18e87a48eb69fbc4a3be0b6c83f7a1e 100644 (file)
@@ -153,7 +153,6 @@ struct stream {
                struct stktable *table;
        } store[8];                     /* tracked stickiness values to store */
 
-       struct sockaddr_storage *target_addr;   /* the address to join if not null */
        struct stkctr stkctr[MAX_SESS_STKCTR];  /* content-aware stick counters */
 
        struct strm_flt strm_flt;               /* current state of filters active on this stream */
index 11f5df112570813a880c507f2fde10774a81a00b..f170cb4f12ab0d14feb2f88d8c908211000db74e 100644 (file)
@@ -1267,7 +1267,7 @@ int connect_server(struct stream *s)
        srv = objt_server(s->target);
 
        if (!(s->flags & SF_ADDR_SET)) {
-               err = alloc_dst_address(&s->target_addr, srv, s);
+               err = alloc_dst_address(&s->si[1].dst, srv, s);
                if (err != SRV_STATUS_OK)
                        return SF_ERR_INTERNAL;
 
@@ -1312,7 +1312,7 @@ int connect_server(struct stream *s)
 
        /* 3. destination address */
        if (srv && (!is_addr(&srv->addr) || srv->flags & SRV_F_MAPPORTS))
-               hash_params.dst_addr = s->target_addr;
+               hash_params.dst_addr = s->si[1].dst;
 
        /* 4. source address */
        hash_params.src_addr = bind_addr;
@@ -1534,7 +1534,7 @@ skip_reuse:
                return SF_ERR_RESOURCE;
 
        /* copy the target address into the connection */
-       *srv_conn->dst = *s->target_addr;
+       *srv_conn->dst = *s->si[1].dst;
 
        /* Copy network namespace from client connection */
        srv_conn->proxy_netns = cli_conn ? cli_conn->proxy_netns : NULL;
@@ -1783,7 +1783,7 @@ int srv_redispatch_connect(struct stream *s)
                if (((s->flags & (SF_DIRECT|SF_FORCE_PRST)) == SF_DIRECT) &&
                    (s->be->options & PR_O_REDISP)) {
                        s->flags &= ~(SF_DIRECT | SF_ASSIGNED | SF_ADDR_SET);
-                       sockaddr_free(&s->target_addr);
+                       sockaddr_free(&s->si[1].dst);
                        goto redispatch;
                }
 
index 6a46f138c702930b603973ae39418d28f3f5aec7..36d11a4acb5bd29acb6de9d1e56dbe10f3a8417f 100644 (file)
--- a/src/cli.c
+++ b/src/cli.c
@@ -2572,7 +2572,7 @@ int pcli_wait_for_response(struct stream *s, struct channel *rep, int an_bit)
                        s->srv_conn = NULL;
                }
 
-               sockaddr_free(&s->target_addr);
+               sockaddr_free(&s->si[1].dst);
 
                s->si[1].state     = s->si[1].prev_state = SI_ST_INI;
                s->si[1].err_type  = SI_ET_NONE;
index 818c4e772f36268a65fce10fed107edff4d29755..5a0724b656bb60bedf3bb3e2dd29a7c9c1e299e0 100644 (file)
--- a/src/dns.c
+++ b/src/dns.c
@@ -909,7 +909,7 @@ static struct appctx *dns_session_create(struct dns_session *ds)
 
 
        s->target = &ds->dss->srv->obj_type;
-       if (!sockaddr_alloc(&s->target_addr, &ds->dss->srv->addr, sizeof(ds->dss->srv->addr)))
+       if (!sockaddr_alloc(&s->si[1].dst, &ds->dss->srv->addr, sizeof(ds->dss->srv->addr)))
                goto out_free_strm;
        s->flags = SF_ASSIGNED|SF_ADDR_SET;
        s->si[1].flags |= SI_FL_NOLINGER;
index ab92ff79b862282ce9edd478f3b2300e4cc57caa..f433a4fb7d230048e89e1f901f445c366721bf71 100644 (file)
@@ -2553,7 +2553,7 @@ __LJMP static int hlua_socket_getpeername(struct lua_State *L)
        struct xref *peer;
        struct appctx *appctx;
        struct stream_interface *si;
-       struct stream *s;
+       const struct sockaddr_storage *dst;
        int ret;
 
        MAY_LJMP(check_args(L, 1, "getpeername"));
@@ -2574,15 +2574,14 @@ __LJMP static int hlua_socket_getpeername(struct lua_State *L)
        }
        appctx = container_of(peer, struct appctx, ctx.hlua_cosocket.xref);
        si = appctx->owner;
-       s = si_strm(si);
-
-       if (!s->target_addr) {
+       dst = si_dst(si_opposite(si));
+       if (!dst) {
                xref_unlock(&socket->xref, peer);
                lua_pushnil(L);
                return 1;
        }
 
-       ret = MAY_LJMP(hlua_socket_info(L, s->target_addr));
+       ret = MAY_LJMP(hlua_socket_info(L, dst));
        xref_unlock(&socket->xref, peer);
        return ret;
 }
@@ -2781,7 +2780,7 @@ __LJMP static int hlua_socket_connect(struct lua_State *L)
        si = appctx->owner;
        s = si_strm(si);
 
-       if (!sockaddr_alloc(&s->target_addr, addr, sizeof(*addr))) {
+       if (!sockaddr_alloc(&si_opposite(si)->dst, addr, sizeof(*addr))) {
                xref_unlock(&socket->xref, peer);
                WILL_LJMP(luaL_error(L, "connect: internal error"));
        }
index 4d1ae053198e0d59d6ab08a252837cdc59d9758b..7756e821176cb1f7080f9f424cd50fb2b02ad2c7 100644 (file)
@@ -372,7 +372,7 @@ struct appctx *httpclient_start(struct httpclient *hc)
                goto out_free_appctx;
        }
 
-       if (!sockaddr_alloc(&s->target_addr, &hc->dst, sizeof(hc->dst))) {
+       if (!sockaddr_alloc(&s->si[1].dst, &hc->dst, sizeof(hc->dst))) {
                ha_alert("httpclient: Failed to initialize stream in %s:%d.\n", __FUNCTION__, __LINE__);
                goto out_free_stream;
        }
index 09aacca32cb172e6fc798b40e51e7599a901ec6e..94ef22e6840310810f5a8da95fb17bbbbc3059e3 100644 (file)
@@ -3215,7 +3215,7 @@ static struct appctx *peer_session_create(struct peers *peers, struct peer *peer
 
        /* initiate an outgoing connection */
        s->target = peer_session_target(peer, s);
-       if (!sockaddr_alloc(&s->target_addr, &peer->addr, sizeof(peer->addr)))
+       if (!sockaddr_alloc(&s->si[1].dst, &peer->addr, sizeof(peer->addr)))
                goto out_free_strm;
        s->flags = SF_ASSIGNED|SF_ADDR_SET;
        s->si[1].flags |= SI_FL_NOLINGER;
index d694e58182a7a741c039a77570346942b4c8ff7e..9e4da9c1cd309617bafce5c7782349bcfeff16e2 100644 (file)
@@ -661,7 +661,7 @@ static struct appctx *sink_forward_session_create(struct sink *sink, struct sink
 
 
        s->target = &sft->srv->obj_type;
-       if (!sockaddr_alloc(&s->target_addr, &sft->srv->addr, sizeof(sft->srv->addr)))
+       if (!sockaddr_alloc(&s->si[1].dst, &sft->srv->addr, sizeof(sft->srv->addr)))
                goto out_free_strm;
        s->flags = SF_ASSIGNED|SF_ADDR_SET;
        s->si[1].flags |= SI_FL_NOLINGER;
index 7aaa0a0500366f4587cb744566e75e9506ce7b45..6e025a3a1f2ecc79fb02c631644054bdb7ed5746 100644 (file)
@@ -491,7 +491,6 @@ struct stream *stream_new(struct session *sess, enum obj_type *origin, struct bu
 
        stream_init_srv_conn(s);
        s->target = sess->listener ? sess->listener->default_target : NULL;
-       s->target_addr = NULL;
 
        s->pend_pos = NULL;
        s->priority_class = 0;
@@ -743,7 +742,6 @@ static void stream_free(struct stream *s)
                session_free(sess);
        }
 
-       sockaddr_free(&s->target_addr);
        sockaddr_free(&s->si[0].src);
        sockaddr_free(&s->si[0].dst);
        sockaddr_free(&s->si[1].src);