Changes in uspace/srv/net/tl/tcp/tcp.h [14f1db0:46d4d9f] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/tl/tcp/tcp.h
r14f1db0 r46d4d9f 28 28 29 29 /** @addtogroup tcp 30 * 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * 35 */ 36 37 #ifndef __NET_TCP_H__38 #define __NET_TCP_H__34 * TCP module. 35 */ 36 37 #ifndef NET_TCP_H_ 38 #define NET_TCP_H_ 39 39 40 40 #include <fibril_synch.h> 41 41 42 #include < packet/packet.h>43 #include <net _device.h>42 #include <net/packet.h> 43 #include <net/device.h> 44 44 #include <socket_core.h> 45 45 #include <tl_common.h> 46 46 47 47 /** Type definition of the TCP global data. 48 * 49 */ 50 typedef struct tcp_globals 48 * @see tcp_globals 49 */ 50 typedef struct tcp_globals tcp_globals_t; 51 51 52 52 /** Type definition of the TCP socket specific data. 53 * @see tcp_socket_data 54 */ 55 typedef struct tcp_socket_data tcp_socket_data_t; 56 57 /** Type definition of the TCP socket specific data pointer. 58 * @see tcp_socket_data 59 */ 60 typedef tcp_socket_data_t * tcp_socket_data_ref; 53 * @see tcp_socket_data 54 */ 55 typedef struct tcp_socket_data tcp_socket_data_t; 61 56 62 57 /** Type definition of the TCP operation data. 63 * @see tcp_operation 64 */ 65 typedef struct tcp_operation tcp_operation_t; 66 67 /** Type definition of the TCP operation data pointer. 68 * @see tcp_operation 69 */ 70 typedef tcp_operation_t * tcp_operation_ref; 58 * @see tcp_operation 59 */ 60 typedef struct tcp_operation tcp_operation_t; 71 61 72 62 /** TCP socket state type definition. 73 * @see tcp_socket_state 74 */ 75 typedef enum tcp_socket_state tcp_socket_state_t; 76 77 /** TCP socket state. 78 */ 79 enum tcp_socket_state{ 63 * @see tcp_socket_state 64 */ 65 typedef enum tcp_socket_state tcp_socket_state_t; 66 67 /** TCP socket state. */ 68 enum tcp_socket_state { 80 69 /** Initial. 81 * Not connected or bound. 70 * 71 * Not connected or bound. 82 72 */ 83 73 TCP_SOCKET_INITIAL, 74 84 75 /** Listening. 85 * Awaiting a connection request from another TCP layer. 86 * When SYN is received a new bound socket in the TCP_SOCKET_SYN_RECEIVED state should be created. 76 * 77 * Awaiting a connection request from another TCP layer. 78 * When SYN is received a new bound socket in the 79 * TCP_SOCKET_SYN_RECEIVED state should be created. 87 80 */ 88 81 TCP_SOCKET_LISTEN, 82 89 83 /** Connecting issued. 90 * A~SYN has been sent, and TCP is awaiting the response SYN. 91 * Should continue to the TCP_SOCKET_ESTABLISHED state. 84 * 85 * A SYN has been sent, and TCP is awaiting the response SYN. 86 * Should continue to the TCP_SOCKET_ESTABLISHED state. 92 87 */ 93 88 TCP_SOCKET_SYN_SENT, 89 94 90 /** Connecting received. 95 * A~SYN has been received, a~SYN has been sent, and TCP is awaiting an ACK. 96 * Should continue to the TCP_SOCKET_ESTABLISHED state. 91 * 92 * A SYN has been received, a SYN has been sent, and TCP is awaiting an 93 * ACK. Should continue to the TCP_SOCKET_ESTABLISHED state. 97 94 */ 98 95 TCP_SOCKET_SYN_RECEIVED, 96 99 97 /** Connected. 100 * The three-way handshake has been completed. 98 * 99 * The three-way handshake has been completed. 101 100 */ 102 101 TCP_SOCKET_ESTABLISHED, 102 103 103 /** Closing started. 104 * The local application has issued a~CLOSE. 105 * TCP has sent a~FIN, and is awaiting an ACK or a~FIN. 106 * Should continue to the TCP_SOCKET_FIN_WAIT_2 state when an ACK is received. 107 * Should continue to the TCP_SOCKET_CLOSING state when a~FIN is received. 104 * 105 * The local application has issued a CLOSE. 106 * TCP has sent a FIN, and is awaiting an ACK or a FIN. 107 * Should continue to the TCP_SOCKET_FIN_WAIT_2 state when an ACK is 108 * received. 109 * Should continue to the TCP_SOCKET_CLOSING state when a FIN is 110 * received. 108 111 */ 109 112 TCP_SOCKET_FIN_WAIT_1, 113 110 114 /** Closing confirmed. 111 * A~FIN has been sent, and an ACK received. 112 * TCP is awaiting a~FIN from the remote TCP layer. 113 * Should continue to the TCP_SOCKET_CLOSING state. 115 * 116 * A FIN has been sent, and an ACK received. 117 * TCP is awaiting a~FIN from the remote TCP layer. 118 * Should continue to the TCP_SOCKET_CLOSING state. 114 119 */ 115 120 TCP_SOCKET_FIN_WAIT_2, 121 116 122 /** Closing. 117 * A FIN has been sent, a FIN has been received, and an ACK has been sent. 118 * TCP is awaiting an ACK for the FIN that was sent. 119 * Should continue to the TCP_SOCKET_TIME_WAIT state. 123 * 124 * A FIN has been sent, a FIN has been received, and an ACK has been 125 * sent. 126 * TCP is awaiting an ACK for the FIN that was sent. 127 * Should continue to the TCP_SOCKET_TIME_WAIT state. 120 128 */ 121 129 TCP_SOCKET_CLOSING, 130 122 131 /** Closing received. 123 * TCP has received a~FIN, and has sent an ACK. 124 * It is awaiting a~close request from the local application before sending a~FIN. 125 * Should continue to the TCP_SOCKET_SOCKET_LAST_ACK state. 132 * 133 * TCP has received a FIN, and has sent an ACK. 134 * It is awaiting a close request from the local application before 135 * sending a FIN. 136 * Should continue to the TCP_SOCKET_SOCKET_LAST_ACK state. 126 137 */ 127 138 TCP_SOCKET_CLOSE_WAIT, 128 /** 129 * A~FIN has been received, and an ACK and a~FIN have been sent. 130 * TCP is awaiting an ACK. 131 * Should continue to the TCP_SOCKET_TIME_WAIT state. 139 140 /** 141 * A FIN has been received, and an ACK and a FIN have been sent. 142 * TCP is awaiting an ACK. 143 * Should continue to the TCP_SOCKET_TIME_WAIT state. 132 144 */ 133 145 TCP_SOCKET_LAST_ACK, 146 134 147 /** Closing finished. 135 * FINs have been received and ACK’d, and TCP is waiting two MSLs to remove the connection from the table. 148 * 149 * FINs have been received and ACK’d, and TCP is waiting two MSLs to 150 * remove the connection from the table. 136 151 */ 137 152 TCP_SOCKET_TIME_WAIT, 153 138 154 /** Closed. 139 * Imaginary, this indicates that a~connection has been removed from the connection table. 155 * 156 * Imaginary, this indicates that a connection has been removed from 157 * the connection table. 140 158 */ 141 159 TCP_SOCKET_CLOSED 142 160 }; 143 161 144 /** TCP operation data. 145 */ 146 struct tcp_operation{ 147 /** Operation result. 148 */ 162 /** TCP operation data. */ 163 struct tcp_operation { 164 /** Operation result. */ 149 165 int result; 150 /** Safety lock. 151 */ 166 /** Safety lock. */ 152 167 fibril_mutex_t mutex; 153 /** Operation result signaling. 154 */ 168 /** Operation result signaling. */ 155 169 fibril_condvar_t condvar; 156 170 }; 157 171 158 /** TCP socket specific data. 159 */ 160 struct tcp_socket_data{ 161 /** TCP socket state. 162 */ 172 /** TCP socket specific data. */ 173 struct tcp_socket_data { 174 /** TCP socket state. */ 163 175 tcp_socket_state_t state; 164 /** Data fragment size. 165 * Sending optimalization. 176 177 /** 178 * Data fragment size. 179 * Sending optimalization. 166 180 */ 167 181 size_t data_fragment_size; 168 /** Device identifier.169 */182 183 /** Device identifier. */ 170 184 device_id_t device_id; 171 /** Listening backlog. 172 * The maximal number of connected but not yet accepted sockets. 185 186 /** 187 * Listening backlog. 188 * The maximal number of connected but not yet accepted sockets. 173 189 */ 174 190 int backlog; 175 // /** Segment size. 176 // */ 177 // size_t segment_size; 178 /** Parent listening socket identifier. 179 * Set if this socket is an accepted one. 191 192 // /** Segment size. */ 193 // size_t segment_size; 194 195 /** 196 * Parent listening socket identifier. 197 * Set if this socket is an accepted one. 180 198 */ 181 199 int listening_socket_id; 182 /** Treshold size in bytes.183 */200 201 /** Treshold size in bytes. */ 184 202 size_t treshold; 185 /** Window size in bytes. 186 */ 203 /** Window size in bytes. */ 187 204 size_t window; 188 /** Acknowledgement timeout. 189 */ 205 /** Acknowledgement timeout. */ 190 206 suseconds_t timeout; 191 /** Last acknowledged byte. 192 */ 207 /** Last acknowledged byte. */ 193 208 uint32_t acknowledged; 194 /** Next incoming sequence number. 195 */ 209 /** Next incoming sequence number. */ 196 210 uint32_t next_incoming; 197 /** Incoming FIN. 198 */ 211 /** Incoming FIN. */ 199 212 uint32_t fin_incoming; 200 /** Next outgoing sequence number. 201 */ 213 /** Next outgoing sequence number. */ 202 214 uint32_t next_outgoing; 203 /** Last outgoing sequence number. 204 */ 215 /** Last outgoing sequence number. */ 205 216 uint32_t last_outgoing; 206 /** Outgoing FIN. 207 */ 217 /** Outgoing FIN. */ 208 218 uint32_t fin_outgoing; 209 /** Expected sequence number by the remote host. 210 * The sequence number the other host expects. 211 * The notification is sent only upon a packet reecival. 219 220 /** 221 * Expected sequence number by the remote host. 222 * The sequence number the other host expects. 223 * The notification is sent only upon a packet reecival. 212 224 */ 213 225 uint32_t expected; 214 /** Expected sequence number counter. 215 * Counts the number of received notifications for the same sequence number. 226 227 /** 228 * Expected sequence number counter. 229 * Counts the number of received notifications for the same sequence 230 * number. 216 231 */ 217 232 int expected_count; 233 218 234 /** Incoming packet queue. 219 * Packets are buffered until received in the right order. 220 * The packets are excluded after successfully read. 221 * Packets are sorted by their starting byte. 222 * Packets metric is set as their data length. 223 */ 224 packet_t incoming; 235 * 236 * Packets are buffered until received in the right order. 237 * The packets are excluded after successfully read. 238 * Packets are sorted by their starting byte. 239 * Packets metric is set as their data length. 240 */ 241 packet_t *incoming; 242 225 243 /** Outgoing packet queue. 226 * Packets are buffered until acknowledged by the remote host in the right order. 227 * The packets are excluded after acknowledged. 228 * Packets are sorted by their starting byte. 229 * Packets metric is set as their data length. 230 */ 231 packet_t outgoing; 232 /** IP pseudo header. 233 */ 244 * 245 * Packets are buffered until acknowledged by the remote host in the 246 * right order. 247 * The packets are excluded after acknowledged. 248 * Packets are sorted by their starting byte. 249 * Packets metric is set as their data length. 250 */ 251 packet_t *outgoing; 252 253 /** IP pseudo header. */ 234 254 void *pseudo_header; 235 /** IP pseudo header length. 236 */ 255 /** IP pseudo header length. */ 237 256 size_t headerlen; 238 /** Remote host address. 239 */ 240 struct sockaddr * addr; 241 /** Remote host address length. 242 */ 257 /** Remote host address. */ 258 struct sockaddr *addr; 259 /** Remote host address length. */ 243 260 socklen_t addrlen; 244 /** Remote host port. 245 */ 261 /** Remote host port. */ 246 262 uint16_t dest_port; 247 /** Parent local sockets. 248 */249 socket_cores_ref local_sockets;263 /** Parent local sockets. */ 264 socket_cores_t *local_sockets; 265 250 266 /** Local sockets safety lock. 251 * May be locked for writing while holding the global lock for reading when changing the local sockets only. 252 * The global lock may to be locked only before locking the local lock. 253 * The global lock may be locked more weakly than the local lock. 254 * The global lock may be released before releasing the local lock. 255 * @see tcp_globals:lock 256 */ 257 fibril_rwlock_t * local_lock; 258 /** Pending operation data. 259 */ 267 * 268 * May be locked for writing while holding the global lock for reading 269 * when changing the local sockets only. 270 * The global lock may be locked only before locking the local lock. 271 * The global lock may be locked more weakly than the local lock. 272 * The global lock may be released before releasing the local lock. 273 * @see tcp_globals:lock 274 */ 275 fibril_rwlock_t *local_lock; 276 277 /** Pending operation data. */ 260 278 tcp_operation_t operation; 261 /** Timeouts in a row counter. 262 * If TCP_MAX_TIMEOUTS is reached, the connection is lost. 279 280 /** 281 * Timeouts in a row counter. 282 * If TCP_MAX_TIMEOUTS is reached, the connection is lost. 263 283 */ 264 284 int timeout_count; 265 285 }; 266 286 267 /** TCP global data. 268 */ 269 struct tcp_globals{ 270 /** Networking module phone. 271 */ 287 /** TCP global data. */ 288 struct tcp_globals { 289 /** Networking module phone. */ 272 290 int net_phone; 273 /** IP module phone. 274 */ 291 /** IP module phone. */ 275 292 int ip_phone; 276 /** ICMP module phone. 277 */ 293 /** ICMP module phone. */ 278 294 int icmp_phone; 279 /** Last used free port. 280 */ 295 /** Last used free port. */ 281 296 int last_used_port; 282 /** Active sockets. 283 */ 297 /** Active sockets. */ 284 298 socket_ports_t sockets; 285 /** Device packet dimensions. 286 */ 299 /** Device packet dimensions. */ 287 300 packet_dimensions_t dimensions; 288 /** Safety lock. 289 * Write lock is used only for adding or removing socket ports. 301 302 /** 303 * Safety lock. 304 * Write lock is used only for adding or removing socket ports. 290 305 */ 291 306 fibril_rwlock_t lock; … … 296 311 /** @} 297 312 */ 298
Note:
See TracChangeset
for help on using the changeset viewer.