0,0 → 1,155 |
/* |
* Copyright (c) 2009 Lukas Mejdrech |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - 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. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. |
*/ |
|
/** @addtogroup tcp |
* @{ |
*/ |
|
/** @file |
* TCP header definition. |
* Names according to the linux src/include/linux/tcp.h header file. |
*/ |
|
#ifndef __NET_TCP_HEADER_H__ |
#define __NET_TCP_HEADER_H__ |
|
#include <sys/types.h> |
|
/** Type definition of the transmission datagram header. |
* @see tcp_header |
*/ |
typedef struct tcp_header tcp_header_t; |
|
/** Type definition of the transmission datagram header pointer. |
* @see tcp_header |
*/ |
typedef tcp_header_t * tcp_header_ref; |
|
/** Transmission datagram header. |
*/ |
struct tcp_header{ |
/** The 16-bit source port number, used by the receiver to reply. |
*/ |
uint16_t source; |
/** The 16-bit destination port number. |
*/ |
uint16_t dest; |
/** The sequence number of the first data byte in this segment. |
* If the SYN control bit is set, the sequence number is the initial sequence number (n) and the first data byte is n+1. |
*/ |
uint32_t seq; |
/** If the ACK control bit is set, this field contains the value of the next sequence number that the receiver is expecting to receive. |
*/ |
uint32_t ack_seq; |
#ifdef ARCH_IS_BIG_ENDIAN |
/** The number of 32-bit words in the TCP header. |
* It indicates where the data begins. |
*/ |
uint8_t doff:4; |
/** Four bits reserved for future use. |
* Must be zero. |
*/ |
uint8_t res1:4; |
#else |
/** Four bits reserved for future use. |
* Must be zero. |
*/ |
uint8_t res1:4; |
/** The number of 32-bit words in the TCP header. |
* It indicates where the data begins. |
*/ |
uint8_t doff:4; |
#endif |
#ifdef ARCH_IS_BIG_ENDIAN |
/** Two bits reserved for future use. |
* Must be zero. |
*/ |
uint8_t res2:2; |
/** Indicates that the urgent pointer field is significant in this segment. |
*/ |
uint8_t urg:1; |
/** Indicates that the acknowledgment field is significant in this segment. |
*/ |
uint8_t ack:1; |
/** Push function. |
*/ |
uint8_t psh:1; |
/** Resets the connection. |
*/ |
uint8_t rst:1; |
/** Synchronizes the sequence numbers. |
*/ |
uint8_t syn:1; |
/** No more data from sender. |
*/ |
uint8_t fin:1; |
#else |
/** No more data from sender. |
*/ |
uint8_t fin:1; |
/** Synchronizes the sequence numbers. |
*/ |
uint8_t syn:1; |
/** Resets the connection. |
*/ |
uint8_t rst:1; |
/** Push function. |
*/ |
uint8_t psh:1; |
/** Indicates that the acknowledgment field is significant in this segment. |
*/ |
uint8_t ack:1; |
/** Indicates that the urgent pointer field is significant in this segment. |
*/ |
uint8_t urg:1; |
/** Two bits reserved for future use. |
* Must be zero. |
*/ |
uint8_t res2:2; |
#endif |
/** Used in ACK segments. |
* It specifies the number of data bytes, beginning with the one indicated in the acknowledgment number field that the receiver (the sender of this segment) is willing to accept. |
*/ |
uint16_t window; |
/** The 16-bit one's complement of the one's complement sum of all 16-bit words in a pseudo-header, the TCP header, and the TCP data. |
* While computing the checksum, the checksum field itself is considered zero. |
* The pseudo header conceptually prefixed to the TCP header contains the source address, the destination address, the protocol, and the TCP length. |
* This information gives protection against misrouted datagrams. |
* If the computed checksum is zero, it is transmitted as all ones (the equivalent in one's complement arithmetic). |
*/ |
uint16_t check; |
/** Points to the first data octet following the urgent data. |
* Only significant when the URG control bit is set. |
*/ |
uint16_t urg_ptr; |
} __attribute__ ((packed)); |
|
#endif |
|
/** @} |
*/ |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |