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