From dde66f42ea48aab598160a092a57a05ec86ab1ca Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Wed, 15 Jun 2022 08:26:07 +0000 Subject: [PATCH] monkey test start/stop command --- code/bngblaster/src/bbl.c | 2 ++ code/bngblaster/src/bbl_config.c | 5 +++++ code/bngblaster/src/bbl_ctrl.c | 21 +++++++++++++++++++++ code/bngblaster/src/bbl_ctx.h | 2 +- code/bngblaster/src/bbl_session.c | 3 ++- 5 files changed, 31 insertions(+), 2 deletions(-) diff --git a/code/bngblaster/src/bbl.c b/code/bngblaster/src/bbl.c index 055e6f03..a68d6ea8 100644 --- a/code/bngblaster/src/bbl.c +++ b/code/bngblaster/src/bbl.c @@ -24,6 +24,7 @@ bool g_interactive = false; /* interactive mode using ncurses */ bool g_init_phase = true; bool g_traffic = true; bool g_banner = true; +bool g_monkey = true; extern char *g_log_file; volatile bool g_teardown = false; @@ -541,6 +542,7 @@ main(int argc, char *argv[]) exit(1); } } + g_monkey = ctx->config.monkey_autostart; if(username) ctx->config.username = username; if(password) ctx->config.password = password; diff --git a/code/bngblaster/src/bbl_config.c b/code/bngblaster/src/bbl_config.c index 394e0a52..b69205ac 100644 --- a/code/bngblaster/src/bbl_config.c +++ b/code/bngblaster/src/bbl_config.c @@ -1354,6 +1354,10 @@ json_parse_config(json_t *root, bbl_ctx_s *ctx) { if (json_is_boolean(value)) { ctx->config.sessions_autostart = json_boolean_value(value); } + value = json_object_get(section, "monkey-autostart"); + if (json_is_boolean(value)) { + ctx->config.monkey_autostart = json_boolean_value(value); + } } /* IPoE Configuration */ @@ -2230,6 +2234,7 @@ bbl_config_init_defaults (bbl_ctx_s *ctx) { ctx->config.sessions_start_rate = 400; ctx->config.sessions_stop_rate = 400; ctx->config.sessions_autostart = true; + ctx->config.monkey_autostart = true; ctx->config.pppoe_discovery_timeout = 5; ctx->config.pppoe_discovery_retry = 10; ctx->config.ppp_mru = 1492; diff --git a/code/bngblaster/src/bbl_ctrl.c b/code/bngblaster/src/bbl_ctrl.c index 8725b2c0..a6a68fb8 100644 --- a/code/bngblaster/src/bbl_ctrl.c +++ b/code/bngblaster/src/bbl_ctrl.c @@ -30,6 +30,7 @@ extern volatile bool g_teardown; extern volatile bool g_teardown_request; +extern volatile bool g_monkey; typedef ssize_t callback_function(int fd, bbl_ctx_s *ctx, uint32_t session_id, json_t* arguments); @@ -1305,6 +1306,24 @@ bbl_ctrl_traffic_stop(int fd, bbl_ctx_s *ctx, uint32_t session_id __attribute__( return bbl_ctrl_status(fd, "ok", 200, NULL); } +ssize_t +bgp_ctrl_monkey_start(int fd, bbl_ctx_s *ctx __attribute__((unused)), uint32_t session_id __attribute__((unused)), json_t* arguments __attribute__((unused))) { + if(!g_monkey) { + LOG_NOARG(INFO, "Start monkey\n"); + } + g_monkey = true; + return bbl_ctrl_status(fd, "ok", 200, NULL); +} + +ssize_t +bgp_ctrl_monkey_stop(int fd, bbl_ctx_s *ctx __attribute__((unused)), uint32_t session_id __attribute__((unused)), json_t* arguments __attribute__((unused))) { + if(g_monkey) { + LOG_NOARG(INFO, "Stop monkey\n"); + } + g_monkey = false; + return bbl_ctrl_status(fd, "ok", 200, NULL); +} + struct action { char *name; callback_function *fn; @@ -1364,6 +1383,8 @@ struct action actions[] = { {"bgp-teardown", bgp_ctrl_teardown}, {"bgp-raw-update-list", bgp_ctrl_raw_update_list}, {"bgp-raw-update", bgp_ctrl_raw_update}, + {"monkey-start", bgp_ctrl_monkey_start}, + {"monkey-stop", bgp_ctrl_monkey_stop}, {NULL, NULL}, }; diff --git a/code/bngblaster/src/bbl_ctx.h b/code/bngblaster/src/bbl_ctx.h index b816f33b..ed7efe79 100644 --- a/code/bngblaster/src/bbl_ctx.h +++ b/code/bngblaster/src/bbl_ctx.h @@ -190,7 +190,7 @@ typedef struct bbl_ctx_ uint16_t sessions_stop_rate; uint16_t sessions_start_delay; bool sessions_autostart; - + bool monkey_autostart; bool iterate_outer_vlan; /* Static */ diff --git a/code/bngblaster/src/bbl_session.c b/code/bngblaster/src/bbl_session.c index 6501be9f..7952860b 100644 --- a/code/bngblaster/src/bbl_session.c +++ b/code/bngblaster/src/bbl_session.c @@ -14,6 +14,7 @@ #include "bbl_dhcpv6.h" extern volatile bool g_teardown; +extern volatile bool g_monkey; const char * session_state_string(uint32_t state) { @@ -217,7 +218,7 @@ void bbl_session_monkey_job(timer_s *timer) { bbl_session_s *session = timer->data; - if(g_teardown) { + if(g_teardown || !g_monkey) { return; }