$NetBSD: patch-am,v 1.1 2006/03/30 13:51:29 salo Exp $

--- sendtcp.c.orig	2002-06-17 17:56:42.000000000 +0200
+++ sendtcp.c	2005-11-05 21:51:35.000000000 +0100
@@ -26,10 +26,12 @@
 	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);
@@ -39,7 +41,7 @@
 	}
 	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);
@@ -62,14 +64,24 @@
 	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 */
