From aa6f0cd0fa4433343a13b79e2b2c09c4d3e1f652 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Wed, 10 Mar 2021 17:44:11 +0100 Subject: [PATCH] Add L2TP session data rx/tx stats --- docs/l2tp.md | 8 +++++--- src/bbl_ctrl.c | 10 ++++++---- src/bbl_l2tp.c | 2 ++ src/bbl_l2tp.h | 6 ++++++ 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/docs/l2tp.md b/docs/l2tp.md index 9195adaf..0c27b535 100644 --- a/docs/l2tp.md +++ b/docs/l2tp.md @@ -281,8 +281,8 @@ Following an example with 30 L2TP LNS servers. "control-packets-rx-out-of-order": 0, "control-packets-tx": 102, "control-packets-tx-retry": 0, - "control-data-rx": 1406, - "control-data-tx": 206 + "data-packets-rx": 1406, + "data-packets-tx": 206 } ] } @@ -311,7 +311,9 @@ The `l2tp-sessions` command returns all L2TP sessions. "peer-tx-bps": 48000, "peer-rx-bps": 1000, "peer-ari": "DEU.RTBRICK.1", - "peer-aci": "0.0.0.0/0.0.0.0 eth 0:1" + "peer-aci": "0.0.0.0/0.0.0.0 eth 0:1", + "data-packets-rx": 79, + "data-packets-tx": 79 } ] } diff --git a/src/bbl_ctrl.c b/src/bbl_ctrl.c index 47eca05c..1e2de93a 100644 --- a/src/bbl_ctrl.c +++ b/src/bbl_ctrl.c @@ -768,8 +768,8 @@ bbl_ctrl_l2tp_tunnels(int fd, bbl_ctx_s *ctx, session_key_t *key __attribute__(( "control-packets-rx-out-of-order", l2tp_tunnel->stats.control_rx_ooo, "control-packets-tx", l2tp_tunnel->stats.control_tx, "control-packets-tx-retry", l2tp_tunnel->stats.control_retry, - "control-data-rx", l2tp_tunnel->stats.data_rx, - "control-data-tx", l2tp_tunnel->stats.data_tx); + "data-packets-rx", l2tp_tunnel->stats.data_rx, + "data-packets-tx", l2tp_tunnel->stats.data_tx); json_array_append(tunnels, tunnel); } l2tp_server = l2tp_server->next; @@ -791,7 +791,7 @@ bbl_ctrl_l2tp_tunnels(int fd, bbl_ctx_s *ctx, session_key_t *key __attribute__(( json_t * l2tp_session_json(bbl_l2tp_session_t *l2tp_session) { - return json_pack("{ss si si si si ss ss ss ss si si ss ss}", + return json_pack("{ss si si si si ss ss ss ss si si ss ss si si}", "state", l2tp_session_state_string(l2tp_session->state), "tunnel-id", l2tp_session->key.tunnel_id, "session-id", l2tp_session->key.session_id, @@ -804,7 +804,9 @@ l2tp_session_json(bbl_l2tp_session_t *l2tp_session) { "peer-tx-bps", l2tp_session->peer_tx_bps, "peer-rx-bps", l2tp_session->peer_rx_bps, "peer-ari", string_or_na(l2tp_session->peer_ari), - "peer-aci", string_or_na(l2tp_session->peer_aci)); + "peer-aci", string_or_na(l2tp_session->peer_aci), + "data-packets-rx", l2tp_session->stats.data_rx, + "data-packets-tx", l2tp_session->stats.data_tx); } ssize_t diff --git a/src/bbl_l2tp.c b/src/bbl_l2tp.c index d9f2404e..34a09b03 100644 --- a/src/bbl_l2tp.c +++ b/src/bbl_l2tp.c @@ -491,6 +491,7 @@ bbl_l2tp_send_data(bbl_l2tp_session_t *l2tp_session, uint16_t protocol, void *ne q->packet_len = len; CIRCLEQ_INSERT_TAIL(&interface->l2tp_tx_qhead, q, tx_qnode); l2tp_tunnel->stats.data_tx++; + l2tp_session->stats.data_tx++; interface->stats.l2tp_data_tx++; } else { LOG(ERROR, "L2TP Data Encode Error!\n"); @@ -847,6 +848,7 @@ bbl_l2tp_data_rx(bbl_ethernet_header_t *eth, bbl_l2tp_t *l2tp, bbl_interface_s * return; } + l2tp_session->stats.data_rx++; switch (l2tp->protocol) { case PROTOCOL_LCP: lcp_rx = (bbl_lcp_t*)l2tp->next; diff --git a/src/bbl_l2tp.h b/src/bbl_l2tp.h index 5a300bbf..d38750bb 100644 --- a/src/bbl_l2tp.h +++ b/src/bbl_l2tp.h @@ -212,6 +212,11 @@ typedef struct bbl_l2tp_session_ uint16_t session_id; } key; + struct { + uint64_t data_rx; /* Session data traffic received */ + uint64_t data_tx; /* Session data traffic send */ + } stats; + uint16_t peer_session_id; bool data_sequencing; @@ -250,6 +255,7 @@ typedef struct bbl_l2tp_session_ char *peer_sub_address; char *peer_ari; char *peer_aci; + } bbl_l2tp_session_t; const char* l2tp_message_string(l2tp_message_type type);