]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
remove is_dup parameter from app_io mod_read()
authorAlan T. DeKok <aland@freeradius.org>
Wed, 14 Jun 2023 01:35:21 +0000 (21:35 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 14 Jun 2023 01:53:48 +0000 (21:53 -0400)
nothing used it, so it's not necessary.

The base IO routines should just read packets.  The code which adds
tracking should instead check for duplicates.

20 files changed:
src/lib/io/base.h
src/lib/io/channel.h
src/lib/io/master.c
src/lib/io/network.c
src/lib/io/worker.c
src/listen/arp/proto_arp_ethernet.c
src/listen/bfd/proto_bfd_udp.c
src/listen/control/proto_control_unix.c
src/listen/cron/proto_cron_crontab.c
src/listen/detail/proto_detail_work.c
src/listen/dhcpv4/proto_dhcpv4_udp.c
src/listen/dhcpv6/proto_dhcpv6_udp.c
src/listen/dns/proto_dns_udp.c
src/listen/ldap_sync/proto_ldap_sync_ldap.c
src/listen/load/proto_load_step.c
src/listen/radius/#proto_radius_tcp.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 20f0b5814ff8322cc37cfc90484e95752aed3c49..ec2d924bd1308c945d2ba270410ec2a57da5f5e8 100644 (file)
@@ -170,12 +170,11 @@ typedef size_t (*fr_io_nak_t)(fr_listen_t *li, void *packet_ctx, uint8_t *const
  * @param[in] buffer_len       the length of the buffer
  * @param[out] leftover                bytes left in the buffer after reading a full packet.
  * @param[out] priority                priority of this packet (0 = low, 65535 = high)
- * @param[out] dup             is it dup or new
  * @return
  *     - <0 on error
  *     - >=0 length of the data read or written.
  */
-typedef ssize_t (*fr_io_data_read_t)(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time, uint8_t *buffer, size_t buffer_len, size_t *leftover, uint32_t *priority, bool *dup);
+typedef ssize_t (*fr_io_data_read_t)(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time, uint8_t *buffer, size_t buffer_len, size_t *leftover, uint32_t *priority);
 
 /** Write a socket.
  *
index 87721b276bccfc70b8db43d7489f819b42a32096..2caa99839ef3f484e2bbcb3aec4800e2761ba1ab 100644 (file)
@@ -128,7 +128,6 @@ typedef struct {
        union {
                struct {
                        fr_time_t               recv_time;      //!< time original request was received (network -> worker)
-                       bool                    is_dup;         //!< dup, new, etc.
                } request;
 
                struct {
index 6b1fa268055992a2988ebafcfb6180d4869c30e0..05e9ad6e5603985ab279069859bb98307efd561a 100644 (file)
@@ -1208,7 +1208,7 @@ static int8_t alive_client_cmp(void const *one, void const *two)
  *  The app_io->read does the transport-specific data read.
  */
 static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p,
-                       uint8_t *buffer, size_t buffer_len, size_t *leftover, uint32_t *priority, bool *is_dup)
+                       uint8_t *buffer, size_t buffer_len, size_t *leftover, uint32_t *priority)
 {
        fr_io_instance_t const  *inst;
        fr_io_thread_t          *thread;
@@ -1222,9 +1222,6 @@ static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time
        fr_listen_t             *child;
        int                     value, accept_fd = -1;
 
-       fr_assert(is_dup != NULL);
-       *is_dup = false;
-
        get_inst(li, &inst, &thread, &connection, &child);
 
        track = new_track = NULL;
@@ -1391,7 +1388,7 @@ do_read:
                 *      functions which do all of the TLS work.
                 */
                packet_len = inst->app_io->read(child, (void **) &local_address, &recv_time,
-                                         buffer, buffer_len, leftover, priority, is_dup);
+                                         buffer, buffer_len, leftover, priority);
                if (packet_len <= 0) {
                        return packet_len;
                }
