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

@@ -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;
}