]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
add and document "repeat" functionality
authorAlan T. DeKok <aland@freeradius.org>
Wed, 29 Apr 2020 19:58:32 +0000 (15:58 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 29 Apr 2020 20:00:55 +0000 (16:00 -0400)
raddb/sites-available/test_load
src/modules/proto_radius/proto_radius_load.c

index 0ed5406ee7c4fb1c6f8f2c20b589990ee2a6e026..d578994792a917fc5b2bb2c534d04b01fa840723 100644 (file)
@@ -123,6 +123,13 @@ server load {
                        #  back to sending at the "pps" rate.
                        #
                        max_backlog     = 1000
+
+
+                       #
+                       #  repeat:: whether or not to start again after
+                       #  we reach max_pps
+                       #
+                       repeat = no
                }
        }
 
index 4d7828c60ffa7122becff898b74d2198c5eb0307..49b366684af2d8d5eccc3bd07dad5575cbc7c438 100644 (file)
@@ -90,7 +90,7 @@ struct proto_radius_load_s {
        RADCLIENT                       *client;                //!< static client
 
        fr_load_config_t                load;                   //!< load configuration
-
+       bool                            repeat;                 //!, do we repeat the load generation
        char const                      *csv;                   //!< where to write CSV stats
 };
 
@@ -108,6 +108,7 @@ static const CONF_PARSER load_listen_config[] = {
        { FR_CONF_OFFSET("step", FR_TYPE_UINT32, proto_radius_load_t, load.step) },
        { FR_CONF_OFFSET("max_backlog", FR_TYPE_UINT32, proto_radius_load_t, load.milliseconds) },
        { FR_CONF_OFFSET("parallel", FR_TYPE_UINT32, proto_radius_load_t, load.parallel) },
+       { FR_CONF_OFFSET("repeat", FR_TYPE_BOOL, proto_radius_load_t, repeat) },
 
        CONF_PARSER_TERMINATOR
 };
@@ -188,7 +189,12 @@ static ssize_t mod_write(fr_listen_t *li, UNUSED void *packet_ctx, fr_time_t req
         */
        state = fr_load_generator_have_reply(thread->l, request_time);
        if (state == FR_LOAD_DONE) {
-               thread->done = true;
+               if (!thread->inst->repeat) {
+                       thread->done = true;
+               } else {
+                       (void) fr_load_generator_stop(thread->l); /* ensure l->ev is gone */
+                       (void) fr_load_generator_start(thread->l);
+               }
        }
 
        return buffer_len;