summaryrefslogtreecommitdiff
path: root/common/src/tfe_packet_io_fs.cpp
diff options
context:
space:
mode:
authorwangmenglan <[email protected]>2023-05-09 22:12:38 +0800
committerwangmenglan <[email protected]>2023-05-09 22:13:20 +0800
commit542f4cbdfa6f58dd8a07e35663116a08f54170bd (patch)
treea23444151ef7dbef555d3ed213cc1465d4843d88 /common/src/tfe_packet_io_fs.cpp
parentfecc023418f9e659b46a47e7374c956080a9db67 (diff)
TSG-14930 TFE支持发送控制报文给SAPPv4.8.10-20230509
Diffstat (limited to 'common/src/tfe_packet_io_fs.cpp')
-rw-r--r--common/src/tfe_packet_io_fs.cpp205
1 files changed, 205 insertions, 0 deletions
diff --git a/common/src/tfe_packet_io_fs.cpp b/common/src/tfe_packet_io_fs.cpp
new file mode 100644
index 0000000..13469b2
--- /dev/null
+++ b/common/src/tfe_packet_io_fs.cpp
@@ -0,0 +1,205 @@
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <MESA/MESA_prof_load.h>
+
+#include "tfe_proxy.h"
+#include "tfe_packet_io_fs.h"
+
+enum PACKET_IO_STAT_FIELD
+{
+ // hit block policy
+ STAT_HIT_POLICY_PKT,
+ STAT_HIT_POLICY_B,
+
+ // dev nf interface
+ STAT_RAW_PKT_RX_PKT,
+ STAT_RAW_PKT_RX_B,
+
+ STAT_RAW_PKT_TX_PKT,
+ STAT_RAW_PKT_TX_B,
+
+ STAT_DECRYPTED_TX_PKT,
+ STAT_DECRYPTED_TX_B,
+ STAT_DECRYPTED_RX_PKT,
+ STAT_DECRYPTED_RX_B,
+
+ // control packet
+ STAT_CONTROL_RX_PKT,
+ STAT_CONTROL_RX_B,
+ STAT_CONTROL_TX_PKT,
+ STAT_CONTROL_TX_B,
+
+ STAT_TAP_RX_PKT,
+ STAT_TAP_RX_B,
+ STAT_TAP_TX_PKT,
+ STAT_TAP_TX_B,
+
+ STAT_TAP_C_RX_PKT,
+ STAT_TAP_C_RX_B,
+ STAT_TAP_C_TX_PKT,
+ STAT_TAP_C_TX_B,
+
+ STAT_TAP_S_RX_PKT,
+ STAT_TAP_S_RX_B,
+ STAT_TAP_S_TX_PKT,
+ STAT_TAP_S_TX_B,
+
+ STAT_CTRL_PKT_OPENING,
+ STAT_CTRL_PKT_ACTIVE,
+ STAT_CTRL_PKT_CLOSING,
+ STAT_CTRL_PKT_RESETALL,
+ STAT_CTRL_PKT_ERROR,
+
+ // send log
+ STAT_SEND_LOG,
+
+ // max
+ STAT_MAX,
+};
+
+static const char *stat_map[] =
+{
+ // hit policy
+ [STAT_HIT_POLICY_PKT] = "hit_policy_pkt",
+ [STAT_HIT_POLICY_B] = "hit_policy_B",
+
+ // dev nf interface
+ [STAT_RAW_PKT_RX_PKT] = "raw_rx_pkt",
+ [STAT_RAW_PKT_RX_B] = "raw_rx_B",
+
+ [STAT_RAW_PKT_TX_PKT] = "raw_tx_pkt",
+ [STAT_RAW_PKT_TX_B] = "raw_tx_B",
+
+ // decrypted
+ [STAT_DECRYPTED_TX_PKT] = "decrypt_tx_pkt",
+ [STAT_DECRYPTED_TX_B] = "decrypt_tx_B",
+ [STAT_DECRYPTED_RX_PKT] = "decrypt_rx_pkt",
+ [STAT_DECRYPTED_RX_B] = "decrypt_rx_B",
+
+ // control packet
+ [STAT_CONTROL_RX_PKT] = "ctrl_rx_pkt",
+ [STAT_CONTROL_RX_B] = "ctrl_rx_B",
+ [STAT_CONTROL_TX_PKT] = "ctrl_tx_pkt",
+ [STAT_CONTROL_TX_B] = "ctrl_tx_B",
+
+ // tap packet
+ [STAT_TAP_RX_PKT] = "tap_rx_pkt",
+ [STAT_TAP_RX_B] = "tap_rx_B",
+ [STAT_TAP_TX_PKT] = "tap_tx_pkt",
+ [STAT_TAP_TX_B] = "tap_tx_B",
+ [STAT_TAP_C_RX_PKT] = "tap_c_rx_pkt",
+ [STAT_TAP_C_RX_B] = "tap_c_rx_B",
+ [STAT_TAP_C_TX_PKT] = "tap_c_tx_pkt",
+ [STAT_TAP_C_TX_B] = "tap_c_tx_B",
+ [STAT_TAP_S_RX_PKT] = "tap_s_rx_pkt",
+ [STAT_TAP_S_RX_B] = "tap_s_rx_B",
+ [STAT_TAP_S_TX_PKT] = "tap_s_tx_pkt",
+ [STAT_TAP_S_TX_B] = "tap_s_tx_B",
+
+ [STAT_CTRL_PKT_OPENING] = "ctrl_pkt_open",
+ [STAT_CTRL_PKT_ACTIVE] = "ctrl_pkt_avtive",
+ [STAT_CTRL_PKT_CLOSING] = "ctrl_pkt_close",
+ [STAT_CTRL_PKT_RESETALL] = "ctrl_pkt_reset",
+ [STAT_CTRL_PKT_ERROR] = "ctrl_pkt_error",
+
+ // send log
+ [STAT_SEND_LOG] = "send_log",
+
+ [STAT_MAX] = NULL
+};
+
+/******************************************************************************
+ * throughput_metrics
+ ******************************************************************************/
+
+void throughput_metrics_inc(struct throughput_metrics *iterm, uint64_t n_pkts, uint64_t n_bytes)
+{
+ __atomic_fetch_add(&iterm->n_bytes, n_bytes, __ATOMIC_RELAXED);
+ __atomic_fetch_add(&iterm->n_pkts, n_pkts, __ATOMIC_RELAXED);
+}
+
+struct packet_io_fs *packet_io_fs_create()
+{
+ int value=0, i=0;
+ const char* app_name="packet_io";
+ const char* fieldstat_output="log/packet_io.fs2";
+
+ struct packet_io_fs *handle = (struct packet_io_fs *)calloc(1, sizeof(struct packet_io_fs));
+
+ handle->fs_handle=FS_create_handle();
+ FS_set_para(handle->fs_handle, OUTPUT_DEVICE, fieldstat_output, strlen(fieldstat_output)+1);
+ value=1;
+ FS_set_para(handle->fs_handle, PRINT_MODE, &value, sizeof(value));
+ value=0;
+ FS_set_para(handle->fs_handle, CREATE_THREAD, &value, sizeof(value));
+ FS_set_para(handle->fs_handle, APP_NAME, app_name, strlen(app_name)+1);
+
+ for (int i = 0; i < STAT_MAX; i++)
+ {
+ handle->fs_id[i] = FS_register(handle->fs_handle, FS_STYLE_FIELD, FS_CALC_CURRENT, stat_map[i]);
+ }
+ FS_start(handle->fs_handle);
+ return handle;
+}
+
+void packet_io_fs_destory(struct packet_io_fs *handle)
+{
+ if (handle)
+ {
+ FS_library_destroy();
+ free(handle);
+ handle = NULL;
+ }
+}
+
+void packet_io_fs_dump(struct packet_io_fs *handle)
+{
+ if (handle == NULL)
+ return;
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_HIT_POLICY_PKT], 0, FS_OP_SET, __atomic_fetch_add(&(handle->hit_policy.n_pkts), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_HIT_POLICY_B], 0, FS_OP_SET, __atomic_fetch_add(&(handle->hit_policy.n_bytes), 0, __ATOMIC_RELAXED));
+
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_RAW_PKT_RX_PKT], 0, FS_OP_SET, __atomic_fetch_add(&(handle->raw_pkt_rx.n_pkts), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_RAW_PKT_RX_B], 0, FS_OP_SET, __atomic_fetch_add(&(handle->raw_pkt_rx.n_bytes), 0, __ATOMIC_RELAXED));
+
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_RAW_PKT_TX_PKT], 0, FS_OP_SET, __atomic_fetch_add(&(handle->raw_pkt_tx.n_pkts), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_RAW_PKT_TX_B], 0, FS_OP_SET, __atomic_fetch_add(&(handle->raw_pkt_tx.n_bytes), 0, __ATOMIC_RELAXED));
+
+
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_DECRYPTED_TX_PKT], 0, FS_OP_SET, __atomic_fetch_add(&(handle->decrypt_tx.n_pkts), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_DECRYPTED_TX_B], 0, FS_OP_SET, __atomic_fetch_add(&(handle->decrypt_tx.n_bytes), 0, __ATOMIC_RELAXED));
+
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_DECRYPTED_RX_PKT], 0, FS_OP_SET, __atomic_fetch_add(&(handle->decrypt_rx.n_pkts), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_DECRYPTED_RX_B], 0, FS_OP_SET, __atomic_fetch_add(&(handle->decrypt_rx.n_bytes), 0, __ATOMIC_RELAXED));
+
+ // control packet
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_CONTROL_RX_PKT], 0, FS_OP_SET, __atomic_fetch_add(&(handle->ctrl_pkt_rx.n_pkts), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_CONTROL_RX_B], 0, FS_OP_SET, __atomic_fetch_add(&(handle->ctrl_pkt_rx.n_bytes), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_CONTROL_TX_PKT], 0, FS_OP_SET, __atomic_fetch_add(&(handle->ctrl_pkt_tx.n_pkts), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_CONTROL_TX_B], 0, FS_OP_SET, __atomic_fetch_add(&(handle->ctrl_pkt_tx.n_bytes), 0, __ATOMIC_RELAXED));
+
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_TAP_RX_PKT], 0, FS_OP_SET, __atomic_fetch_add(&(handle->tap_pkt_rx.n_pkts), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_TAP_RX_B], 0, FS_OP_SET, __atomic_fetch_add(&(handle->tap_pkt_rx.n_bytes), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_TAP_TX_PKT], 0, FS_OP_SET, __atomic_fetch_add(&(handle->tap_pkt_tx.n_pkts), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_TAP_TX_B], 0, FS_OP_SET, __atomic_fetch_add(&(handle->tap_pkt_tx.n_bytes), 0, __ATOMIC_RELAXED));
+
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_TAP_C_RX_PKT], 0, FS_OP_SET, __atomic_fetch_add(&(handle->tap_c_pkt_rx.n_pkts), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_TAP_C_RX_B], 0, FS_OP_SET, __atomic_fetch_add(&(handle->tap_c_pkt_rx.n_bytes), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_TAP_C_TX_PKT], 0, FS_OP_SET, __atomic_fetch_add(&(handle->tap_c_pkt_tx.n_pkts), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_TAP_C_TX_B], 0, FS_OP_SET, __atomic_fetch_add(&(handle->tap_c_pkt_tx.n_bytes), 0, __ATOMIC_RELAXED));
+
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_TAP_S_RX_PKT], 0, FS_OP_SET, __atomic_fetch_add(&(handle->tap_pkt_rx.n_pkts), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_TAP_S_RX_B], 0, FS_OP_SET, __atomic_fetch_add(&(handle->tap_pkt_rx.n_bytes), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_TAP_S_TX_PKT], 0, FS_OP_SET, __atomic_fetch_add(&(handle->tap_pkt_tx.n_pkts), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_TAP_S_TX_B], 0, FS_OP_SET, __atomic_fetch_add(&(handle->tap_pkt_tx.n_bytes), 0, __ATOMIC_RELAXED));
+
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_CTRL_PKT_OPENING], 0, FS_OP_SET, __atomic_fetch_add(&(handle->ctrl_pkt_opening_num), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_CTRL_PKT_ACTIVE], 0, FS_OP_SET, __atomic_fetch_add(&(handle->ctrl_pkt_active_num), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_CTRL_PKT_CLOSING], 0, FS_OP_SET, __atomic_fetch_add(&(handle->ctrl_pkt_closing_num), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_CTRL_PKT_RESETALL], 0, FS_OP_SET, __atomic_fetch_add(&(handle->ctrl_pkt_resetall_num), 0, __ATOMIC_RELAXED));
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_CTRL_PKT_ERROR], 0, FS_OP_SET, __atomic_fetch_add(&(handle->ctrl_pkt_error_num), 0, __ATOMIC_RELAXED));
+
+ // send log
+ FS_operate(handle->fs_handle, handle->fs_id[STAT_SEND_LOG], 0, FS_OP_SET, __atomic_fetch_add(&(handle->send_log), 0, __ATOMIC_RELAXED));
+}