Add support for TCP port reuse (same tuple6 but different ISN) in session manager: evict old session and create new session

This commit is contained in:
luwenpeng
2024-05-16 19:13:36 +08:00
parent 1559f0a13e
commit 32ae4618ef
25 changed files with 176 additions and 119 deletions

View File

@@ -71,6 +71,10 @@ static void session_inputs_to_str(int inputs, char *buff, int len)
{
nused += snprintf(buff + nused, len - nused, "LRU_EVICT ");
}
if (inputs & PORT_REUSE_EVICT)
{
nused += snprintf(buff + nused, len - nused, "PORT_REUSE_EVICT ");
}
if (inputs & USER_CLOSE)
{
nused += snprintf(buff + nused, len - nused, "USER_CLOSE ");
@@ -94,7 +98,7 @@ void session_transition_init()
fsm[SESSION_STATE_OPENING][2].inputs_mask = USER_CLOSE;
fsm[SESSION_STATE_OPENING][2].next_state = SESSION_STATE_DISCARD;
fsm[SESSION_STATE_OPENING][3].inputs_mask = LRU_EVICT;
fsm[SESSION_STATE_OPENING][3].inputs_mask = LRU_EVICT | PORT_REUSE_EVICT;
fsm[SESSION_STATE_OPENING][3].next_state = SESSION_STATE_CLOSED;
fsm[SESSION_STATE_OPENING][4].inputs_mask = NONE;
@@ -106,7 +110,7 @@ void session_transition_init()
fsm[SESSION_STATE_ACTIVE][1].inputs_mask = USER_CLOSE;
fsm[SESSION_STATE_ACTIVE][1].next_state = SESSION_STATE_DISCARD;
fsm[SESSION_STATE_ACTIVE][2].inputs_mask = LRU_EVICT;
fsm[SESSION_STATE_ACTIVE][2].inputs_mask = LRU_EVICT | PORT_REUSE_EVICT;
fsm[SESSION_STATE_ACTIVE][2].next_state = SESSION_STATE_CLOSED;
fsm[SESSION_STATE_ACTIVE][3].inputs_mask = NONE;
@@ -115,13 +119,13 @@ void session_transition_init()
fsm[SESSION_STATE_CLOSING][0].inputs_mask = USER_CLOSE;
fsm[SESSION_STATE_CLOSING][0].next_state = SESSION_STATE_DISCARD;
fsm[SESSION_STATE_CLOSING][1].inputs_mask = LRU_EVICT | TIMEOUT;
fsm[SESSION_STATE_CLOSING][1].inputs_mask = LRU_EVICT | PORT_REUSE_EVICT | TIMEOUT;
fsm[SESSION_STATE_CLOSING][1].next_state = SESSION_STATE_CLOSED;
fsm[SESSION_STATE_CLOSING][2].inputs_mask = NONE;
fsm[SESSION_STATE_CLOSING][2].next_state = SESSION_STATE_CLOSING;
fsm[SESSION_STATE_DISCARD][0].inputs_mask = LRU_EVICT | TIMEOUT;
fsm[SESSION_STATE_DISCARD][0].inputs_mask = LRU_EVICT | PORT_REUSE_EVICT | TIMEOUT;
fsm[SESSION_STATE_DISCARD][0].next_state = SESSION_STATE_CLOSED;
fsm[SESSION_STATE_DISCARD][1].inputs_mask = NONE;