add test case: overload evict tcp (old/new) session
This commit is contained in:
@@ -43,6 +43,11 @@ struct session_manager
|
||||
uint64_t udp_active_sess_num;
|
||||
uint64_t udp_closing_sess_num;
|
||||
|
||||
uint64_t tcp_overload_evict_old_sess_num;
|
||||
uint64_t tcp_overload_evict_new_sess_num;
|
||||
uint64_t udp_overload_evict_old_sess_num;
|
||||
uint64_t udp_overload_evict_new_sess_num;
|
||||
|
||||
// packet filter status
|
||||
uint64_t npkts_miss_l4_proto; // fast forward
|
||||
|
||||
@@ -196,6 +201,19 @@ static int session_manager_check_config(struct session_manager_config *config)
|
||||
return -1;
|
||||
}
|
||||
|
||||
// session overload
|
||||
if (config->tcp_overload_evict_old_sess != 0 && config->tcp_overload_evict_old_sess != 1)
|
||||
{
|
||||
SESSION_LOG_ERROR("invalid tcp overload evict old session, support range: 0-1");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (config->udp_overload_evict_old_sess != 0 && config->udp_overload_evict_old_sess != 1)
|
||||
{
|
||||
SESSION_LOG_ERROR("invalid udp overload evict old session, support range: 0-1");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// TCP timeout config
|
||||
if (config->tcp_timeout_init < 1 || config->tcp_timeout_init > 60)
|
||||
{
|
||||
@@ -797,11 +815,27 @@ static struct session *session_manager_new_tcp_session(struct session_manager *m
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (mgr->tcp_sess_num == mgr->config.max_tcp_session_num - 1)
|
||||
if (mgr->tcp_sess_num >= mgr->config.max_tcp_session_num - 1)
|
||||
{
|
||||
struct session *evicted_sess = session_table_find_least_recently_unused_session(mgr->tcp_sess_table);
|
||||
assert(evicted_sess);
|
||||
session_manager_evicte_session(mgr, evicted_sess);
|
||||
if (mgr->config.tcp_overload_evict_old_sess)
|
||||
{
|
||||
struct session *evicted_sess = session_table_find_least_recently_unused_session(mgr->tcp_sess_table);
|
||||
assert(evicted_sess);
|
||||
session_manager_evicte_session(mgr, evicted_sess);
|
||||
mgr->tcp_overload_evict_old_sess_num++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mgr->tcp_sess_num >= mgr->config.max_tcp_session_num)
|
||||
{
|
||||
mgr->tcp_overload_evict_new_sess_num++;
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
// continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct session *sess = session_pool_alloc(mgr->sess_pool);
|
||||
@@ -828,11 +862,27 @@ static struct session *session_manager_new_udp_session(struct session_manager *m
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (mgr->udp_sess_num == mgr->config.max_udp_session_num - 1)
|
||||
if (mgr->udp_sess_num >= mgr->config.max_udp_session_num - 1)
|
||||
{
|
||||
struct session *evicted_sess = session_table_find_least_recently_unused_session(mgr->udp_sess_table);
|
||||
assert(evicted_sess);
|
||||
session_manager_evicte_session(mgr, evicted_sess);
|
||||
if (mgr->config.udp_overload_evict_old_sess)
|
||||
{
|
||||
struct session *evicted_sess = session_table_find_least_recently_unused_session(mgr->udp_sess_table);
|
||||
assert(evicted_sess);
|
||||
session_manager_evicte_session(mgr, evicted_sess);
|
||||
mgr->udp_overload_evict_old_sess_num++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mgr->udp_sess_num >= mgr->config.max_udp_session_num)
|
||||
{
|
||||
mgr->udp_overload_evict_new_sess_num++;
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
// continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct session *sess = session_pool_alloc(mgr->sess_pool);
|
||||
@@ -1186,11 +1236,16 @@ void session_manager_get_session_counter(struct session_manager *mgr, struct ses
|
||||
out->udp_opening_sess_num = mgr->udp_opening_sess_num;
|
||||
out->udp_active_sess_num = mgr->udp_active_sess_num;
|
||||
out->udp_closing_sess_num = mgr->udp_closing_sess_num;
|
||||
|
||||
out->tcp_overload_evict_old_sess_num = mgr->tcp_overload_evict_old_sess_num;
|
||||
out->tcp_overload_evict_new_sess_num = mgr->tcp_overload_evict_new_sess_num;
|
||||
out->udp_overload_evict_old_sess_num = mgr->udp_overload_evict_old_sess_num;
|
||||
out->udp_overload_evict_new_sess_num = mgr->udp_overload_evict_new_sess_num;
|
||||
}
|
||||
|
||||
void session_manager_print_status(struct session_manager *mgr)
|
||||
{
|
||||
printf("session status:\n");
|
||||
printf("session manager status:\n");
|
||||
|
||||
printf("tcp session number : %lu\n", mgr->tcp_sess_num);
|
||||
printf(" opening number : %lu\n", mgr->tcp_opening_sess_num);
|
||||
@@ -1200,6 +1255,12 @@ void session_manager_print_status(struct session_manager *mgr)
|
||||
printf(" opening number : %lu\n", mgr->udp_opening_sess_num);
|
||||
printf(" active number : %lu\n", mgr->udp_active_sess_num);
|
||||
printf(" closing number : %lu\n", mgr->udp_closing_sess_num);
|
||||
printf("tcp overload evict : \n");
|
||||
printf(" old session number: %lu\n", mgr->tcp_overload_evict_old_sess_num);
|
||||
printf(" new session number: %lu\n", mgr->tcp_overload_evict_new_sess_num);
|
||||
printf("udp overload evict : \n");
|
||||
printf(" old session number: %lu\n", mgr->udp_overload_evict_old_sess_num);
|
||||
printf(" new session number: %lu\n", mgr->udp_overload_evict_new_sess_num);
|
||||
|
||||
printf("packet status:\n");
|
||||
printf(" miss l4 proto : %lu (bypass)\n", mgr->npkts_miss_l4_proto);
|
||||
|
||||
Reference in New Issue
Block a user