Beispiel #1
0
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);
}