🐞 fix(TSG-14138): 修复页面修改IP后,功能端未修改

This commit is contained in:
wangmenglan
2023-03-14 14:15:29 +08:00
parent 8d820e3213
commit 29ba315489
5 changed files with 242 additions and 104 deletions

View File

@@ -142,6 +142,8 @@ struct sf_param
enum admin_status sf_admin_status;
struct connectivity sf_connectivity;
struct health_check sf_health_check;
uint64_t health_check_session_id;
};
/******************************************************************************
@@ -199,8 +201,6 @@ const char *session_action_reason_to_string(enum session_action_reason session_a
{
case ACTION_BYPASS_DUE_DEFAULT:
return "bypass_due_default";
case ACTION_BYPASS_DUE_NO_AVAILABLE_SF:
return "bypass_due_no_available_sf";
case ACTION_BYPASS_DUE_HEALTH_SF_LIMIT:
return "bypass_due_health_sf_limit";
case ACTION_BYPASS_DUE_UNAVAILABLE_ACTION:
@@ -911,7 +911,7 @@ static void sf_param_new_cb(int table_id, const char *key, const char *table_lin
param->sf_health_check.retires = item->valueint;
LOG_DEBUG("%s: parse sf profile: %d, health_check->retires: %d", LOG_TAG_POLICY, param->sf_profile_id, item->valueint);
}
health_check_session_add(param->sf_profile_id, &param->sf_health_check);
param->health_check_session_id = health_check_session_add(param->sf_profile_id, &param->sf_health_check);
*ad = param;
LOG_INFO("%s: Add sf profile: %d", LOG_TAG_POLICY, param->sf_profile_id);
@@ -950,7 +950,7 @@ static void sf_param_free_cb(int table_id, MAAT_PLUGIN_EX_DATA *ad, long argl, v
if ((__sync_sub_and_fetch(&param->sf_ref_cnt, 1) == 0))
{
health_check_session_del(param->sf_profile_id);
health_check_session_del(param->health_check_session_id, param->sf_profile_id);
LOG_INFO("%s: Del sf profile: %d", LOG_TAG_POLICY, param->sf_profile_id);
free(param);
param = NULL;
@@ -1019,15 +1019,18 @@ static void select_sf_by_nearby_and_active(struct policy_enforcer *enforcer, str
// return : SESSION_ACTION_BYPASS, not care selected_sf_profile_id
// return : SESSION_ACTION_BLOCK, not care selected_sf_profile_id
// return : SESSION_ACTION_FORWARD, care selected_sf_profile_id
static enum session_action select_sf_by_ldbc(uint64_t hash, struct sff_param *sff_param, struct fixed_num_array *array, int *selected_sf_profile_id, enum session_action_reason *sf_action_reason, char *sf_dst_mac, struct session_ctx *s_ctx)
static enum session_action select_sf_by_ldbc(uint64_t hash, struct policy_enforcer *enforcer, struct sff_param *sff_param, struct fixed_num_array *array, int *selected_sf_profile_id, enum session_action_reason *sf_action_reason, char *sf_dst_mac, struct session_ctx *s_ctx)
{
struct thread_ctx *thread = (struct thread_ctx *)s_ctx->ref_thread_ctx;
struct global_metrics *g_metrics = thread->ref_metrics;
struct sf_param *sf = NULL;
char buffer[16];
*selected_sf_profile_id = -1;
int sf_profile_id = 0;
int sf_profile_index = 0;
int sf_profile_num = 0;
uint64_t health_check_session_id = 0;
sf_profile_num = fixed_num_array_count_elem(array);
@@ -1036,8 +1039,20 @@ static enum session_action select_sf_by_ldbc(uint64_t hash, struct sff_param *sf
sf_profile_index = (int)(hash % sf_profile_num);
sf_profile_id = fixed_num_array_index_elem(array, sf_profile_index);
memset(&buffer, 0, sizeof(buffer));
snprintf(buffer, sizeof(buffer), "%u", sf_profile_id);
sf = (struct sf_param *)Maat_plugin_get_EX_data(enforcer->maat, enforcer->sf_table_id, buffer);
if (sf == NULL)
{
LOG_ERROR("%s: failed to get sf parameter of profile %d", LOG_TAG_POLICY, sf_profile_id);
fixed_num_array_del_elem(array, sf_profile_id);
continue;
}
health_check_session_id = sf->health_check_session_id;
sf_param_free(sf);
memset(sf_dst_mac, 0, 32);
if (health_check_session_get_mac(sf_profile_id, sf_dst_mac) == 0)
if (health_check_session_get_mac(health_check_session_id, sf_dst_mac) == 0)
{
__atomic_fetch_add(&g_metrics->sf_active_times, 1, __ATOMIC_RELAXED);
@@ -1095,7 +1110,7 @@ static enum session_action select_sf_by_ldbc(uint64_t hash, struct sff_param *sf
}
};
*sf_action_reason = ACTION_BYPASS_DUE_NO_AVAILABLE_SF;
*sf_action_reason = ACTION_BYPASS_DUE_INVALID_POLICY;
return SESSION_ACTION_BYPASS;
}
@@ -1477,7 +1492,7 @@ void policy_enforce_select_chaining(struct selected_chaining *chaining, struct p
}
hash_value = raw_packet_parser_get_hash_value(parser, sff_param->sff_ldbc.method, dir_is_internal);
item->sf_action = select_sf_by_ldbc(hash_value, sff_param, &array, &(item->sf_profile_id), &(item->sf_action_reason), item->sf_dst_mac, s_ctx);
item->sf_action = select_sf_by_ldbc(hash_value, enforcer, sff_param, &array, &(item->sf_profile_id), &(item->sf_action_reason), item->sf_dst_mac, s_ctx);
LOG_DEBUG("%s: chaining policy %d -> sff_profile %d sf_profile_ids_num %d (after filter ldbc)", LOG_TAG_POLICY, policy_id, item->sff_profile_id, fixed_num_array_count_elem(&array));
if (item->sf_action != SESSION_ACTION_FORWARD)
{