void __hidden print_dvm_bt(struct tls_info *tls, struct dvm_iface *dvm, struct dvm_bt *dvm_bt) { int ii; ii = compare_traces(tls, dvm, dvm_bt); if (ii < 0) { __bt_printf(tls, "DVM:BT_REPEAT:1:"); return; } /* else if (ii > 1) __bt_printf(tls, "DVM:BT_REPEAT:%d:", ii); */ bt_printf(tls, "DVM:BT_START:%d:", dvm_bt->count); for (ii = 0; ii < dvm_bt->count; ii++) { print_dvm_sym(tls, dvm, ii, dvm_bt->mlist[ii]); } /* bt_printf(tls, "DVM:BT_END:"); */ return; }
void tcp_tahoe_close_passive_to_active_drop_second_ack() { // <editor-fold defaultstate="collapsed" desc="setup"> gcstring data = random_string(1); tcp_tahoe_close_send_receive_test(data); NetworkTrace expected; // Connect // Send TCPPacket* syn = get_syn(TCP_TAHOE); syn->set_tcp_receive_window_size(MAX_TCP_RECEIVE_WINDOW_SIZE); expected.add_packet(syn); // receive expected.add_packet(syn); // send TCPPacket* synack = get_synack(TCP_TAHOE); synack->set_tcp_receive_window_size(MAX_TCP_RECEIVE_WINDOW_SIZE); expected.add_packet(synack); // receive expected.add_packet(synack); TCPPacket* ack = get_base_tcp_packet_ts(TCP_TAHOE); ack->set_tcp_receive_window_size(MAX_TCP_RECEIVE_WINDOW_SIZE); ack->set_tcp_sequence_number(2); ack->set_tcp_ack_number(2); ack->set_source_port(1000); ack->set_destination_port(5002); ack->set_tcp_ack(true); // send expected.add_packet(ack); // receive expected.add_packet(ack); // Data TCPPacket* data_packet = get_base_tcp_packet(TCP_TAHOE); data_packet->set_tcp_receive_window_size(MAX_TCP_RECEIVE_WINDOW_SIZE); data_packet->set_destination_port(1000); data_packet->set_source_port(5002); data_packet->set_tcp_ack(true); data_packet->set_tcp_sequence_number(2); data_packet->set_tcp_ack_number(2); data_packet->insert_tcp_header_option(new TCPTimestampOption()); data_packet->set_data((unsigned char*) data.c_str(), data.size()); // send expected.add_packet(data_packet); // receive expected.add_packet(data_packet); // </editor-fold> // Close // Passive to Active TCPPacket* fin1 = get_base_tcp_packet_ts(TCP_TAHOE); fin1->set_tcp_receive_window_size(MAX_TCP_RECEIVE_WINDOW_SIZE); fin1->set_tcp_sequence_number(3); fin1->set_tcp_ack_number(2); fin1->set_source_port(5002); fin1->set_destination_port(1000); fin1->set_tcp_fin(true); fin1->set_tcp_ack(true); TCPPacket* ack_for_data = get_base_tcp_packet_ts(TCP_TAHOE); ack_for_data->set_tcp_receive_window_size(MAX_TCP_RECEIVE_WINDOW_SIZE); ack_for_data->set_tcp_sequence_number(2); ack_for_data->set_tcp_ack_number(3); ack_for_data->set_source_port(1000); ack_for_data->set_destination_port(5002); ack_for_data->set_tcp_ack(true); // send expected.add_packet(ack_for_data); // receive expected.add_packet(ack_for_data); // send expected.add_packet(fin1); // receive expected.add_packet(fin1); TCPPacket* ack_for_fin = get_base_tcp_packet_ts(TCP_TAHOE); ack_for_fin->set_tcp_receive_window_size(MAX_TCP_RECEIVE_WINDOW_SIZE); ack_for_fin->set_tcp_sequence_number(2); ack_for_fin->set_tcp_ack_number(4); ack_for_fin->set_source_port(1000); ack_for_fin->set_destination_port(5002); ack_for_fin->set_tcp_ack(true); // send expected.add_packet(ack_for_fin); // receive expected.add_packet(ack_for_fin); // Close // Active to Passive TCPPacket* fin2 = get_base_tcp_packet_ts(TCP_TAHOE); fin2->set_tcp_receive_window_size(MAX_TCP_RECEIVE_WINDOW_SIZE); fin2->set_tcp_sequence_number(2); fin2->set_tcp_ack_number(4); fin2->set_source_port(1000); fin2->set_destination_port(5002); fin2->set_tcp_fin(true); fin2->set_tcp_ack(true); // send expected.add_packet(fin2); // receive expected.add_packet(fin2); TCPPacket* ack2 = get_base_tcp_packet_ts(TCP_TAHOE); ack2->set_tcp_receive_window_size(MAX_TCP_RECEIVE_WINDOW_SIZE); ack2->set_tcp_sequence_number(4); ack2->set_tcp_ack_number(3); ack2->set_source_port(5002); ack2->set_destination_port(1000); ack2->set_tcp_ack(true); // send (drop) expected.add_packet(ack2); // resend expected.add_packet(fin2); // receive expected.add_packet(fin2); // send expected.add_packet(ack2); // receive expected.add_packet(ack2); compare_traces(expected); }