diff --git a/platform/include/sce.h b/platform/include/sce.h index 5dbb1de..1a5a4af 100644 --- a/platform/include/sce.h +++ b/platform/include/sce.h @@ -58,6 +58,7 @@ struct metadata struct metadata *metadata_new(); int metadata_is_empty(struct metadata *meta); +void metadata_shallow_copy(struct metadata *dst, struct metadata *src); void metadata_deep_copy(struct metadata *dst, struct metadata *src); void metadata_free(struct metadata *meta); @@ -73,6 +74,8 @@ struct session_ctx struct addr_tuple4 inner_tuple4; struct fixed_num_array rule_ids; + struct metadata *decrypted_meta_i2e; + struct metadata *decrypted_meta_e2i; struct metadata *raw_meta_i2e; struct metadata *raw_meta_e2i; struct metadata *ctrl_meta; diff --git a/platform/src/packet_io.cpp b/platform/src/packet_io.cpp index ad37240..b9a3657 100644 --- a/platform/src/packet_io.cpp +++ b/platform/src/packet_io.cpp @@ -185,6 +185,92 @@ int mbuff_set_metadata(marsio_buff_t *tx_buff, struct metadata *meta) return 0; } +static void update_session_by_metadata(struct session_ctx *ctx, struct metadata *meta) +{ + struct metadata *dst_meta_i2e = NULL; + struct metadata *dst_meta_e2i = NULL; + + if (meta->is_decrypted) + { + dst_meta_i2e = ctx->decrypted_meta_i2e; + dst_meta_e2i = ctx->decrypted_meta_e2i; + } + else + { + dst_meta_i2e = ctx->raw_meta_i2e; + dst_meta_e2i = ctx->raw_meta_e2i; + } + + if (meta->is_e2i_dir) + { + // first packet update metadata + if (metadata_is_empty(dst_meta_e2i)) + { + metadata_shallow_copy(dst_meta_e2i, meta); + } + else + { + // next packet only update sids + sids_copy(&dst_meta_e2i->sids, &meta->sids); + } + } + else + { + // first packet update metadata + if (metadata_is_empty(dst_meta_i2e)) + { + metadata_shallow_copy(dst_meta_i2e, meta); + } + else + { + // next packet only update sids + sids_copy(&dst_meta_i2e->sids, &meta->sids); + } + } +} + +static void update_metadata_by_session(struct session_ctx *ctx, struct metadata *meta) +{ + struct sids *sids = NULL; + struct route_ctx *route_ctx = NULL; + + meta->session_id = ctx->session_id; + + if (meta->is_e2i_dir) + { + if (meta->is_decrypted) + { + sids = &ctx->decrypted_meta_e2i->sids; + route_ctx = &ctx->decrypted_meta_e2i->route_ctx; + } + else + { + sids = &ctx->raw_meta_e2i->sids; + route_ctx = &ctx->raw_meta_e2i->route_ctx; + } + } + else + { + if (meta->is_decrypted) + { + sids = &ctx->decrypted_meta_i2e->sids; + route_ctx = &ctx->decrypted_meta_i2e->route_ctx; + } + else + { + sids = &ctx->raw_meta_i2e->sids; + route_ctx = &ctx->raw_meta_i2e->route_ctx; + } + } + + sids_copy(&meta->sids, sids); + route_ctx_copy(&meta->route_ctx, route_ctx); +} + +/****************************************************************************** + * keepalive + ******************************************************************************/ + // return 0 : not keepalive packet // return 1 : is keepalive packet static int is_downlink_keepalive_packet(marsio_buff_t *rx_buff) @@ -902,13 +988,13 @@ static void handle_raw_packet(marsio_buff_t *rx_buff, struct thread_ctx *thread_ // bypass_traffic:3 bypass decrypted traffic if (unlikely(thread_ctx->ref_io->config.bypass_traffic == 2 && meta.is_decrypted == 0)) { - LOG_DEBUG("%s: session %lu bypass, enable raw traffic bypass !!!", LOG_TAG_PKTIO); + LOG_DEBUG("%s: session %lu bypass, enable raw traffic bypass !!!", LOG_TAG_PKTIO, meta.session_id); goto error_bypass; } if (unlikely(thread_ctx->ref_io->config.bypass_traffic == 3 && meta.is_decrypted == 1)) { - LOG_DEBUG("%s: session %lu bypass, enable decrypted traffic bypass !!!", LOG_TAG_PKTIO); + LOG_DEBUG("%s: session %lu bypass, enable decrypted traffic bypass !!!", LOG_TAG_PKTIO, meta.session_id); goto error_bypass; } @@ -919,20 +1005,7 @@ static void handle_raw_packet(marsio_buff_t *rx_buff, struct thread_ctx *thread_ goto error_bypass; } - if (meta.is_e2i_dir) - { - if (metadata_is_empty(session_ctx->raw_meta_e2i)) - { - metadata_deep_copy(session_ctx->raw_meta_e2i, &meta); - } - } - else - { - if (metadata_is_empty(session_ctx->raw_meta_i2e)) - { - metadata_deep_copy(session_ctx->raw_meta_i2e, &meta); - } - } + update_session_by_metadata(session_ctx, &meta); if (meta.is_decrypted == 1) { @@ -988,17 +1061,7 @@ static void handle_inject_packet(marsio_buff_t *rx_buff, struct thread_ctx *thre goto error_block; } - meta.session_id = session_ctx->session_id; - if (meta.is_e2i_dir) - { - sids_copy(&meta.sids, &session_ctx->raw_meta_e2i->sids); - route_ctx_copy(&meta.route_ctx, &session_ctx->raw_meta_e2i->route_ctx); - } - else - { - sids_copy(&meta.sids, &session_ctx->raw_meta_i2e->sids); - route_ctx_copy(&meta.route_ctx, &session_ctx->raw_meta_i2e->route_ctx); - } + update_metadata_by_session(session_ctx, &meta); if (meta.is_decrypted == 1) { diff --git a/platform/src/sce.cpp b/platform/src/sce.cpp index 0d25511..439b84b 100644 --- a/platform/src/sce.cpp +++ b/platform/src/sce.cpp @@ -28,6 +28,21 @@ int metadata_is_empty(struct metadata *meta) } } +void metadata_shallow_copy(struct metadata *dst, struct metadata *src) +{ + dst->write_ref++; + dst->session_id = src->session_id; + dst->raw_data = NULL; + dst->raw_len = 0; + dst->l7offset = src->l7offset; + dst->is_e2i_dir = src->is_e2i_dir; + dst->is_ctrl_pkt = src->is_ctrl_pkt; + dst->is_decrypted = src->is_decrypted; + + sids_copy(&dst->sids, &src->sids); + route_ctx_copy(&dst->route_ctx, &src->route_ctx); +} + void metadata_deep_copy(struct metadata *dst, struct metadata *src) { dst->write_ref++; @@ -70,6 +85,8 @@ struct session_ctx *session_ctx_new() fixed_num_array_init(&session_ctx->rule_ids); + session_ctx->decrypted_meta_i2e = metadata_new(); + session_ctx->decrypted_meta_e2i = metadata_new(); session_ctx->raw_meta_i2e = metadata_new(); session_ctx->raw_meta_e2i = metadata_new(); session_ctx->ctrl_meta = metadata_new(); @@ -81,6 +98,18 @@ void session_ctx_free(struct session_ctx *session_ctx) { if (session_ctx) { + if (session_ctx->decrypted_meta_i2e) + { + metadata_free(session_ctx->decrypted_meta_i2e); + session_ctx->decrypted_meta_i2e = NULL; + } + + if (session_ctx->decrypted_meta_e2i) + { + metadata_free(session_ctx->decrypted_meta_e2i); + session_ctx->decrypted_meta_e2i = NULL; + } + if (session_ctx->raw_meta_i2e) { metadata_free(session_ctx->raw_meta_i2e); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index b2ea43f..c29cfa0 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -120,6 +120,15 @@ target_include_directories(gtest_raw_pkt_error_bypass PUBLIC ${CMAKE_SOURCE_DIR} target_include_directories(gtest_raw_pkt_error_bypass PUBLIC ${CMAKE_SOURCE_DIR}/platform/include) target_link_libraries(gtest_raw_pkt_error_bypass temp_platform gtest) +############################################################################### +# gtest_mix_pkt_stee_forward +############################################################################### + +add_executable(gtest_mix_pkt_stee_forward gtest_mix_pkt_stee_forward.cpp) +target_include_directories(gtest_mix_pkt_stee_forward PUBLIC ${CMAKE_SOURCE_DIR}/common/include) +target_include_directories(gtest_mix_pkt_stee_forward PUBLIC ${CMAKE_SOURCE_DIR}/platform/include) +target_link_libraries(gtest_mix_pkt_stee_forward temp_platform gtest) + ############################################################################### # gtest_discover_tests ############################################################################### @@ -140,6 +149,7 @@ gtest_discover_tests(gtest_raw_pkt_mirr_forward) gtest_discover_tests(gtest_raw_pkt_mirr_rx_drop) gtest_discover_tests(gtest_raw_pkt_error_bypass) +gtest_discover_tests(gtest_mix_pkt_stee_forward) file(COPY ./test_data/log/ DESTINATION ./log/) file(COPY ./test_data/conf/ DESTINATION ./conf/) diff --git a/test/gtest_mix_pkt_stee_forward.cpp b/test/gtest_mix_pkt_stee_forward.cpp new file mode 100644 index 0000000..37eed7c --- /dev/null +++ b/test/gtest_mix_pkt_stee_forward.cpp @@ -0,0 +1,124 @@ +#include "gtest_utils.h" + +// 147 bytes +static u_char ctrl_pkt_active_for_raw_pkt[] = { + // Eth + IPv4 + TCP + 0x48, 0x73, 0x97, 0x96, 0x38, 0x10, 0x0c, 0xa7, 0x5c, 0x64, 0x00, 0x01, 0x08, 0x00, 0x45, 0x00, + 0x00, 0xab, 0x76, 0x23, 0x40, 0x00, 0x7d, 0x06, 0x67, 0x66, 0xc0, 0xa8, 0x29, 0x40, 0x5d, 0xb8, + 0xd8, 0x22, 0xce, 0xec, 0x00, 0x50, 0xf8, 0x77, 0x0e, 0x1e, 0x47, 0x34, 0x32, 0xb9, 0x50, 0x18, + 0x04, 0x88, 0x7a, 0xe8, 0x00, 0x00, + // msg payload + 0x85, 0xA5, 0x74, 0x73, 0x79, 0x6E, 0x63, 0xA3, 0x32, 0x2E, 0x30, 0xAA, 0x73, 0x65, 0x73, 0x73, + 0x69, 0x6F, 0x6E, 0x5F, 0x69, 0x64, 0xCF, 0x04, 0x08, 0x02, 0x1B, 0x68, 0x4C, 0x03, 0xE9, 0xA5, + 0x73, 0x74, 0x61, 0x74, 0x65, 0xA6, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0xA6, 0x6D, 0x65, 0x74, + 0x68, 0x6F, 0x64, 0xAD, 0x70, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x5F, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0xA6, 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, 0x81, 0xA3, 0x73, 0x63, 0x65, 0x81, 0xA8, 0x72, + 0x75, 0x6C, 0x65, 0x5F, 0x69, 0x64, 0x73, 0x91, 0xCE, 0x00, 0x0F, 0x2F, 0x7F}; + +// 147 bytes +static u_char ctrl_pkt_active_for_decrypted_pkt[] = { + // Eth + IPv4 + TCP + 0x48, 0x73, 0x97, 0x96, 0x38, 0x10, 0x0c, 0xa7, 0x5c, 0x64, 0x00, 0x01, 0x08, 0x00, 0x45, 0x00, + 0x00, 0xab, 0x76, 0x23, 0x40, 0x00, 0x7d, 0x06, 0x67, 0x66, 0xc0, 0xa8, 0x29, 0x40, 0x5d, 0xb8, + 0xd8, 0x22, 0xce, 0xec, 0x00, 0x50, 0xf8, 0x77, 0x0e, 0x1e, 0x47, 0x34, 0x32, 0xb9, 0x50, 0x18, + 0x04, 0x88, 0x7a, 0xe8, 0x00, 0x00, + // msg payload + 0x85, 0xA5, 0x74, 0x73, 0x79, 0x6E, 0x63, 0xA3, 0x32, 0x2E, 0x30, 0xAA, 0x73, 0x65, 0x73, 0x73, + 0x69, 0x6F, 0x6E, 0x5F, 0x69, 0x64, 0xCF, 0x04, 0x08, 0x02, 0x1B, 0x68, 0x4C, 0x03, 0xE9, 0xA5, + 0x73, 0x74, 0x61, 0x74, 0x65, 0xA6, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0xA6, 0x6D, 0x65, 0x74, + 0x68, 0x6F, 0x64, 0xAD, 0x70, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x5F, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0xA6, 0x70, 0x61, 0x72, 0x61, 0x6D, 0x73, 0x81, 0xA3, 0x73, 0x63, 0x65, 0x81, 0xA8, 0x72, + 0x75, 0x6C, 0x65, 0x5F, 0x69, 0x64, 0x73, 0x91, 0xCE, 0x00, 0x0F, 0x2F, 0x80}; + +// 145 bytes +static u_char raw_pkt[] = { + 0x48, 0x73, 0x97, 0x96, 0x38, 0x10, 0x0c, 0xa7, 0x5c, 0x64, 0x00, 0x01, 0x08, 0x00, 0x45, 0x00, + 0x00, 0x83, 0x46, 0x1f, 0x40, 0x00, 0x40, 0x06, 0xd4, 0x92, 0xc0, 0xa8, 0x29, 0x40, 0x5d, 0xb8, + 0xd8, 0x22, 0xce, 0xec, 0x00, 0x50, 0xf8, 0x77, 0x0d, 0xcf, 0x47, 0x34, 0x32, 0xb9, 0x80, 0x18, + 0xfa, 0xf0, 0xad, 0xf4, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x45, 0xfc, 0x39, 0x3d, 0xc1, 0x1f, + 0x8d, 0x76, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, + 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41, 0x67, + 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x63, 0x75, 0x72, 0x6c, 0x2f, 0x37, 0x2e, 0x36, 0x31, 0x2e, 0x31, + 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x2a, 0x2f, 0x2a, 0x0d, 0x0a, 0x0d, + 0x0a}; + +// 145 bytes +static u_char decrypted_pkt[] = { + 0x48, 0x73, 0x97, 0x96, 0x38, 0x10, 0x0c, 0xa7, 0x5c, 0x64, 0x00, 0x01, 0x08, 0x00, 0x45, 0x00, + 0x00, 0x83, 0x46, 0x1f, 0x40, 0x00, 0x40, 0x06, 0xd4, 0x92, 0xc0, 0xa8, 0x29, 0x40, 0x5d, 0xb8, + 0xd8, 0x22, 0xce, 0xec, 0x00, 0x50, 0xf8, 0x77, 0x0d, 0xcf, 0x47, 0x34, 0x32, 0xb9, 0x80, 0x18, + 0xfa, 0xf0, 0xad, 0xf4, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x45, 0xfc, 0x39, 0x3d, 0xc1, 0x1f, + 0x8d, 0x76, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, + 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41, 0x67, + 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x63, 0x75, 0x72, 0x6c, 0x2f, 0x37, 0x2e, 0x36, 0x31, 0x2e, 0x31, + 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x2a, 0x2f, 0x2a, 0x0d, 0x0a, 0x0d, + 0x0a}; + +TEST(PACKET_IO, MIX_PKT_STEE_FORWARD) +{ + marsio_buff_t *tx_mbuf1 = NULL; + marsio_buff_t *tx_mbuf2 = NULL; + marsio_buff_t *tx_mbuf3 = NULL; + marsio_buff_t *tx_mbuf4 = NULL; + + marsio_buff_t *dup_mbuf1 = NULL; + marsio_buff_t *dup_mbuf2 = NULL; + marsio_buff_t *dup_mbuf3 = NULL; + marsio_buff_t *dup_mbuf4 = NULL; + + struct gtest_frame *gtest_frame = NULL; + struct mr_instance *mr_instance = NULL; + + // build ctrl packet for raw packet + build_mbuf_for_ctrl_pkt(tx_mbuf1, ctrl_pkt_active_for_raw_pkt, sizeof(ctrl_pkt_active_for_raw_pkt), 290484492702581737, 54); + // build raw packet + build_mbuf_for_raw_pkt(tx_mbuf2, raw_pkt, sizeof(raw_pkt), 290484492702581737, 0); + dup_mbuf1 = marsio_mbuff_dup(tx_mbuf1); + dup_mbuf2 = marsio_mbuff_dup(tx_mbuf2); + + // build ctrl packet for decrypted packet + build_mbuf_for_ctrl_pkt(tx_mbuf3, ctrl_pkt_active_for_decrypted_pkt, sizeof(ctrl_pkt_active_for_decrypted_pkt), 290484492702581737, 54); + // build decrypted packet + build_mbuf_for_raw_pkt(tx_mbuf4, decrypted_pkt, sizeof(decrypted_pkt), 290484492702581737, 1); + dup_mbuf3 = marsio_mbuff_dup(tx_mbuf3); + dup_mbuf4 = marsio_mbuff_dup(tx_mbuf4); + + gtest_frame = gtest_frame_new("mix_pkt_stee_forward.json", "mix_pkt_stee_forward"); + mr_instance = packet_io_get_mr_instance(gtest_frame->sce_ctx->io); + + // recv ctrl packet of raw packet from nf + // send ctrl packet of raw packet to nf + gtest_frame_run(gtest_frame, tx_mbuf1, dup_mbuf1, 1); + // recv ctrl packet of decrypted packet from nf + // send ctrl packet of decrypted packet to nf + gtest_frame_run(gtest_frame, tx_mbuf3, dup_mbuf3, 1); + // recv raw packet from nf + // send vxlan packet to sf + marsio_set_recv_mbuff(mr_instance, tx_mbuf2); + EXPECT_TRUE(packet_io_thread_polling_nf(gtest_frame->sce_ctx->io, >est_frame->sce_ctx->work_threads[0]) == 1); + EXPECT_TRUE(mbuff_cmp_payload(dup_mbuf2, marsio_get_send_mbuff(mr_instance)) == 0); + // recv decrypted packet from nf + // send vxlan packet to sf + marsio_set_recv_mbuff(mr_instance, tx_mbuf4); + EXPECT_TRUE(packet_io_thread_polling_nf(gtest_frame->sce_ctx->io, >est_frame->sce_ctx->work_threads[0]) == 1); + EXPECT_TRUE(mbuff_cmp_payload(dup_mbuf4, marsio_get_send_mbuff(mr_instance)) == 0); + + gtest_frame_log(gtest_frame); + marsio_buff_free(packet_io_get_mr_instance(gtest_frame->sce_ctx->io), &tx_mbuf1, 1, 0, 0); + marsio_buff_free(packet_io_get_mr_instance(gtest_frame->sce_ctx->io), &tx_mbuf2, 1, 0, 0); + marsio_buff_free(packet_io_get_mr_instance(gtest_frame->sce_ctx->io), &tx_mbuf3, 1, 0, 0); + marsio_buff_free(packet_io_get_mr_instance(gtest_frame->sce_ctx->io), &tx_mbuf4, 1, 0, 0); + marsio_buff_free(packet_io_get_mr_instance(gtest_frame->sce_ctx->io), &dup_mbuf1, 1, 0, 0); + marsio_buff_free(packet_io_get_mr_instance(gtest_frame->sce_ctx->io), &dup_mbuf2, 1, 0, 0); + marsio_buff_free(packet_io_get_mr_instance(gtest_frame->sce_ctx->io), &dup_mbuf3, 1, 0, 0); + marsio_buff_free(packet_io_get_mr_instance(gtest_frame->sce_ctx->io), &dup_mbuf4, 1, 0, 0); + gtest_frame_free(gtest_frame); +} + +int main(int argc, char **argv) +{ + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} \ No newline at end of file diff --git a/test/test_data/conf/sce.conf b/test/test_data/conf/sce.conf index 4657e47..2ec3e40 100644 --- a/test/test_data/conf/sce.conf +++ b/test/test_data/conf/sce.conf @@ -39,8 +39,11 @@ redis_port_range=6379 max_chaining_size=32 [packet_io] -# bypass_all_traffic:1 NF2NF and SF2SF -bypass_all_traffic=0 +# bypass_traffic:0 disable +# bypass_traffic:1 bypass all traffic +# bypass_traffic:2 bypass raw traffic +# bypass_traffic:3 bypass decrypted traffic +bypass_traffic=0 rx_burst_max=128 app_symbol=sce dev_endpoint=eth_sf_endpoint diff --git a/test/test_data/log/test_mix_pkt_stee_forward_ok.fs2 b/test/test_data/log/test_mix_pkt_stee_forward_ok.fs2 new file mode 100644 index 0000000..d52d121 --- /dev/null +++ b/test/test_data/log/test_mix_pkt_stee_forward_ok.fs2 @@ -0,0 +1,23 @@ +============================================================Fri May 5 11:08:21 2023============================================================ + nf_rx_pkt nf_rx_B nf_tx_pkt nf_tx_B endp_rx_pkt endp_rx_B endp_tx_pkt endp_tx_B +sum 4 584 2 294 0 0 2 390 +speed/s 0 0 0 0 0 0 0 0 + kee_d_rx_pkt kee_d_rx_B kee_d_tx_pkt kee_d_tx_B kee_u_rx_pkt kee_u_rx_B kee_u_rxdop_pkt kee_u_rxdop_B +sum 0 0 0 0 0 0 0 0 +speed/s 0 0 0 0 0 0 0 0 + mirr_bypass_pkt mirr_bypass_B mirr_block_pkt mirr_block_B mirr_rxdop_pkt mirr_rxdop_B mirro_tx_pkt mirro_tx_B +sum 0 0 0 0 0 0 0 0 +speed/s 0 0 0 0 0 0 0 0 + stee_bypass_pkt stee_bypass_B stee_block_pkt stee_block_B stee_rx_pkt stee_rx_B stee_tx_pkt stee_tx_B +sum 0 0 0 0 0 0 2 290 +speed/s 0 0 0 0 0 0 0 0 + miss_sess_pkt miss_sess_B err_bypass_pkt err_bypass_B err_block_pkt err_block_B endp_drop_pkt endp_drop_B +sum 0 0 0 0 0 0 0 0 +speed/s 0 0 0 0 0 0 0 0 + ctrl_rx_pkt ctrl_rx_B ctrl_tx_pkt ctrl_tx_B ctrl_opening ctrl_active ctrl_closing ctrl_resetall +sum 2 294 2 294 0 2 0 0 +speed/s 0 0 0 0 0 0 0 0 + ctrl_error session_num session_logs sf_active sf_inactive +sum 0 1 0 2 0 +speed/s 0 0 0 0 0 +________________________________________________________________________________________________________________________________________________ diff --git a/test/test_data/resource/mix_pkt_stee_forward.json b/test/test_data/resource/mix_pkt_stee_forward.json new file mode 100644 index 0000000..19e47a9 --- /dev/null +++ b/test/test_data/resource/mix_pkt_stee_forward.json @@ -0,0 +1,25 @@ +{ + "plugin_table": [ + { + "table_name": "SERVICE_FUNCTION_PROFILE", + "table_content": [ + "1\tdevice_group_a\t1\t{\"method\":\"vxlan_g\",\"dest_ip\":\"1.1.1.1\"}\t{\"method\":\"none\"}\t1\t1", + "2\tdevice_group_a\t1\t{\"method\":\"vxlan_g\",\"dest_ip\":\"2.2.2.2\"}\t{\"method\":\"none\"}\t1\t1" + ] + }, + { + "table_name": "SERVICE_FUNCTION_FORWARDER_PROFILE", + "table_content": [ + "1\t1\thash-int-ip\tglobal\tbypass\tnull\t[1]\t1", + "2\t1\thash-ext-ip\tglobal\tbypass\tnull\t[1]\t1" + ] + }, + { + "table_name": "SERVICE_CHAINING_COMPILE", + "table_content": [ + "995199\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"raw\",\"sff_profiles\":[1]}\t1\t2", + "995200\t0\t2\t1\t1\t{}\t{\"vsys_id\":1,\"targeted_traffic\":\"decrypted\",\"sff_profiles\":[2]}\t1\t2" + ] + } + ] +} \ No newline at end of file