packages/net/hping3/patches/160_tcp_mss.patch
Alexander E. Patrakov 688a5413d0 hping3: add new package
The new package would help measuring one-way delays using ICMP type 13
packets. This is important for various scripts that automatically adjust
CAKE shaper bandwidth based on the observed bufferbloat. They need to
understand whether the delay is on the way up or on the way down, so
that they can adjust the bandwidth of the proper part of the shaper.

https://forum.openwrt.org/t/cake-w-adaptive-bandwidth-historic/108848
https://forum.openwrt.org/t/cake-w-adaptive-bandwidth/135379

V2: refreshed patches

Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
2022-09-22 01:27:55 -07:00

183 lines
5.4 KiB
Diff
Raw Blame History

Subject: Add tcp-mss support.
Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/net/hping/patches/
Bug-Debian: http://bugs.debian.org/409391
Last-Update: 2009-09-19
--- a/main.c
+++ b/main.c
@@ -44,7 +44,8 @@ unsigned int
signlen,
lsr_length = 0,
ssr_length = 0,
- tcp_ack;
+ tcp_ack,
+ tcp_mss;
unsigned short int
@@ -95,6 +96,7 @@ int
opt_tcpexitcode = FALSE,
opt_badcksum = FALSE,
opt_tr_keep_ttl = FALSE,
+ opt_tcp_mss = FALSE,
opt_tcp_timestamp = FALSE,
opt_clock_skew = FALSE,
cs_window = DEFAULT_CS_WINDOW,
--- a/globals.h
+++ b/globals.h
@@ -32,7 +32,8 @@ extern unsigned int
tcp_seqnum,
set_ack,
ip_header_length,
- tcp_ack;
+ tcp_ack,
+ tcp_mss;
extern unsigned short int
data_size;
@@ -77,6 +78,7 @@ extern int opt_debug,
opt_tcpexitcode,
opt_badcksum,
opt_tr_keep_ttl,
+ opt_tcp_mss,
opt_tcp_timestamp,
opt_clock_skew,
cs_window,
--- a/parseoptions.c
+++ b/parseoptions.c
@@ -31,7 +31,7 @@ enum { OPT_COUNT, OPT_INTERVAL, OPT_NUME
OPT_RROUTE, OPT_IPPROTO, OPT_ICMP_IPVER, OPT_ICMP_IPHLEN,
OPT_ICMP_IPLEN, OPT_ICMP_IPID, OPT_ICMP_IPPROTO, OPT_ICMP_CKSUM,
OPT_ICMP_TS, OPT_ICMP_ADDR, OPT_TCPEXITCODE, OPT_FAST, OPT_TR_KEEP_TTL,
- OPT_TCP_TIMESTAMP, OPT_TR_STOP, OPT_TR_NO_RTT, OPT_ICMP_HELP,
+ OPT_TCP_TIMESTAMP, OPT_TCP_MSS, OPT_TR_STOP, OPT_TR_NO_RTT, OPT_ICMP_HELP,
OPT_RAND_DEST, OPT_RAND_SOURCE, OPT_LSRR, OPT_SSRR, OPT_ROUTE_HELP,
OPT_ICMP_IPSRC, OPT_ICMP_IPDST, OPT_ICMP_SRCPORT, OPT_ICMP_DSTPORT,
OPT_ICMP_GW, OPT_FORCE_ICMP, OPT_APD_SEND, OPT_SCAN, OPT_FASTER,
@@ -125,6 +125,7 @@ static struct ago_optlist hping_optlist[
{ '\0', "force-icmp", OPT_FORCE_ICMP, AGO_NOARG },
{ '\0', "beep", OPT_BEEP, AGO_NOARG },
{ '\0', "flood", OPT_FLOOD, AGO_NOARG },
+ { '\0', "tcp-mss", OPT_TCP_MSS, AGO_NEEDARG|AGO_EXCEPT0 },
{ '\0', "clock-skew", OPT_CLOCK_SKEW, AGO_NOARG },
{ '\0', "clock-skew-win", OPT_CS_WINDOW, AGO_NEEDARG},
{ '\0', "clock-skew-win-shift", OPT_CS_WINDOW_SHIFT, AGO_NEEDARG},
@@ -561,6 +562,10 @@ int parse_options(int argc, char **argv)
case OPT_FLOOD:
opt_flood = TRUE;
break;
+ case OPT_TCP_MSS:
+ opt_tcp_mss = TRUE;
+ tcp_mss = strtoul(ago_optarg, NULL, 0);
+ break;
case OPT_CLOCK_SKEW:
opt_tcp_timestamp = TRUE;
opt_clock_skew = TRUE;
--- a/usage.c
+++ b/usage.c
@@ -87,6 +87,7 @@ void show_usage(void)
" -X --xmas set X unused flag (0x40)\n"
" -Y --ymas set Y unused flag (0x80)\n"
" --tcpexitcode use last tcp->th_flags as exit code\n"
+" --tcp-mss enable the TCP MSS option with the given value\n"
" --tcp-timestamp enable the TCP timestamp option to guess the HZ/uptime\n"
"Clock skew detection\n"
" --clock-skew enable clock skew detection. Try with -S against open port\n"
--- a/sendtcp.c
+++ b/sendtcp.c
@@ -28,10 +28,12 @@ void send_tcp(void)
char *packet, *data;
struct mytcphdr *tcp;
struct pseudohdr *pseudoheader;
- unsigned char *tstamp;
+ unsigned char *opts;
+ if (opt_tcp_mss)
+ tcp_opt_size += 4;
if (opt_tcp_timestamp)
- tcp_opt_size = 12;
+ tcp_opt_size += 12;
packet_size = TCPHDR_SIZE + tcp_opt_size + data_size;
packet = malloc(PSEUDOHDR_SIZE + packet_size);
@@ -41,7 +43,7 @@ void send_tcp(void)
}
pseudoheader = (struct pseudohdr*) packet;
tcp = (struct mytcphdr*) (packet+PSEUDOHDR_SIZE);
- tstamp = (unsigned char*) (packet+PSEUDOHDR_SIZE+TCPHDR_SIZE);
+ opts = (unsigned char*) (packet+PSEUDOHDR_SIZE+TCPHDR_SIZE);
data = (char*) (packet+PSEUDOHDR_SIZE+TCPHDR_SIZE+tcp_opt_size);
memset(packet, 0, PSEUDOHDR_SIZE+packet_size);
@@ -64,14 +66,24 @@ void send_tcp(void)
tcp->th_win = htons(src_winsize);
tcp->th_flags = tcp_th_flags;
+ /* tcp MSS option */
+ if (opt_tcp_mss) {
+ opts[0] = 2;
+ opts[1] = 4; /* 4 bytes, kind+len+MSS */
+ opts[2] = tcp_mss >> 8;
+ opts[3] = tcp_mss & 0xff;
+ opts += 4;
+ }
+
/* tcp timestamp option */
if (opt_tcp_timestamp) {
__u32 randts = rand() ^ (rand() << 16);
- tstamp[0] = tstamp[1] = 1; /* NOOP */
- tstamp[2] = 8;
- tstamp[3] = 10; /* 10 bytes, kind+len+T1+T2 */
- memcpy(tstamp+4, &randts, 4); /* random */
- memset(tstamp+8, 0, 4); /* zero */
+ opts[0] = opts[1] = 1; /* NOOP */
+ opts[2] = 8;
+ opts[3] = 10; /* 10 bytes, kind+len+T1+T2 */
+ memcpy(opts+4, &randts, 4); /* random */
+ memset(opts+8, 0, 4); /* zero */
+ opts += 12;
}
/* data */
--- a/docs/hping3.8
+++ b/docs/hping3.8
@@ -98,6 +98,8 @@ hping2 \- send (almost) arbitrary TCP/IP
] [
.B \-\-tcpexitcode
] [
+.B \-\-tcp-mss
+] [
.B \-\-tcp-timestamp
] [
.B \-\-tr-stop
@@ -510,6 +512,9 @@ numbers are predictable.
.I -b --badcksum
Send packets with a bad UDP/TCP checksum.
.TP
+.I --tcp-mss
+Enable the TCP MSS option and set it to the given value.
+.TP
.I --tcp-timestamp
Enable the TCP timestamp option, and try to guess the timestamp update
frequency and the remote system uptime.
--- a/docs/french/hping2-fr.8
+++ b/docs/french/hping2-fr.8
@@ -99,6 +99,8 @@ hping2 \- envoie des paquets TCP/IP (pre
] [
.B \-\-tcpexitcode
] [
+.B \-\-tcp-mss
+] [
.B \-\-tcp-timestamp
] [
.B \-\-tr-stop
@@ -538,6 +540,9 @@ pouvez le voir les num<75>ros de s<>quence d
.I -b --badcksum
Envoie des paquets avec une mauvaise somme de contr<74>le UDP/TCP
.TP
+.I --tcp-mss
+Active l'option TCP MSS et la fixe avec la valeur donn<6E>e.
+.TP
.I --tcp-timestamp
Active l'option TCP timestamp, et essaye de deviner la fr<66>quence de mise <20>
jour du timestamp et l'uptime du syst<73>me distant.