diff --git a/code/bngblaster/src/bbl_ctrl.c b/code/bngblaster/src/bbl_ctrl.c index 823888ca..ac022647 100644 --- a/code/bngblaster/src/bbl_ctrl.c +++ b/code/bngblaster/src/bbl_ctrl.c @@ -182,6 +182,7 @@ struct action actions[] = { {"session-traffic-start", bbl_session_ctrl_traffic_start, false}, {"session-traffic-disabled", bbl_session_ctrl_traffic_stop, false}, {"session-traffic-stop", bbl_session_ctrl_traffic_stop, false}, + {"session-traffic-reset", bbl_session_ctrl_traffic_reset, false}, {"session-streams", bbl_stream_ctrl_session, true}, {"stream-traffic-enabled", bbl_stream_ctrl_traffic_start, false}, {"stream-traffic-start", bbl_stream_ctrl_traffic_start, false}, diff --git a/code/bngblaster/src/bbl_session.c b/code/bngblaster/src/bbl_session.c index 3ac3f8e2..8c1fe9c2 100644 --- a/code/bngblaster/src/bbl_session.c +++ b/code/bngblaster/src/bbl_session.c @@ -1637,6 +1637,29 @@ bbl_session_ctrl_traffic_stop(int fd, uint32_t session_id, json_t *arguments __a return bbl_session_ctrl_traffic(fd, session_id, false); } +int +bbl_session_ctrl_traffic_reset(int fd, uint32_t session_id __attribute__((unused)), json_t *arguments __attribute__((unused))) +{ + bbl_stream_s *stream; + struct dict_itor *itor; + + g_ctx->stats.session_traffic_flows_verified = 0; + + /* Iterate over all traffic streams */ + itor = dict_itor_new(g_ctx->stream_flow_dict); + dict_itor_first(itor); + for (; dict_itor_valid(itor); dict_itor_next(itor)) { + stream = (bbl_stream_s*)*dict_itor_datum(itor); + if(!stream) { + continue; + } + if(stream->session_traffic) { + bbl_stream_reset(stream); + } + } + dict_itor_free(itor); + return bbl_ctrl_status(fd, "ok", 200, NULL); +} int bbl_session_ctrl_traffic_stats(int fd, uint32_t session_id __attribute__((unused)), json_t *arguments __attribute__((unused))) diff --git a/code/bngblaster/src/bbl_session.h b/code/bngblaster/src/bbl_session.h index b60fd632..73d5f6a1 100644 --- a/code/bngblaster/src/bbl_session.h +++ b/code/bngblaster/src/bbl_session.h @@ -423,6 +423,9 @@ bbl_session_ctrl_traffic_start(int fd, uint32_t session_id, json_t *arguments __ int bbl_session_ctrl_traffic_stop(int fd, uint32_t session_id, json_t *arguments __attribute__((unused))); +int +bbl_session_ctrl_traffic_reset(int fd, uint32_t session_id, json_t *arguments __attribute__((unused))); + int bbl_session_ctrl_traffic_stats(int fd, uint32_t session_id __attribute__((unused)), json_t *arguments __attribute__((unused))); diff --git a/docsrc/sources/api/sessions.rst b/docsrc/sources/api/sessions.rst index 088e9bbb..3ce12f02 100644 --- a/docsrc/sources/api/sessions.rst +++ b/docsrc/sources/api/sessions.rst @@ -29,6 +29,10 @@ - Disable/stop session traffic - - `session-id` + * - `session-traffic-reset` + - Reset all session traffic streams + - + - * - `session-streams` - Display session streams - `session-id`