diff --git a/src/bbl_ctrl.c b/src/bbl_ctrl.c index bfac82d8..fad414db 100644 --- a/src/bbl_ctrl.c +++ b/src/bbl_ctrl.c @@ -1042,10 +1042,15 @@ bbl_ctrl_sessions_pending(int fd, bbl_ctx_s *ctx, uint32_t session_id __attribut /* Iterate over all sessions */ for(i = 0; i < ctx->sessions; i++) { session = ctx->session_list[i]; - if(session && session->session_state != BBL_ESTABLISHED) { - json_session = json_pack("{si ss}", + if(!session) continue; + + if(session->session_state != BBL_ESTABLISHED || + session->session_traffic_flows != session->session_traffic_flows_verified) { + json_session = json_pack("{si ss si si}", "session-id", session->session_id, - "session-state", session_state_string(session->session_state)); + "session-state", session_state_string(session->session_state), + "session-traffic-flows", session->session_traffic_flows, + "session-traffic-flows-verified", session->session_traffic_flows_verified); json_array_append(json_sessions, json_session); } } diff --git a/src/bbl_rx.c b/src/bbl_rx.c index 04c4b1bc..b64b4ced 100644 --- a/src/bbl_rx.c +++ b/src/bbl_rx.c @@ -351,6 +351,7 @@ bbl_rx_udp_ipv6(bbl_ethernet_header_t *eth, bbl_ipv6_t *ipv6, bbl_interface_s *i if(!session->access_ipv6_rx_first_seq) { session->access_ipv6_rx_first_seq = bbl->flow_seq; interface->ctx->stats.session_traffic_flows_verified++; + session->session_traffic_flows_verified++; } else { if(session->access_ipv6_rx_last_seq +1 != bbl->flow_seq) { interface->stats.session_ipv6_loss++; @@ -377,6 +378,7 @@ bbl_rx_udp_ipv6(bbl_ethernet_header_t *eth, bbl_ipv6_t *ipv6, bbl_interface_s *i if(!session->access_ipv6pd_rx_first_seq) { session->access_ipv6pd_rx_first_seq = bbl->flow_seq; interface->ctx->stats.session_traffic_flows_verified++; + session->session_traffic_flows_verified++; } else { if(session->access_ipv6pd_rx_last_seq +1 != bbl->flow_seq) { interface->stats.session_ipv6pd_loss++; @@ -619,6 +621,7 @@ bbl_rx_ipv4(bbl_ethernet_header_t *eth, bbl_ipv4_t *ipv4, bbl_interface_s *inter if(!session->access_ipv4_rx_first_seq) { session->access_ipv4_rx_first_seq = bbl->flow_seq; interface->ctx->stats.session_traffic_flows_verified++; + session->session_traffic_flows_verified++; } else { if(session->access_ipv4_rx_last_seq +1 != bbl->flow_seq) { interface->stats.session_ipv4_loss++; @@ -1829,6 +1832,7 @@ bbl_rx_handler_network(bbl_ethernet_header_t *eth, bbl_interface_s *interface) { if(!session->network_ipv4_rx_first_seq) { session->network_ipv4_rx_first_seq = bbl->flow_seq; interface->ctx->stats.session_traffic_flows_verified++; + session->session_traffic_flows_verified++; } else { if(session->network_ipv4_rx_last_seq +1 != bbl->flow_seq) { interface->stats.session_ipv4_loss++; @@ -1849,6 +1853,7 @@ bbl_rx_handler_network(bbl_ethernet_header_t *eth, bbl_interface_s *interface) { if(!session->network_ipv6_rx_first_seq) { session->network_ipv6_rx_first_seq = bbl->flow_seq; interface->ctx->stats.session_traffic_flows_verified++; + session->session_traffic_flows_verified++; } else { if(session->network_ipv6_rx_last_seq +1 != bbl->flow_seq) { interface->stats.session_ipv6_loss++; @@ -1869,6 +1874,7 @@ bbl_rx_handler_network(bbl_ethernet_header_t *eth, bbl_interface_s *interface) { if(!session->network_ipv6pd_rx_first_seq) { session->network_ipv6pd_rx_first_seq = bbl->flow_seq; interface->ctx->stats.session_traffic_flows_verified++; + session->session_traffic_flows_verified++; } else { if(session->network_ipv6pd_rx_last_seq +1 != bbl->flow_seq) { interface->stats.session_ipv6pd_loss++; diff --git a/src/bbl_session.c b/src/bbl_session.c index 7b606ccc..266d35e4 100644 --- a/src/bbl_session.c +++ b/src/bbl_session.c @@ -271,6 +271,8 @@ bbl_session_update_state(bbl_ctx_s *ctx, bbl_session_s *session, session_state_t session->l2tp_session = NULL; /* Session traffic */ + session->session_traffic_flows = 0; + session->session_traffic_flows_verified = 0; session->access_ipv4_tx_flow_id = 0; session->access_ipv4_tx_seq = 0; session->access_ipv4_tx_packet_len = 0; @@ -683,7 +685,6 @@ bbl_session_json(bbl_session_s *session) json_t *root = NULL; json_t *session_traffic = NULL; json_t *a10nsp_session = NULL; - bbl_ctx_s *ctx; struct timespec now; @@ -699,8 +700,6 @@ bbl_session_json(bbl_session_s *session) const char *dhcpv6_dns1 = NULL; const char *dhcpv6_dns2 = NULL; - int flows = 0; - int flows_verified = 0; uint32_t seconds = 0; uint32_t dhcp_lease_expire = 0; uint32_t dhcp_lease_expire_t1 = 0; @@ -713,8 +712,6 @@ bbl_session_json(bbl_session_s *session) return NULL; } - ctx = session->interface->ctx; - if(session->ip_address) { ipv4 = format_ipv4_address(&session->ip_address); } @@ -749,23 +746,10 @@ bbl_session_json(bbl_session_s *session) dhcpv6_dns2 = format_ipv6_address(&session->dhcpv6_dns2); } - if(ctx->config.session_traffic_ipv4_pps || ctx->config.session_traffic_ipv6_pps || ctx->config.session_traffic_ipv6pd_pps) { - if(session->access_ipv4_tx_flow_id) flows++; - if(session->access_ipv6_tx_flow_id) flows++; - if(session->access_ipv6pd_tx_flow_id) flows++; - if(session->network_ipv4_tx_flow_id) flows++; - if(session->network_ipv6_tx_flow_id) flows++; - if(session->network_ipv6pd_tx_flow_id) flows++; - if(session->access_ipv4_rx_first_seq) flows_verified++; - if(session->access_ipv6_rx_first_seq) flows_verified++; - if(session->access_ipv6pd_rx_first_seq) flows_verified++; - if(session->network_ipv4_rx_first_seq) flows_verified++; - if(session->network_ipv6_rx_first_seq) flows_verified++; - if(session->network_ipv6pd_rx_first_seq) flows_verified++; - + if(session->session_traffic_flows) { session_traffic = json_pack("{si si si si si si si si si si si si si si si si si si si si si si si si si si}", - "total-flows", flows, - "verified-flows", flows_verified, + "total-flows", session->session_traffic_flows, + "verified-flows", session->session_traffic_flows_verified, "first-seq-rx-access-ipv4", session->access_ipv4_rx_first_seq, "first-seq-rx-access-ipv6", session->access_ipv6_rx_first_seq, "first-seq-rx-access-ipv6pd", session->access_ipv6pd_rx_first_seq, diff --git a/src/bbl_session.h b/src/bbl_session.h index 2e5ebfb3..7a6d0f97 100644 --- a/src/bbl_session.h +++ b/src/bbl_session.h @@ -262,6 +262,10 @@ typedef struct bbl_session_ /* Session Traffic */ bool session_traffic; + + uint8_t session_traffic_flows; + uint8_t session_traffic_flows_verified; + uint64_t access_ipv4_tx_flow_id; uint64_t access_ipv4_tx_seq; uint8_t *access_ipv4_tx_packet_template; diff --git a/src/bbl_session_traffic.c b/src/bbl_session_traffic.c index 92d87cce..bbb33739 100644 --- a/src/bbl_session_traffic.c +++ b/src/bbl_session_traffic.c @@ -156,6 +156,7 @@ bbl_session_traffic_add_ipv4_l2tp(bbl_ctx_s *ctx, bbl_session_s *session, session->network_ipv4_tx_seq = 1; if(!session->network_ipv4_tx_flow_id) { ctx->stats.session_traffic_flows++; + session->session_traffic_flows++; } session->network_ipv4_tx_flow_id = ctx->flow_id++; bbl.flow_id = session->network_ipv4_tx_flow_id; @@ -221,6 +222,7 @@ bbl_session_traffic_add_ipv4_a10nsp(bbl_ctx_s *ctx, bbl_session_s *session, session->network_ipv4_tx_seq = 1; if(!session->network_ipv4_tx_flow_id) { ctx->stats.session_traffic_flows++; + session->session_traffic_flows++; } session->network_ipv4_tx_flow_id = ctx->flow_id++; bbl.flow_id = session->network_ipv4_tx_flow_id; @@ -305,6 +307,7 @@ bbl_session_traffic_add_ipv4(bbl_ctx_s *ctx, bbl_session_s *session) session->access_ipv4_tx_seq = 1; if(!session->access_ipv4_tx_flow_id) { ctx->stats.session_traffic_flows++; + session->session_traffic_flows++; } session->access_ipv4_tx_flow_id = ctx->flow_id++; bbl.flow_id = session->access_ipv4_tx_flow_id; @@ -340,6 +343,7 @@ bbl_session_traffic_add_ipv4(bbl_ctx_s *ctx, bbl_session_s *session) session->network_ipv4_tx_seq = 1; if(!session->network_ipv4_tx_flow_id) { ctx->stats.session_traffic_flows++; + session->session_traffic_flows++; } session->network_ipv4_tx_flow_id = ctx->flow_id++; bbl.flow_id = session->network_ipv4_tx_flow_id; @@ -386,6 +390,7 @@ bbl_session_traffic_add_ipv6(bbl_ctx_s *ctx, bbl_session_s *session, bool ipv6_p session->access_ipv6pd_tx_seq = 1; if(!session->access_ipv6pd_tx_flow_id) { ctx->stats.session_traffic_flows++; + session->session_traffic_flows++; } session->access_ipv6pd_tx_flow_id = ctx->flow_id++; bbl.flow_id = session->access_ipv6pd_tx_flow_id; @@ -399,6 +404,7 @@ bbl_session_traffic_add_ipv6(bbl_ctx_s *ctx, bbl_session_s *session, bool ipv6_p session->access_ipv6_tx_seq = 1; if(!session->access_ipv6_tx_flow_id) { ctx->stats.session_traffic_flows++; + session->session_traffic_flows++; } session->access_ipv6_tx_flow_id = ctx->flow_id++; bbl.flow_id = session->access_ipv6_tx_flow_id; @@ -451,6 +457,7 @@ bbl_session_traffic_add_ipv6(bbl_ctx_s *ctx, bbl_session_s *session, bool ipv6_p session->network_ipv6pd_tx_seq = 1; if(!session->network_ipv6pd_tx_flow_id) { ctx->stats.session_traffic_flows++; + session->session_traffic_flows++; } session->network_ipv6pd_tx_flow_id = ctx->flow_id++; bbl.flow_id = session->network_ipv6pd_tx_flow_id; @@ -463,6 +470,7 @@ bbl_session_traffic_add_ipv6(bbl_ctx_s *ctx, bbl_session_s *session, bool ipv6_p session->network_ipv6_tx_seq = 1; if(!session->network_ipv6_tx_flow_id) { ctx->stats.session_traffic_flows++; + session->session_traffic_flows++; } session->network_ipv6_tx_flow_id = ctx->flow_id++; bbl.flow_id = session->network_ipv6_tx_flow_id;