From 989a118969751d1074fd168534d66df15b55628e Mon Sep 17 00:00:00 2001 From: luwenpeng Date: Wed, 26 Apr 2023 14:35:52 +0800 Subject: [PATCH] =?UTF-8?q?TSG-14908=20tsg-service-chaining-engine?= =?UTF-8?q?=E7=9A=84service=5Fchaining=5Frule=5Fhits=20metrics=E9=80=82?= =?UTF-8?q?=E9=85=8Dvsys=5Fid=E7=9A=84=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/sce_telegraf.conf | 1 - platform/include/policy.h | 1 + platform/include/sf_metrics.h | 2 +- platform/src/packet_io.cpp | 6 +++--- platform/src/policy.cpp | 13 +++++++++++++ platform/src/sf_metrics.cpp | 8 ++++++-- platform/test/gtest_sf_metrics.cpp | 2 +- platform/test/test_resource/sce.json | 8 ++++---- resource/sce.json | 8 ++++---- test/test_data/resource/raw_pkt_mirr_block.json | 2 +- test/test_data/resource/raw_pkt_mirr_bypass.json | 2 +- test/test_data/resource/raw_pkt_mirr_forward.json | 2 +- test/test_data/resource/raw_pkt_stee_block.json | 2 +- test/test_data/resource/raw_pkt_stee_bypass.json | 2 +- test/test_data/resource/raw_pkt_stee_forward.json | 2 +- test/test_data/resource/sce0.json | 2 +- 16 files changed, 40 insertions(+), 23 deletions(-) diff --git a/conf/sce_telegraf.conf b/conf/sce_telegraf.conf index 0e6fbe2..5ad64b9 100644 --- a/conf/sce_telegraf.conf +++ b/conf/sce_telegraf.conf @@ -1,7 +1,6 @@ # Telegraf Configuration [global_tags] device_id = "123456" - vsys_id = "1" device_group = "group-xxg-x-test" data_center = "center-xxg-x-test" diff --git a/platform/include/policy.h b/platform/include/policy.h index dfe4f68..3b542f5 100644 --- a/platform/include/policy.h +++ b/platform/include/policy.h @@ -81,6 +81,7 @@ struct connectivity struct selected_sf { uint64_t rule_id; + int rule_vsys_id; enum traffic_type traffic_type; int sff_profile_id; diff --git a/platform/include/sf_metrics.h b/platform/include/sf_metrics.h index b9652b0..67b32ad 100644 --- a/platform/include/sf_metrics.h +++ b/platform/include/sf_metrics.h @@ -13,7 +13,7 @@ struct sf_metrics *sf_metrics_create(const char *profile); void sf_metrics_destory(struct sf_metrics *handle); void sf_metrics_reset(struct sf_metrics *handle); -void sf_metrics_inc(struct sf_metrics *handle, uint64_t rule_id, int sff_profile_id, int sf_profile_id, uint64_t rx_pkts, uint64_t rx_bytes, uint64_t tx_pkts, uint64_t tx_bytes); +void sf_metrics_inc(struct sf_metrics *handle, int vsys_id, uint64_t rule_id, int sff_profile_id, int sf_profile_id, uint64_t rx_pkts, uint64_t rx_bytes, uint64_t tx_pkts, uint64_t tx_bytes); void sf_metrics_send(struct sf_metrics *handle); int sf_metrics_get_interval(struct sf_metrics *handle); diff --git a/platform/src/packet_io.cpp b/platform/src/packet_io.cpp index 033c692..ba6d303 100644 --- a/platform/src/packet_io.cpp +++ b/platform/src/packet_io.cpp @@ -447,7 +447,7 @@ static void action_mirr_forward(marsio_buff_t *rx_buff, struct metadata *meta, s throughput_metrics_inc(&(g_metrics->device.endpoint_tx), 1, nsend); throughput_metrics_inc(&(g_metrics->raw_pkt.mirr_tx), 1, raw_len); throughput_metrics_inc(&sf->tx, 1, nsend); - sf_metrics_inc(thread_ctx->sf_metrics, sf->rule_id, sf->sff_profile_id, sf->sf_profile_id, 0, 0, 1, nsend); + sf_metrics_inc(thread_ctx->sf_metrics, sf->rule_vsys_id, sf->rule_id, sf->sff_profile_id, sf->sf_profile_id, 0, 0, 1, nsend); } static void action_stee_bypass(marsio_buff_t *rx_buff, struct metadata *meta, struct selected_sf *sf, struct thread_ctx *thread_ctx) @@ -478,7 +478,7 @@ static void action_stee_forward(marsio_buff_t *rx_buff, struct metadata *meta, s throughput_metrics_inc(&(g_metrics->device.endpoint_tx), 1, nsend); throughput_metrics_inc(&(g_metrics->raw_pkt.stee_tx), 1, raw_len); throughput_metrics_inc(&sf->tx, 1, nsend); - sf_metrics_inc(thread_ctx->sf_metrics, sf->rule_id, sf->sff_profile_id, sf->sf_profile_id, 0, 0, 1, nsend); + sf_metrics_inc(thread_ctx->sf_metrics, sf->rule_vsys_id, sf->rule_id, sf->sff_profile_id, sf->sf_profile_id, 0, 0, 1, nsend); } static void action_sf_chaining(struct thread_ctx *thread_ctx, struct session_ctx *session_ctx, struct selected_chaining *chaining, marsio_buff_t *rx_buff, struct metadata *meta, int next_sf_index) @@ -963,7 +963,7 @@ static void handle_inject_packet(marsio_buff_t *rx_buff, struct thread_ctx *thre struct selected_sf *sf = &(chaining->chaining[sf_index]); throughput_metrics_inc(&sf->rx, 1, raw_len); throughput_metrics_inc(&(g_metrics->raw_pkt.stee_rx), 1, meta.raw_len); - sf_metrics_inc(thread_ctx->sf_metrics, sf->rule_id, sf->sff_profile_id, sf->sf_profile_id, 1, raw_len, 0, 0); + sf_metrics_inc(thread_ctx->sf_metrics, sf->rule_vsys_id, sf->rule_id, sf->sff_profile_id, sf->sf_profile_id, 1, raw_len, 0, 0); } marsio_buff_adj(rx_buff, raw_len - meta.raw_len); diff --git a/platform/src/policy.cpp b/platform/src/policy.cpp index 995d811..29dee62 100644 --- a/platform/src/policy.cpp +++ b/platform/src/policy.cpp @@ -68,6 +68,7 @@ struct chaining_param { uint64_t rule_id; int ref_cnt; + int vsys_id; enum traffic_type traffic_type; int *sff_profile_ids; @@ -301,6 +302,16 @@ static void chaining_param_new_cb(const char *table_name, int table_id, const ch param->rule_id = atoll(key); param->ref_cnt = 1; + // vsys_id + item = cJSON_GetObjectItem(json, "vsys_id"); + if (!item || !cJSON_IsNumber(item)) + { + LOG_ERROR("%s: unexpected chaining rule: (invalid vsys_id param) %s", LOG_TAG_POLICY, table_line); + goto error_out; + } + param->vsys_id = item->valueint; + LOG_DEBUG("%s: parse chaining rule: %lu, vsys_id: %d", LOG_TAG_POLICY, param->rule_id, param->vsys_id); + // targeted_traffic item = cJSON_GetObjectItem(json, "targeted_traffic"); if (!item || !cJSON_IsString(item)) @@ -1046,6 +1057,7 @@ static void selected_sf_init(struct selected_sf *item) if (item) { memset(item, 0, sizeof(struct selected_sf)); + item->rule_vsys_id = 0; item->rule_id = 0; item->traffic_type = TRAFFIC_TYPE_NONE; item->sff_profile_id = -1; @@ -1513,6 +1525,7 @@ void policy_enforce_select_chainings(struct policy_enforcer *enforcer, struct se selected_sf_init(item); item->rule_id = rule_id; + item->rule_vsys_id = chaining_param->vsys_id; item->traffic_type = chaining_param->traffic_type; item->sff_profile_id = chaining_param->sff_profile_ids[i]; item->sf_index = chaining->chaining_used; diff --git a/platform/src/sf_metrics.cpp b/platform/src/sf_metrics.cpp index 9f797f8..7ac5d28 100644 --- a/platform/src/sf_metrics.cpp +++ b/platform/src/sf_metrics.cpp @@ -10,10 +10,11 @@ #include "utils.h" #include "sf_metrics.h" -#define SCE_SF_METRICS "service_chaining_rule_hits,rule_id=%lu,sff_profile_id=%d,sf_profile_id=%d sent_pkts=%lu,sent_bytes=%lu,recv_pkts=%lu,recv_bytes=%lu" +#define SCE_SF_METRICS "service_chaining_rule_hits,vsys_id=%d,rule_id=%lu,sff_profile_id=%d,sf_profile_id=%d sent_pkts=%lu,sent_bytes=%lu,recv_pkts=%lu,recv_bytes=%lu" struct key_tuple { + int vsys_id; uint64_t rule_id; int sff_profile_id; int sf_profile_id; @@ -137,7 +138,7 @@ void sf_metrics_reset(struct sf_metrics *handle) } } -void sf_metrics_inc(struct sf_metrics *handle, uint64_t rule_id, int sff_profile_id, int sf_profile_id, uint64_t rx_pkts, uint64_t rx_bytes, uint64_t tx_pkts, uint64_t tx_bytes) +void sf_metrics_inc(struct sf_metrics *handle, int vsys_id, uint64_t rule_id, int sff_profile_id, int sf_profile_id, uint64_t rx_pkts, uint64_t rx_bytes, uint64_t tx_pkts, uint64_t tx_bytes) { if (handle->config.enable == 0) { @@ -146,6 +147,7 @@ void sf_metrics_inc(struct sf_metrics *handle, uint64_t rule_id, int sff_profile struct key_tuple key; memset(&key, 0, sizeof(struct key_tuple)); + key.vsys_id = vsys_id; key.rule_id = rule_id; key.sff_profile_id = sff_profile_id; key.sf_profile_id = sf_profile_id; @@ -162,6 +164,7 @@ void sf_metrics_inc(struct sf_metrics *handle, uint64_t rule_id, int sff_profile else { temp = (struct node *)calloc(1, sizeof(struct node)); + temp->key.vsys_id = vsys_id; temp->key.rule_id = rule_id; temp->key.sff_profile_id = sff_profile_id; temp->key.sf_profile_id = sf_profile_id; @@ -197,6 +200,7 @@ void sf_metrics_send(struct sf_metrics *handle) memset(buff, 0, size); nsend = snprintf(buff, size, SCE_SF_METRICS, + node->key.vsys_id, node->key.rule_id, node->key.sff_profile_id, node->key.sf_profile_id, diff --git a/platform/test/gtest_sf_metrics.cpp b/platform/test/gtest_sf_metrics.cpp index 41e1394..7725e84 100644 --- a/platform/test/gtest_sf_metrics.cpp +++ b/platform/test/gtest_sf_metrics.cpp @@ -6,7 +6,7 @@ TEST(SF_METRICS, TEST) { struct sf_metrics *metrics = sf_metrics_create("./test_resource/sce.conf"); EXPECT_TRUE(sf_metrics_get_interval(metrics) == 1); - sf_metrics_inc(metrics, 1, 2, 3, 4, 5, 6, 7); + sf_metrics_inc(metrics, 1, 1, 2, 3, 4, 5, 6, 7); sf_metrics_send(metrics); sf_metrics_destory(metrics); } diff --git a/platform/test/test_resource/sce.json b/platform/test/test_resource/sce.json index 09731d5..c77ec3e 100644 --- a/platform/test/test_resource/sce.json +++ b/platform/test/test_resource/sce.json @@ -31,10 +31,10 @@ { "table_name": "SERVICE_CHAINING_COMPILE", "table_content": [ - "1\t0\t2\t1\t1\t{}\t{\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2", - "2\t0\t2\t1\t1\t{}\t{\"targeted_traffic\":\"raw\",\"sff_profiles\":[1,2,3,4,5,6,7,8,9,10]}\t1\t2", - "11\t0\t2\t1\t1\t{}\t{\"targeted_traffic\":\"decrypted\",\"sff_profiles\":[1]}\t1\t2", - "12\t0\t2\t1\t1\t{}\t{\"targeted_traffic\":\"decrypted\",\"sff_profiles\":[1,2,3,4,5,6,7,8,9,10]}\t1\t2" + "1\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2", + "2\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"raw\",\"sff_profiles\":[1,2,3,4,5,6,7,8,9,10]}\t1\t2", + "11\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"decrypted\",\"sff_profiles\":[1]}\t1\t2", + "12\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"decrypted\",\"sff_profiles\":[1,2,3,4,5,6,7,8,9,10]}\t1\t2" ] } ] diff --git a/resource/sce.json b/resource/sce.json index 262fed2..fa1c42c 100644 --- a/resource/sce.json +++ b/resource/sce.json @@ -31,10 +31,10 @@ { "table_name": "SERVICE_CHAINING_COMPILE", "table_content": [ - "1\t0\t2\t1\t1\t{}\t{\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2", - "2\t0\t2\t1\t1\t{}\t{\"targeted_traffic\":\"raw\",\"sff_profiles\":[1,2,3,4,5,6,7,8,9,10]}\t1\t2", - "11\t0\t2\t1\t1\t{}\t{\"targeted_traffic\":\"decrypted\",\"sff_profiles\":[1]}\t1\t2", - "12\t0\t2\t1\t1\t{}\t{\"targeted_traffic\":\"decrypted\",\"sff_profiles\":[1,2,3,4,5,6,7,8,9,10]}\t1\t2" + "1\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2", + "2\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"raw\",\"sff_profiles\":[1,2,3,4,5,6,7,8,9,10]}\t1\t2", + "11\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"decrypted\",\"sff_profiles\":[1]}\t1\t2", + "12\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"decrypted\",\"sff_profiles\":[1,2,3,4,5,6,7,8,9,10]}\t1\t2" ] } ] diff --git a/test/test_data/resource/raw_pkt_mirr_block.json b/test/test_data/resource/raw_pkt_mirr_block.json index 30ca9f1..ab5b6e0 100644 --- a/test/test_data/resource/raw_pkt_mirr_block.json +++ b/test/test_data/resource/raw_pkt_mirr_block.json @@ -15,7 +15,7 @@ { "table_name": "SERVICE_CHAINING_COMPILE", "table_content": [ - "995199\t0\t2\t1\t1\t{}\t{\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2" + "995199\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2" ] } ] diff --git a/test/test_data/resource/raw_pkt_mirr_bypass.json b/test/test_data/resource/raw_pkt_mirr_bypass.json index 78a9226..5615619 100644 --- a/test/test_data/resource/raw_pkt_mirr_bypass.json +++ b/test/test_data/resource/raw_pkt_mirr_bypass.json @@ -15,7 +15,7 @@ { "table_name": "SERVICE_CHAINING_COMPILE", "table_content": [ - "995199\t0\t2\t1\t1\t{}\t{\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2" + "995199\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2" ] } ] diff --git a/test/test_data/resource/raw_pkt_mirr_forward.json b/test/test_data/resource/raw_pkt_mirr_forward.json index 99237fc..d1764d0 100644 --- a/test/test_data/resource/raw_pkt_mirr_forward.json +++ b/test/test_data/resource/raw_pkt_mirr_forward.json @@ -15,7 +15,7 @@ { "table_name": "SERVICE_CHAINING_COMPILE", "table_content": [ - "995199\t0\t2\t1\t1\t{}\t{\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2" + "995199\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2" ] } ] diff --git a/test/test_data/resource/raw_pkt_stee_block.json b/test/test_data/resource/raw_pkt_stee_block.json index d285c38..37622cb 100644 --- a/test/test_data/resource/raw_pkt_stee_block.json +++ b/test/test_data/resource/raw_pkt_stee_block.json @@ -15,7 +15,7 @@ { "table_name": "SERVICE_CHAINING_COMPILE", "table_content": [ - "995199\t0\t2\t1\t1\t{}\t{\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2" + "995199\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2" ] } ] diff --git a/test/test_data/resource/raw_pkt_stee_bypass.json b/test/test_data/resource/raw_pkt_stee_bypass.json index e02cc97..f996087 100644 --- a/test/test_data/resource/raw_pkt_stee_bypass.json +++ b/test/test_data/resource/raw_pkt_stee_bypass.json @@ -15,7 +15,7 @@ { "table_name": "SERVICE_CHAINING_COMPILE", "table_content": [ - "995199\t0\t2\t1\t1\t{}\t{\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2" + "995199\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2" ] } ] diff --git a/test/test_data/resource/raw_pkt_stee_forward.json b/test/test_data/resource/raw_pkt_stee_forward.json index b705bf1..f57cd40 100644 --- a/test/test_data/resource/raw_pkt_stee_forward.json +++ b/test/test_data/resource/raw_pkt_stee_forward.json @@ -15,7 +15,7 @@ { "table_name": "SERVICE_CHAINING_COMPILE", "table_content": [ - "995199\t0\t2\t1\t1\t{}\t{\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2" + "995199\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2" ] } ] diff --git a/test/test_data/resource/sce0.json b/test/test_data/resource/sce0.json index b705bf1..f57cd40 100644 --- a/test/test_data/resource/sce0.json +++ b/test/test_data/resource/sce0.json @@ -15,7 +15,7 @@ { "table_name": "SERVICE_CHAINING_COMPILE", "table_content": [ - "995199\t0\t2\t1\t1\t{}\t{\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2" + "995199\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2" ] } ]