@@ -1569,7 +1566,9 @@ have_client:
                 *      "live" packets.
                 */
                if (!track) {
-                       track = fr_io_track_add(client, &address, buffer, packet_len, recv_time, is_dup);
+                       bool    is_dup = false;
+
+                       track = fr_io_track_add(client, &address, buffer, packet_len, recv_time, &is_dup);
                        if (!track) {
                                DEBUG("Failed tracking packet from client %s - discarding it",
                                      client->radclient->shortname);
@@ -1579,7 +1578,7 @@ have_client:
                        /*
                         *      If there's a cached reply, just send that and don't do anything else.
                         */
-                       if (*is_dup) {
+                       if (is_dup) {
                                fr_network_t *nr;
 
                                if (track->do_not_respond) {
index 16e2e14a7bb970555db106f5056a6696d9a09100..d7481118f2d1405546d5f12506f8b93d3d3b3008 100644 (file)
@@ -762,7 +762,6 @@ int fr_network_listen_send_packet(fr_network_t *nr, fr_listen_t *parent, fr_list
        if (!cd) return -1;
 
        cd->listen = parent;
-       cd->request.is_dup = false;
        cd->priority = PRIORITY_NORMAL;
        cd->packet_ctx = packet_ctx;
        cd->request.recv_time = recv_time;
@@ -883,7 +882,6 @@ next_message:
                return;
        }
 
-       cd->request.is_dup = false;
        cd->priority = PRIORITY_NORMAL;
 
        /*
@@ -897,7 +895,7 @@ next_message:
         *      connection.
         */
        data_size = s->listen->app_io->read(s->listen, &cd->packet_ctx, &cd->request.recv_time,
-                                           cd->m.data, cd->m.rb_size, &s->leftover, &cd->priority, &cd->request.is_dup);
+                                           cd->m.data, cd->m.rb_size, &s->leftover, &cd->priority);
        if (data_size == 0) {
                /*
                 *      Cache the message for later.  This is
@@ -1007,7 +1005,6 @@ int fr_network_sendto_worker(fr_network_t *nr, fr_listen_t *li, void *packet_ctx
 
        s->stats.in++;
 
-       cd->request.is_dup = false;
        cd->priority = PRIORITY_NORMAL;
 
        cd->m.when = recv_time;
index 57c14b5709e3d63d8e3c1f99d14af6a5650ba44c..cc132f7becc945772b6f07b524c7574901a24ccf 100644 (file)
@@ -770,7 +770,6 @@ void worker_request_name_number(request_t *request)
 
 static void worker_request_bootstrap(fr_worker_t *worker, fr_channel_data_t *cd, fr_time_t now)
 {
-       bool                    is_dup;
        int                     ret = -1;
        request_t               *request;
        TALLOC_CTX              *ctx;
@@ -842,7 +841,6 @@ nak:
        /*
         *      We're done with this message.
         */
-       is_dup = cd->request.is_dup;
        fr_message_done(&cd->m);
 
        /*
@@ -854,16 +852,6 @@ nak:
 
                old = fr_rb_find(worker->dedup, request);
                if (!old) {
-                       /*
-                        *      Ignore duplicate packets where we've
-                        *      already sent the reply.
-                        */
-                       if (is_dup) {
-                               RDEBUG("Got duplicate packet notice after we had sent a reply - ignoring");
-                               fr_channel_null_reply(request->async->channel);
-                               talloc_free(request);
-                               return;
-                       }
                        goto insert_new;
                }
 
index 312bab4d731f38d4553c03ba1a682ed158921643..c770340c558f1dc21d2b9b955e2457b499a0fd40 100644 (file)
@@ -57,7 +57,7 @@ static CONF_PARSER const arp_listen_config[] = {
        CONF_PARSER_TERMINATOR
 };
 
-static ssize_t mod_read(fr_listen_t *li, UNUSED void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, size_t *leftover, UNUSED uint32_t *priority, UNUSED bool *is_dup)
+static ssize_t mod_read(fr_listen_t *li, UNUSED void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, size_t *leftover, UNUSED uint32_t *priority)
 {
        proto_arp_ethernet_thread_t     *thread = talloc_get_type_abort(li->thread_instance, proto_arp_ethernet_thread_t);
        int                             ret;
index 2022335201baeacd61d01049217f21f92684f134..978b9ec8d5029958914482b6e2b901ee3b807fb9 100644 (file)
@@ -107,7 +107,7 @@ static const CONF_PARSER udp_listen_config[] = {
 
 
 static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len,
-                       size_t *leftover, UNUSED uint32_t *priority, UNUSED bool *is_dup)
+                       size_t *leftover, UNUSED uint32_t *priority)
 {
        proto_bfd_udp_t const           *inst = talloc_get_type_abort_const(li->app_io_instance, proto_bfd_udp_t);
        proto_bfd_udp_thread_t          *thread = talloc_get_type_abort(li->thread_instance, proto_bfd_udp_thread_t);
index 0b23671806b0c0494064e21aa334fa790f684343..f5eb8d66c092299f3d06fcfc93d75c9382a2c865 100644 (file)
@@ -136,8 +136,7 @@ static SINT write_misc(void *instance, char const *buffer, INT buffer_size)
 /*
  *     Run a command.
  */
-static ssize_t mod_read_command(fr_listen_t *li, UNUSED void **packet_ctx, UNUSED fr_time_t *recv_time_p, uint8_t *buffer, UNUSED size_t buffer_len, UNUSED size_t *leftover, UNUSED uint32_t *priority, UNUSED bool *is_dup
-)
+static ssize_t mod_read_command(fr_listen_t *li, UNUSED void **packet_ctx, UNUSED fr_time_t *recv_time_p, uint8_t *buffer, UNUSED size_t buffer_len, UNUSED size_t *leftover, UNUSED uint32_t *priority)
 {
        proto_control_unix_t const      *inst = talloc_get_type_abort_const(li->app_io_instance, proto_control_unix_t);
        proto_control_unix_thread_t     *thread = talloc_get_type_abort(li->thread_instance, proto_control_unix_thread_t);
@@ -228,8 +227,7 @@ done:
 /*
  *     Process an initial connection request.
  */
-static ssize_t mod_read_init(fr_listen_t *li, UNUSED void **packet_ctx, UNUSED fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, UNUSED size_t *leftover, UNUSED uint32_t *priority, UNUSED bool *is_dup
-)
+static ssize_t mod_read_init(fr_listen_t *li, UNUSED void **packet_ctx, UNUSED fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, UNUSED size_t *leftover, UNUSED uint32_t *priority)
 {
        proto_control_unix_thread_t     *thread = talloc_get_type_abort(li->thread_instance, proto_control_unix_thread_t);
        fr_conduit_hdr_t                *hdr = (fr_conduit_hdr_t *) buffer;
@@ -270,7 +268,7 @@ static ssize_t mod_read_init(fr_listen_t *li, UNUSED void **packet_ctx, UNUSED f
        return 0;
 }
 
-static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, size_t *leftover, uint32_t *priority, bool *is_dup)
+static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, size_t *leftover, uint32_t *priority)
 {
        proto_control_unix_thread_t     *thread = talloc_get_type_abort(li->thread_instance, proto_control_unix_thread_t);
        ssize_t                         data_size;
@@ -318,7 +316,7 @@ static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time
        /*
         *      Run the state machine to process the rest of the packet.
         */
-       return thread->read(li, packet_ctx, recv_time_p, buffer, (size_t) data_size, leftover, priority, is_dup);
+       return thread->read(li, packet_ctx, recv_time_p, buffer, (size_t) data_size, leftover, priority);
 }
 
 
index 099808b819d66a693b75797c1eff8fc7f164c5d6..c8f5ad6ec45fa8fc362a724274c59110ead7dee6 100644 (file)
@@ -325,7 +325,7 @@ static int time_parse(UNUSED TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM
        return 0;
 }
 
-static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, size_t *leftover, UNUSED uint32_t *priority, UNUSED bool *is_dup)
+static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, size_t *leftover, UNUSED uint32_t *priority)
 {
        proto_cron_crontab_t const      *inst = talloc_get_type_abort_const(li->app_io_instance, proto_cron_crontab_t);
        proto_cron_crontab_thread_t     *thread = talloc_get_type_abort(li->thread_instance, proto_cron_crontab_thread_t);
index bad49f1a52ea6b006a3f4f2304ae4080ad8e1955..d4de5dc863d8559a445b12c9dd7cd2f543b06598 100644 (file)
@@ -141,7 +141,7 @@ static fr_event_update_t resume_read[] = {
        { 0 }
 };
 
-static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, size_t *leftover, uint32_t *priority, UNUSED bool *is_dup)
+static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, size_t *leftover, uint32_t *priority)
 {
        proto_detail_work_t const       *inst = talloc_get_type_abort_const(li->app_io_instance, proto_detail_work_t);
        proto_detail_work_thread_t      *thread = talloc_get_type_abort(li->thread_instance, proto_detail_work_thread_t);
index 0b5b8b6bc244fad239238a730d049ed0fdc7c642..4ca277330f7b0bbee1cb2820d88af3a7b422d74a 100644 (file)
@@ -127,7 +127,7 @@ fr_dict_attr_autoload_t proto_dhcpv4_udp_dict_attr[] = {
 };
 
 static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len,
-                        size_t *leftover, UNUSED uint32_t *priority, UNUSED bool *is_dup)
+                        size_t *leftover, UNUSED uint32_t *priority)
 {
        proto_dhcpv4_udp_thread_t       *thread = talloc_get_type_abort(li->thread_instance, proto_dhcpv4_udp_thread_t);
        fr_io_address_t                 *address, **address_p;
index 2c79214fa7158abf476fcba0fd1408168f86f7d1..60ff1e62302d6023c660bd17f070f90194f06d1d 100644 (file)
@@ -129,7 +129,7 @@ fr_dict_attr_autoload_t proto_dhcpv6_udp_dict_attr[] = {
 };
 
 static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len,
-                       size_t *leftover, UNUSED uint32_t *priority, UNUSED bool *is_dup)
+                       size_t *leftover, UNUSED uint32_t *priority)
 {
        proto_dhcpv6_udp_t const        *inst = talloc_get_type_abort_const(li->app_io_instance, proto_dhcpv6_udp_t);
        proto_dhcpv6_udp_thread_t       *thread = talloc_get_type_abort(li->thread_instance, proto_dhcpv6_udp_thread_t);
index 527abb50bf8e98e4a6740ff248da970afd76696c..9d5694c5df7fa0dceb96c5f46bdc22f4c33fc46b 100644 (file)
@@ -113,7 +113,7 @@ fr_dict_attr_autoload_t proto_dns_udp_dict_attr[] = {
 };
 
 static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len,
-                       size_t *leftover, UNUSED uint32_t *priority, UNUSED bool *is_dup)
+                       size_t *leftover, UNUSED uint32_t *priority)
 {
 //     proto_dns_udp_t const           *inst = talloc_get_type_abort_const(li->app_io_instance, proto_dns_udp_t);
        proto_dns_udp_thread_t          *thread = talloc_get_type_abort(li->thread_instance, proto_dns_udp_thread_t);
index abd3f3444641119a4795cbe9e4b15bce2c144a56..093982bbe66289fd9c90a8e08f1f79f12f690ffc 100644 (file)
@@ -593,8 +593,7 @@ static int proto_ldap_child_mod_close(fr_listen_t *li)
  *     addition to their other data.
  */
 static ssize_t proto_ldap_child_mod_read(fr_listen_t *li, UNUSED void **packet_ctx, UNUSED fr_time_t *recv_time_p, UNUSED uint8_t *buffer,
-                                        UNUSED size_t buffer_len, UNUSED size_t *leftover, UNUSED uint32_t *priority,
-                                        UNUSED bool *is_dup)
+                                        UNUSED size_t buffer_len, UNUSED size_t *leftover, UNUSED uint32_t *priority)
 {
        proto_ldap_sync_ldap_thread_t   *thread = talloc_get_type_abort(li->thread_instance, proto_ldap_sync_ldap_thread_t);
        fr_ldap_connection_t            *conn = talloc_get_type_abort(thread->conn->h, fr_ldap_connection_t);
index ad8b897eda556f5a51e237f994096fc0d1993cdf..3a2cbe198f9bff6afe77a4f96822171509c1fc4c 100644 (file)
@@ -95,7 +95,7 @@ static const CONF_PARSER load_listen_config[] = {
 };
 
 
-static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, size_t *leftover, UNUSED uint32_t *priority, UNUSED bool *is_dup)
+static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, size_t *leftover, UNUSED uint32_t *priority)
 {
        proto_load_step_t const         *inst = talloc_get_type_abort_const(li->app_io_instance, proto_load_step_t);
        proto_load_step_thread_t        *thread = talloc_get_type_abort(li->thread_instance, proto_load_step_thread_t);
index 8da17bde0d17d4313b90fa43689a128a8134eb28..420780c4681b515e300874d4b8d488a3d4be21e0 100644 (file)
@@ -100,7 +100,7 @@ static const CONF_PARSER tcp_listen_config[] = {
 };
 
 
-static ssize_t mod_read(fr_listen_t *li, UNUSED void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, size_t *leftover, UNUSED uint32_t *priority, UNUSED bool *is_dup)
+static ssize_t mod_read(fr_listen_t *li, UNUSED void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, size_t *leftover, UNUSED uint32_t *priority)
 {
        proto_radius_tcp_t const        *inst = talloc_get_type_abort_const(li->app_io_instance, proto_radius_tcp_t);
        proto_radius_tcp_thread_t       *thread = talloc_get_type_abort(li->thread_instance, proto_radius_tcp_thread_t);
index 60037c9dffe93430b08da49d2d8af644f17b7c5b..a90f9c867cdebc985aa8593cefda795c9e588e8c 100644 (file)
@@ -100,7 +100,7 @@ static const CONF_PARSER tcp_listen_config[] = {
 };
 
 
-static ssize_t mod_read(fr_listen_t *li, UNUSED void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, size_t *leftover, UNUSED uint32_t *priority, UNUSED bool *is_dup)
+static ssize_t mod_read(fr_listen_t *li, UNUSED void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, size_t *leftover, UNUSED uint32_t *priority)
 {
        proto_radius_tcp_t const        *inst = talloc_get_type_abort_const(li->app_io_instance, proto_radius_tcp_t);
        proto_radius_tcp_thread_t       *thread = talloc_get_type_abort(li->thread_instance, proto_radius_tcp_thread_t);
index 19b4ee2294827857a1832e48b9ca88fbb9a60931..53ff17da4ed2605773bab9e73ceb2fb0f553f1b2 100644 (file)
@@ -113,7 +113,7 @@ static const CONF_PARSER udp_listen_config[] = {
 
 
 static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len,
-                       size_t *leftover, UNUSED uint32_t *priority, UNUSED bool *is_dup)
+                       size_t *leftover, UNUSED uint32_t *priority)
 {
        proto_radius_udp_t const        *inst = talloc_get_type_abort_const(li->app_io_instance, proto_radius_udp_t);
        proto_radius_udp_thread_t       *thread = talloc_get_type_abort(li->thread_instance, proto_radius_udp_thread_t);
index 5b9da28b28992e194d02bcf86d6e7bd0859d28c8..bdb099c9d04330e921da9e68ba2dac848a503a32 100644 (file)
@@ -119,7 +119,6 @@ static const char *packet_name[] = {
  *                             *leftover must be subtracted from buffer_len when
  *                             calculating free space in the buffer.
  * @param[out] priority                unused.
- * @param[out] is_dup          packets are never duplicated
  * @return
  *     - >0 when a packet was read successfully.
  *     - 0 when we read a partial packet.
@@ -127,14 +126,12 @@ static const char *packet_name[] = {
  */
 static ssize_t mod_read(fr_listen_t *li, UNUSED void **packet_ctx, fr_time_t *recv_time_p,
                        uint8_t *buffer, size_t buffer_len, size_t *leftover,
-                       UNUSED uint32_t *priority, bool *is_dup)
+                       UNUSED uint32_t *priority)
 {
        proto_tacacs_tcp_thread_t       *thread = talloc_get_type_abort(li->thread_instance, proto_tacacs_tcp_thread_t);
        ssize_t                         data_size, packet_len;
        size_t                          in_buffer;
 
-       *is_dup = false;
-
        /*
         *      Read data into the buffer.
         */
index 60bce56cf504acf821eff19b3ade62d8ad49e67f..788da4ed0b5c93e098e114057f9a0c96776278c4 100644 (file)
@@ -100,7 +100,7 @@ static const CONF_PARSER udp_listen_config[] = {
 };
 
 
-static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, size_t *leftover, UNUSED uint32_t *priority, UNUSED bool *is_dup)
+static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len, size_t *leftover, UNUSED uint32_t *priority)
 {
        proto_vmps_udp_t const          *inst = talloc_get_type_abort_const(li->app_io_instance, proto_vmps_udp_t);
        proto_vmps_udp_thread_t         *thread = talloc_get_type_abort(li->thread_instance, proto_vmps_udp_thread_t);