Changeset b40bfac in mainline for uspace/srv/net/tl/tcp/tcp_header.h
- Timestamp:
- 2010-11-08T07:13:25Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 63a1e60
- Parents:
- d70a463 (diff), 3da12d74 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/tl/tcp/tcp_header.h
rd70a463 rb40bfac 28 28 29 29 /** @addtogroup tcp 30 * 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * 35 * Based on the RFC~793.34 * TCP header definition. 35 * Based on the RFC 793. 36 36 */ 37 37 38 #ifndef __NET_TCP_HEADER_H__39 #define __NET_TCP_HEADER_H__38 #ifndef NET_TCP_HEADER_H_ 39 #define NET_TCP_HEADER_H_ 40 40 41 41 #include <sys/types.h> 42 42 43 /** TCP header size in bytes. 44 */ 45 #define TCP_HEADER_SIZE sizeof(tcp_header_t) 43 /** TCP header size in bytes. */ 44 #define TCP_HEADER_SIZE sizeof(tcp_header_t) 46 45 47 46 /** Returns the actual TCP header length in bytes. 48 * 47 * @param[in] header The TCP packet header. 49 48 */ 50 #define TCP_HEADER_LENGTH(header) ((header)->header_length * 4 u)49 #define TCP_HEADER_LENGTH(header) ((header)->header_length * 4U) 51 50 52 51 /** Returns the TCP header length. 53 * 52 * @param[in] length The TCP header length in bytes. 54 53 */ 55 #define TCP_COMPUTE_HEADER_LENGTH(length) ((uint8_t) ((length) / 4u))54 #define TCP_COMPUTE_HEADER_LENGTH(length) ((uint8_t) ((length) / 4U)) 56 55 57 56 /** Type definition of the transmission datagram header. 58 * 57 * @see tcp_header 59 58 */ 60 typedef struct tcp_header 59 typedef struct tcp_header tcp_header_t; 61 60 62 61 /** Type definition of the transmission datagram header pointer. 63 * 62 * @see tcp_header 64 63 */ 65 typedef tcp_header_t * 64 typedef tcp_header_t *tcp_header_ref; 66 65 67 66 /** Type definition of the transmission datagram header option. 68 * 67 * @see tcp_option 69 68 */ 70 typedef struct tcp_option 69 typedef struct tcp_option tcp_option_t; 71 70 72 71 /** Type definition of the transmission datagram header option pointer. 73 * 72 * @see tcp_option 74 73 */ 75 typedef tcp_option_t * 74 typedef tcp_option_t *tcp_option_ref; 76 75 77 /** Type definition of the Maximum segment size TCP option. 78 * @see ... 79 */ 80 typedef struct tcp_max_segment_size_option tcp_max_segment_size_option_t; 76 /** Type definition of the Maximum segment size TCP option. */ 77 typedef struct tcp_max_segment_size_option tcp_max_segment_size_option_t; 81 78 82 79 /** Type definition of the Maximum segment size TCP option pointer. 83 * 80 * @see tcp_max_segment_size_option 84 81 */ 85 typedef tcp_max_segment_size_option_t * 82 typedef tcp_max_segment_size_option_t *tcp_max_segment_size_option_ref; 86 83 87 /** Transmission datagram header. 88 */ 89 struct tcp_header{ 90 /** The source port number. 91 */ 84 /** Transmission datagram header. */ 85 struct tcp_header { 92 86 uint16_t source_port; 93 /** The destination port number.94 */95 87 uint16_t destination_port; 96 /** The sequence number of the first data octet in this segment (except when SYN is present).97 * If SYN is present the sequence number is the initial sequence number (ISN) and the first data octet is ISN+1.98 */99 88 uint32_t sequence_number; 100 /** If the ACK control bit is set this field contains the value of the next sequence number the sender of the segment is expecting to receive.101 * Once a~connection is established this is always sent.102 * @see acknowledge103 */104 89 uint32_t acknowledgement_number; 90 105 91 #ifdef ARCH_IS_BIG_ENDIAN 106 /** The number of 32~bit words in the TCP Header.107 * This indicates where the data begins.108 * The TCP header (even one including options) is an integral number of 32~bits long.109 */110 92 uint8_t header_length:4; 111 /** Four bits reserved for future use.112 * Must be zero.113 */114 93 uint8_t reserved1:4; 115 94 #else 116 /** Four bits reserved for future use.117 * Must be zero.118 */119 95 uint8_t reserved1:4; 120 /** The number of 32~bit words in the TCP Header.121 * This indicates where the data begins.122 * The TCP header (even one including options) is an integral number of 32~bits long.123 */124 96 uint8_t header_length:4; 125 97 #endif 98 126 99 #ifdef ARCH_IS_BIG_ENDIAN 127 /** Two bits reserved for future use.128 * Must be zero.129 */130 100 uint8_t reserved2:2; 131 /** Urgent Pointer field significant.132 * @see tcp_header:urgent_pointer133 */134 101 uint8_t urgent:1; 135 /** Acknowledgment field significant136 * @see tcp_header:acknowledgement_number137 */138 102 uint8_t acknowledge:1; 139 /** Push function.140 */141 103 uint8_t push:1; 142 /** Reset the connection.143 */144 104 uint8_t reset:1; 145 /** Synchronize the sequence numbers.146 */147 105 uint8_t synchronize:1; 148 /** No more data from the sender.149 */150 106 uint8_t finalize:1; 151 107 #else 152 /** No more data from the sender.153 */154 108 uint8_t finalize:1; 155 /** Synchronize the sequence numbers.156 */157 109 uint8_t synchronize:1; 158 /** Reset the connection.159 */160 110 uint8_t reset:1; 161 /** Push function.162 */163 111 uint8_t push:1; 164 /** Acknowledgment field significant.165 * @see tcp_header:acknowledgement_number166 */167 112 uint8_t acknowledge:1; 168 /** Urgent Pointer field significant.169 * @see tcp_header:urgent_pointer170 */171 113 uint8_t urgent:1; 172 /** Two bits reserved for future use.173 * Must be zero.174 */175 114 uint8_t reserved2:2; 176 115 #endif 177 /** The number of data octets beginning with the one indicated in the acknowledgment field which the sender of this segment is willing to accept. 178 * @see tcp_header:acknowledge 179 */ 116 180 117 uint16_t window; 181 /** The checksum field is the 16~bit one's complement of the one's complement sum of all 16~bit words in the header and text.182 * If a~segment contains an odd number of header and text octets to be checksummed, the last octet is padded on the right with zeros to form a~16~bit word for checksum purposes.183 * The pad is not transmitted as part of the segment.184 * While computing the checksum, the checksum field itself is replaced with zeros.185 * The checksum also coves a~pseudo header conceptually.186 * The pseudo header conceptually prefixed to the TCP header contains the source address, the destination address, the protocol, and the TCP length.187 * This information gives protection against misrouted datagrams.188 * If the computed checksum is zero, it is transmitted as all ones (the equivalent in one's complement arithmetic).189 */190 118 uint16_t checksum; 191 /** This field communicates the current value of the urgent pointer as a~positive offset from the sequence number in this segment.192 * The urgent pointer points to the sequence number of the octet following the urgent data.193 * This field is only be interpreted in segments with the URG control bit set.194 * @see tcp_header:urgent195 */196 119 uint16_t urgent_pointer; 197 120 } __attribute__ ((packed)); 198 121 199 /** Transmission datagram header option. 200 */ 201 struct tcp_option{ 202 /** Option type. 203 */ 122 /** Transmission datagram header option. */ 123 struct tcp_option { 124 /** Option type. */ 204 125 uint8_t type; 205 /** Option length. 206 */ 126 /** Option length. */ 207 127 uint8_t length; 208 128 }; 209 129 210 /** Maximum segment size TCP option. 211 */ 212 struct tcp_max_segment_size_option{ 130 /** Maximum segment size TCP option. */ 131 struct tcp_max_segment_size_option { 213 132 /** TCP option. 214 * 215 * 133 * @see TCPOPT_MAX_SEGMENT_SIZE 134 * @see TCPOPT_MAX_SEGMENT_SIZE_LENGTH 216 135 */ 217 136 tcp_option_t option; 218 /** Maximum segment size in bytes.219 */137 138 /** Maximum segment size in bytes. */ 220 139 uint16_t max_segment_size; 221 140 } __attribute__ ((packed));
Note:
See TracChangeset
for help on using the changeset viewer.