Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/tl/tcp/tcp.h

    r28a3e74 re526f08  
    2828
    2929/** @addtogroup tcp
    30  * @{
     30 *  @{
    3131 */
    3232
    3333/** @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__
    3939
    4040#include <fibril_synch.h>
     
    4646
    4747/** Type definition of the TCP global data.
    48  * @see tcp_globals
    49  */
    50 typedef struct tcp_globals tcp_globals_t;
     48 *  @see tcp_globals
     49 */
     50typedef struct tcp_globals      tcp_globals_t;
    5151
    5252/** 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 */
     55typedef 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 */
     60typedef tcp_socket_data_t *     tcp_socket_data_ref;
    5661
    5762/** 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 */
     65typedef struct tcp_operation    tcp_operation_t;
     66
     67/** Type definition of the TCP operation data pointer.
     68 *  @see tcp_operation
     69 */
     70typedef tcp_operation_t *       tcp_operation_ref;
    6171
    6272/** 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 */
     75typedef enum tcp_socket_state   tcp_socket_state_t;
     76
     77/** TCP socket state.
     78 */
     79enum tcp_socket_state{
    6980        /** Initial.
    70          *
    71          * Not connected or bound.
     81         *  Not connected or bound.
    7282         */
    7383        TCP_SOCKET_INITIAL,
    74        
    7584        /** 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.
    8087         */
    8188        TCP_SOCKET_LISTEN,
    82        
    8389        /** 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.
    8792         */
    8893        TCP_SOCKET_SYN_SENT,
    89        
    9094        /** 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.
    9497         */
    9598        TCP_SOCKET_SYN_RECEIVED,
    96        
    9799        /** Connected.
    98          *
    99          * The three-way handshake has been completed.
     100         *  The three-way handshake has been completed.
    100101         */
    101102        TCP_SOCKET_ESTABLISHED,
    102        
    103103        /** 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.
    111108         */
    112109        TCP_SOCKET_FIN_WAIT_1,
    113        
    114110        /** 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.
    119114         */
    120115        TCP_SOCKET_FIN_WAIT_2,
    121        
    122116        /** 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.
    128120         */
    129121        TCP_SOCKET_CLOSING,
    130        
    131122        /** 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.
    137126         */
    138127        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.
    144132         */
    145133        TCP_SOCKET_LAST_ACK,
    146        
    147134        /** 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.
    151136         */
    152137        TCP_SOCKET_TIME_WAIT,
    153        
    154138        /** 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.
    158140         */
    159141        TCP_SOCKET_CLOSED
    160142};
    161143
    162 /** TCP operation data. */
    163 struct tcp_operation {
    164         /** Operation result. */
     144/** TCP operation data.
     145 */
     146struct tcp_operation{
     147        /** Operation result.
     148         */
    165149        int result;
    166         /** Safety lock. */
     150        /** Safety lock.
     151         */
    167152        fibril_mutex_t mutex;
    168         /** Operation result signaling. */
     153        /** Operation result signaling.
     154         */
    169155        fibril_condvar_t condvar;
    170156};
    171157
    172 /** TCP socket specific data. */
    173 struct tcp_socket_data {
    174         /** TCP socket state. */
     158/** TCP socket specific data.
     159 */
     160struct tcp_socket_data{
     161        /** TCP socket state.
     162         */
    175163        tcp_socket_state_t state;
    176        
    177         /**
    178          * Data fragment size.
    179          * Sending optimalization.
     164        /** Data fragment size.
     165         *  Sending optimalization.
    180166         */
    181167        size_t data_fragment_size;
    182        
    183         /** Device identifier. */
     168        /** Device identifier.
     169        */
    184170        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.
    189173         */
    190174        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.
    195180         */
    196181        int listening_socket_id;
    197        
    198         /** Treshold size in bytes. */
     182        /** Treshold size in bytes.
     183        */
    199184        size_t treshold;
    200         /** Window size in bytes. */
     185        /** Window size in bytes.
     186         */
    201187        size_t window;
    202         /** Acknowledgement timeout. */
     188        /** Acknowledgement timeout.
     189         */
    203190        suseconds_t timeout;
    204         /** Last acknowledged byte. */
     191        /** Last acknowledged byte.
     192         */
    205193        uint32_t acknowledged;
    206         /** Next incoming sequence number. */
     194        /** Next incoming sequence number.
     195         */
    207196        uint32_t next_incoming;
    208         /** Incoming FIN. */
     197        /** Incoming FIN.
     198         */
    209199        uint32_t fin_incoming;
    210         /** Next outgoing sequence number. */
     200        /** Next outgoing sequence number.
     201         */
    211202        uint32_t next_outgoing;
    212         /** Last outgoing sequence number. */
     203        /** Last outgoing sequence number.
     204         */
    213205        uint32_t last_outgoing;
    214         /** Outgoing FIN. */
     206        /** Outgoing FIN.
     207         */
    215208        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.
    221212         */
    222213        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.
    228216         */
    229217        int expected_count;
    230        
    231218        /** 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;
    240225        /** 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         */
    251234        void *pseudo_header;
    252         /** IP pseudo header length. */
     235        /** IP pseudo header length.
     236         */
    253237        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         */
    257243        socklen_t addrlen;
    258         /** Remote host port. */
     244        /** Remote host port.
     245         */
    259246        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;
    263250        /** 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         */
    275260        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.
    280263         */
    281264        int timeout_count;
    282265};
    283266
    284 /** TCP global data. */
    285 struct tcp_globals {
    286         /** Networking module phone. */
     267/** TCP global data.
     268 */
     269struct  tcp_globals{
     270        /** Networking module phone.
     271         */
    287272        int net_phone;
    288         /** IP module phone. */
     273        /** IP module phone.
     274         */
    289275        int ip_phone;
    290         /** ICMP module phone. */
     276        /** ICMP module phone.
     277         */
    291278        int icmp_phone;
    292         /** Last used free port. */
     279        /** Last used free port.
     280         */
    293281        int last_used_port;
    294         /** Active sockets. */
     282        /** Active sockets.
     283         */
    295284        socket_ports_t sockets;
    296         /** Device packet dimensions. */
     285        /** Device packet dimensions.
     286         */
    297287        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.
    302290         */
    303291        fibril_rwlock_t lock;
     
    308296/** @}
    309297 */
     298
Note: See TracChangeset for help on using the changeset viewer.