Add test cases for session manager (session state machine)
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -393,47 +393,42 @@ static void tcp_ex_data_tostring(uint64_t ex_data, char *buffer, size_t buffer_l
|
|||||||
int nused = 0;
|
int nused = 0;
|
||||||
if (ex_data & TCP_SYN_RECVED)
|
if (ex_data & TCP_SYN_RECVED)
|
||||||
{
|
{
|
||||||
snprintf(buffer + nused, buffer_len - nused, "TCP_SYN_RECVED ");
|
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_SYN_RECVED ");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ex_data & TCP_SYNACK_RECVED)
|
if (ex_data & TCP_SYNACK_RECVED)
|
||||||
{
|
{
|
||||||
snprintf(buffer + nused, buffer_len - nused, "TCP_SYNACK_RECVED ");
|
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_SYNACK_RECVED ");
|
||||||
}
|
|
||||||
|
|
||||||
if (ex_data & TCP_ACK_RECVED)
|
|
||||||
{
|
|
||||||
snprintf(buffer + nused, buffer_len - nused, "TCP_ACK_RECVED ");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ex_data & TCP_C2S_PAYLOAD_RECVED)
|
if (ex_data & TCP_C2S_PAYLOAD_RECVED)
|
||||||
{
|
{
|
||||||
snprintf(buffer + nused, buffer_len - nused, "TCP_C2S_PAYLOAD_RECVED ");
|
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_C2S_PAYLOAD_RECVED ");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ex_data & TCP_S2C_PAYLOAD_RECVED)
|
if (ex_data & TCP_S2C_PAYLOAD_RECVED)
|
||||||
{
|
{
|
||||||
snprintf(buffer + nused, buffer_len - nused, "TCP_S2C_PAYLOAD_RECVED ");
|
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_S2C_PAYLOAD_RECVED ");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ex_data & TCP_C2S_FIN_RECVED)
|
if (ex_data & TCP_C2S_FIN_RECVED)
|
||||||
{
|
{
|
||||||
snprintf(buffer + nused, buffer_len - nused, "TCP_C2S_FIN_RECVED ");
|
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_C2S_FIN_RECVED ");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ex_data & TCP_S2C_FIN_RECVED)
|
if (ex_data & TCP_S2C_FIN_RECVED)
|
||||||
{
|
{
|
||||||
snprintf(buffer + nused, buffer_len - nused, "TCP_S2C_FIN_RECVED ");
|
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_S2C_FIN_RECVED ");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ex_data & TCP_C2S_RST_RECVED)
|
if (ex_data & TCP_C2S_RST_RECVED)
|
||||||
{
|
{
|
||||||
snprintf(buffer + nused, buffer_len - nused, "TCP_C2S_RST_RECVED ");
|
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_C2S_RST_RECVED ");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ex_data & TCP_S2C_RST_RECVED)
|
if (ex_data & TCP_S2C_RST_RECVED)
|
||||||
{
|
{
|
||||||
snprintf(buffer + nused, buffer_len - nused, "TCP_S2C_RST_RECVED ");
|
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_S2C_RST_RECVED ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -531,21 +526,21 @@ void session_dump(struct session *sess)
|
|||||||
char buffer[128] = {0};
|
char buffer[128] = {0};
|
||||||
tuple6_tostring(session_get0_tuple6(sess), buffer, sizeof(buffer));
|
tuple6_tostring(session_get0_tuple6(sess), buffer, sizeof(buffer));
|
||||||
|
|
||||||
printf("session id : %" PRIu64 "\n", session_get_id(sess));
|
printf("session id : %" PRIu64 "\n", session_get_id(sess));
|
||||||
printf("session tuple6 : %s\n", buffer);
|
printf("session tuple6 key : %s\n", buffer);
|
||||||
printf("session tuple6 dir : %s\n", session_dir_tostring(session_get_tuple6_dir(sess)));
|
printf("session tuple6 dir : %s\n", session_dir_tostring(session_get_tuple6_dir(sess)));
|
||||||
printf("session state : %s\n", session_state_tostring(session_get_state(sess)));
|
printf("session state : %s\n", session_state_tostring(session_get_state(sess)));
|
||||||
printf("session type : %s\n", session_type_tostring(session_get_type(sess)));
|
printf("session type : %s\n", session_type_tostring(session_get_type(sess)));
|
||||||
printf("session c2s packets : %" PRIu64 "\n", session_get_c2s_packets(sess));
|
printf("session c2s packets : %" PRIu64 "\n", session_get_c2s_packets(sess));
|
||||||
printf("session c2s bytes : %" PRIu64 "\n", session_get_c2s_bytes(sess));
|
printf("session c2s bytes : %" PRIu64 "\n", session_get_c2s_bytes(sess));
|
||||||
printf("session s2c packets : %" PRIu64 "\n", session_get_s2c_packets(sess));
|
printf("session s2c packets : %" PRIu64 "\n", session_get_s2c_packets(sess));
|
||||||
printf("session s2c bytes : %" PRIu64 "\n", session_get_s2c_bytes(sess));
|
printf("session s2c bytes : %" PRIu64 "\n", session_get_s2c_bytes(sess));
|
||||||
printf("session c2s 1st metadata : %p\n", (void *)session_get0_c2s_1st_md(sess));
|
printf("session c2s 1st metadata : %p\n", (void *)session_get0_c2s_1st_md(sess));
|
||||||
printf("session s2c 1st metadata : %p\n", (void *)session_get0_s2c_1st_md(sess));
|
printf("session s2c 1st metadata : %p\n", (void *)session_get0_s2c_1st_md(sess));
|
||||||
printf("session create time : %" PRIu64 "\n", session_get_create_time(sess));
|
printf("session create time : %" PRIu64 "\n", session_get_create_time(sess));
|
||||||
printf("session last time : %" PRIu64 "\n", session_get_last_time(sess));
|
printf("session last time : %" PRIu64 "\n", session_get_last_time(sess));
|
||||||
printf("session current packet : %p\n", (void *)session_get0_cur_pkt(sess));
|
printf("session current packet ptr : %p\n", (void *)session_get0_cur_pkt(sess));
|
||||||
printf("session current dir : %s\n", session_dir_tostring(session_get_cur_dir(sess)));
|
printf("session current packet dir : %s\n", session_dir_tostring(session_get_cur_dir(sess)));
|
||||||
printf("session ex data: \n");
|
printf("session ex data: \n");
|
||||||
for (uint8_t i = 0; i < g_ex_manager.count; i++)
|
for (uint8_t i = 0; i < g_ex_manager.count; i++)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -296,11 +296,13 @@ static void update_tcp_ex_data(struct session *sess, const struct packet *pkt, e
|
|||||||
{
|
{
|
||||||
if (curr_dir == SESSION_DIR_C2S)
|
if (curr_dir == SESSION_DIR_C2S)
|
||||||
{
|
{
|
||||||
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state & TCP_C2S_RST_RECVED));
|
state |= TCP_C2S_RST_RECVED;
|
||||||
|
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state & TCP_S2C_RST_RECVED));
|
state |= TCP_S2C_RST_RECVED;
|
||||||
|
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -308,11 +310,13 @@ static void update_tcp_ex_data(struct session *sess, const struct packet *pkt, e
|
|||||||
{
|
{
|
||||||
if (curr_dir == SESSION_DIR_C2S)
|
if (curr_dir == SESSION_DIR_C2S)
|
||||||
{
|
{
|
||||||
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state & TCP_C2S_FIN_RECVED));
|
state |= TCP_C2S_FIN_RECVED;
|
||||||
|
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state & TCP_S2C_FIN_RECVED));
|
state |= TCP_S2C_FIN_RECVED;
|
||||||
|
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,28 +324,27 @@ static void update_tcp_ex_data(struct session *sess, const struct packet *pkt, e
|
|||||||
{
|
{
|
||||||
if (packet_has_tcp_flag_ack(pkt))
|
if (packet_has_tcp_flag_ack(pkt))
|
||||||
{
|
{
|
||||||
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state | TCP_SYNACK_RECVED));
|
state |= TCP_SYNACK_RECVED;
|
||||||
|
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state | TCP_SYN_RECVED));
|
state |= TCP_SYN_RECVED;
|
||||||
|
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (packet_has_tcp_flag_ack(pkt) && curr_dir == SESSION_DIR_C2S)
|
|
||||||
{
|
|
||||||
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state | TCP_ACK_RECVED));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (packet_get_tcp_pld_len(pkt) > 0)
|
if (packet_get_tcp_pld_len(pkt) > 0)
|
||||||
{
|
{
|
||||||
if (curr_dir == SESSION_DIR_C2S)
|
if (curr_dir == SESSION_DIR_C2S)
|
||||||
{
|
{
|
||||||
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state | TCP_C2S_PAYLOAD_RECVED));
|
state |= TCP_C2S_PAYLOAD_RECVED;
|
||||||
|
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state | TCP_S2C_PAYLOAD_RECVED));
|
state |= TCP_S2C_PAYLOAD_RECVED;
|
||||||
|
session_set_ex_data(sess, tcp_builtin_ex, (void *)(state));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,16 +22,15 @@ enum tcp_ex_data
|
|||||||
// HANDSHAKE
|
// HANDSHAKE
|
||||||
TCP_SYN_RECVED = 1 << 0,
|
TCP_SYN_RECVED = 1 << 0,
|
||||||
TCP_SYNACK_RECVED = 1 << 1,
|
TCP_SYNACK_RECVED = 1 << 1,
|
||||||
TCP_ACK_RECVED = 1 << 2,
|
|
||||||
// ESTABLISHED
|
// ESTABLISHED
|
||||||
TCP_C2S_PAYLOAD_RECVED = 1 << 3,
|
TCP_C2S_PAYLOAD_RECVED = 1 << 2,
|
||||||
TCP_S2C_PAYLOAD_RECVED = 1 << 4,
|
TCP_S2C_PAYLOAD_RECVED = 1 << 3,
|
||||||
// FIN
|
// FIN
|
||||||
TCP_C2S_FIN_RECVED = 1 << 5,
|
TCP_C2S_FIN_RECVED = 1 << 4,
|
||||||
TCP_S2C_FIN_RECVED = 1 << 6,
|
TCP_S2C_FIN_RECVED = 1 << 5,
|
||||||
// RST
|
// RST
|
||||||
TCP_C2S_RST_RECVED = 1 << 7,
|
TCP_C2S_RST_RECVED = 1 << 6,
|
||||||
TCP_S2C_RST_RECVED = 1 << 8,
|
TCP_S2C_RST_RECVED = 1 << 7,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum udp_ex_data
|
enum udp_ex_data
|
||||||
|
|||||||
Reference in New Issue
Block a user