From d0009856814c13d13770db5aadd7b2fabf947776 Mon Sep 17 00:00:00 2001 From: Daniel Borkmann Date: Mon, 13 May 2013 13:53:27 +0200 Subject: staging: add mausezahn staging directory After some back and forth, we decided that it is easier to maintain mausezahn in a staging directory until it is fully reworked and cleaned up to be ready to be fully integrated. This way, it is better than having it in a separate branch, and we can also accept patches from outside more easily. Also, while at it, fix up some function mismatches with libcli. Signed-off-by: Daniel Borkmann Signed-off-by: Tobias Klauser --- staging/mops_tcp.c | 154 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 staging/mops_tcp.c (limited to 'staging/mops_tcp.c') diff --git a/staging/mops_tcp.c b/staging/mops_tcp.c new file mode 100644 index 0000000..4d788bd --- /dev/null +++ b/staging/mops_tcp.c @@ -0,0 +1,154 @@ +/* + * Mausezahn - A fast versatile traffic generator + * Copyright (C) 2008-2010 Herbert Haas + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License version 2 as published by the + * Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, see http://www.gnu.org/licenses/gpl-2.0.html + * +*/ + + +#include "mz.h" +#include "mops.h" +#include "cli.h" + +// Calculates the number of TCP transmissions based on SQNR range +u_int32_t mops_tcp_complexity_sqnr (struct mops * mp) +{ + u_int32_t a,b,t,result; + + a = mp->tcp_seq_start; + b = mp->tcp_seq_stop; + t = mp->tcp_seq_delta; + + if (!t) return 1; // delta set to zero means no range + + if (atcp_ack_start; + b = mp->tcp_ack_stop; + t = mp->tcp_ack_delta; + + if (!t) return 1; // delta set to zero means no range + + if (atcp_ctrl_CWR) ? "CRW" : "---", + (mp->tcp_ctrl_ECE) ? "ECE" : "---", + (mp->tcp_ctrl_URG) ? "URG" : "---", + (mp->tcp_ctrl_ACK) ? "ACK" : "---", + (mp->tcp_ctrl_PSH) ? "PSH" : "---", + (mp->tcp_ctrl_RST) ? "RST" : "---", + (mp->tcp_ctrl_SYN) ? "SYN" : "---", + (mp->tcp_ctrl_FIN) ? "FIN" : "---"); + + return 0; +} + +// Add TCP options +// +// TODO: currently all params are ignored and a default option combination is added. +// +int mops_tcp_add_option (struct mops* mp, + int mss, + int sack, + int scale, + u_int32_t tsval, + u_int32_t tsecr) +{ + + u_int8_t tcp_default_options[] = { + 0x02, 0x04, 0x05, 0xac, // MSS + 0x04, 0x02, // SACK permitted + 0x08, 0x0a, 0x19, 0x35, 0x90, 0xc3, 0x00, 0x00, 0x00, 0x00, // Timestamps + 0x01, // NOP + 0x03, 0x03, 0x05 // Window Scale 5 + }; + + + /* Kind: 8 + Length: 10 bytes + + +-------+-------+---------------------+---------------------+ + |Kind=8 | 10 | TS Value (TSval) |TS Echo Reply (TSecr)| + +-------+-------+---------------------+---------------------+ + 1 1 4 4 + * + * The Timestamps option carries two four-byte timestamp fields. The + * Timestamp Value field (TSval) contains the current value of the + * timestamp clock of the TCP sending the option. + * + * The Timestamp Echo Reply field (TSecr) is only valid if the ACK bit + * is set in the TCP header; if it is valid, it echos a times- tamp + * value that was sent by the remote TCP in the TSval field of a + * Timestamps option. When TSecr is not valid, its value must be zero. + * The TSecr value will generally be from the most recent Timestamp + * option that was received; however, there are exceptions that are + * explained below. + * + * A TCP may send the Timestamps option (TSopt) in an initial + * segment (i.e., segment containing a SYN bit and no ACK bit), and + * may send a TSopt in other segments only if it re- ceived a TSopt in + * the initial segment for the connection. + * + */ + + memcpy((void*) mp->tcp_option, (void*) tcp_default_options, 20); + mp->tcp_option_s = 20; + mp->tcp_option_used = 1; + + return 0; +} + -- cgit v1.2.3-54-g00ecf