bool test_tcp_closed_state_handle_6( void ) { struct sk_buff *skb; struct session_entry *session; struct tuple tuple; bool success = true; if (!init_tuple_for_test_ipv6( &tuple, IPPROTO_TCP )) return false; if (!(skb = init_packet_type_for_test( PACKET_TYPE_V6_SYN ))) return false; success &= assert_true(tcp_closed_state_handle( skb, &tuple ), "V6 syn-result"); session = session_get( &tuple ); success &= assert_not_null(session, "V6 syn-session."); if (session) success &= assert_equals_u8(V6_INIT, session->state, "V6 syn-state"); kfree_skb(skb); return success; }
/** * Assumes that "tuple" represents a TCP packet, and filters and updates based on it. * Encapsulates the TCP state machine. * * This is RFC 6146 section 3.5.2. */ static verdict tcp(struct packet *pkt, struct tuple *tuple) { struct session_entry *session; int error; error = sessiondb_get(tuple, &session); if (error != 0 && error != -ESRCH) { log_debug("Error code %d while trying to find a TCP session.", error); inc_stats(pkt, IPSTATS_MIB_INDISCARDS); return VERDICT_DROP; } if (error == -ESRCH) return tcp_closed_state_handle(pkt, tuple); log_session(session); error = sessiondb_tcp_state_machine(pkt, session); session_return(session); if (error) { inc_stats(pkt, IPSTATS_MIB_INDISCARDS); return VERDICT_DROP; } return VERDICT_CONTINUE; }