]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
pass instance / thread instance to track_create
authorAlan T. DeKok <aland@freeradius.org>
Fri, 27 Aug 2021 14:22:14 +0000 (10:22 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 27 Aug 2021 15:20:18 +0000 (11:20 -0400)
in preparation for doing more aggressive cleanups of tracking
entries

src/lib/io/app_io.h
src/lib/io/base.h
src/lib/io/master.c
src/listen/dhcpv4/proto_dhcpv4_udp.c
src/listen/dhcpv6/proto_dhcpv6_udp.c
src/listen/radius/proto_radius_tcp.c
src/listen/radius/proto_radius_udp.c
src/listen/tacacs/proto_tacacs_tcp.c
src/listen/vmps/proto_vmps_udp.c

index b040a083b8891a9f91d244b26088b4fb161e8350..f57db729c0420ca27f87b49938501139a0600493 100644 (file)
@@ -64,8 +64,8 @@ typedef struct {
 
        fr_io_nak_t                     nak;            //!< Function to send a NAK.
 
-       fr_io_track_create_t            track;          //!< create a tracking structure
-       fr_io_track_cmp_t               compare;        //!< compare two tracking structures
+       fr_io_track_create_t            track_create;   //!< create a tracking structure
+       fr_io_track_cmp_t               track_compare;  //!< compare two tracking structures
 
        fr_io_connection_set_t          connection_set; //!< set src/dst IP/port of a connection
        fr_io_network_get_t             network_get;    //!< get dynamic network information
index 25633ed342d38be3327a95302240a09564b6b1f4..8d9d90b1cb959b01a784af457dee449510d522fd 100644 (file)
@@ -261,6 +261,9 @@ typedef void (*fr_io_data_vnode_t)(fr_listen_t *li, uint32_t fflags);
  *
  * For passing to fr_io_track_cmp_t
  *
+ * @param[in] instance         the context for this function
+ * @param[in] thread_instance  the thread instance for this function
+ * @param[in] client           the client associated with this packet
  * @param[in] ctx              The parent talloc ctx
  * @param[in] packet           The packet being summarized
  * @param[in] packet_len       Length of the packet being summarized
@@ -268,7 +271,7 @@ typedef void (*fr_io_data_vnode_t)(fr_listen_t *li, uint32_t fflags);
  *     - NULL on error
  *     - !NULL the packet tracking structure
  */
-typedef void *(*fr_io_track_create_t)(TALLOC_CTX *ctx, uint8_t const *packet, size_t packet_len);
+typedef void *(*fr_io_track_create_t)(void const *instance, void *thread_instance, RADCLIENT *client, TALLOC_CTX *ctx, uint8_t const *packet, size_t packet_len);
 
 /** Compare two tracking structures for storing in a duplicate detection tree.
  *
index fd3672645f862e176136f32e1ef7b4007e916056..003bb5933a6d6ffd146aa2e85b1ae1840adfaab5 100644 (file)
@@ -280,10 +280,10 @@ static int8_t track_cmp(void const *one, void const *two)
        /*
         *      Call the per-protocol comparison function.
         */
-       ret = a->client->inst->app_io->compare(a->client->inst->app_io_instance,
-                                              a->client->thread->child->thread_instance,
-                                              a->client->radclient,
-                                              a->packet, b->packet);
+       ret = a->client->inst->app_io->track_compare(a->client->inst->app_io_instance,
+                                                    a->client->thread->child->thread_instance,
+                                                    a->client->radclient,
+                                                    a->packet, b->packet);
        return CMP(ret, 0);
 }
 
@@ -306,10 +306,10 @@ static int8_t track_connected_cmp(void const *one, void const *two)
         *      Note that we pass the connection "client", as
         *      we may do negotiation specific to this connection.
         */
-       ret = a->client->inst->app_io->compare(a->client->inst->app_io_instance,
-                                              a->client->connection->child->thread_instance,
-                                              a->client->connection->client->radclient,
-                                              a->packet, b->packet);
+       ret = a->client->inst->app_io->track_compare(a->client->inst->app_io_instance,
+                                                    a->client->connection->child->thread_instance,
+                                                    a->client->connection->client->radclient,
+                                                    a->packet, b->packet);
        return CMP(ret, 0);
 }
 
