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
*
* 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
* - 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.
*
/*
* 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);
}
* 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);
}
* 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;
* 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));
}
} 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;
}
}
}
-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;
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;
.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,
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;
}
-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;
.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,
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);
.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,
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);
.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,
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;
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);
.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,
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;
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);
.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,