]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
add fr_stats_radius_acc_serv_t
authorAlan T. DeKok <aland@freeradius.org>
Tue, 13 Jan 2026 19:23:45 +0000 (14:23 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 13 Jan 2026 19:25:50 +0000 (14:25 -0500)
Names are bad because the MIB people don't like using "acct".

share/dictionary/radius/dictionary.stats
src/bin/radict.c
src/stats/radius/acc_serv_da_autoload.c [new file with mode: 0644]
src/stats/radius/acc_serv_da_def.c [new file with mode: 0644]
src/stats/radius/acc_serv_stats.c [new file with mode: 0644]
src/stats/radius/acc_serv_stats.h [new file with mode: 0644]
src/stats/radius/all.mk
src/stats/radius/auth_serv_stats.h
src/stats/radius/base.c
src/stats/radius/stats.h

index a1f6a525761ba5f2feb509630b5d22a49d8b42af..50ebfd23738c24a19553a65ab26726a44355bc2c 100644 (file)
@@ -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
index bbfd5928108aa8412359c2b528f3ce4a9f36ddda..646c727293efc6c076dc809c408f2a914fdbb3aa 100644 (file)
@@ -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 (file)
index 0000000..f17fb41
--- /dev/null
@@ -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 (file)
index 0000000..e4696f2
--- /dev/null
@@ -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 (file)
index 0000000..4ad3d41
--- /dev/null
@@ -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 (file)
index 0000000..ea8234e
--- /dev/null
@@ -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;
+
index 9ffa551043f84e8db70a18974b6e757028bef602..fbb16b621107bdb93a99f9762f0ace4cc403ea0a 100644 (file)
@@ -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))
index 4005938ecbb03e2c29935dd0d3992266fedbe445..1044a150ada26ea4783fed42cc0a7c435d650152 100644 (file)
@@ -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;
index ee74183691b434016aab9c92b3f904e0ece9f9e1..c0522841615a56de91082ef6d7e68ab8a10d8137 100644 (file)
@@ -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"
index 9cb47ae387a82e28461569f1b67a384a3c227da6..0202a91867113f36c3a813bec672355afd7d852f 100644 (file)
@@ -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"