maat_plugin_table_get_ex_data的key从pointer改为integer以减少CPU的占用

This commit is contained in:
luwenpeng
2023-11-23 15:12:13 +08:00
parent b48b58cd4c
commit cbac7fea29
2 changed files with 19 additions and 20 deletions

View File

@@ -341,7 +341,7 @@ static void chaining_param_new_cb(const char *table_name, int table_id, const ch
}
param = (struct chaining_param *)calloc(1, sizeof(struct chaining_param));
param->rule_id = atoll(key);
param->rule_id = *((uint64_t *)key);
param->ref_cnt = 1;
// vsys_id
@@ -499,7 +499,7 @@ static void sff_param_new_cb(const char *table_name, int table_id, const char *k
}
param = (struct sff_param *)calloc(1, sizeof(struct sff_param));
param->sff_profile_id = atoi(key);
param->sff_profile_id = *((int *)key);
param->sff_ref_cnt = 1;
// type
@@ -736,7 +736,7 @@ static void sf_param_new_cb(const char *table_name, int table_id, const char *ke
param = (struct sf_param *)calloc(1, sizeof(struct sf_param));
param->sf_vsys_id = vsys_id;
param->sf_profile_id = atoi(key);
param->sf_profile_id = *((int *)key);
param->sf_ref_cnt = 1;
// device_group
@@ -1223,19 +1223,18 @@ static void select_sf_by_ldbc(struct sff_param *sff_param, struct selected_sf *s
static void select_sf_from_sff(struct policy_enforcer *enforcer, struct sff_param *sff_param, struct selected_sf *selected_sf, struct session_ctx *s_ctx, uint64_t packet_hash)
{
int profile_id;
UT_array *sf_array;
UT_icd sf_icd = {sizeof(struct sf_param), NULL, NULL, NULL};
utarray_new(sf_array, &sf_icd);
for (int i = 0; i < sff_param->sf_profile_ids_num; i++)
{
char profile_id[16] = {0};
snprintf(profile_id, sizeof(profile_id), "%u", sff_param->sf_profile_ids[i]);
struct sf_param *sf = (struct sf_param *)maat_plugin_table_get_ex_data(enforcer->maat, enforcer->sf_table_id, profile_id, strlen(profile_id));
profile_id = sff_param->sf_profile_ids[i];
struct sf_param *sf = (struct sf_param *)maat_plugin_table_get_ex_data(enforcer->maat, enforcer->sf_table_id, (const char *)&profile_id, sizeof(profile_id));
if (sf == NULL)
{
LOG_ERROR("%s: failed to get sf parameter of profile %d", LOG_TAG_POLICY, sff_param->sf_profile_ids[i]);
LOG_ERROR("%s: failed to get sf parameter of profile %d", LOG_TAG_POLICY, profile_id);
continue;
}
@@ -1674,11 +1673,9 @@ int policy_enforce_chaining_size(struct policy_enforcer *enforcer)
void policy_enforce_select_chainings(struct policy_enforcer *enforcer, struct selected_chainings *chainings, struct session_ctx *s_ctx, struct packet *data_pkt, uint64_t rule_id, int dir_is_i2e)
{
char buffer[16] = {0};
int sff_profile_id;
struct selected_chaining *chaining = NULL;
snprintf(buffer, sizeof(buffer), "%lu", rule_id);
struct chaining_param *chaining_param = (struct chaining_param *)maat_plugin_table_get_ex_data(enforcer->maat, enforcer->compile_table_id, buffer, strlen(buffer));
struct chaining_param *chaining_param = (struct chaining_param *)maat_plugin_table_get_ex_data(enforcer->maat, enforcer->compile_table_id, (const char *)&rule_id, sizeof(rule_id));
if (chaining_param == NULL)
{
LOG_ERROR("%s: session %lu %s failed to get chaining parameter of policy %lu", LOG_TAG_POLICY, s_ctx->session_id, s_ctx->session_addr, rule_id);
@@ -1700,12 +1697,11 @@ void policy_enforce_select_chainings(struct policy_enforcer *enforcer, struct se
struct selected_sf *selected_sf = &(chaining->chaining[chaining->chaining_used]);
selected_sf_init(selected_sf);
memset(buffer, 0, sizeof(buffer));
snprintf(buffer, sizeof(buffer), "%u", chaining_param->sff_profile_ids[i]);
struct sff_param *sff_param = (struct sff_param *)maat_plugin_table_get_ex_data(enforcer->maat, enforcer->sff_table_id, buffer, strlen(buffer));
sff_profile_id = chaining_param->sff_profile_ids[i];
struct sff_param *sff_param = (struct sff_param *)maat_plugin_table_get_ex_data(enforcer->maat, enforcer->sff_table_id, (const char *)&sff_profile_id, sizeof(sff_profile_id));
if (sff_param == NULL)
{
LOG_ERROR("%s: session %lu %s failed to get sff parameter of profile %d, bypass current sff !!!", LOG_TAG_POLICY, chaining->session_id, chaining->session_addr, chaining_param->sff_profile_ids[i]);
LOG_ERROR("%s: session %lu %s failed to get sff parameter of profile %d, bypass current sff !!!", LOG_TAG_POLICY, chaining->session_id, chaining->session_addr, sff_profile_id);
continue;
}
@@ -1715,7 +1711,7 @@ void policy_enforce_select_chainings(struct policy_enforcer *enforcer, struct se
selected_sf->traffic_type = chaining_param->traffic_type;
// sff info
selected_sf->sff_profile_id = chaining_param->sff_profile_ids[i];
selected_sf->sff_profile_id = sff_profile_id;
selected_sf->sff_forward_type = sff_param->sff_forward_type;
// sf_index