From 0ce94a8f4799cf4f36611f46b8d5ab995baaba50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 28 Nov 2006 23:02:30 +0000 Subject: [PATCH] * Rewrote tcp.h header - however, I think it should only include the TCP options that can be set via setsockopt(). * For now, the struct tcphdr and its definitions are also part of the header. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19383 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/posix/netinet/tcp.h | 141 ++++++++++++++++-------------------- 1 file changed, 64 insertions(+), 77 deletions(-) diff --git a/headers/posix/netinet/tcp.h b/headers/posix/netinet/tcp.h index 458801973c..742ceaf23c 100644 --- a/headers/posix/netinet/tcp.h +++ b/headers/posix/netinet/tcp.h @@ -1,97 +1,84 @@ /* - * Copyright (c) 1982, 1986, 1993 - *The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - + * Copyright 2006, Haiku Inc. All Rights Reserved. + * Distributed under the terms of the MIT License. + */ #ifndef NETINET_TCP_H #define NETINET_TCP_H + +#include #include -typedef uint32_t tcp_seq; +// TODO: if tcpdump is the only potential user of the part commented out, remove it +#if 0 struct tcphdr { - uint16_t th_sport; /* src port */ - uint16_t th_dport; /* dest. port */ - tcp_seq th_seq; /* seq number */ - tcp_seq th_ack; /* ack number */ + uint16_t th_sport; /* source port */ + uint16_t th_dport; /* destination port */ + uint32_t th_seq; + uint32_t th_ack; -#if B_HOST_IS_BENDIAN - uint8_t th_off:4, - th_x2:4; +#if BIG_ENDIAN + uint8_t th_off : 4; /* data offset */ + uint8_t th_x2 : 4; /* unused */ #else - uint8_t th_x2:4, /* unused */ - th_off:4; /* data offset */ + uint8_t th_x2 : 4; + uint8_t th_off : 4; #endif - uint8_t th_flags; /* ACK, FIN, PUSH, RST, SYN, URG */ - uint16_t th_win; /* advertised window */ - uint16_t th_sum; /* checksum */ - uint16_t th_urp; /* urgent offset */ + uint8_t th_flags; + uint16_t th_win; + uint16_t th_sum; + uint16_t th_urp; /* end of urgent data offset */ } _PACKED; -#define TH_FIN 0x01 -#define TH_SYN 0x02 -#define TH_RST 0x04 -#define TH_PUSH 0x08 -#define TH_ACK 0x10 -#define TH_URG 0x20 +#define TH_FIN 0x01 +#define TH_SYN 0x02 +#define TH_RST 0x04 +#define TH_PUSH 0x08 +#define TH_ACK 0x10 +#define TH_URG 0x20 +#define TH_ECE 0x40 +#define TH_CWR 0x80 -#define TCPOPT_EOL 0 -#define TCPOPT_NOP 1 -#define TCPOPT_MAXSEG 2 -#define TCPOPT_WINDOW 3 -#define TCPOPT_SACK_PERMITTED 4 /* Experimental */ -#define TCPOPT_SACK 5 /* Experimental */ -#define TCPOPT_TIMESTAMP 8 -#define TCPOPT_SIGNATURE 19 +#define TCPOPT_EOL 0 +#define TCPOPT_NOP 1 +#define TCPOPT_MAXSEG 2 +#define TCPOPT_WINDOW 3 +#define TCPOPT_SACK_PERMITTED 4 +#define TCPOPT_SACK 5 +#define TCPOPT_TIMESTAMP 8 +#define TCPOPT_SIGNATURE 19 -#define MAX_TCPOPTLEN 40 /* Absolute maximum TCP options len */ +#define MAX_TCPOPTLEN 40 + /* absolute maximum TCP options length */ -#define TCPOLEN_MAXSEG 4 -#define TCPOLEN_WINDOW 3 -#define TCPOLEN_SACK 8 /* 2*sizeof(tcp_seq) */ -#define TCPOLEN_SACK_PERMITTED 2 -#define TCPOLEN_TIMESTAMP 10 -#define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */ -#define TCPOLEN_SIGNATURE 18 +#define TCPOLEN_MAXSEG 4 +#define TCPOLEN_WINDOW 3 +#define TCPOLEN_SACK 8 +#define TCPOLEN_SACK_PERMITTED 2 +#define TCPOLEN_TIMESTAMP 10 +#define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP + 2) + /* see RFC 1323, appendix A */ +#define TCPOLEN_SIGNATURE 18 -#define TCPOPT_TSTAMP_HDR \ - (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP) +#define TCPOPT_TSTAMP_HDR \ + (TCPOPT_NOP << 24 | TCPOPT_NOP << 16 | TCPOPT_TIMESTAMP << 8 | TCPOLEN_TIMESTAMP) -#define TCP_MSS 512 -#define TCP_MAXWIN 65535 -#define TCP_MAX_WINSHIFT 14 +#define TCP_MSS 536 +#define TCP_MAXWIN 65535 +#define TCP_MAX_WINSHIFT 14 +#endif -#endif /* NETINET_TCP_H */ +/* options that can be set using setsockopt() and level IPPROTO_TCP */ + +#define TCP_NODELAY 0x01 + /* don't delay sending smaller packets */ +#define TCP_MAXSEG 0x02 + /* set maximum segment size */ +#define TCP_NOPUSH 0x04 + /* don't use TH_PUSH */ +#define TCP_NOOPT 0x08 + /* don't use any TCP options */ + +#endif /* NETINET_TCP_H */