From: Alan T. DeKok Date: Wed, 14 Jun 2023 01:35:21 +0000 (-0400) Subject: remove is_dup parameter from app_io mod_read() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2c9b9153c46aa79dbd2b191952d7ea76f0fbd14c;p=thirdparty%2Ffreeradius-server.git remove is_dup parameter from app_io mod_read() 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. --- diff --git a/src/lib/io/base.h b/src/lib/io/base.h index 20f0b5814ff..ec2d924bd13 100644 --- a/src/lib/io/base.h +++ b/src/lib/io/base.h @@ -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. * diff --git a/src/lib/io/channel.h b/src/lib/io/channel.h index 87721b276bc..2caa99839ef 100644 --- a/src/lib/io/channel.h +++ b/src/lib/io/channel.h @@ -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 { diff --git a/src/lib/io/master.c b/src/lib/io/master.c index 6b1fa268055..05e9ad6e560 100644 --- a/src/lib/io/master.c +++ b/src/lib/io/master.c @@ -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) { diff --git a/src/lib/io/network.c b/src/lib/io/network.c index 16e2e14a7bb..d7481118f2d 100644 --- a/src/lib/io/network.c +++ b/src/lib/io/network.c @@ -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; diff --git a/src/lib/io/worker.c b/src/lib/io/worker.c index 57c14b5709e..cc132f7becc 100644 --- a/src/lib/io/worker.c +++ b/src/lib/io/worker.c @@ -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; } diff --git a/src/listen/arp/proto_arp_ethernet.c b/src/listen/arp/proto_arp_ethernet.c index 312bab4d731..c770340c558 100644 --- a/src/listen/arp/proto_arp_ethernet.c +++ b/src/listen/arp/proto_arp_ethernet.c @@ -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; diff --git a/src/listen/bfd/proto_bfd_udp.c b/src/listen/bfd/proto_bfd_udp.c index 2022335201b..978b9ec8d50 100644 --- a/src/listen/bfd/proto_bfd_udp.c +++ b/src/listen/bfd/proto_bfd_udp.c @@ -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); diff --git a/src/listen/control/proto_control_unix.c b/src/listen/control/proto_control_unix.c index 0b23671806b..f5eb8d66c09 100644 --- a/src/listen/control/proto_control_unix.c +++ b/src/listen/control/proto_control_unix.c @@ -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); } diff --git a/src/listen/cron/proto_cron_crontab.c b/src/listen/cron/proto_cron_crontab.c index 099808b819d..c8f5ad6ec45 100644 --- a/src/listen/cron/proto_cron_crontab.c +++ b/src/listen/cron/proto_cron_crontab.c @@ -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); diff --git a/src/listen/detail/proto_detail_work.c b/src/listen/detail/proto_detail_work.c index bad49f1a52e..d4de5dc863d 100644 --- a/src/listen/detail/proto_detail_work.c +++ b/src/listen/detail/proto_detail_work.c @@ -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); diff --git a/src/listen/dhcpv4/proto_dhcpv4_udp.c b/src/listen/dhcpv4/proto_dhcpv4_udp.c index 0b5b8b6bc24..4ca277330f7 100644 --- a/src/listen/dhcpv4/proto_dhcpv4_udp.c +++ b/src/listen/dhcpv4/proto_dhcpv4_udp.c @@ -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; diff --git a/src/listen/dhcpv6/proto_dhcpv6_udp.c b/src/listen/dhcpv6/proto_dhcpv6_udp.c index 2c79214fa71..60ff1e62302 100644 --- a/src/listen/dhcpv6/proto_dhcpv6_udp.c +++ b/src/listen/dhcpv6/proto_dhcpv6_udp.c @@ -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); diff --git a/src/listen/dns/proto_dns_udp.c b/src/listen/dns/proto_dns_udp.c index 527abb50bf8..9d5694c5df7 100644 --- a/src/listen/dns/proto_dns_udp.c +++ b/src/listen/dns/proto_dns_udp.c @@ -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); diff --git a/src/listen/ldap_sync/proto_ldap_sync_ldap.c b/src/listen/ldap_sync/proto_ldap_sync_ldap.c index abd3f344464..093982bbe66 100644 --- a/src/listen/ldap_sync/proto_ldap_sync_ldap.c +++ b/src/listen/ldap_sync/proto_ldap_sync_ldap.c @@ -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); diff --git a/src/listen/load/proto_load_step.c b/src/listen/load/proto_load_step.c index ad8b897eda5..3a2cbe198f9 100644 --- a/src/listen/load/proto_load_step.c +++ b/src/listen/load/proto_load_step.c @@ -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); diff --git a/src/listen/radius/#proto_radius_tcp.c# b/src/listen/radius/#proto_radius_tcp.c# index 8da17bde0d1..420780c4681 100644 --- a/src/listen/radius/#proto_radius_tcp.c# +++ b/src/listen/radius/#proto_radius_tcp.c# @@ -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); diff --git a/src/listen/radius/proto_radius_tcp.c b/src/listen/radius/proto_radius_tcp.c index 60037c9dffe..a90f9c867cd 100644 --- a/src/listen/radius/proto_radius_tcp.c +++ b/src/listen/radius/proto_radius_tcp.c @@ -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); diff --git a/src/listen/radius/proto_radius_udp.c b/src/listen/radius/proto_radius_udp.c index 19b4ee22948..53ff17da4ed 100644 --- a/src/listen/radius/proto_radius_udp.c +++ b/src/listen/radius/proto_radius_udp.c @@ -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); diff --git a/src/listen/tacacs/proto_tacacs_tcp.c b/src/listen/tacacs/proto_tacacs_tcp.c index 5b9da28b289..bdb099c9d04 100644 --- a/src/listen/tacacs/proto_tacacs_tcp.c +++ b/src/listen/tacacs/proto_tacacs_tcp.c @@ -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. */ diff --git a/src/listen/vmps/proto_vmps_udp.c b/src/listen/vmps/proto_vmps_udp.c index 60bce56cf50..788da4ed0b5 100644 --- a/src/listen/vmps/proto_vmps_udp.c +++ b/src/listen/vmps/proto_vmps_udp.c @@ -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);