built snowflake into the session manager

This commit is contained in:
luwenpeng
2024-09-02 15:04:55 +08:00
parent e2f2823b91
commit 9069dceae7
36 changed files with 137 additions and 509 deletions

View File

@@ -18,6 +18,12 @@
#define SESSION_LOG_DEBUG(format, ...) STELLAR_LOG_DEBUG(__thread_local_logger, "session", format, ##__VA_ARGS__)
#define SESSION_LOG_INFO(format, ...) STELLAR_LOG_INFO(__thread_local_logger, "session", format, ##__VA_ARGS__)
struct snowflake
{
uint64_t seed;
uint64_t sequence;
};
struct session_manager
{
struct list_head evicte_queue;
@@ -38,7 +44,7 @@ struct session_manager
*/
uint64_t now_ms;
uint64_t last_clean_expired_sess_ts;
session_id_generate_fn id_generator;
struct snowflake *sf;
};
#define EVICTE_SESSION_BURST (RX_BURST_MAX)
@@ -104,6 +110,55 @@ struct session_manager
} \
}
/******************************************************************************
* snowflake id generator
******************************************************************************/
static struct snowflake *snowflake_new(uint64_t seed)
{
struct snowflake *sf = (struct snowflake *)calloc(1, sizeof(struct snowflake));
if (sf == NULL)
{
return NULL;
}
sf->seed = seed & 0xFFFFF;
sf->sequence = 0;
return sf;
}
static void snowflake_free(struct snowflake *sf)
{
if (sf != NULL)
{
free(sf);
sf = NULL;
}
}
/*
* high -> low
*
* +------+------------------+----------------+------------------------+---------------------------+
* | 1bit | 12bit device_id | 8bit thread_id | 28bit timestamp in sec | 15bit sequence per thread |
* +------+------------------+----------------+------------------------+---------------------------+
*/
#define MAX_ID_PER_THREAD (32768)
#define MAX_ID_BASE_TIME (268435456L)
static uint64_t snowflake_generate(struct snowflake *sf, uint64_t now_sec)
{
uint64_t id = 0;
uint64_t id_per_thread = (sf->sequence++) % MAX_ID_PER_THREAD;
uint64_t id_base_time = now_sec % MAX_ID_BASE_TIME;
id = (sf->seed << 43) | (id_base_time << 15) | (id_per_thread);
return id;
}
/******************************************************************************
* TCP utils
******************************************************************************/
@@ -408,15 +463,8 @@ static void session_update(struct session_manager *mgr, struct session *sess, en
{
if (session_get_current_state(sess) == SESSION_STATE_INIT)
{
if (mgr->id_generator)
{
uint64_t sess_id = mgr->id_generator(mgr->now_ms / 1000);
session_set_id(sess, sess_id);
}
else
{
session_set_id(sess, 0);
}
uint64_t sess_id = snowflake_generate(mgr->sf, mgr->now_ms / 1000);
session_set_id(sess, sess_id);
enum packet_direction pkt_dir = packet_get_direction(pkt);
if (dir == FLOW_DIRECTION_C2S)
{
@@ -923,6 +971,11 @@ struct session_manager *session_manager_new(const struct session_manager_config
goto error;
}
}
mgr->sf = snowflake_new(mgr->cfg.session_id_seed);
if (mgr->sf == NULL)
{
goto error;
}
INIT_LIST_HEAD(&mgr->evicte_queue);
session_transition_init();
@@ -966,6 +1019,7 @@ void session_manager_free(struct session_manager *mgr)
{
packet_filter_free(mgr->dup_pkt_filter);
}
snowflake_free(mgr->sf);
session_timer_free(mgr->sess_timer);
session_table_free(mgr->udp_sess_table);
session_table_free(mgr->tcp_sess_table);
@@ -975,11 +1029,6 @@ void session_manager_free(struct session_manager *mgr)
}
}
void session_manager_set_session_id_generator(struct session_manager *mgr, session_id_generate_fn generator)
{
mgr->id_generator = generator;
}
void session_manager_record_duplicated_packet(struct session_manager *mgr, const struct packet *pkt)
{
if (mgr->cfg.duplicated_packet_bloom_filter.enable)

View File

@@ -10,6 +10,7 @@ extern "C"
struct session_manager_config
{
uint64_t session_id_seed;
uint64_t tcp_session_max;
uint64_t udp_session_max;
@@ -149,8 +150,6 @@ struct session_manager;
struct session_manager *session_manager_new(const struct session_manager_config *cfg, uint64_t now_ms);
void session_manager_free(struct session_manager *mgr);
typedef uint64_t (*session_id_generate_fn)(uint64_t now_ms);
void session_manager_set_session_id_generator(struct session_manager *mgr, session_id_generate_fn generator);
void session_manager_record_duplicated_packet(struct session_manager *mgr, const struct packet *pkt);
struct session *session_manager_new_session(struct session_manager *mgr, const struct packet *pkt, uint64_t now_ms);

View File

@@ -108,6 +108,13 @@ target_link_libraries(gtest_sess_mgr_scan session_manager gtest)
add_executable(gtest_case_tcp_fast_open gtest_case_tcp_fast_open.cpp)
target_link_libraries(gtest_case_tcp_fast_open session_manager gtest)
###############################################################################
# session id decoder
###############################################################################
add_executable(session_id_decoder session_id_decoder.cpp)
target_link_libraries(session_id_decoder)
###############################################################################
# gtest
###############################################################################

View File

@@ -10,6 +10,7 @@ extern "C"
#include "session_manager.h"
static struct session_manager_config cfg = {
.session_id_seed = 0xFFFFF,
.tcp_session_max = 256,
.udp_session_max = 256,

View File

@@ -6,12 +6,6 @@
#include "session_private.h"
#include "default_config.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
/******************************************************************************
* case: TCP init -> opening (by TCP Fast Open)
******************************************************************************/
@@ -274,7 +268,6 @@ TEST(CASE, TCP_FAST_OPEN)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S fast open packet\n");

View File

@@ -6,12 +6,6 @@
#include "default_config.h"
#include "test_packets.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
static void packet_set_ip_id(struct packet *pkt, uint16_t ip_id)
{
const struct layer_private *ipv4_layer = packet_get_innermost_layer(pkt, LAYER_PROTO_IPV4);
@@ -30,7 +24,6 @@ TEST(TCP_DUPKT_FILTER_ENABLE, SYN_DUP)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -97,7 +90,6 @@ TEST(TCP_DUPKT_FILTER_ENABLE, SYNACK_DUP)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// S2C SYNACK Packet
printf("\n=> Packet Parse: TCP S2C SYNACK packet\n");
@@ -165,7 +157,6 @@ TEST(TCP_DUPKT_FILTER_ENABLE, SKIP)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -252,7 +243,6 @@ TEST(TCP_DUPKT_FILTER_DISABLE, SYN_DUP)
mgr = session_manager_new(&_cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -303,7 +293,6 @@ TEST(TCP_DUPKT_FILTER_DISABLE, SYNACK_DUP)
mgr = session_manager_new(&_cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// S2C SYNACK Packet
printf("\n=> Packet Parse: TCP S2C SYNACK packet\n");

View File

@@ -7,12 +7,6 @@
#include "default_config.h"
#include "test_packets.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
static void packet_set_ip_src_addr(struct packet *pkt, uint32_t addr)
{
const struct layer_private *ipv4_layer = packet_get_innermost_layer(pkt, LAYER_PROTO_IPV4);
@@ -34,7 +28,6 @@ TEST(TCP_OVERLOAD, EVICT_OLD_SESS)
mgr = session_manager_new(&_cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -78,7 +71,6 @@ TEST(TCP_OVERLOAD, EVICT_NEW_SESS)
mgr = session_manager_new(&_cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");

View File

@@ -7,12 +7,6 @@
#include "default_config.h"
#include "test_packets.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
static void packet_set_ip_src_addr(struct packet *pkt, uint32_t addr)
{
const struct layer_private *ipv4_layer = packet_get_innermost_layer(pkt, LAYER_PROTO_IPV4);
@@ -35,7 +29,6 @@ TEST(UDP_OVERLOAD, EVICT_OLD_SESS)
mgr = session_manager_new(&_cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S REQ Packet
printf("\n=> Packet Parse: UDP C2S REQ packet\n");
@@ -127,7 +120,6 @@ TEST(UDP_OVERLOAD, EVICT_NEW_SESS)
mgr = session_manager_new(&_cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S REQ Packet
printf("\n=> Packet Parse: UDP C2S REQ packet\n");

View File

@@ -6,12 +6,6 @@
#include "default_config.h"
#include "test_packets.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
static inline void packet_overwrite_src_addr(struct packet *pkt, struct in_addr addr)
{
const struct layer_private *ipv4_layer = packet_get_innermost_layer(pkt, LAYER_PROTO_IPV4);
@@ -93,7 +87,6 @@ TEST(SESS_MGR_SCAN, OPTS)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// new session
memset(&pkt, 0, sizeof(pkt));

View File

@@ -6,12 +6,6 @@
#include "default_config.h"
#include "test_packets.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
static void hex_dump(const char *payload, uint32_t len)
{
printf("Payload Length: %u\n", len);
@@ -36,7 +30,6 @@ TEST(SESS_MGR_TCP_REASSEMBLY, OUT_OF_ORDER)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -228,7 +221,6 @@ TEST(SESS_MGR_TCP_REASSEMBLY, SEQ_WRAPAROUND)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");

View File

@@ -8,12 +8,6 @@
#include "default_config.h"
#include "test_packets.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
static void build_active_tcp_session(struct session_manager *mgr, struct session *sess)
{
struct packet pkt;
@@ -58,7 +52,6 @@ TEST(TCP_ACTIVE_TO_CLOSING, BY_FIN_FIN)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet & C2S DATA Packet
build_active_tcp_session(mgr, sess);
@@ -150,7 +143,6 @@ TEST(TCP_ACTIVE_TO_CLOSING, BY_C2S_RST)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet & C2S DATA Packet
build_active_tcp_session(mgr, sess);
@@ -236,7 +228,6 @@ TEST(TCP_ACTIVE_TO_CLOSING, BY_S2C_RST)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet & C2S DATA Packet
build_active_tcp_session(mgr, sess);
@@ -320,7 +311,6 @@ TEST(TCP_ACTIVE_TO_CLOSING, BY_DATA_TIMEOUT)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet & C2S DATA Packet
build_active_tcp_session(mgr, sess);
@@ -370,7 +360,6 @@ TEST(TCP_ACTIVE_TO_CLOSING, BY_C2S_HALF_CLOSED_TIMEOUT)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet & C2S DATA Packet
build_active_tcp_session(mgr, sess);
@@ -450,7 +439,6 @@ TEST(TCP_ACTIVE_TO_CLOSING, BY_S2C_HALF_CLOSED_TIMEOUT)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet & C2S DATA Packet
build_active_tcp_session(mgr, sess);

View File

@@ -8,12 +8,6 @@
#include "default_config.h"
#include "test_packets.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
/******************************************************************************
* case: TCP init -> opening (by SYN)
******************************************************************************/
@@ -29,7 +23,6 @@ TEST(TCP_INIT_TO_OPENING, BY_SYN)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -107,7 +100,6 @@ TEST(TCP_INIT_TO_OPENING, BY_SYNACK)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// S2C SYNACK Packet
printf("\n=> Packet Parse: TCP S2C SYNACK packet\n");
@@ -185,7 +177,6 @@ TEST(TCP_INIT_TO_OPENING, BY_SYN_SYNACK)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -275,7 +266,6 @@ TEST(TCP_INIT_TO_OPENING, BY_SYN_SYNACK_ACK)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -379,7 +369,6 @@ TEST(TCP_INIT_TO_OPENING, BY_SYN_RETRANSMISSION)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -476,7 +465,6 @@ TEST(TCP_INIT_TO_OPENING, BY_SYNACK_RETRANSMISSION)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// S2C SYNACK Packet
printf("\n=> Packet Parse: TCP S2C SYNACK packet\n");
@@ -572,7 +560,6 @@ TEST(TCP_INIT_TO_OPENING, BY_C2S_ASMMETRIC)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -662,7 +649,6 @@ TEST(TCP_INIT_TO_OPENING, BY_S2C_ASMMETRIC)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// S2C SYNACK Packet
printf("\n=> Packet Parse: TCP S2C SYNACK packet\n");

View File

@@ -8,12 +8,6 @@
#include "default_config.h"
#include "test_packets.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
#if 1
TEST(TCP_INIT_TO_OPENING_TO_ACTIVE_TO_CLOSING_TO_CLOSED, TEST)
{
@@ -25,7 +19,6 @@ TEST(TCP_INIT_TO_OPENING_TO_ACTIVE_TO_CLOSING_TO_CLOSED, TEST)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");

View File

@@ -8,12 +8,6 @@
#include "default_config.h"
#include "test_packets.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
/******************************************************************************
* case: TCP opening -> active (by C2S DATA)
******************************************************************************/
@@ -29,7 +23,6 @@ TEST(TCP_OPENING_TO_ACTIVE, BY_SYN_C2S_DATA)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -119,7 +112,6 @@ TEST(TCP_OPENING_TO_ACTIVE, BY_SYNACK_S2C_DATA)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// S2C SYNACK Packet
printf("\n=> Packet Parse: TCP S2C SYNACK packet\n");

View File

@@ -8,12 +8,6 @@
#include "default_config.h"
#include "test_packets.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
/******************************************************************************
* case: TCP opening -> closing (by FIN-FIN)
******************************************************************************/
@@ -29,7 +23,6 @@ TEST(TCP_OPENING_TO_CLOSING, BY_FIN_FIN)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -130,7 +123,6 @@ TEST(TCP_OPENING_TO_CLOSING, BY_C2S_RST)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -225,7 +217,6 @@ TEST(TCP_OPENING_TO_CLOSING, BY_S2C_RST)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -319,7 +310,6 @@ TEST(TCP_OPENING_TO_CLOSING, BY_INIT_TIMEOUT)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -378,7 +368,6 @@ TEST(TCP_OPENING_TO_CLOSING, BY_HANDSHAKE_TIMEOUT)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -468,7 +457,6 @@ TEST(TCP_OPENING_TO_CLOSING, BY_DATA_TIMEOUT)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -570,7 +558,6 @@ TEST(TCP_OPENING_TO_CLOSING, BY_C2S_HALF_FIN)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");
@@ -659,7 +646,6 @@ TEST(TCP_OPENING_TO_CLOSING, BY_S2C_HALF_FIN)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");

View File

@@ -8,12 +8,6 @@
#include "default_config.h"
#include "test_packets.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
#if 1
TEST(UDP_INIT_TO_OPENING_TO_ACTIVE_TO_CLOSING, TEST)
{
@@ -25,7 +19,6 @@ TEST(UDP_INIT_TO_OPENING_TO_ACTIVE_TO_CLOSING, TEST)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S REQ Packet
printf("\n=> Packet Parse: UDP C2S REQ packet\n");

View File

@@ -8,12 +8,6 @@
#include "default_config.h"
#include "test_packets.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
/******************************************************************************
* case: UDP init -> opening (by C2S Packet)
* case: UDP opening -> closing (by timeout)
@@ -30,7 +24,6 @@ TEST(UDP_INIT_TO_OPENING_TO_CLOSING, BY_C2S)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S REQ Packet
printf("\n=> Packet Parse: UDP C2S REQ packet\n");
@@ -109,7 +102,6 @@ TEST(UDP_INIT_TO_OPENING_TO_CLOSING, BY_S2C)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// S2C RESP Packet
printf("\n=> Packet Parse: UDP S2C RESP packet\n");

View File

@@ -7,12 +7,6 @@
#include "default_config.h"
#include "test_packets.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
#if 1
TEST(TIMEOUT, TCP_TIMEOUT_DATA)
{
@@ -22,7 +16,6 @@ TEST(TIMEOUT, TCP_TIMEOUT_DATA)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");

View File

@@ -7,12 +7,6 @@
#include "default_config.h"
#include "test_packets.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
#if 1
TEST(TIMEOUT, TCP_TIMEOUT_HANDSHAKE)
{
@@ -22,7 +16,6 @@ TEST(TIMEOUT, TCP_TIMEOUT_HANDSHAKE)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// S2C SYNACK Packet
printf("\n=> Packet Parse: TCP S2C SYNACK packet\n");

View File

@@ -7,12 +7,6 @@
#include "default_config.h"
#include "test_packets.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
#if 1
TEST(TIMEOUT, TCP_TIMEOUT_INIT)
{
@@ -22,7 +16,6 @@ TEST(TIMEOUT, TCP_TIMEOUT_INIT)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S SYN Packet
printf("\n=> Packet Parse: TCP C2S SYN packet\n");

View File

@@ -7,12 +7,6 @@
#include "default_config.h"
#include "test_packets.h"
static uint64_t session_id_generator(uint64_t now_ms __attribute__((unused)))
{
static uint64_t count = 0;
return (++count);
}
#if 1
TEST(TIMEOUT, UDP_TIMEOUT_DATA1)
{
@@ -22,7 +16,6 @@ TEST(TIMEOUT, UDP_TIMEOUT_DATA1)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S REQ Packet
printf("\n=> Packet Parse: UDP C2S REQ packet\n");
@@ -59,7 +52,6 @@ TEST(TIMEOUT, UDP_TIMEOUT_DATA2)
mgr = session_manager_new(&cfg, 1);
EXPECT_TRUE(mgr != NULL);
session_manager_set_session_id_generator(mgr, session_id_generator);
// C2S REQ Packet
printf("\n=> Packet Parse: UDP C2S REQ packet\n");

View File

@@ -0,0 +1,37 @@
#include <time.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
if (argc != 2)
{
printf("Usage: %s <id>\n", argv[0]);
return -1;
}
uint64_t id = atoll(argv[1]);
uint64_t sequence = id & 0x7FFF;
uint64_t time_relative = (id >> 15) & 0xFFFFFFF;
uint64_t seed = (id >> 43) & 0xFFFFF;
uint64_t thread_id = seed & 0xFF;
uint64_t instance_id = (seed >> 8) & 0xFFF;
printf("id: %lu, seed: %lu, instance_id: %lu, thread_id: %lu, time_relative: %lu, sequence: %lu\n", id, seed, instance_id, thread_id, time_relative, sequence);
#define MAX_ID_BASE_TIME (268435456L)
for (int i = 6; i < 10; i++)
{
char buff[64];
time_t tt = MAX_ID_BASE_TIME * i + time_relative;
struct tm *tm = localtime(&tt);
strftime(buff, sizeof(buff), "%Y-%m-%d %H:%M:%S", tm);
printf("\ttime_period * %d + time_relative => %s\n", i, buff);
}
return 0;
}