summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluwenpeng <[email protected]>2024-07-12 11:45:10 +0800
committerluwenpeng <[email protected]>2024-07-12 12:13:49 +0800
commit9bd91c3c637597c21eb91dfb5a3956fac36e7f47 (patch)
treed6b14ccdfa07daf2fe86b18c31efb05c72f3b040
parenta0f1eca0ce6d481d79112926e56ddd3e1afe9fe0 (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
-rw-r--r--platform/src/packet_io.cpp36
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