View | Details | Raw Unified | Return to bug 24959 | Differences between
and this patch

Collapse All | Expand All

(-)alpha/linux/linux.h (+4 lines)
Lines 377-382 Link Here
377
#define	LINUX_IP_ADD_MEMBERSHIP		35
377
#define	LINUX_IP_ADD_MEMBERSHIP		35
378
#define	LINUX_IP_DROP_MEMBERSHIP	36
378
#define	LINUX_IP_DROP_MEMBERSHIP	36
379
379
380
#define LINUX_TCP_NODELAY	1
381
#define LINUX_TCP_MAXSEG	2
382
#define LINUX_TCP_CORK		3
383
380
struct linux_sockaddr {
384
struct linux_sockaddr {
381
	u_short	sa_family;
385
	u_short	sa_family;
382
	char	sa_data[14];
386
	char	sa_data[14];
(-)compat/linux/linux_socket.c (-2 / +17 lines)
Lines 46-51 Link Here
46
#include <netinet/in.h>
46
#include <netinet/in.h>
47
#include <netinet/in_systm.h>
47
#include <netinet/in_systm.h>
48
#include <netinet/ip.h>
48
#include <netinet/ip.h>
49
#include <netinet/tcp.h>
49
50
50
#include <machine/../linux/linux.h>
51
#include <machine/../linux/linux.h>
51
#ifdef __alpha__
52
#ifdef __alpha__
Lines 89-94 Link Here
89
}
90
}
90
91
91
static int
92
static int
93
linux_to_bsd_tcp_sockopt(int opt)
94
{
95
96
	switch (opt) {
97
	case LINUX_TCP_NODELAY:
98
		return (TCP_NODELAY);
99
	case LINUX_TCP_MAXSEG:
100
		return (TCP_MAXSEG);
101
	case LINUX_TCP_CORK:
102
		return (TCP_CORK);
103
	}
104
	return (-1);
105
}
106
107
static int
92
linux_to_bsd_ip_sockopt(int opt)
108
linux_to_bsd_ip_sockopt(int opt)
93
{
109
{
94
110
Lines 768-775 Link Here
768
		name = linux_to_bsd_ip_sockopt(linux_args.optname);
784
		name = linux_to_bsd_ip_sockopt(linux_args.optname);
769
		break;
785
		break;
770
	case IPPROTO_TCP:
786
	case IPPROTO_TCP:
771
		/* Linux TCP option values match BSD's */
787
		name = linux_to_bsd_tcp_sockopt(linux_args.optname);
772
		name = linux_args.optname;
773
		break;
788
		break;
774
	default:
789
	default:
775
		name = -1;
790
		name = -1;
(-)i386/linux/linux.h (+4 lines)
Lines 375-380 Link Here
375
#define	LINUX_IP_ADD_MEMBERSHIP		35
375
#define	LINUX_IP_ADD_MEMBERSHIP		35
376
#define	LINUX_IP_DROP_MEMBERSHIP	36
376
#define	LINUX_IP_DROP_MEMBERSHIP	36
377
377
378
#define LINUX_TCP_NODELAY	1
379
#define LINUX_TCP_MAXSEG	2
380
#define LINUX_TCP_CORK		3
381
378
struct linux_sockaddr {
382
struct linux_sockaddr {
379
	u_short	sa_family;
383
	u_short	sa_family;
380
	char	sa_data[14];
384
	char	sa_data[14];
(-)netinet/tcp.h (-1 / +2 lines)
Lines 129-135 Link Here
129
 */
129
 */
130
#define	TCP_NODELAY	0x01	/* don't delay send to coalesce packets */
130
#define	TCP_NODELAY	0x01	/* don't delay send to coalesce packets */
131
#define	TCP_MAXSEG	0x02	/* set maximum segment size */
131
#define	TCP_MAXSEG	0x02	/* set maximum segment size */
132
#define TCP_NOPUSH	0x04	/* don't push last block of write */
132
#define TCP_CORK	0x03	/* don't push last block of write */
133
#define TCP_NOPUSH	0x04	/* ditto and also allow TAO on listen */
133
#define TCP_NOOPT	0x08	/* don't use TCP options */
134
#define TCP_NOOPT	0x08	/* don't use TCP options */
134
135
135
#endif
136
#endif
(-)netinet/tcp_input.c (-1 / +1 lines)
Lines 817-823 Link Here
817
#endif
817
#endif
818
			tp = intotcpcb(inp);
818
			tp = intotcpcb(inp);
819
			tp->t_state = TCPS_LISTEN;
819
			tp->t_state = TCPS_LISTEN;
820
			tp->t_flags |= tp0->t_flags & (TF_NOPUSH|TF_NOOPT);
820
			tp->t_flags |= tp0->t_flags & (TF_CORK|TF_NOOPT);
821
821
822
			/* Compute proper scaling value from buffer space */
822
			/* Compute proper scaling value from buffer space */
823
			while (tp->request_r_scale < TCP_MAX_WINSHIFT &&
823
			while (tp->request_r_scale < TCP_MAX_WINSHIFT &&
(-)netinet/tcp_output.c (-1 / +1 lines)
Lines 280-286 Link Here
280
			goto send;
280
			goto send;
281
		if (!(tp->t_flags & TF_MORETOCOME) &&
281
		if (!(tp->t_flags & TF_MORETOCOME) &&
282
		    (idle || tp->t_flags & TF_NODELAY) &&
282
		    (idle || tp->t_flags & TF_NODELAY) &&
283
		    (tp->t_flags & TF_NOPUSH) == 0 &&
283
		    (tp->t_flags & TF_CORK) == 0 &&
284
		    len + off >= so->so_snd.sb_cc)
284
		    len + off >= so->so_snd.sb_cc)
285
			goto send;
285
			goto send;
286
		if (tp->t_force)
286
		if (tp->t_force)
(-)netinet/tcp_usrreq.c (-2 / +9 lines)
Lines 896-901 Link Here
896
		switch (sopt->sopt_name) {
896
		switch (sopt->sopt_name) {
897
		case TCP_NODELAY:
897
		case TCP_NODELAY:
898
		case TCP_NOOPT:
898
		case TCP_NOOPT:
899
		case TCP_CORK:
899
		case TCP_NOPUSH:
900
		case TCP_NOPUSH:
900
			error = sooptcopyin(sopt, &optval, sizeof optval,
901
			error = sooptcopyin(sopt, &optval, sizeof optval,
901
					    sizeof optval);
902
					    sizeof optval);
Lines 909-916 Link Here
909
			case TCP_NOOPT:
910
			case TCP_NOOPT:
910
				opt = TF_NOOPT;
911
				opt = TF_NOOPT;
911
				break;
912
				break;
913
			case TCP_CORK:
914
				opt = TF_CORK;
915
				break;
912
			case TCP_NOPUSH:
916
			case TCP_NOPUSH:
913
				opt = TF_NOPUSH;
917
				opt = TF_NOPUSH | TF_CORK;
914
				break;
918
				break;
915
			default:
919
			default:
916
				opt = 0; /* dead code to fool gcc */
920
				opt = 0; /* dead code to fool gcc */
Lines 919-926 Link Here
919
923
920
			if (optval)
924
			if (optval)
921
				tp->t_flags |= opt;
925
				tp->t_flags |= opt;
922
			else
926
			else {
923
				tp->t_flags &= ~opt;
927
				tp->t_flags &= ~opt;
928
				if (opt & TF_CORK)
929
					error = tcp_output(tp);
930
			}
924
			break;
931
			break;
925
932
926
		case TCP_MAXSEG:
933
		case TCP_MAXSEG:
(-)netinet/tcp_var.h (-1 / +2 lines)
Lines 89-100 Link Here
89
#define	TF_SACK_PERMIT	0x00200		/* other side said I could SACK */
89
#define	TF_SACK_PERMIT	0x00200		/* other side said I could SACK */
90
#define	TF_NEEDSYN	0x00400		/* send SYN (implicit state) */
90
#define	TF_NEEDSYN	0x00400		/* send SYN (implicit state) */
91
#define	TF_NEEDFIN	0x00800		/* send FIN (implicit state) */
91
#define	TF_NEEDFIN	0x00800		/* send FIN (implicit state) */
92
#define	TF_NOPUSH	0x01000		/* don't push */
92
#define	TF_NOPUSH	0x01000		/* enable TAO on listen */
93
#define	TF_REQ_CC	0x02000		/* have/will request CC */
93
#define	TF_REQ_CC	0x02000		/* have/will request CC */
94
#define	TF_RCVD_CC	0x04000		/* a CC was received in SYN */
94
#define	TF_RCVD_CC	0x04000		/* a CC was received in SYN */
95
#define	TF_SENDCCNEW	0x08000		/* send CCnew instead of CC in SYN */
95
#define	TF_SENDCCNEW	0x08000		/* send CCnew instead of CC in SYN */
96
#define	TF_MORETOCOME	0x10000		/* More data to be appended to sock */
96
#define	TF_MORETOCOME	0x10000		/* More data to be appended to sock */
97
#define	TF_LQ_OVERFLOW	0x20000		/* listen queue overflow */
97
#define	TF_LQ_OVERFLOW	0x20000		/* listen queue overflow */
98
#define	TF_CORK		0x40000		/* don't push */
98
	int	t_force;		/* 1 if forcing out a byte */
99
	int	t_force;		/* 1 if forcing out a byte */
99
100
100
	tcp_seq	snd_una;		/* send unacknowledged */
101
	tcp_seq	snd_una;		/* send unacknowledged */

Return to bug 24959