SOURCES: openssh-4.3p1-hpn11.patch (NEW) - original from http://ww...

glen glen at pld-linux.org
Mon Feb 13 13:22:54 CET 2006


Author: glen                         Date: Mon Feb 13 12:22:54 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- original from http://www.psc.edu/networking/projects/hpn-ssh/openssh-4.3p1-hpn11.diff

---- Files affected:
SOURCES:
   openssh-4.3p1-hpn11.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/openssh-4.3p1-hpn11.patch
diff -u /dev/null SOURCES/openssh-4.3p1-hpn11.patch:1.1
--- /dev/null	Mon Feb 13 13:22:54 2006
+++ SOURCES/openssh-4.3p1-hpn11.patch	Mon Feb 13 13:22:49 2006
@@ -0,0 +1,278 @@
+diff -r -u -p1 openssh-4.3p1/buffer.c patch/buffer.c
+--- openssh-4.3p1/buffer.c	2005-03-14 07:22:26.000000000 -0500
++++ patch/buffer.c	2006-02-01 10:26:10.000000000 -0500
+@@ -109,3 +109,3 @@ restart:
+ 	newlen = buffer->alloc + len + 32768;
+-	if (newlen > BUFFER_MAX_LEN)
++	if (newlen > BUFFER_MAX_HPN_LEN)
+ 		fatal("buffer_append_space: alloc %u not supported",
+diff -r -u -p1 openssh-4.3p1/buffer.h patch/buffer.h
+--- openssh-4.3p1/buffer.h	2005-03-14 07:22:26.000000000 -0500
++++ patch/buffer.h	2006-02-01 10:26:10.000000000 -0500
+@@ -27,2 +27,3 @@ typedef struct {
+ #define	BUFFER_MAX_LEN		0xa00000
++#define BUFFER_MAX_HPN_LEN	(2<<29)-1
+ 
+diff -r -u -p1 openssh-4.3p1/channels.c patch/channels.c
+--- openssh-4.3p1/channels.c	2006-01-31 05:47:15.000000000 -0500
++++ patch/channels.c	2006-02-01 10:26:10.000000000 -0500
+@@ -290,2 +290,3 @@ channel_new(char *ctype, int type, int r
+ 	c->local_maxpacket = maxpack;
++	c->dynamic_window = 0;
+ 	c->remote_id = -1;
+@@ -750,5 +751,5 @@ channel_pre_open(Channel *c, fd_set * re
+ 	u_int limit = compat20 ? c->remote_window : packet_get_maxsize();
+-
++	
+ 	/* check buffer limits */
+-	limit = MIN(limit, (BUFFER_MAX_LEN - BUFFER_MAX_CHUNK - CHAN_RBUF));
++	limit = MIN(limit, (BUFFER_MAX_HPN_LEN - BUFFER_MAX_CHUNK - CHAN_RBUF));
+ 
+@@ -1617,5 +1618,20 @@ channel_check_window(Channel *c)
+ 	    c->local_consumed > 0) {
++		u_int32_t tcpwinsz = 0;
++		socklen_t optsz = sizeof(tcpwinsz);
++		int ret = -1;
++		u_int32_t addition = 0;
++		if (c->dynamic_window) {
++			ret = getsockopt(packet_get_connection_in(), 
++				SOL_SOCKET, SO_RCVBUF, &tcpwinsz, &optsz);
++			if ((ret == 0) && tcpwinsz > BUFFER_MAX_HPN_LEN) 
++				tcpwinsz = BUFFER_MAX_HPN_LEN;
++		}
++		if (c->dynamic_window && (ret == 0) && 
++		    (tcpwinsz > c->local_window_max)) {
++			addition = tcpwinsz - c->local_window_max;
++			c->local_window_max += addition;
++		}
+ 		packet_start(SSH2_MSG_CHANNEL_WINDOW_ADJUST);
+ 		packet_put_int(c->remote_id);
+-		packet_put_int(c->local_consumed);
++		packet_put_int(c->local_consumed + addition);
+ 		packet_send();
+@@ -1624,3 +1640,3 @@ channel_check_window(Channel *c)
+ 		    c->local_consumed);
+-		c->local_window += c->local_consumed;
++		c->local_window += c->local_consumed + addition;
+ 		c->local_consumed = 0;
+diff -r -u -p1 openssh-4.3p1/channels.h patch/channels.h
+--- openssh-4.3p1/channels.h	2005-12-31 00:22:32.000000000 -0500
++++ patch/channels.h	2006-02-01 10:26:10.000000000 -0500
+@@ -102,2 +102,3 @@ struct Channel {
+ 	u_int	local_maxpacket;
++	int	dynamic_window;
+ 	int     extended_usage;
+@@ -126,7 +127,7 @@ struct Channel {
+ #define CHAN_SES_PACKET_DEFAULT	(32*1024)
+-#define CHAN_SES_WINDOW_DEFAULT	(4*CHAN_SES_PACKET_DEFAULT)
++#define CHAN_SES_WINDOW_DEFAULT	(0xa00000/2)
+ #define CHAN_TCP_PACKET_DEFAULT	(32*1024)
+-#define CHAN_TCP_WINDOW_DEFAULT	(4*CHAN_TCP_PACKET_DEFAULT)
++#define CHAN_TCP_WINDOW_DEFAULT	(0xa00000/2)
+ #define CHAN_X11_PACKET_DEFAULT	(16*1024)
+-#define CHAN_X11_WINDOW_DEFAULT	(4*CHAN_X11_PACKET_DEFAULT)
++#define CHAN_X11_WINDOW_DEFAULT	(0xa00000/2)
+ 
+diff -r -u -p1 openssh-4.3p1/compat.c patch/compat.c
+--- openssh-4.3p1/compat.c	2005-03-01 05:24:33.000000000 -0500
++++ patch/compat.c	2006-02-01 10:26:10.000000000 -0500
+@@ -164,2 +164,10 @@ compat_datafellows(const char *version)
+ 			datafellows = check[i].bugs;
++			/* Check to see if the remote side is OpenSSH and not HPN */
++			if(strstr(version,"OpenSSH") != NULL)
++			{
++				if (strstr(version,"hpn") == NULL)
++				{
++					datafellows |= SSH_BUG_LARGEWINDOW;
++				}
++			}
+ 			return;
+diff -r -u -p1 openssh-4.3p1/compat.h patch/compat.h
+--- openssh-4.3p1/compat.h	2005-03-01 05:24:33.000000000 -0500
++++ patch/compat.h	2006-02-01 10:26:10.000000000 -0500
+@@ -58,2 +58,3 @@
+ #define SSH_OLD_FORWARD_ADDR	0x01000000
++#define SSH_BUG_LARGEWINDOW     0x02000000
+ 
+diff -r -u -p1 openssh-4.3p1/readconf.h patch/readconf.h
+--- openssh-4.3p1/readconf.h	2005-12-13 03:29:02.000000000 -0500
++++ patch/readconf.h	2006-02-01 10:26:11.000000000 -0500
+@@ -59,2 +59,3 @@ typedef struct {
+ 	int     tcp_keep_alive;	/* Set SO_KEEPALIVE. */
++        int     tcp_rcv_buf; /* user switch to set tcp recv buffer */
+ 	LogLevel log_level;	/* Level for logging. */
+diff -r -u -p1 openssh-4.3p1/scp.c patch/scp.c
+--- openssh-4.3p1/scp.c	2006-01-31 06:11:38.000000000 -0500
++++ patch/scp.c	2006-02-01 07:04:50.000000000 -0500
+@@ -280,3 +280,3 @@ main(int argc, char **argv)
+ 	fflag = tflag = 0;
+-	while ((ch = getopt(argc, argv, "dfl:prtvBCc:i:P:q1246S:o:F:")) != -1)
++	while ((ch = getopt(argc, argv, "dfl:pR:rtvBCc:i:P:q1246S:o:F:w:")) != -1)
+ 		switch (ch) {
+@@ -341,2 +341,5 @@ main(int argc, char **argv)
+ 			break;
++		case 'R':
++		  addargs(&args, "-r%s", optarg);
++		  break;
+ 		default:
+@@ -555,3 +558,3 @@ source(int argc, char **argv)
+ 	int fd = -1, haderr, indx;
+-	char *last, *name, buf[2048];
++	char *last, *name, buf[16384];
+ 	int len;
+@@ -782,3 +785,3 @@ sink(int argc, char **argv)
+ 	int setimes, targisdir, wrerrno = 0;
+-	char ch, *cp, *np, *targ, *why, *vect[1], buf[2048];
++	char ch, *cp, *np, *targ, *why, *vect[1], buf[16384];
+ 	struct timeval tv[2];
+@@ -943,3 +946,3 @@ bad:			run_err("%s: %s", np, strerror(er
+ 		(void) atomicio(vwrite, remout, "", 1);
+-		if ((bp = allocbuf(&buffer, ofd, 4096)) == NULL) {
++		if ((bp = allocbuf(&buffer, ofd, sizeof(buf))) == NULL) {
+ 			(void) close(ofd);
+@@ -953,4 +956,4 @@ bad:			run_err("%s: %s", np, strerror(er
+ 			start_progress_meter(curfile, size, &statbytes);
+-		for (count = i = 0; i < size; i += 4096) {
+-			amt = 4096;
++		for (count = i = 0; i < size; i += sizeof(buf)) {
++			amt = sizeof(buf);
+ 			if (i + amt > size)
+@@ -971,3 +974,3 @@ bad:			run_err("%s: %s", np, strerror(er
+ 			if (limit_rate)
+-				bwlimit(4096);
++				bwlimit(sizeof(buf));
+ 
+@@ -1086,4 +1089,4 @@ usage(void)
+ 	(void) fprintf(stderr,
+-	    "usage: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]\n"
+-	    "           [-l limit] [-o ssh_option] [-P port] [-S program]\n"
++	    "usage: scp [-1246BCpqrRv] [-c cipher] [-F ssh_config] [-i identity_file]\n"
++	    "           [-l limit] [-o ssh_option] [-P port] [-R buffer size] [-S program]\n"
+ 	    "           [[user@]host1:]file1 [...] [[user@]host2:]file2\n");
+diff -r -u -p1 openssh-4.3p1/serverloop.c patch/serverloop.c
+--- openssh-4.3p1/serverloop.c	2005-12-31 00:33:37.000000000 -0500
++++ patch/serverloop.c	2006-02-01 10:26:11.000000000 -0500
+@@ -977,2 +977,4 @@ server_request_session(void)
+ 	    0, "server-session", 1);
++	if (!(datafellows & SSH_BUG_LARGEWINDOW))
++		c->dynamic_window = 1;
+ 	if (session_open(the_authctxt, c->self) != 1) {
+diff -r -u -p1 openssh-4.3p1/ssh.c patch/ssh.c
+--- openssh-4.3p1/ssh.c	2005-12-31 00:33:37.000000000 -0500
++++ patch/ssh.c	2006-02-01 07:02:41.000000000 -0500
+@@ -159,3 +159,3 @@ usage(void)
+ 	fprintf(stderr,
+-"usage: ssh [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec]\n"
++"usage: ssh [-1246AaCfgkMNnqRrsTtVvXxY] [-b bind_address] [-c cipher_spec]\n"
+ "           [-D [bind_address:]port] [-e escape_char] [-F configfile]\n"
+@@ -165,2 +165,3 @@ usage(void)
+ "           [-w tunnel:tunnel] [user@]hostname [command]\n"
++"           [-r receive buffer size]\n"
+ 	);
+@@ -244,5 +245,8 @@ main(int ac, char **av)
+ 
++        /* need to set options.tcp_rcv_buf to 0 */
++        options.tcp_rcv_buf = 0;
++ 
+ again:
+ 	while ((opt = getopt(ac, av,
+-	    "1246ab:c:e:fgi:kl:m:no:p:qstvxACD:F:I:L:MNO:PR:S:TVw:XY")) != -1) {
++	    "1246ab:c:e:fgi:kl:m:no:p:qr:stvxACD:F:I:L:MNO:PR:S:TVw:XY")) != -1) {
+ 		switch (opt) {
+@@ -497,2 +501,5 @@ again:
+ 			break;
++		case 'r':
++		        options.tcp_rcv_buf = atoi(optarg) * 1024;
++		        break;
+ 		default:
+@@ -1132,2 +1139,3 @@ ssh_session2_open(void)
+ 	if (tty_flag) {
++		window = 4*CHAN_SES_PACKET_DEFAULT;
+ 		window >>= 1;
+@@ -1139,3 +1147,5 @@ ssh_session2_open(void)
+ 	    "client-session", /*nonblock*/0);
+-
++	if (!tty_flag && (!(datafellows & SSH_BUG_LARGEWINDOW))) {
++		c->dynamic_window = 1;
++	}
+ 	debug3("ssh_session2_open: channel_new: %d", c->self);
+Only in patch: ssh.c.rej
+diff -r -u -p1 openssh-4.3p1/sshconnect.c patch/sshconnect.c
+--- openssh-4.3p1/sshconnect.c	2005-12-13 03:29:03.000000000 -0500
++++ patch/sshconnect.c	2006-02-01 10:26:11.000000000 -0500
+@@ -168,2 +168,25 @@ ssh_create_socket(int privileged, struct
+ 			debug("Allocated local port %d.", p);
++
++		
++		/* tuning needs to happen after the socket is */
++		/* created but before the connection happens */
++		/* so winscale is negotiated properly -cjr */
++		
++		/* Set tcp receive buffer if requested */
++		if (options.tcp_rcv_buf) 
++		  {
++		    if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF, 
++				   (void *)&options.tcp_rcv_buf, 
++				   sizeof(options.tcp_rcv_buf)) >= 0)
++		      {             
++			debug("setsockopt SO_RCVBUF: %.100s", strerror(errno));
++		      } 
++		    else 
++		      {
++			/* coudln't set the socket size to use spec. */
++			/* should default to system param and continue */
++			/* warn the user though - cjr */
++			error("Couldn't set socket receive buffer as requested. Continuing anyway.");
++		      }
++		  }
+ 		return sock;
+@@ -173,4 +196,26 @@ ssh_create_socket(int privileged, struct
+ 		error("socket: %.100s", strerror(errno));
+-
+-	/* Bind the socket to an alternative local IP address */
++	
++	/* tuning needs to happen after the socket is */
++	/* created but before the connection happens */
++	/* so winscale is negotiated properly -cjr */
++	
++	/* Set tcp receive buffer if requested */
++	if (options.tcp_rcv_buf) 
++	  {
++	    if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF, 
++			   (void *)&options.tcp_rcv_buf, 
++			   sizeof(options.tcp_rcv_buf)) >= 0)
++	      {             
++		debug("setsockopt SO_RCVBUF: %.100s", strerror(errno));
++	      }
++	    else 
++	      {
++		/* coudln't set the socket size to use spec. */
++		/* should default to system param and continue */
++		/* warn the user though - cjr */
++		error("Couldn't set socket receive buffer as requested. Continuing anyway.");
++	      }
++	  }
++	
++       	/* Bind the socket to an alternative local IP address */
+ 	if (options.bind_address == NULL)
+@@ -481,3 +526,3 @@ ssh_exchange_identification(void)
+ 	    compat20 ? PROTOCOL_MINOR_2 : minor1,
+-	    SSH_VERSION);
++	    SSH_RELEASE);
+ 	if (atomicio(vwrite, connection_out, buf, strlen(buf)) != strlen(buf))
+diff -r -u -p1 openssh-4.3p1/sshd.c patch/sshd.c
+--- openssh-4.3p1/sshd.c	2005-12-23 22:59:12.000000000 -0500
++++ patch/sshd.c	2006-02-01 10:26:11.000000000 -0500
+@@ -379,3 +379,3 @@ sshd_exchange_identification(int sock_in
+ 	}
+-	snprintf(buf, sizeof buf, "SSH-%d.%d-%.100s\n", major, minor, SSH_VERSION);
++	snprintf(buf, sizeof buf, "SSH-%d.%d-%.100s\n", major, minor, SSH_RELEASE);
+ 	server_version_string = xstrdup(buf);
+diff -r -u -p1 openssh-4.3p1/version.h patch/version.h
+--- openssh-4.3p1/version.h	2006-02-01 06:27:31.000000000 -0500
++++ patch/version.h	2006-02-01 10:26:11.000000000 -0500
+@@ -5,2 +5,3 @@
+ #define SSH_PORTABLE	"p1"
+-#define SSH_RELEASE	SSH_VERSION SSH_PORTABLE
++#define SSH_HPN		"-hpn"
++#define SSH_RELEASE	SSH_VERSION SSH_PORTABLE SSH_HPN
================================================================


More information about the pld-cvs-commit mailing list