fr_io_process_t entry_point; //!< Entry point into the protocol subtype's state machine.
} fr_app_worker_t;
+
/** Public structure describing an I/O path for a protocol
*
* This structure is exported by I/O modules e.g. proto_radius_udp.
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
fr_io_client_find_t client_find; //!< find radclient
+ fr_io_name_t get_name; //!< get the socket name
void *private; //!< any private APIs it needs to export.
} fr_app_io_t;
typedef void (*fr_io_network_get_t)(void *instance, int *ipproto, bool *dynamic_clients, fr_trie_t const **trie);
+typedef char const *(*fr_io_name_t)(void *instance);
+
+
#ifdef __cplusplus
}
#endif
return 0;
}
+
+static char const *mod_name(void *instance)
+{
+ fr_io_instance_t *inst = instance;
+
+ if (!inst->app_io->get_name) return inst->app_io->name;
+
+ return inst->app_io->get_name(inst->app_io_instance);
+}
+
+
static int mod_instantiate(void *instance, CONF_SECTION *conf)
{
fr_io_instance_t *inst = instance;
.close = mod_close,
.fd = mod_fd,
.event_list_set = mod_event_list_set,
+ .get_name = mod_name,
};
}
+static char const *mod_name(void *instance)
+{
+ proto_control_unix_t *inst = talloc_get_type_abort(instance, proto_control_unix_t);
+
+ return inst->name;
+}
+
static int mod_instantiate(void *instance, UNUSED CONF_SECTION *cs)
{
proto_control_unix_t *inst = talloc_get_type_abort(instance, proto_control_unix_t);
.connection_set = mod_connection_set,
.network_get = mod_network_get,
.client_find = mod_client_find,
+ .get_name = mod_name,
};
}
-static int mod_instantiate(UNUSED void *instance, UNUSED CONF_SECTION *cs)
+static char const *mod_name(void *instance)
{
-// proto_detail_file_t *inst = talloc_get_type_abort(instance, proto_detail_file_t);
+ proto_detail_file_t *inst = talloc_get_type_abort(instance, proto_detail_file_t);
+
+ return inst->name;
+}
+
+static int mod_instantiate(void *instance, UNUSED CONF_SECTION *cs)
+{
+ proto_detail_file_t *inst = talloc_get_type_abort(instance, proto_detail_file_t);
+ inst->name = talloc_asprintf(inst, "detail polling for files matching %s", inst->filename);
return 0;
}
.write = mod_write,
.fd = mod_fd,
.event_list_set = mod_event_list_set,
+ .get_name = mod_name,
};
}
+static char const *mod_name(void *instance)
+{
+ proto_detail_work_t *inst = talloc_get_type_abort(instance, proto_detail_work_t);
+
+ return inst->name;
+}
+
static int mod_instantiate(void *instance, UNUSED CONF_SECTION *cs)
{
proto_detail_work_t *inst = talloc_get_type_abort(instance, proto_detail_work_t);
.write = mod_write,
.fd = mod_fd,
.event_list_set = mod_event_list_set,
+ .get_name = mod_name,
};
return inst->sockfd;
}
+static char const *mod_name(void *instance)
+{
+ proto_dhcpv4_udp_t *inst = talloc_get_type_abort(instance, proto_dhcpv4_udp_t);
+
+ return inst->name;
+}
+
static int mod_instantiate(void *instance, UNUSED CONF_SECTION *cs)
{
proto_dhcpv4_udp_t *inst = talloc_get_type_abort(instance, proto_dhcpv4_udp_t);
.connection_set = mod_connection_set,
.network_get = mod_network_get,
.client_find = mod_client_find,
+ .get_name = mod_name,
};
}
+static char const *mod_name(void *instance)
+{
+ proto_radius_tcp_t *inst = talloc_get_type_abort(instance, proto_radius_tcp_t);
+
+ return inst->name;
+}
+
+
static int mod_instantiate(void *instance, UNUSED CONF_SECTION *cs)
{
proto_radius_tcp_t *inst = talloc_get_type_abort(instance, proto_radius_tcp_t);
.connection_set = mod_connection_set,
.network_get = mod_network_get,
.client_find = mod_client_find,
+ .get_name = mod_name,
};
}
+static char const *mod_name(void *instance)
+{
+ proto_radius_udp_t *inst = talloc_get_type_abort(instance, proto_radius_udp_t);
+
+ return inst->name;
+}
+
static int mod_instantiate(void *instance, UNUSED CONF_SECTION *cs)
{
proto_radius_udp_t *inst = talloc_get_type_abort(instance, proto_radius_udp_t);
.connection_set = mod_connection_set,
.network_get = mod_network_get,
.client_find = mod_client_find,
+ .get_name = mod_name,
};