From: Alan T. DeKok Date: Tue, 13 Jan 2026 19:23:45 +0000 (-0500) Subject: add fr_stats_radius_acc_serv_t X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=711da0e6d6cb4a0326d8895be85a151bad829a44;p=thirdparty%2Ffreeradius-server.git add fr_stats_radius_acc_serv_t Names are bad because the MIB people don't like using "acct". --- diff --git a/share/dictionary/radius/dictionary.stats b/share/dictionary/radius/dictionary.stats index a1f6a525761..50ebfd23738 100644 --- a/share/dictionary/radius/dictionary.stats +++ b/share/dictionary/radius/dictionary.stats @@ -35,4 +35,27 @@ ATTRIBUTE radiusAuthServTotalUnknownTypes .14 uint32 counter ALIAS radiusAuthServ .radiusMIB.radiusAuthentication.radiusAuthServMIB.radiusAuthServMIBObjects.radiusAuthServ +ATTRIBUTE radiusAccounting 67.2 tlv +ATTRIBUTE radiusAccServMIBObjects 67.2.1 tlv + +# radisAccServ is 1.3.6.1.2.1.67.2.1.1 +ATTRIBUTE radiusAccServ 67.2.1.1 tlv + +ATTRIBUTE radiusAccServIdent .1 string +ATTRIBUTE radiusAccServUpTime .2 time_delta precision=centiseconds +ATTRIBUTE radiusAccServResetTime .3 time_delta precision=centiseconds +ATTRIBUTE radiusAccServConfigReset .4 uint32 +ATTRIBUTE radiusAccServTotalAccessRequests .5 uint32 counter +ATTRIBUTE radiusAccServTotalInvalidRequests .6 uint32 counter +ATTRIBUTE radiusAccServTotalDupRequests .7 uint32 counter +ATTRIBUTE radiusAccServTotalResponses .8 uint32 counter +ATTRIBUTE radiusAccServTotalMalformedAccessRequests .9 uint32 counter +ATTRIBUTE radiusAccServTotalBadAuthenticators .10 uint32 counter +ATTRIBUTE radiusAccServTotalPacketsDropped .11 uint32 counter +ATTRIBUTE radiusAccServTotalNoRecords .12 uint32 counter +ATTRIBUTE radiusAccServTotalUnknownTypes .13 uint32 counter +#ATTRIBUTE radiusAccClientTable .14 tlv + +ALIAS radiusAccServ .radiusMIB.radiusAccounting.radiusAccServMIBObjects.radiusAccServ + END mib-2 diff --git a/src/bin/radict.c b/src/bin/radict.c index bbfd5928108..646c727293e 100644 --- a/src/bin/radict.c +++ b/src/bin/radict.c @@ -668,6 +668,7 @@ static void da_print_stats_h(FILE *fp, fr_dict_attr_t const *parent) fprintf(fp, "\n"); + fprintf(fp, "/*\n * fr_stats_%s_%s_instance_t\n */\n", dict_name, parent_name); fprintf(fp, "FR_STATS_TYPEDEF(%s_%s);\n\n", dict_name, parent_name); fprintf(fp, "extern fr_stats_link_t const fr_stats_link_%s_%s;\n\n", dict_name, parent_name); diff --git a/src/stats/radius/acc_serv_da_autoload.c b/src/stats/radius/acc_serv_da_autoload.c new file mode 100644 index 00000000000..f17fb416304 --- /dev/null +++ b/src/stats/radius/acc_serv_da_autoload.c @@ -0,0 +1,16 @@ +{ .out = &attr_acc_serv, .name = "mib-2.radiusAccServ", .type = FR_TYPE_TLV, .dict = &dict_radius }, +{ .out = &attr_acc_serv_ident, .name = ".radiusAccServIdent", .type = FR_TYPE_STRING, .dict = &dict_radius }, +{ .out = &attr_acc_serv_up_time, .name = ".radiusAccServUpTime", .type = FR_TYPE_TIME_DELTA, .dict = &dict_radius }, +{ .out = &attr_acc_serv_reset_time, .name = ".radiusAccServResetTime", .type = FR_TYPE_TIME_DELTA, .dict = &dict_radius }, +{ .out = &attr_acc_serv_config_reset, .name = ".radiusAccServConfigReset", .type = FR_TYPE_UINT32, .dict = &dict_radius }, +{ .out = &attr_acc_serv_total_access_requests, .name = ".radiusAccServTotalAccessRequests", .type = FR_TYPE_UINT32, .dict = &dict_radius }, +{ .out = &attr_acc_serv_total_invalid_requests, .name = ".radiusAccServTotalInvalidRequests", .type = FR_TYPE_UINT32, .dict = &dict_radius }, +{ .out = &attr_acc_serv_total_dup_requests, .name = ".radiusAccServTotalDupRequests", .type = FR_TYPE_UINT32, .dict = &dict_radius }, +{ .out = &attr_acc_serv_total_responses, .name = ".radiusAccServTotalResponses", .type = FR_TYPE_UINT32, .dict = &dict_radius }, +{ .out = &attr_acc_serv_total_malformed_access_requests, .name = ".radiusAccServTotalMalformedAccessRequests", .type = FR_TYPE_UINT32, .dict = &dict_radius }, +{ .out = &attr_acc_serv_total_bad_authenticators, .name = ".radiusAccServTotalBadAuthenticators", .type = FR_TYPE_UINT32, .dict = &dict_radius }, +{ .out = &attr_acc_serv_total_packets_dropped, .name = ".radiusAccServTotalPacketsDropped", .type = FR_TYPE_UINT32, .dict = &dict_radius }, +{ .out = &attr_acc_serv_total_no_records, .name = ".radiusAccServTotalNoRecords", .type = FR_TYPE_UINT32, .dict = &dict_radius }, +{ .out = &attr_acc_serv_total_unknown_types, .name = ".radiusAccServTotalUnknownTypes", .type = FR_TYPE_UINT32, .dict = &dict_radius }, + + diff --git a/src/stats/radius/acc_serv_da_def.c b/src/stats/radius/acc_serv_da_def.c new file mode 100644 index 00000000000..e4696f2d9f9 --- /dev/null +++ b/src/stats/radius/acc_serv_da_def.c @@ -0,0 +1,16 @@ +static fr_dict_attr_t const *attr_acc_serv; +static fr_dict_attr_t const *attr_acc_serv_ident; +static fr_dict_attr_t const *attr_acc_serv_up_time; +static fr_dict_attr_t const *attr_acc_serv_reset_time; +static fr_dict_attr_t const *attr_acc_serv_config_reset; +static fr_dict_attr_t const *attr_acc_serv_total_access_requests; +static fr_dict_attr_t const *attr_acc_serv_total_invalid_requests; +static fr_dict_attr_t const *attr_acc_serv_total_dup_requests; +static fr_dict_attr_t const *attr_acc_serv_total_responses; +static fr_dict_attr_t const *attr_acc_serv_total_malformed_access_requests; +static fr_dict_attr_t const *attr_acc_serv_total_bad_authenticators; +static fr_dict_attr_t const *attr_acc_serv_total_packets_dropped; +static fr_dict_attr_t const *attr_acc_serv_total_no_records; +static fr_dict_attr_t const *attr_acc_serv_total_unknown_types; + + diff --git a/src/stats/radius/acc_serv_stats.c b/src/stats/radius/acc_serv_stats.c new file mode 100644 index 00000000000..4ad3d417859 --- /dev/null +++ b/src/stats/radius/acc_serv_stats.c @@ -0,0 +1,88 @@ +fr_stats_link_t const fr_stats_link_radius_acc_serv = { + .name = "fr_stats_radius_acc_serv_t", + .root_p = &attr_acc_serv, + .mib = "1.3.6.1.2.1.67.2.1.1", + .size = sizeof(fr_stats_radius_acc_serv_t), + .num_elements = 13, + .entry = { + { + .da_p = &attr_acc_serv_ident, + .type = FR_TYPE_STRING, + .offset = offsetof(fr_stats_radius_acc_serv_t, ident), + .size = 0, + }, + { + .da_p = &attr_acc_serv_up_time, + .type = FR_TYPE_TIME_DELTA, + .offset = offsetof(fr_stats_radius_acc_serv_t, up_time), + .size = 4, + }, + { + .da_p = &attr_acc_serv_reset_time, + .type = FR_TYPE_TIME_DELTA, + .offset = offsetof(fr_stats_radius_acc_serv_t, reset_time), + .size = 4, + }, + { + .da_p = &attr_acc_serv_config_reset, + .type = FR_TYPE_UINT32, + .offset = offsetof(fr_stats_radius_acc_serv_t, config_reset), + .size = 4, + }, + { + .da_p = &attr_acc_serv_total_access_requests, + .type = FR_TYPE_UINT32, + .offset = offsetof(fr_stats_radius_acc_serv_t, total_access_requests), + .size = 4, + }, + { + .da_p = &attr_acc_serv_total_invalid_requests, + .type = FR_TYPE_UINT32, + .offset = offsetof(fr_stats_radius_acc_serv_t, total_invalid_requests), + .size = 4, + }, + { + .da_p = &attr_acc_serv_total_dup_requests, + .type = FR_TYPE_UINT32, + .offset = offsetof(fr_stats_radius_acc_serv_t, total_dup_requests), + .size = 4, + }, + { + .da_p = &attr_acc_serv_total_responses, + .type = FR_TYPE_UINT32, + .offset = offsetof(fr_stats_radius_acc_serv_t, total_responses), + .size = 4, + }, + { + .da_p = &attr_acc_serv_total_malformed_access_requests, + .type = FR_TYPE_UINT32, + .offset = offsetof(fr_stats_radius_acc_serv_t, total_malformed_access_requests), + .size = 4, + }, + { + .da_p = &attr_acc_serv_total_bad_authenticators, + .type = FR_TYPE_UINT32, + .offset = offsetof(fr_stats_radius_acc_serv_t, total_bad_authenticators), + .size = 4, + }, + { + .da_p = &attr_acc_serv_total_packets_dropped, + .type = FR_TYPE_UINT32, + .offset = offsetof(fr_stats_radius_acc_serv_t, total_packets_dropped), + .size = 4, + }, + { + .da_p = &attr_acc_serv_total_no_records, + .type = FR_TYPE_UINT32, + .offset = offsetof(fr_stats_radius_acc_serv_t, total_no_records), + .size = 4, + }, + { + .da_p = &attr_acc_serv_total_unknown_types, + .type = FR_TYPE_UINT32, + .offset = offsetof(fr_stats_radius_acc_serv_t, total_unknown_types), + .size = 4, + }, + }, +}; + diff --git a/src/stats/radius/acc_serv_stats.h b/src/stats/radius/acc_serv_stats.h new file mode 100644 index 00000000000..ea8234eda39 --- /dev/null +++ b/src/stats/radius/acc_serv_stats.h @@ -0,0 +1,26 @@ +/* + * radiusAccServ + */ +typedef struct { + char *ident; + fr_time_delta_t up_time; + fr_time_delta_t reset_time; + uint32_t config_reset; + uint32_t total_access_requests; + uint32_t total_invalid_requests; + uint32_t total_dup_requests; + uint32_t total_responses; + uint32_t total_malformed_access_requests; + uint32_t total_bad_authenticators; + uint32_t total_packets_dropped; + uint32_t total_no_records; + uint32_t total_unknown_types; +} fr_stats_radius_acc_serv_t; + +/* + * fr_stats_radius_acc_serv_instance_t + */ +FR_STATS_TYPEDEF(radius_acc_serv); + +extern fr_stats_link_t const fr_stats_link_radius_acc_serv; + diff --git a/src/stats/radius/all.mk b/src/stats/radius/all.mk index 9ffa551043f..fbb16b62110 100644 --- a/src/stats/radius/all.mk +++ b/src/stats/radius/all.mk @@ -12,3 +12,4 @@ TGT_PREREQS := libfreeradius-util$(L) libfreeradius-radius$(L) TGT_POSTCLEAN := $(wildcard src/stats/radius/*.cache) $(eval $(call DICT_STATS,radius,auth_serv,mib-2.radiusAuthServ,1.3.6.1.2.1.67.1.1.1.1)) +$(eval $(call DICT_STATS,radius,acc_serv,mib-2.radiusAccServ,1.3.6.1.2.1.67.2.1.1)) diff --git a/src/stats/radius/auth_serv_stats.h b/src/stats/radius/auth_serv_stats.h index 4005938ecbb..1044a150ada 100644 --- a/src/stats/radius/auth_serv_stats.h +++ b/src/stats/radius/auth_serv_stats.h @@ -18,6 +18,9 @@ typedef struct { uint32_t total_unknown_types; } fr_stats_radius_auth_serv_t; +/* + * fr_stats_radius_auth_serv_instance_t + */ FR_STATS_TYPEDEF(radius_auth_serv); extern fr_stats_link_t const fr_stats_link_radius_auth_serv; diff --git a/src/stats/radius/base.c b/src/stats/radius/base.c index ee74183691b..c0522841615 100644 --- a/src/stats/radius/base.c +++ b/src/stats/radius/base.c @@ -34,6 +34,8 @@ static fr_dict_t const *dict_radius; */ #include "auth_serv_da_def.c" +#include "acc_serv_da_def.c" + extern fr_dict_autoload_t libfreeradius_radius_stats_dict[]; fr_dict_autoload_t libfreeradius_radius_stats_dict[] = { { .out = &dict_radius, .proto = "radius" }, @@ -46,6 +48,8 @@ fr_dict_attr_autoload_t libfreeradius_radius_stats_dict_attr[] = { #include "auth_serv_da_autoload.c" +#include "acc_serv_da_autoload.c" + DICT_AUTOLOAD_TERMINATOR }; @@ -62,3 +66,5 @@ DIAG_OFF(gnu-flexible-array-initializer) * Define the fr_stats_link_t for the statistics data structures. */ #include "auth_serv_stats.c" + +#include "acc_serv_stats.c" diff --git a/src/stats/radius/stats.h b/src/stats/radius/stats.h index 9cb47ae387a..0202a918671 100644 --- a/src/stats/radius/stats.h +++ b/src/stats/radius/stats.h @@ -33,6 +33,8 @@ * fr_stats_link_radius_auth_serv - the structure linking the base stats structure to the dictionary * attributes. * - * fr_stats_radius_auth_serv_t + * fr_stats_radius_auth_serv_instance_t - a structure holding an instance of the statistics. */ #include "auth_serv_stats.h" + +#include "acc_serv_stats.h"