Ignore:
File:
1 edited

Legend:

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

    r89e57cee 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;
    5656
    5757/** 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;
     58 *  @see tcp_socket_data
     59 */
     60typedef tcp_socket_data_t *     tcp_socket_data_ref;
    6161
    6262/** Type definition of the TCP operation data.
    63  * @see tcp_operation
    64  */
    65 typedef struct tcp_operation tcp_operation_t;
     63 *  @see tcp_operation
     64 */
     65typedef struct tcp_operation    tcp_operation_t;
    6666
    6767/** Type definition of the TCP operation data pointer.
    68  * @see tcp_operation
    69  */
    70 typedef tcp_operation_t *tcp_operation_ref;
     68 *  @see tcp_operation
     69 */
     70typedef tcp_operation_t *       tcp_operation_ref;
    7171
    7272/** 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 */
     75typedef enum tcp_socket_state   tcp_socket_state_t;
     76
     77/** TCP socket state.
     78 */
     79enum tcp_socket_state{
    7980        /** Initial.
    80          *
    81          * Not connected or bound.
     81         *  Not connected or bound.
    8282         */
    8383        TCP_SOCKET_INITIAL,
    84        
    8584        /** 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.
    9087         */
    9188        TCP_SOCKET_LISTEN,
    92        
    9389        /** 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.
    9792         */
    9893        TCP_SOCKET_SYN_SENT,
    99        
    10094        /** 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.
    10497         */
    10598        TCP_SOCKET_SYN_RECEIVED,
    106        
    10799        /** Connected.
    108          *
    109          * The three-way handshake has been completed.
     100         *  The three-way handshake has been completed.
    110101         */
    111102        TCP_SOCKET_ESTABLISHED,
    112        
    113103        /** 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.
    121108         */
    122109        TCP_SOCKET_FIN_WAIT_1,
    123        
    124110        /** 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.
    129114         */
    130115        TCP_SOCKET_FIN_WAIT_2,
    131        
    132116        /** 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.
    138120         */
    139121        TCP_SOCKET_CLOSING,
    140        
    141122        /** 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.
    147126         */
    148127        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.
    154132         */
    155133        TCP_SOCKET_LAST_ACK,
    156        
    157134        /** 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.
    161136         */
    162137        TCP_SOCKET_TIME_WAIT,
    163        
    164138        /** 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.
    168140         */
    169141        TCP_SOCKET_CLOSED
    170142};
    171143
    172 /** TCP operation data. */
    173 struct tcp_operation {
    174         /** Operation result. */
     144/** TCP operation data.
     145 */
     146struct tcp_operation{
     147        /** Operation result.
     148         */
    175149        int result;
    176         /** Safety lock. */
     150        /** Safety lock.
     151         */
    177152        fibril_mutex_t mutex;
    178         /** Operation result signaling. */
     153        /** Operation result signaling.
     154         */
    179155        fibril_condvar_t condvar;
    180156};
    181157
    182 /** TCP socket specific data. */
    183 struct tcp_socket_data {
    184         /** TCP socket state. */
     158/** TCP socket specific data.
     159 */
     160struct tcp_socket_data{
     161        /** TCP socket state.
     162         */
    185163        tcp_socket_state_t state;
    186        
    187         /**
    188          * Data fragment size.
    189          * Sending optimalization.
     164        /** Data fragment size.
     165         *  Sending optimalization.
    190166         */
    191167        size_t data_fragment_size;
    192        
    193         /** Device identifier. */
     168        /** Device identifier.
     169        */
    194170        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.
    199173         */
    200174        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.
    208180         */
    209181        int listening_socket_id;
    210        
    211         /** Treshold size in bytes. */
     182        /** Treshold size in bytes.
     183        */
    212184        size_t treshold;
    213         /** Window size in bytes. */
     185        /** Window size in bytes.
     186         */
    214187        size_t window;
    215         /** Acknowledgement timeout. */
     188        /** Acknowledgement timeout.
     189         */
    216190        suseconds_t timeout;
    217         /** Last acknowledged byte. */
     191        /** Last acknowledged byte.
     192         */
    218193        uint32_t acknowledged;
    219         /** Next incoming sequence number. */
     194        /** Next incoming sequence number.
     195         */
    220196        uint32_t next_incoming;
    221         /** Incoming FIN. */
     197        /** Incoming FIN.
     198         */
    222199        uint32_t fin_incoming;
    223         /** Next outgoing sequence number. */
     200        /** Next outgoing sequence number.
     201         */
    224202        uint32_t next_outgoing;
    225         /** Last outgoing sequence number. */
     203        /** Last outgoing sequence number.
     204         */
    226205        uint32_t last_outgoing;
    227         /** Outgoing FIN. */
     206        /** Outgoing FIN.
     207         */
    228208        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.
    234212         */
    235213        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.
    241216         */
    242217        int expected_count;
    243        
    244218        /** 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.
    250223         */
    251224        packet_t incoming;
    252        
    253225        /** 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.
    260230         */
    261231        packet_t outgoing;
    262        
    263         /** IP pseudo header. */
     232        /** IP pseudo header.
     233        */
    264234        void *pseudo_header;
    265         /** IP pseudo header length. */
     235        /** IP pseudo header length.
     236         */
    266237        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         */
    270243        socklen_t addrlen;
    271         /** Remote host port. */
     244        /** Remote host port.
     245         */
    272246        uint16_t dest_port;
    273         /** Parent local sockets. */
     247        /** Parent local sockets.
     248         */
    274249        socket_cores_ref local_sockets;
    275        
    276250        /** 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         */
    288260        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.
    293263         */
    294264        int timeout_count;
    295265};
    296266
    297 /** TCP global data. */
    298 struct tcp_globals {
    299         /** Networking module phone. */
     267/** TCP global data.
     268 */
     269struct  tcp_globals{
     270        /** Networking module phone.
     271         */
    300272        int net_phone;
    301         /** IP module phone. */
     273        /** IP module phone.
     274         */
    302275        int ip_phone;
    303         /** ICMP module phone. */
     276        /** ICMP module phone.
     277         */
    304278        int icmp_phone;
    305         /** Last used free port. */
     279        /** Last used free port.
     280         */
    306281        int last_used_port;
    307         /** Active sockets. */
     282        /** Active sockets.
     283         */
    308284        socket_ports_t sockets;
    309         /** Device packet dimensions. */
     285        /** Device packet dimensions.
     286         */
    310287        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.
    315290         */
    316291        fibril_rwlock_t lock;
     
    321296/** @}
    322297 */
     298
Note: See TracChangeset for help on using the changeset viewer.