]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
add listener to tracking structure
authorAlan T. DeKok <aland@freeradius.org>
Thu, 5 Feb 2026 18:28:42 +0000 (13:28 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 5 Feb 2026 18:28:42 +0000 (13:28 -0500)
which is easier than the alternatives of adding it to all of the
other APIs

src/lib/io/master.c
src/lib/io/master.h

index 73cb8d5b4d5760cd66262e370caf9e6c3f47187f..ceb1ee08fa498ff59d3dd42a8dbb5a98a90a6d9a 100644 (file)
@@ -1085,7 +1085,7 @@ static fr_io_client_t *client_alloc(TALLOC_CTX *ctx, fr_io_client_state_t state,
 }
 
 
-static fr_io_track_t *fr_io_track_add(fr_io_client_t *client,
+static fr_io_track_t *fr_io_track_add(fr_listen_t const *li, fr_io_client_t *client,
                                      fr_io_address_t *address,
                                      uint8_t const *packet, size_t packet_len,
                                      fr_time_t recv_time, bool *is_dup)
@@ -1112,6 +1112,7 @@ static fr_io_track_t *fr_io_track_add(fr_io_client_t *client,
                my_address->radclient = client->radclient;
        }
 
+       track->li = li;
        track->client = client;
 
        track->timestamp = recv_time;
@@ -1709,7 +1710,7 @@ have_client:
                        static  fr_rate_limit_t tracking_failed;
                        bool    is_dup = false;
 
-                       track = fr_io_track_add(client, &address, buffer, packet_len, recv_time, &is_dup);
+                       track = fr_io_track_add(li, client, &address, buffer, packet_len, recv_time, &is_dup);
                        if (!track) {
                                RATE_LIMIT_LOCAL(thread ? &thread->rate_limit.tracking_failed : &tracking_failed,
                                                 ERROR, "Failed tracking packet from client %s - discarding it",
@@ -1954,7 +1955,7 @@ static int mod_inject(fr_listen_t *li, uint8_t const *buffer, size_t buffer_len,
        /*
         *      Track this packet, because that's what mod_read expects.
         */
-       track = fr_io_track_add(connection->client, connection->address,
+       track = fr_io_track_add(li, connection->client, connection->address,
                                buffer, buffer_len, recv_time, &is_dup);
        if (!track) {
                DEBUG2("Failed injecting packet to tracking table");
@@ -3304,6 +3305,8 @@ fr_io_track_t *fr_master_io_track_alloc(fr_listen_t *li, fr_client_t *radclient,
 
        MEM(track = talloc_zero_pooled_object(client, fr_io_track_t, 1, sizeof(*track) + sizeof(track->address) + 64));
        MEM(track->address = address = talloc_zero(track, fr_io_address_t));
+
+       track->li = li;
        track->client = client;
 
        address->socket.inet.src_port = src_port;
index 4057e7e86fd89ce144caedcd08e7eef4a6ed8cc8..b49508f2f605b6e5e29d3e91f5ecc91faf36cfba 100644 (file)
@@ -39,6 +39,7 @@ typedef struct fr_io_client_s fr_io_client_t;
 
 typedef struct fr_io_track_s {
        fr_rb_node_t                    node;           //!< rbtree node in the tracking tree.
+       fr_listen_t const               *li;            //!< listener associated with this tracking structure
        fr_timer_t                      *ev;            //!< when we clean up this tracking entry
        fr_time_t                       timestamp;      //!< when this packet was received
        fr_time_t                       expires;        //!< when this packet expires