@@ -890,7 +890,10 @@ static fr_io_track_t *fr_io_track_add(fr_io_client_t *client,
         *      We are checking for duplicates, see if there is a dup
         *      already in the tree.
         */
-       track->packet = client->inst->app_io->track(track, packet, packet_len);
+       track->packet = client->inst->app_io->track_create(client->inst->app_io_instance,
+                                                          client->thread->child->thread_instance,
+                                                          client->radclient,
+                                                          track, packet, packet_len);
        if (!track->packet) {
                talloc_free(track);
                return NULL;
@@ -1463,7 +1466,7 @@ do_read:
                 *      Create the packet tracking table for this client.
                 */
                if (inst->app_io->track_duplicates) {
-                       fr_assert(inst->app_io->compare != NULL);
+                       fr_assert(inst->app_io->track_compare != NULL);
                        MEM(client->table = fr_rb_inline_talloc_alloc(client, fr_io_track_t, node, track_cmp, NULL));
                }
 
@@ -2581,8 +2584,8 @@ static int mod_bootstrap(void *instance, CONF_SECTION *cs)
        } else {
                FR_TIME_DELTA_BOUND_CHECK("cleanup_delay", inst->cleanup_delay, >=, fr_time_delta_from_sec(1));
 
-               if (!inst->app_io->track) {
-                       cf_log_err(inst->app_io_conf, "Internal error: 'track_duplicates' is set, but there is no 'track' function");
+               if (!inst->app_io->track_create) {
+                       cf_log_err(inst->app_io_conf, "Internal error: 'track_duplicates' is set, but there is no 'track create' function");
                        return -1;
                }
        }
index db92ca929f4a70a1353c6b62dc9da7e26cf5e633..6e53ab05a7a60e6ca327db974e2ce8dfb270f22c 100644 (file)
@@ -580,7 +580,8 @@ static int mod_fd_set(fr_listen_t *li, int fd)
 }
 
 
-static void *mod_track_create(TALLOC_CTX *ctx, uint8_t const *packet, size_t packet_len)
+static void *mod_track_create(UNUSED void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
+                             TALLOC_CTX *ctx, uint8_t const *packet, size_t packet_len)
 {
        proto_dhcpv4_track_t *track;
        dhcp_packet_t const *dhcp = (dhcp_packet_t const *) packet;
@@ -618,8 +619,8 @@ static void *mod_track_create(TALLOC_CTX *ctx, uint8_t const *packet, size_t pac
        return track;
 }
 
-static int mod_compare(UNUSED void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
-                      void const *one, void const *two)
+static int mod_track_compare(UNUSED void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
+                            void const *one, void const *two)
 {
        int ret;
        proto_dhcpv4_track_t const *a = one;
@@ -817,8 +818,8 @@ fr_app_io_t proto_dhcpv4_udp = {
        .read                   = mod_read,
        .write                  = mod_write,
        .fd_set                 = mod_fd_set,
-       .track                  = mod_track_create,
-       .compare                = mod_compare,
+       .track_create           = mod_track_create,
+       .track_compare          = mod_track_compare,
        .connection_set         = mod_connection_set,
        .network_get            = mod_network_get,
        .client_find            = mod_client_find,
index 6b6ab424784e5103ac9fed535c71cb66ae01269f..5c05a41ffc13ab095545286f1463f1f0cab3aeec 100644 (file)
@@ -379,7 +379,8 @@ static int mod_fd_set(fr_listen_t *li, int fd)
        return 0;
 }
 
-static void *mod_track_create(TALLOC_CTX *ctx, uint8_t const *packet, size_t packet_len)
+static void *mod_track_create(UNUSED void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
+                             TALLOC_CTX *ctx, uint8_t const *packet, size_t packet_len)
 {
        proto_dhcpv6_track_t *track;
        uint8_t const *option;
@@ -430,8 +431,8 @@ static void *mod_track_create(TALLOC_CTX *ctx, uint8_t const *packet, size_t pac
 }
 
 
-static int mod_compare(UNUSED void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
-                      void const *one, void const *two)
+static int mod_track_compare(UNUSED void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
+                            void const *one, void const *two)
 {
        int ret;
        proto_dhcpv6_track_t const *a = one;
@@ -665,8 +666,8 @@ fr_app_io_t proto_dhcpv6_udp = {
        .read                   = mod_read,
        .write                  = mod_write,
        .fd_set                 = mod_fd_set,
-       .track                  = mod_track_create,
-       .compare                = mod_compare,
+       .track_create           = mod_track_create,
+       .track_compare          = mod_track_compare,
        .connection_set         = mod_connection_set,
        .network_get            = mod_network_get,
        .client_find            = mod_client_find,
index b03fd554911c5d0045504b606e5f865b6bbc5640..6784d52d25d93e7f7c3ac2bf5cc64ee3ea6a6063 100644 (file)
@@ -345,8 +345,8 @@ static int mod_fd_set(fr_listen_t *li, int fd)
        return 0;
 }
 
-static int mod_compare(void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
-                      void const *one, void const *two)
+static int mod_track_compare(void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
+                            void const *one, void const *two)
 {
        int ret;
        proto_radius_tcp_t const *inst = talloc_get_type_abort_const(instance, proto_radius_tcp_t);
@@ -594,7 +594,7 @@ fr_app_io_t proto_radius_tcp = {
        .read                   = mod_read,
        .write                  = mod_write,
        .fd_set                 = mod_fd_set,
-       .compare                = mod_compare,
+       .track_compare          = mod_track_compare,
        .connection_set         = mod_connection_set,
        .network_get            = mod_network_get,
        .client_find            = mod_client_find,
index bd648f45b7d8097f8b612d33643e7338e5ac239b..6b0877aac3ec62c3d3e7c1013c96dcda5c77b981 100644 (file)
@@ -379,13 +379,14 @@ static int mod_fd_set(fr_listen_t *li, int fd)
        return 0;
 }
 
-static void *mod_track_create(TALLOC_CTX *ctx, uint8_t const *packet, UNUSED size_t packet_len)
+static void *mod_track_create(void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
+                             TALLOC_CTX *ctx, uint8_t const *packet, UNUSED size_t packet_len)
 {
        return talloc_memdup(ctx, packet, RADIUS_HEADER_LENGTH);
 }
 
-static int mod_compare(void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
-                      void const *one, void const *two)
+static int mod_track_compare(void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
+                            void const *one, void const *two)
 {
        int ret;
        proto_radius_udp_t const *inst = talloc_get_type_abort_const(instance, proto_radius_udp_t);
@@ -543,8 +544,8 @@ fr_app_io_t proto_radius_udp = {
        .read                   = mod_read,
        .write                  = mod_write,
        .fd_set                 = mod_fd_set,
-       .track                  = mod_track_create,
-       .compare                = mod_compare,
+       .track_create           = mod_track_create,
+       .track_compare          = mod_track_compare,
        .connection_set         = mod_connection_set,
        .network_get            = mod_network_get,
        .client_find            = mod_client_find,
index 07ff4572da1180a5e69fbe44e6a39743d59c658a..03a033a289bbc718bbd60da963761f9da877215d 100644 (file)
@@ -318,7 +318,8 @@ static int mod_fd_set(fr_listen_t *li, int fd)
        return 0;
 }
 
-static void *mod_track_create(TALLOC_CTX *ctx, uint8_t const *buffer, UNUSED size_t buffer_len)
+static void *mod_track_create(UNUSED void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
+                             TALLOC_CTX *ctx, uint8_t const *buffer, UNUSED size_t buffer_len)
 {
        fr_tacacs_packet_t const *pkt = (fr_tacacs_packet_t const *) buffer;
        proto_tacacs_track_t     *track;
@@ -357,8 +358,8 @@ static void *mod_track_create(TALLOC_CTX *ctx, uint8_t const *buffer, UNUSED siz
        return track;
 }
 
-static int mod_compare(UNUSED void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
-                      void const *one, void const *two)
+static int mod_track_compare(UNUSED void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
+                            void const *one, void const *two)
 {
        int ret;
        proto_tacacs_track_t const *a = talloc_get_type_abort_const(one, proto_tacacs_track_t);
@@ -487,8 +488,8 @@ fr_app_io_t proto_tacacs_tcp = {
        .read                   = mod_read,
        .write                  = mod_write,
        .fd_set                 = mod_fd_set,
-       .track                  = mod_track_create,
-       .compare                = mod_compare,
+       .track_create           = mod_track_create,
+       .track_compare          = mod_track_compare,
        .connection_set         = mod_connection_set,
        .network_get            = mod_network_get,
        .client_find            = mod_client_find,
index f36692d74b9f7af297a82e0325ed663cb59adf54..42f7d7abf99f7a6dba715644cb794e6ee1e4fa2d 100644 (file)
@@ -348,7 +348,8 @@ static int mod_fd_set(fr_listen_t *li, int fd)
        return 0;
 }
 
-static void *mod_track_create(TALLOC_CTX *ctx, uint8_t const *buffer, size_t buffer_len)
+static void *mod_track_create(UNUSED void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
+                             TALLOC_CTX *ctx, uint8_t const *buffer, size_t buffer_len)
 {
        proto_vmps_track_t  *track;
 
@@ -370,8 +371,8 @@ static void *mod_track_create(TALLOC_CTX *ctx, uint8_t const *buffer, size_t buf
        return track;
 }
 
-static int mod_compare(UNUSED void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
-                      void const *one, void const *two)
+static int mod_track_compare(UNUSED void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
+                            void const *one, void const *two)
 {
        proto_vmps_track_t const *a = talloc_get_type_abort_const(one, proto_vmps_track_t);
        proto_vmps_track_t const *b = talloc_get_type_abort_const(two, proto_vmps_track_t);
@@ -518,8 +519,8 @@ fr_app_io_t proto_vmps_udp = {
        .read                   = mod_read,
        .write                  = mod_write,
        .fd_set                 = mod_fd_set,
-       .track                  = mod_track_create,
-       .compare                = mod_compare,
+       .track_create           = mod_track_create,
+       .track_compare          = mod_track_compare,
        .connection_set         = mod_connection_set,
        .network_get            = mod_network_get,
        .client_find            = mod_client_find,