Make RADCLIENT always have stats structures
authorAlan T. DeKok <aland@freeradius.org>
Fri, 3 Jun 2011 08:23:48 +0000 (10:23 +0200)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 3 Jun 2011 08:26:46 +0000 (10:26 +0200)
It's simpler.

src/include/radiusd.h
src/include/stats.h
src/main/client.c
src/main/command.c
src/main/listen.c
src/main/process.c
src/main/stats.c

index 659ac6e..922f6a8 100644 (file)
@@ -141,13 +141,13 @@ typedef struct radclient {
        int                     number; /* internal use only */
        const CONF_SECTION      *cs;
 #ifdef WITH_STATS
-       fr_stats_t              *auth;
+       fr_stats_t              auth;
 #ifdef WITH_ACCOUNTING
-       fr_stats_t              *acct;
+       fr_stats_t              acct;
 #endif
 #ifdef WITH_COA
-       fr_stats_t              *coa;
-       fr_stats_t              *dsc;
+       fr_stats_t              coa;
+       fr_stats_t              dsc;
 #endif
 #endif
 
index 1b6eb35..d1d3a43 100644 (file)
@@ -87,7 +87,7 @@ void request_stats_reply(REQUEST *request);
 void radius_stats_ema(fr_stats_ema_t *ema,
                      struct timeval *start, struct timeval *end);
 
-#define FR_STATS_INC(_x, _y) radius_ ## _x ## _stats._y++;if (listener) listener->stats._y++;if (client) client->_x->_y++;
+#define FR_STATS_INC(_x, _y) radius_ ## _x ## _stats._y++;if (listener) listener->stats._y++;if (client) client->_x._y++;
 #define FR_STATS_TYPE_INC(_x) _x++
 
 #else  /* WITH_STATS */
index 35045df..6204759 100644 (file)
@@ -102,13 +102,6 @@ void client_free(RADCLIENT *client)
        free(client->password);
        free(client->server);
 
-#ifdef WITH_STATS
-       free(client->auth);
-#ifdef WITH_ACCOUNTING
-       free(client->acct);
-#endif
-#endif
-
 #ifdef WITH_DYNAMIC_CLIENTS
        free(client->client_server);
 #endif
@@ -364,22 +357,6 @@ int client_add(RADCLIENT_LIST *clients, RADCLIENT *client)
                tree_num = rbtree_create(client_num_cmp, NULL, 0);
        }
 
-
-       /*
-        *      Catch clients added by rlm_sql.
-        */
-       if (!client->auth) {
-               client->auth = rad_malloc(sizeof(*client->auth));
-               memset(client->auth, 0, sizeof(*client->auth));
-       }
-
-#ifdef WITH_ACCOUNTING
-       if (!client->acct) {
-               client->acct = rad_malloc(sizeof(*client->acct));
-               memset(client->acct, 0, sizeof(*client->acct));
-       }
-#endif
-
 #ifdef WITH_DYNAMIC_CLIENTS
        /*
         *      More catching of clients added by rlm_sql.
@@ -595,16 +572,6 @@ static RADCLIENT *client_parse(CONF_SECTION *cs, int in_server)
        memset(c, 0, sizeof(*c));
        c->cs = cs;
 
-#ifdef WITH_STATS
-       c->auth = rad_malloc(sizeof(*c->auth));
-       memset(c->auth, 0, sizeof(*c->auth));
-
-#ifdef WITH_ACCOUNTING
-       c->acct = rad_malloc(sizeof(*c->acct));
-       memset(c->acct, 0, sizeof(*c->acct));
-#endif
-#endif
-
        memset(&cl_ip4addr, 0, sizeof(cl_ip4addr));
        memset(&cl_ip6addr, 0, sizeof(cl_ip6addr));
        c->prefix = -1;
index 1213ac1..cc7128c 100644 (file)
@@ -1691,13 +1691,13 @@ static int command_stats_client(rad_listen_t *listener, int argc, char *argv[])
                /*
                 *      Global statistics.
                 */
-               fake.auth = &radius_auth_stats;
+               fake.auth = radius_auth_stats;
 #ifdef WITH_ACCOUNTING
-               fake.auth = &radius_acct_stats;
+               fake.auth = radius_acct_stats;
 #endif
 #ifdef WITH_COA
-               fake.coa = &radius_coa_stats;
-               fake.dsc = &radius_dsc_stats;
+               fake.coa = radius_coa_stats;
+               fake.dsc = radius_dsc_stats;
 #endif
                client = &fake;
 
