]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
API to get the name of a socket
authorAlan T. DeKok <aland@freeradius.org>
Thu, 2 Aug 2018 14:36:49 +0000 (10:36 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 2 Aug 2018 14:48:33 +0000 (10:48 -0400)
src/lib/io/application.h
src/lib/io/base.h
src/lib/io/master.c
src/modules/proto_control/proto_control_unix.c
src/modules/proto_detail/proto_detail_file.c
src/modules/proto_detail/proto_detail_work.c
src/modules/proto_dhcpv4/proto_dhcpv4_udp.c
src/modules/proto_radius/proto_radius_tcp.c
src/modules/proto_radius/proto_radius_udp.c

index 60d1f4d58ad0e8332ac2f81173672ff3686e5c26..8d1cfca58db5d12e85d66954c31dc046974f742f 100644 (file)
@@ -143,6 +143,7 @@ typedef struct {
        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.
@@ -186,6 +187,7 @@ typedef struct {
        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;
index 60f3b8405cd13be410fd0094d4e28a22f4acf7a1..bb8620245521d36ed4ec86a3274202b1f8170d6d 100644 (file)
@@ -347,6 +347,9 @@ typedef RADCLIENT *(*fr_io_client_find_t)(void *instance, fr_ipaddr_t const *ipa
 
 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
index 86a19267e167e7bda8d988c99883479c1ac57eb3..77d4d3e1ac643001f17f6efe1f9aa53871d71ef5 100644 (file)
@@ -2272,6 +2272,17 @@ static int mod_bootstrap(void *instance, UNUSED CONF_SECTION *cs)
        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;
@@ -2483,4 +2494,5 @@ fr_app_io_t fr_master_app_io = {
        .close                  = mod_close,
        .fd                     = mod_fd,
        .event_list_set         = mod_event_list_set,
+       .get_name               = mod_name,
 };
index 7df2a0f28e3d59cd037df216a5956e42c9e499ee..7d34c677f8e4a83ec07e2ae77b61c0dfff348d8b 100644 (file)
@@ -1083,6 +1083,13 @@ static SINT write_misc(void *instance, char const *buffer, INT buffer_size)
 }
 
 
+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);
@@ -1262,4 +1269,5 @@ fr_app_io_t proto_control_unix = {
        .connection_set         = mod_connection_set,
        .network_get            = mod_network_get,
        .client_find            = mod_client_find,
+       .get_name               = mod_name,
 };
index 1aaafa6bbd8d1d4930d812f3130a690d4a74c114..3960bbcfbad75578cd588aace9578f9df9e27e6a 100644 (file)
@@ -610,10 +610,18 @@ static void mod_event_list_set(void *instance, fr_event_list_t *el, UNUSED void
 }
 
 
-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;
 }
@@ -741,4 +749,5 @@ fr_app_io_t proto_detail_file = {
        .write                  = mod_write,
        .fd                     = mod_fd,
        .event_list_set         = mod_event_list_set,
+       .get_name               = mod_name,
 };
index 1a87999bdacfe197b40138c623a7129087dc71ca..0f698cbb5c585d64716e708155980aebc518522c 100644 (file)
@@ -809,6 +809,13 @@ static void mod_event_list_set(void *instance, fr_event_list_t *el, void *nr)
 }
 
 
+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);
@@ -917,4 +924,5 @@ fr_app_io_t proto_detail_work = {
        .write                  = mod_write,
        .fd                     = mod_fd,
        .event_list_set         = mod_event_list_set,
+       .get_name               = mod_name,
 };
index 1557a312fef3dd627711cd0a47ee1a1d2b643f72..40b835414187f89d8dae46361ae7f5728f66cdca 100644 (file)
@@ -572,6 +572,13 @@ static int mod_fd(void const *instance)
        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);
@@ -745,4 +752,5 @@ fr_app_io_t proto_dhcpv4_udp = {
        .connection_set         = mod_connection_set,
        .network_get            = mod_network_get,
        .client_find            = mod_client_find,
+       .get_name               = mod_name,
 };
index 0a803aaf6832493df45a6f75da7d4157dcc939d7..217da399f5b9b54bbb5cee3693a26a6b791ba08c 100644 (file)
@@ -400,6 +400,14 @@ static int mod_compare(UNUSED void const *instance, void const *one, void const
 }
 
 
+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);
@@ -672,4 +680,5 @@ fr_app_io_t proto_radius_tcp = {
        .connection_set         = mod_connection_set,
        .network_get            = mod_network_get,
        .client_find            = mod_client_find,
+       .get_name               = mod_name,
 };
index da6d76cf89ea02cd82b339823c441385b737874b..cb5485a9fcd524a8a8d147c4740a264810d0e737 100644 (file)
@@ -417,6 +417,13 @@ static int mod_compare(UNUSED void const *instance, void const *one, void const
 }
 
 
+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);
@@ -591,4 +598,5 @@ fr_app_io_t proto_radius_udp = {
        .connection_set         = mod_connection_set,
        .network_get            = mod_network_get,
        .client_find            = mod_client_find,
+       .get_name               = mod_name,
 };