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

Collapse All | Expand All

(-)alpha/linux/linux.h (+4 lines)
Lines 379-384 Link Here
379
#define	LINUX_IP_ADD_MEMBERSHIP		35
379
#define	LINUX_IP_ADD_MEMBERSHIP		35
380
#define	LINUX_IP_DROP_MEMBERSHIP	36
380
#define	LINUX_IP_DROP_MEMBERSHIP	36
381
381
382
#define LINUX_TCP_NODELAY	1
383
#define LINUX_TCP_MAXSEG	2
384
#define LINUX_TCP_CORK		3
385
382
struct linux_sockaddr {
386
struct linux_sockaddr {
383
	u_short	sa_family;
387
	u_short	sa_family;
384
	char	sa_data[14];
388
	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
#include <machine/../linux/linux_proto.h>
52
#include <machine/../linux/linux_proto.h>
Lines 86-91 Link Here
86
}
87
}
87
88
88
static int
89
static int
90
linux_to_bsd_tcp_sockopt(int opt)
91
{
92
93
	switch (opt) {
94
	case LINUX_TCP_NODELAY:
95
		return (TCP_NODELAY);
96
	case LINUX_TCP_MAXSEG:
97
		return (TCP_MAXSEG);
98
	case LINUX_TCP_CORK:
99
		return (TCP_CORK);
100
	}
101
	return (-1);
102
}
103
104
static int
89
linux_to_bsd_ip_sockopt(int opt)
105
linux_to_bsd_ip_sockopt(int opt)
90
{
106
{
91
107
Lines 831-838 Link Here
831
		name = linux_to_bsd_ip_sockopt(linux_args.optname);
847
		name = linux_to_bsd_ip_sockopt(linux_args.optname);
832
		break;
848
		break;
833
	case IPPROTO_TCP:
849
	case IPPROTO_TCP:
834
		/* Linux TCP option values match BSD's */
850
		name = linux_to_bsd_tcp_sockopt(linux_args.optname);
835
		name = linux_args.optname;
836
		break;
851
		break;
837
	default:
852
	default:
838
		name = -1;
853
		name = -1;
(-)i386/linux/linux.h (+4 lines)
Lines 503-508 Link Here
503
#define	LINUX_IP_ADD_MEMBERSHIP		35
503
#define	LINUX_IP_ADD_MEMBERSHIP		35
504
#define	LINUX_IP_DROP_MEMBERSHIP	36
504
#define	LINUX_IP_DROP_MEMBERSHIP	36
505
505
506
#define LINUX_TCP_NODELAY	1
507
#define LINUX_TCP_MAXSEG	2
508
#define LINUX_TCP_CORK		3
509
506
struct linux_sockaddr {
510
struct linux_sockaddr {
507
	u_short	sa_family;
511
	u_short	sa_family;
508
	char	sa_data[14];
512
	char	sa_data[14];
(-)netinet/tcp.h (-1 / +2 lines)
Lines 131-137 Link Here
131
 */
131
 */
132
#define	TCP_NODELAY	0x01	/* don't delay send to coalesce packets */
132
#define	TCP_NODELAY	0x01	/* don't delay send to coalesce packets */
133
#define	TCP_MAXSEG	0x02	/* set maximum segment size */
133
#define	TCP_MAXSEG	0x02	/* set maximum segment size */
134
#define TCP_NOPUSH	0x04	/* don't push last block of write */
134
#define TCP_CORK	0x03	/* don't push last block of write */
135
#define TCP_NOPUSH	0x04	/* ditto and also allow TAO on listen */
135
#define TCP_NOOPT	0x08	/* don't use TCP options */
136
#define TCP_NOOPT	0x08	/* don't use TCP options */
136
137
137
#endif
138
#endif
(-)netinet/tcp_input.c (-1 / +1 lines)
Lines 822-828 Link Here
822
#endif
822
#endif
823
			tp = intotcpcb(inp);
823
			tp = intotcpcb(inp);
824
			tp->t_state = TCPS_LISTEN;
824
			tp->t_state = TCPS_LISTEN;
825
			tp->t_flags |= tp0->t_flags & (TF_NOPUSH|TF_NOOPT);
825
			tp->t_flags |= tp0->t_flags & (TF_CORK|TF_NOOPT);
826
826
827
			/* Compute proper scaling value from buffer space */
827
			/* Compute proper scaling value from buffer space */
828
			while (tp->request_r_scale < TCP_MAX_WINSHIFT &&
828
			while (tp->request_r_scale < TCP_MAX_WINSHIFT &&
(-)netinet/tcp_output.c (-1 / +1 lines)
Lines 282-288 Link Here
282
			goto send;
282
			goto send;
283
		if (!(tp->t_flags & TF_MORETOCOME) &&
283
		if (!(tp->t_flags & TF_MORETOCOME) &&
284
		    (idle || tp->t_flags & TF_NODELAY) &&
284
		    (idle || tp->t_flags & TF_NODELAY) &&
285
		    (tp->t_flags & TF_NOPUSH) == 0 &&
285
		    (tp->t_flags & TF_CORK) == 0 &&
286
		    len + off >= so->so_snd.sb_cc)
286
		    len + off >= so->so_snd.sb_cc)
287
			goto send;
287
			goto send;
288
		if (tp->t_force)
288
		if (tp->t_force)
(-)netinet/tcp_usrreq.c (-14 / +11 lines)
Lines 895-900 Link Here
895
		switch (sopt->sopt_name) {
895
		switch (sopt->sopt_name) {
896
		case TCP_NODELAY:
896
		case TCP_NODELAY:
897
		case TCP_NOOPT:
897
		case TCP_NOOPT:
898
		case TCP_CORK:
899
		case TCP_NOPUSH:
898
			error = sooptcopyin(sopt, &optval, sizeof optval,
900
			error = sooptcopyin(sopt, &optval, sizeof optval,
899
					    sizeof optval);
901
					    sizeof optval);
900
			if (error)
902
			if (error)
Lines 907-912 Link Here
907
			case TCP_NOOPT:
909
			case TCP_NOOPT:
908
				opt = TF_NOOPT;
910
				opt = TF_NOOPT;
909
				break;
911
				break;
912
			case TCP_CORK:
913
				opt = TF_CORK;
914
				break;
915
			case TCP_NOPUSH:
916
				opt = TF_NOPUSH | TF_CORK;
917
				break;
910
			default:
918
			default:
911
				opt = 0; /* dead code to fool gcc */
919
				opt = 0; /* dead code to fool gcc */
912
				break;
920
				break;
Lines 914-934 Link Here
914
922
915
			if (optval)
923
			if (optval)
916
				tp->t_flags |= opt;
924
				tp->t_flags |= opt;
917
			else
918
				tp->t_flags &= ~opt;
919
			break;
920
921
		case TCP_NOPUSH:
922
			error = sooptcopyin(sopt, &optval, sizeof optval,
923
					    sizeof optval);
924
			if (error)
925
				break;
926
927
			if (optval)
928
				tp->t_flags |= TF_NOPUSH;
929
			else {
925
			else {
930
				tp->t_flags &= ~TF_NOPUSH;
926
				tp->t_flags &= ~opt;
931
				error = tcp_output(tp);
927
				if (opt & TF_CORK)
928
					error = tcp_output(tp);
932
			}
929
			}
933
			break;
930
			break;
934
931
(-)netinet/tcp_var.h (-2 / +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 */
101
-------------------------------------------------------------------------------

Return to bug 24959