update session table add/del API
This commit is contained in:
@@ -567,13 +567,13 @@ static void session_manager_evicte_session(struct session_manager *mgr, struct s
|
|||||||
{
|
{
|
||||||
case SESSION_TYPE_TCP:
|
case SESSION_TYPE_TCP:
|
||||||
SESSION_LOG_DEBUG("evicte tcp old session: %lu", session_get_id(sess));
|
SESSION_LOG_DEBUG("evicte tcp old session: %lu", session_get_id(sess));
|
||||||
session_table_del(mgr->tcp_sess_table, session_get_tuple(sess));
|
session_table_del(mgr->tcp_sess_table, sess);
|
||||||
SESS_MGR_STAT_UPDATE(&mgr->stat, curr_state, next_state, tcp);
|
SESS_MGR_STAT_UPDATE(&mgr->stat, curr_state, next_state, tcp);
|
||||||
mgr->stat.nr_tcp_sess_evicted++;
|
mgr->stat.nr_tcp_sess_evicted++;
|
||||||
break;
|
break;
|
||||||
case SESSION_TYPE_UDP:
|
case SESSION_TYPE_UDP:
|
||||||
SESSION_LOG_DEBUG("evicte udp old session: %lu", session_get_id(sess));
|
SESSION_LOG_DEBUG("evicte udp old session: %lu", session_get_id(sess));
|
||||||
session_table_del(mgr->udp_sess_table, session_get_tuple(sess));
|
session_table_del(mgr->udp_sess_table, sess);
|
||||||
if (mgr->opts.evicted_session_filter_enable)
|
if (mgr->opts.evicted_session_filter_enable)
|
||||||
{
|
{
|
||||||
evicted_session_filter_add(mgr->evicte_sess_filter, session_get_tuple(sess), now);
|
evicted_session_filter_add(mgr->evicte_sess_filter, session_get_tuple(sess), now);
|
||||||
@@ -629,7 +629,7 @@ static struct session *session_manager_new_tcp_session(struct session_manager *m
|
|||||||
|
|
||||||
uint64_t timeout = (flags & TH_ACK) ? mgr->opts.tcp_handshake_timeout : mgr->opts.tcp_init_timeout;
|
uint64_t timeout = (flags & TH_ACK) ? mgr->opts.tcp_handshake_timeout : mgr->opts.tcp_init_timeout;
|
||||||
session_timer_update(mgr->sess_timer, sess, now + timeout);
|
session_timer_update(mgr->sess_timer, sess, now + timeout);
|
||||||
session_table_add(mgr->tcp_sess_table, key, sess);
|
session_table_add(mgr->tcp_sess_table, sess);
|
||||||
|
|
||||||
if (mgr->opts.duplicated_packet_filter_enable)
|
if (mgr->opts.duplicated_packet_filter_enable)
|
||||||
{
|
{
|
||||||
@@ -666,7 +666,7 @@ static struct session *session_manager_new_udp_session(struct session_manager *m
|
|||||||
session_transition_log(sess, SESSION_STATE_INIT, next_state, UDP_DATA);
|
session_transition_log(sess, SESSION_STATE_INIT, next_state, UDP_DATA);
|
||||||
|
|
||||||
session_timer_update(mgr->sess_timer, sess, now + mgr->opts.udp_data_timeout);
|
session_timer_update(mgr->sess_timer, sess, now + mgr->opts.udp_data_timeout);
|
||||||
session_table_add(mgr->udp_sess_table, key, sess);
|
session_table_add(mgr->udp_sess_table, sess);
|
||||||
|
|
||||||
SESS_MGR_STAT_INC(&mgr->stat, next_state, udp);
|
SESS_MGR_STAT_INC(&mgr->stat, next_state, udp);
|
||||||
mgr->stat.nr_udp_sess_used++;
|
mgr->stat.nr_udp_sess_used++;
|
||||||
@@ -918,12 +918,18 @@ void session_manager_free_session(struct session_manager *mgr, struct session *s
|
|||||||
{
|
{
|
||||||
case SESSION_TYPE_TCP:
|
case SESSION_TYPE_TCP:
|
||||||
tcp_clean(mgr, sess);
|
tcp_clean(mgr, sess);
|
||||||
session_table_del(mgr->tcp_sess_table, session_get_tuple(sess));
|
if (session_table_find_sessid(mgr->tcp_sess_table, session_get_id(sess)) == sess)
|
||||||
|
{
|
||||||
|
session_table_del(mgr->tcp_sess_table, sess);
|
||||||
|
}
|
||||||
SESS_MGR_STAT_DEC(&mgr->stat, session_get_state(sess), tcp);
|
SESS_MGR_STAT_DEC(&mgr->stat, session_get_state(sess), tcp);
|
||||||
mgr->stat.nr_tcp_sess_used--;
|
mgr->stat.nr_tcp_sess_used--;
|
||||||
break;
|
break;
|
||||||
case SESSION_TYPE_UDP:
|
case SESSION_TYPE_UDP:
|
||||||
session_table_del(mgr->udp_sess_table, session_get_tuple(sess));
|
if (session_table_find_sessid(mgr->udp_sess_table, session_get_id(sess)) == sess)
|
||||||
|
{
|
||||||
|
session_table_del(mgr->udp_sess_table, sess);
|
||||||
|
}
|
||||||
SESS_MGR_STAT_DEC(&mgr->stat, session_get_state(sess), udp);
|
SESS_MGR_STAT_DEC(&mgr->stat, session_get_state(sess), udp);
|
||||||
mgr->stat.nr_udp_sess_used--;
|
mgr->stat.nr_udp_sess_used--;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -139,16 +139,11 @@ void session_table_set_freecb(struct session_table *table, session_free_cb free_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int session_table_add(struct session_table *table, const struct tuple6 *tuple, struct session *sess)
|
void session_table_add(struct session_table *table, struct session *sess)
|
||||||
{
|
{
|
||||||
if (table == NULL || sess == NULL)
|
if (table == NULL || sess == NULL)
|
||||||
{
|
{
|
||||||
return -1;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
if (session_table_find_tuple6(table, tuple))
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HASH_ADD(hh1, table->root_tuple6, tuple, sizeof(struct tuple6), sess);
|
HASH_ADD(hh1, table->root_tuple6, tuple, sizeof(struct tuple6), sess);
|
||||||
@@ -156,19 +151,11 @@ int session_table_add(struct session_table *table, const struct tuple6 *tuple, s
|
|||||||
HASH_ADD(hh3, table->root_sessid, id, sizeof(uint64_t), sess);
|
HASH_ADD(hh3, table->root_sessid, id, sizeof(uint64_t), sess);
|
||||||
list_add_tail(&sess->lru, &table->lru_queue);
|
list_add_tail(&sess->lru, &table->lru_queue);
|
||||||
table->count++;
|
table->count++;
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void session_table_del(struct session_table *table, const struct tuple6 *tuple)
|
void session_table_del(struct session_table *table, struct session *sess)
|
||||||
{
|
{
|
||||||
if (table == NULL)
|
if (table == NULL || sess == NULL)
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct session *sess = session_table_find_tuple6(table, tuple);
|
|
||||||
if (sess == NULL)
|
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,10 +15,8 @@ uint64_t session_table_get_count(struct session_table *table);
|
|||||||
|
|
||||||
typedef void (*session_free_cb)(struct session *sess, void *arg);
|
typedef void (*session_free_cb)(struct session *sess, void *arg);
|
||||||
void session_table_set_freecb(struct session_table *table, session_free_cb free_cb, void *arg);
|
void session_table_set_freecb(struct session_table *table, session_free_cb free_cb, void *arg);
|
||||||
// return 0: success
|
void session_table_add(struct session_table *table, struct session *sess);
|
||||||
// return -1: failed
|
void session_table_del(struct session_table *table, struct session *sess);
|
||||||
int session_table_add(struct session_table *table, const struct tuple6 *tuple, struct session *sess);
|
|
||||||
void session_table_del(struct session_table *table, const struct tuple6 *tuple);
|
|
||||||
struct session *session_table_find_sessid(struct session_table *table, uint64_t id);
|
struct session *session_table_find_sessid(struct session_table *table, uint64_t id);
|
||||||
struct session *session_table_find_tuple6(struct session_table *table, const struct tuple6 *tuple);
|
struct session *session_table_find_tuple6(struct session_table *table, const struct tuple6 *tuple);
|
||||||
struct session *session_table_find_tuple4(struct session_table *table, const struct tuple4 *tuple);
|
struct session *session_table_find_tuple4(struct session_table *table, const struct tuple4 *tuple);
|
||||||
|
|||||||
@@ -124,11 +124,11 @@ TEST(SESSION_TABLE, OP_SESSION)
|
|||||||
session_set_id(sess3, 3);
|
session_set_id(sess3, 3);
|
||||||
session_set_tuple(sess3, &sess3_tup6);
|
session_set_tuple(sess3, &sess3_tup6);
|
||||||
|
|
||||||
EXPECT_TRUE(session_table_add(sess_table, &sess1_tup6, sess1) == 0);
|
session_table_add(sess_table, sess1);
|
||||||
EXPECT_TRUE(session_table_get_count(sess_table) == 1);
|
EXPECT_TRUE(session_table_get_count(sess_table) == 1);
|
||||||
EXPECT_TRUE(session_table_add(sess_table, &sess2_tup6, sess2) == 0);
|
session_table_add(sess_table, sess2);
|
||||||
EXPECT_TRUE(session_table_get_count(sess_table) == 2);
|
EXPECT_TRUE(session_table_get_count(sess_table) == 2);
|
||||||
EXPECT_TRUE(session_table_add(sess_table, &sess3_tup6, sess3) == 0);
|
session_table_add(sess_table, sess3);
|
||||||
EXPECT_TRUE(session_table_get_count(sess_table) == 3);
|
EXPECT_TRUE(session_table_get_count(sess_table) == 3);
|
||||||
|
|
||||||
// Search
|
// Search
|
||||||
@@ -153,17 +153,17 @@ TEST(SESSION_TABLE, OP_SESSION)
|
|||||||
EXPECT_TRUE(session_table_find_tuple6(sess_table, &sess3_rev_tup6) == sess3);
|
EXPECT_TRUE(session_table_find_tuple6(sess_table, &sess3_rev_tup6) == sess3);
|
||||||
|
|
||||||
// Delete
|
// Delete
|
||||||
session_table_del(sess_table, &sess1_tup6);
|
session_table_del(sess_table, sess1);
|
||||||
EXPECT_TRUE(session_table_get_count(sess_table) == 2);
|
EXPECT_TRUE(session_table_get_count(sess_table) == 2);
|
||||||
EXPECT_TRUE(session_table_find_tuple6(sess_table, &sess1_tup6) == NULL);
|
EXPECT_TRUE(session_table_find_tuple6(sess_table, &sess1_tup6) == NULL);
|
||||||
EXPECT_TRUE(session_table_find_tuple6(sess_table, &sess1_rev_tup6) == NULL);
|
EXPECT_TRUE(session_table_find_tuple6(sess_table, &sess1_rev_tup6) == NULL);
|
||||||
|
|
||||||
session_table_del(sess_table, &sess2_rev_tup6);
|
session_table_del(sess_table, sess2);
|
||||||
EXPECT_TRUE(session_table_get_count(sess_table) == 1);
|
EXPECT_TRUE(session_table_get_count(sess_table) == 1);
|
||||||
EXPECT_TRUE(session_table_find_tuple6(sess_table, &sess2_tup6) == NULL);
|
EXPECT_TRUE(session_table_find_tuple6(sess_table, &sess2_tup6) == NULL);
|
||||||
EXPECT_TRUE(session_table_find_tuple6(sess_table, &sess2_rev_tup6) == NULL);
|
EXPECT_TRUE(session_table_find_tuple6(sess_table, &sess2_rev_tup6) == NULL);
|
||||||
|
|
||||||
session_table_del(sess_table, &sess3_tup6);
|
session_table_del(sess_table, sess3);
|
||||||
EXPECT_TRUE(session_table_get_count(sess_table) == 0);
|
EXPECT_TRUE(session_table_get_count(sess_table) == 0);
|
||||||
EXPECT_TRUE(session_table_find_tuple6(sess_table, &sess3_tup6) == NULL);
|
EXPECT_TRUE(session_table_find_tuple6(sess_table, &sess3_tup6) == NULL);
|
||||||
EXPECT_TRUE(session_table_find_tuple6(sess_table, &sess3_rev_tup6) == NULL);
|
EXPECT_TRUE(session_table_find_tuple6(sess_table, &sess3_rev_tup6) == NULL);
|
||||||
@@ -207,32 +207,32 @@ TEST(SESSION_TABLE, FIND_OLDEST_NEWEST)
|
|||||||
EXPECT_TRUE(sess1 != NULL);
|
EXPECT_TRUE(sess1 != NULL);
|
||||||
session_set_id(sess1, 1);
|
session_set_id(sess1, 1);
|
||||||
session_set_tuple(sess1, &sess1_tup6);
|
session_set_tuple(sess1, &sess1_tup6);
|
||||||
EXPECT_TRUE(session_table_add(sess_table, &sess1_tup6, sess1) == 0);
|
session_table_add(sess_table, sess1);
|
||||||
EXPECT_TRUE(session_table_find_lru(sess_table) == sess1);
|
EXPECT_TRUE(session_table_find_lru(sess_table) == sess1);
|
||||||
|
|
||||||
sess2 = session_pool_pop(sess_pool);
|
sess2 = session_pool_pop(sess_pool);
|
||||||
EXPECT_TRUE(sess2 != NULL);
|
EXPECT_TRUE(sess2 != NULL);
|
||||||
session_set_id(sess2, 2);
|
session_set_id(sess2, 2);
|
||||||
session_set_tuple(sess2, &sess2_tup6);
|
session_set_tuple(sess2, &sess2_tup6);
|
||||||
EXPECT_TRUE(session_table_add(sess_table, &sess2_tup6, sess2) == 0);
|
session_table_add(sess_table, sess2);
|
||||||
EXPECT_TRUE(session_table_find_lru(sess_table) == sess1);
|
EXPECT_TRUE(session_table_find_lru(sess_table) == sess1);
|
||||||
|
|
||||||
sess3 = session_pool_pop(sess_pool);
|
sess3 = session_pool_pop(sess_pool);
|
||||||
EXPECT_TRUE(sess3 != NULL);
|
EXPECT_TRUE(sess3 != NULL);
|
||||||
session_set_id(sess3, 3);
|
session_set_id(sess3, 3);
|
||||||
session_set_tuple(sess3, &sess3_tup6);
|
session_set_tuple(sess3, &sess3_tup6);
|
||||||
EXPECT_TRUE(session_table_add(sess_table, &sess3_tup6, sess3) == 0);
|
session_table_add(sess_table, sess3);
|
||||||
EXPECT_TRUE(session_table_find_lru(sess_table) == sess1);
|
EXPECT_TRUE(session_table_find_lru(sess_table) == sess1);
|
||||||
|
|
||||||
// Delete Session
|
// Delete Session
|
||||||
|
|
||||||
session_table_del(sess_table, &sess1_tup6);
|
session_table_del(sess_table, sess1);
|
||||||
EXPECT_TRUE(session_table_find_lru(sess_table) == sess2);
|
EXPECT_TRUE(session_table_find_lru(sess_table) == sess2);
|
||||||
|
|
||||||
session_table_del(sess_table, &sess2_tup6);
|
session_table_del(sess_table, sess2);
|
||||||
EXPECT_TRUE(session_table_find_lru(sess_table) == sess3);
|
EXPECT_TRUE(session_table_find_lru(sess_table) == sess3);
|
||||||
|
|
||||||
session_table_del(sess_table, &sess3_tup6);
|
session_table_del(sess_table, sess3);
|
||||||
EXPECT_TRUE(session_table_find_lru(sess_table) == NULL);
|
EXPECT_TRUE(session_table_find_lru(sess_table) == NULL);
|
||||||
|
|
||||||
// Destroy
|
// Destroy
|
||||||
|
|||||||
Reference in New Issue
Block a user