@@ -1713,12 +1713,12 @@ static int command_stats_client(rad_listen_t *listener, int argc, char *argv[])
 
        if (strcmp(argv[0], "auth") == 0) {
                auth = TRUE;
-               stats = client->auth;
+               stats = &client->auth;
 
        } else if (strcmp(argv[0], "acct") == 0) {
 #ifdef WITH_ACCOUNTING
                auth = FALSE;
-               stats = client->acct;
+               stats = &client->acct;
 #else
                cprintf(listener, "ERROR: This server was built without accounting support.\n");
                return 0;
@@ -1727,7 +1727,7 @@ static int command_stats_client(rad_listen_t *listener, int argc, char *argv[])
        } else if (strcmp(argv[0], "coa") == 0) {
 #ifdef WITH_COA
                auth = FALSE;
-               stats = client->coa;
+               stats = &client->coa;
 #else
                cprintf(listener, "ERROR: This server was built without CoA support.\n");
                return 0;
@@ -1736,7 +1736,7 @@ static int command_stats_client(rad_listen_t *listener, int argc, char *argv[])
        } else if (strcmp(argv[0], "disconnect") == 0) {
 #ifdef WITH_COA
                auth = FALSE;
-               stats = client->dsc;
+               stats = &client->dsc;
 #else
                cprintf(listener, "ERROR: This server was built without CoA support.\n");
                return 0;
index 7a67ab6..bd66829 100644 (file)
@@ -1248,7 +1248,7 @@ static int stats_socket_recv(rad_listen_t *listener)
                return 0;
        }
 
