diff options
| author | luwenpeng <[email protected]> | 2024-07-12 11:45:10 +0800 |
|---|---|---|
| committer | luwenpeng <[email protected]> | 2024-07-12 12:13:49 +0800 |
| commit | 9bd91c3c637597c21eb91dfb5a3956fac36e7f47 (patch) | |
| tree | d6b14ccdfa07daf2fe86b18c31efb05c72f3b040 /platform/src | |
| parent | a0f1eca0ce6d481d79112926e56ddd3e1afe9fe0 (diff) | |
bugfix: TSG-21824 filter service chaining rendered service path (RSP)v1.3.3-20240712
* 'mirroring block' does not affect RSP
* 'steering block' terminates RSP
Example:
Service Function List : A(steering)->B(mirroring block)->C(mirroring)->D(steering block)->E(mirroing)
Expect RSP : A->C
Diffstat (limited to 'platform/src')
| -rw-r--r-- | platform/src/packet_io.cpp | 36 |
1 files changed, 14 insertions, 22 deletions
diff --git a/platform/src/packet_io.cpp b/platform/src/packet_io.cpp index 86767f9..c75f2ec 100644 --- a/platform/src/packet_io.cpp +++ b/platform/src/packet_io.cpp @@ -787,8 +787,6 @@ static int send_ctrl_packet(struct session_ctx *session_ctx, struct thread_ctx * struct selected_chaining *chaining_raw = session_ctx->chaining_raw; struct selected_chaining *chaining_decrypted = session_ctx->chaining_decrypted; int thread_index = thread_ctx->thread_index; - int sc_rsp_raw_exist = 0; - int sc_rsp_decrypted_exist = 0; char *data; size_t size; @@ -835,45 +833,39 @@ static int send_ctrl_packet(struct session_ctx *session_ctx, struct thread_ctx * } { + mpack_write_cstr(&writer, "sc_rsp_raw"); + mpack_build_array(&writer); // sc_rsp_raw begin for (int i = 0; i < chaining_raw->chaining_used; i++) { struct selected_sf *sf = &(chaining_raw->chaining[i]); if (sf->sf_action == SESSION_ACTION_FORWARD) { - if (sc_rsp_raw_exist == 0) - { - mpack_write_cstr(&writer, "sc_rsp_raw"); - mpack_build_array(&writer); // sc_rsp_raw begin - sc_rsp_raw_exist = 1; - } mpack_write_u64(&writer, sf->sf_profile_id); } + if (sf->sf_action == SESSION_ACTION_BLOCK && sf->sff_forward_type == FORWARD_TYPE_STEERING) + { + break; + } } - if (sc_rsp_raw_exist == 1) - { - mpack_complete_array(&writer); // sc_rsp_raw end - } + mpack_complete_array(&writer); // sc_rsp_raw end } { + mpack_write_cstr(&writer, "sc_rsp_decrypted"); + mpack_build_array(&writer); // sc_rsp_decrypted begin for (int i = 0; i < chaining_decrypted->chaining_used; i++) { struct selected_sf *sf = &(chaining_decrypted->chaining[i]); if (sf->sf_action == SESSION_ACTION_FORWARD) { - if (sc_rsp_decrypted_exist == 0) - { - mpack_write_cstr(&writer, "sc_rsp_decrypted"); - mpack_build_array(&writer); // sc_rsp_decrypted begin - sc_rsp_decrypted_exist = 1; - } mpack_write_u64(&writer, sf->sf_profile_id); } + if (sf->sf_action == SESSION_ACTION_BLOCK && sf->sff_forward_type == FORWARD_TYPE_STEERING) + { + break; + } } - if (sc_rsp_decrypted_exist == 1) - { - mpack_complete_array(&writer); // sc_rsp_decrypted end - } + mpack_complete_array(&writer); // sc_rsp_decrypted end } mpack_complete_map(&writer); // sce value end |
