Changeset 8fb1bf82 in mainline for uspace/srv/net/tl/tcp/tcp_header.h
- Timestamp:
- 2010-11-25T13:42:50Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 8df8415
- Parents:
- a93d79a (diff), eb667613 (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
ra93d79a r8fb1bf82 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 tcp_header_t; 61 62 /** Type definition of the transmission datagram header pointer. 63 * @see tcp_header 64 */ 65 typedef tcp_header_t * tcp_header_ref; 59 typedef struct tcp_header tcp_header_t; 66 60 67 61 /** Type definition of the transmission datagram header option. 68 * 62 * @see tcp_option 69 63 */ 70 typedef struct tcp_option 64 typedef struct tcp_option tcp_option_t; 71 65 72 /** Type definition of the transmission datagram header option pointer. 73 * @see tcp_option 74 */ 75 typedef tcp_option_t * tcp_option_ref; 66 /** Type definition of the Maximum segment size TCP option. */ 67 typedef struct tcp_max_segment_size_option tcp_max_segment_size_option_t; 76 68 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; 81 82 /** Type definition of the Maximum segment size TCP option pointer. 83 * @see tcp_max_segment_size_option 84 */ 85 typedef tcp_max_segment_size_option_t * tcp_max_segment_size_option_ref; 86 87 /** Transmission datagram header. 88 */ 89 struct tcp_header{ 90 /** The source port number. 91 */ 69 /** Transmission datagram header. */ 70 struct tcp_header { 92 71 uint16_t source_port; 93 /** The destination port number.94 */95 72 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 73 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 74 uint32_t acknowledgement_number; 75 105 76 #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 77 uint8_t header_length:4; 111 /** Four bits reserved for future use.112 * Must be zero.113 */114 78 uint8_t reserved1:4; 115 79 #else 116 /** Four bits reserved for future use.117 * Must be zero.118 */119 80 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 81 uint8_t header_length:4; 125 82 #endif 83 126 84 #ifdef ARCH_IS_BIG_ENDIAN 127 /** Two bits reserved for future use.128 * Must be zero.129 */130 85 uint8_t reserved2:2; 131 /** Urgent Pointer field significant.132 * @see tcp_header:urgent_pointer133 */134 86 uint8_t urgent:1; 135 /** Acknowledgment field significant136 * @see tcp_header:acknowledgement_number137 */138 87 uint8_t acknowledge:1; 139 /** Push function.140 */141 88 uint8_t push:1; 142 /** Reset the connection.143 */144 89 uint8_t reset:1; 145 /** Synchronize the sequence numbers.146 */147 90 uint8_t synchronize:1; 148 /** No more data from the sender.149 */150 91 uint8_t finalize:1; 151 92 #else 152 /** No more data from the sender.153 */154 93 uint8_t finalize:1; 155 /** Synchronize the sequence numbers.156 */157 94 uint8_t synchronize:1; 158 /** Reset the connection.159 */160 95 uint8_t reset:1; 161 /** Push function.162 */163 96 uint8_t push:1; 164 /** Acknowledgment field significant.165 * @see tcp_header:acknowledgement_number166 */167 97 uint8_t acknowledge:1; 168 /** Urgent Pointer field significant.169 * @see tcp_header:urgent_pointer170 */171 98 uint8_t urgent:1; 172 /** Two bits reserved for future use.173 * Must be zero.174 */175 99 uint8_t reserved2:2; 176 100 #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 */ 101 180 102 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 103 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 104 uint16_t urgent_pointer; 197 105 } __attribute__ ((packed)); 198 106 199 /** Transmission datagram header option. 200 */ 201 struct tcp_option{ 202 /** Option type. 203 */ 107 /** Transmission datagram header option. */ 108 struct tcp_option { 109 /** Option type. */ 204 110 uint8_t type; 205 /** Option length. 206 */ 111 /** Option length. */ 207 112 uint8_t length; 208 113 }; 209 114 210 /** Maximum segment size TCP option. 211 */ 212 struct tcp_max_segment_size_option{ 115 /** Maximum segment size TCP option. */ 116 struct tcp_max_segment_size_option { 213 117 /** TCP option. 214 * 215 * 118 * @see TCPOPT_MAX_SEGMENT_SIZE 119 * @see TCPOPT_MAX_SEGMENT_SIZE_LENGTH 216 120 */ 217 121 tcp_option_t option; 218 /** Maximum segment size in bytes.219 */122 123 /** Maximum segment size in bytes. */ 220 124 uint16_t max_segment_size; 221 125 } __attribute__ ((packed));
Note:
See TracChangeset
for help on using the changeset viewer.