diff --git a/src/session/session_manager.cpp b/src/session/session_manager.cpp index 7d51a26..c715167 100644 --- a/src/session/session_manager.cpp +++ b/src/session/session_manager.cpp @@ -567,13 +567,13 @@ static void session_manager_evicte_session(struct session_manager *mgr, struct s { case SESSION_TYPE_TCP: 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); mgr->stat.nr_tcp_sess_evicted++; break; case SESSION_TYPE_UDP: 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) { 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; 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) { @@ -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_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); 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: 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); mgr->stat.nr_tcp_sess_used--; break; 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); mgr->stat.nr_udp_sess_used--; break; diff --git a/src/session/session_table.cpp b/src/session/session_table.cpp index 4d478b3..bd62db7 100644 --- a/src/session/session_table.cpp +++ b/src/session/session_table.cpp @@ -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) { - return -1; - } - - if (session_table_find_tuple6(table, tuple)) - { - return -1; + return; } 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); list_add_tail(&sess->lru, &table->lru_queue); 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) - { - return; - } - - struct session *sess = session_table_find_tuple6(table, tuple); - if (sess == NULL) + if (table == NULL || sess == NULL) { return; } diff --git a/src/session/session_table.h b/src/session/session_table.h index bb485e6..a4751ff 100644 --- a/src/session/session_table.h +++ b/src/session/session_table.h @@ -15,10 +15,8 @@ uint64_t session_table_get_count(struct session_table *table); 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); -// return 0: success -// return -1: failed -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); +void session_table_add(struct session_table *table, struct session *sess); +void session_table_del(struct session_table *table, struct session *sess); 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_tuple4(struct session_table *table, const struct tuple4 *tuple); diff --git a/src/session/test/gtest_session_table.cpp b/src/session/test/gtest_session_table.cpp index 72972af..477766f 100644 --- a/src/session/test/gtest_session_table.cpp +++ b/src/session/test/gtest_session_table.cpp @@ -124,11 +124,11 @@ TEST(SESSION_TABLE, OP_SESSION) session_set_id(sess3, 3); 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_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_add(sess_table, &sess3_tup6, sess3) == 0); + session_table_add(sess_table, sess3); EXPECT_TRUE(session_table_get_count(sess_table) == 3); // Search @@ -153,17 +153,17 @@ TEST(SESSION_TABLE, OP_SESSION) EXPECT_TRUE(session_table_find_tuple6(sess_table, &sess3_rev_tup6) == sess3); // 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_find_tuple6(sess_table, &sess1_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_find_tuple6(sess_table, &sess2_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_find_tuple6(sess_table, &sess3_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); session_set_id(sess1, 1); 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); sess2 = session_pool_pop(sess_pool); EXPECT_TRUE(sess2 != NULL); session_set_id(sess2, 2); 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); sess3 = session_pool_pop(sess_pool); EXPECT_TRUE(sess3 != NULL); session_set_id(sess3, 3); 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); // Delete Session - session_table_del(sess_table, &sess1_tup6); + session_table_del(sess_table, sess1); 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); - session_table_del(sess_table, &sess3_tup6); + session_table_del(sess_table, sess3); EXPECT_TRUE(session_table_find_lru(sess_table) == NULL); // Destroy