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