-       FR_STATS_TYPE_INC(client->auth->total_requests);
+       FR_STATS_TYPE_INC(client->auth.total_requests);
 
        /*
         *      We only understand Status-Server on this socket.
@@ -1315,7 +1315,7 @@ static int auth_socket_recv(rad_listen_t *listener)
                return 0;
        }
 
-       FR_STATS_TYPE_INC(client->auth->total_requests);
+       FR_STATS_TYPE_INC(client->auth.total_requests);
 
        /*
         *      Some sanity checks, based on the packet code.
@@ -1396,7 +1396,7 @@ static int acct_socket_recv(rad_listen_t *listener)
                return 0;
        }
 
-       FR_STATS_TYPE_INC(client->acct->total_requests);
+       FR_STATS_TYPE_INC(client->acct.total_requests);
 
        /*
         *      Some sanity checks, based on the packet code.
index b5aba40..efeefc2 100644 (file)
@@ -1312,11 +1312,11 @@ int request_receive(rad_listen_t *listener, RADIUS_PACKET *packet,
 #ifdef WITH_STATS
        request->listener->stats.last_packet = request->packet->timestamp.tv_sec;
        if (packet->code == PW_AUTHENTICATION_REQUEST) {
-               request->client->auth->last_packet = request->packet->timestamp.tv_sec;
+               request->client->auth.last_packet = request->packet->timestamp.tv_sec;
                radius_auth_stats.last_packet = request->packet->timestamp.tv_sec;
 #ifdef WITH_ACCOUNTING
        } else if (packet->code == PW_ACCOUNTING_REQUEST) {
-               request->client->acct->last_packet = request->packet->timestamp.tv_sec;
+               request->client->acct.last_packet = request->packet->timestamp.tv_sec;
                radius_acct_stats.last_packet = request->packet->timestamp.tv_sec;
 #endif
        }
index 55ba73e..6ff11d1 100644 (file)
@@ -115,6 +115,9 @@ void request_stats_final(REQUEST *request)
 {
        if (request->master_state == REQUEST_COUNTED) return;
 
+       if (!request->listener) return;
+       if (!request->client) return;
+
        if ((request->listener->type != RAD_LISTEN_NONE) &&
 #ifdef WITH_ACCOUNTING
            (request->listener->type != RAD_LISTEN_ACCT) &&
@@ -125,26 +128,26 @@ void request_stats_final(REQUEST *request)
            (request->listener->type != RAD_LISTEN_AUTH)) return;
 
 #undef INC_AUTH
-#define INC_AUTH(_x) radius_auth_stats._x++;request->listener->stats._x++;if (request->client && request->client->auth) request->client->auth->_x++;
+#define INC_AUTH(_x) radius_auth_stats._x++;request->listener->stats._x++;request->client->auth._x++;
 
 
 #undef INC_ACCT
 #ifdef WITH_ACCOUNTING
-#define INC_ACCT(_x) radius_acct_stats._x++;request->listener->stats._x++;if (request->client && request->client->acct) request->client->acct->_x++
+#define INC_ACCT(_x) radius_acct_stats._x++;request->listener->stats._x++;request->client->acct._x++
 #else
 #define INC_ACCT(_x)
 #endif
 
 #undef INC_COA
 #ifdef WITH_COA
-#define INC_COA(_x) radius_coa_stats._x++;request->listener->stats._x++;if (request->client && request->client->coa) request->client->coa->_x++
+#define INC_COA(_x) radius_coa_stats._x++;request->listener->stats._x++;request->client->coa._x++
 #else
 #define INC_COA(_x)
 #endif
 
 #undef INC_DSC
 #ifdef WITH_DSC
-#define INC_DSC(_x) radius_dsc_stats._x++;request->listener->stats._x++;if (request->client && request->client->dsc) request->client->dsc->_x++
+#define INC_DSC(_x) radius_dsc_stats._x++;request->listener->stats._x++;request->client->dsc._x++
 #else
 #define INC_DSC(_x)
 #endif
@@ -170,16 +173,12 @@ void request_stats_final(REQUEST *request)
                stats_time(&radius_auth_stats,
                           &request->packet->timestamp,
                           &request->reply->timestamp);
-               if (request->client && request->client->auth) {
-                       stats_time(request->client->auth,
-                                  &request->packet->timestamp,
-                                  &request->reply->timestamp);
-               }
-               if (request->listener) {
-                       stats_time(&request->listener->stats,
-                                  &request->packet->timestamp,
-                                  &request->reply->timestamp);
-               }
+               stats_time(&request->client->auth,
+                          &request->packet->timestamp,
+                          &request->reply->timestamp);
+               stats_time(&request->listener->stats,
+                          &request->packet->timestamp,
+                          &request->reply->timestamp);
                break;
 
        case PW_AUTHENTICATION_REJECT:
@@ -196,11 +195,9 @@ void request_stats_final(REQUEST *request)
                stats_time(&radius_acct_stats,
                           &request->packet->timestamp,
                           &request->reply->timestamp);
-               if (request->client && request->client->acct) {
-                       stats_time(request->client->acct,
-                                  &request->packet->timestamp,
-                                  &request->reply->timestamp);
-               }
+               stats_time(&request->client->acct,
+                          &request->packet->timestamp,
+                          &request->reply->timestamp);
                break;
 #endif
 
@@ -209,11 +206,9 @@ void request_stats_final(REQUEST *request)
                INC_COA(total_access_accepts);
          coa_stats:
                INC_COA(total_responses);
-               if (request->client && request->client->coa) {
-                       stats_time(request->client->coa,
-                                  &request->packet->timestamp,
-                                  &request->reply->timestamp);
-               }
+               stats_time(&request->client->coa,
+                          &request->packet->timestamp,
+                          &request->reply->timestamp);
                break;
 
        case PW_COA_NAK:
@@ -224,11 +219,9 @@ void request_stats_final(REQUEST *request)
                INC_DSC(total_access_accepts);
          dsc_stats:
                INC_DSC(total_responses);
-               if (request->client && request->client->dsc) {
-                       stats_time(request->client->dsc,
-                                  &request->packet->timestamp,
-                                  &request->reply->timestamp);
-               }
+               stats_time(&request->client->dsc,
+                          &request->packet->timestamp,
+                          &request->reply->timestamp);
                break;
 
        case PW_DISCONNECT_NAK:
@@ -620,16 +613,14 @@ void request_stats_reply(REQUEST *request)
                                        paircopyvp(server_port));
                        }
 
-                       if (client->auth &&
-                           ((flag->vp_integer & 0x01) != 0)) {
+                       if ((flag->vp_integer & 0x01) != 0) {
                                request_stats_addvp(request, client_authvp,
-                                                   client->auth);
+                                                   &client->auth);
                        }
 #ifdef WITH_ACCOUNTING
-                       if (client->acct &&
-                           ((flag->vp_integer & 0x01) != 0)) {
+                       if ((flag->vp_integer & 0x01) != 0) {
                                request_stats_addvp(request, client_acctvp,
-                                                   client->acct);
+                                                   &client->acct);
                        }
 #endif
                } /* else client wasn't found, don't echo it back */