Changeset 0b749a3 in mainline for uspace/srv/net/tl/tcp/tcp.h


Ignore:
Timestamp:
2010-11-22T15:39:53Z (13 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0eddb76, aae339e9
Parents:
9a1d8ab (diff), 8cd1aa5e (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge development/ changes

File:
1 edited

Legend:

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

    r9a1d8ab r0b749a3  
    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>
    4141
    42 #include <packet/packet.h>
    43 #include <net_device.h>
     42#include <net/packet.h>
     43#include <net/device.h>
    4444#include <socket_core.h>
    4545#include <tl_common.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;
    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 */
     55typedef struct tcp_socket_data tcp_socket_data_t;
    6156
    6257/** 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 */
     60typedef struct tcp_operation tcp_operation_t;
    7161
    7262/** 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 */
     65typedef enum tcp_socket_state tcp_socket_state_t;
     66
     67/** TCP socket state. */
     68enum tcp_socket_state {
    8069        /** Initial.
    81          *  Not connected or bound.
     70         *
     71         * Not connected or bound.
    8272         */
    8373        TCP_SOCKET_INITIAL,
     74       
    8475        /** 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.
    8780         */
    8881        TCP_SOCKET_LISTEN,
     82       
    8983        /** 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.
    9287         */
    9388        TCP_SOCKET_SYN_SENT,
     89       
    9490        /** 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.
    9794         */
    9895        TCP_SOCKET_SYN_RECEIVED,
     96       
    9997        /** Connected.
    100          *  The three-way handshake has been completed.
     98         *
     99         * The three-way handshake has been completed.
    101100         */
    102101        TCP_SOCKET_ESTABLISHED,
     102       
    103103        /** 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.
    108111         */
    109112        TCP_SOCKET_FIN_WAIT_1,
     113       
    110114        /** 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.
    114119         */
    115120        TCP_SOCKET_FIN_WAIT_2,
     121       
    116122        /** 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.
    120128         */
    121129        TCP_SOCKET_CLOSING,
     130       
    122131        /** 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.
    126137         */
    127138        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.
    132144         */
    133145        TCP_SOCKET_LAST_ACK,
     146       
    134147        /** 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.
    136151         */
    137152        TCP_SOCKET_TIME_WAIT,
     153       
    138154        /** 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.
    140158         */
    141159        TCP_SOCKET_CLOSED
    142160};
    143161
    144 /** TCP operation data.
    145  */
    146 struct tcp_operation{
    147         /** Operation result.
    148          */
     162/** TCP operation data. */
     163struct tcp_operation {
     164        /** Operation result. */
    149165        int result;
    150         /** Safety lock.
    151          */
     166        /** Safety lock. */
    152167        fibril_mutex_t mutex;
    153         /** Operation result signaling.
    154          */
     168        /** Operation result signaling. */
    155169        fibril_condvar_t condvar;
    156170};
    157171
    158 /** TCP socket specific data.
    159  */
    160 struct tcp_socket_data{
    161         /** TCP socket state.
    162          */
     172/** TCP socket specific data. */
     173struct tcp_socket_data {
     174        /** TCP socket state. */
    163175        tcp_socket_state_t state;
    164         /** Data fragment size.
    165          *  Sending optimalization.
     176       
     177        /**
     178         * Data fragment size.
     179         * Sending optimalization.
    166180         */
    167181        size_t data_fragment_size;
    168         /** Device identifier.
    169         */
     182       
     183        /** Device identifier. */
    170184        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.
    173189         */
    174190        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.
    180198         */
    181199        int listening_socket_id;
    182         /** Treshold size in bytes.
    183         */
     200       
     201        /** Treshold size in bytes. */
    184202        size_t treshold;
    185         /** Window size in bytes.
    186          */
     203        /** Window size in bytes. */
    187204        size_t window;
    188         /** Acknowledgement timeout.
    189          */
     205        /** Acknowledgement timeout. */
    190206        suseconds_t timeout;
    191         /** Last acknowledged byte.
    192          */
     207        /** Last acknowledged byte. */
    193208        uint32_t acknowledged;
    194         /** Next incoming sequence number.
    195          */
     209        /** Next incoming sequence number. */
    196210        uint32_t next_incoming;
    197         /** Incoming FIN.
    198          */
     211        /** Incoming FIN. */
    199212        uint32_t fin_incoming;
    200         /** Next outgoing sequence number.
    201          */
     213        /** Next outgoing sequence number. */
    202214        uint32_t next_outgoing;
    203         /** Last outgoing sequence number.
    204          */
     215        /** Last outgoing sequence number. */
    205216        uint32_t last_outgoing;
    206         /** Outgoing FIN.
    207          */
     217        /** Outgoing FIN. */
    208218        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.
    212224         */
    213225        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.
    216231         */
    217232        int expected_count;
     233       
    218234        /** 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       
    225243        /** 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. */
    234254        void *pseudo_header;
    235         /** IP pseudo header length.
    236          */
     255        /** IP pseudo header length. */
    237256        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. */
    243260        socklen_t addrlen;
    244         /** Remote host port.
    245          */
     261        /** Remote host port. */
    246262        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       
    250266        /** 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. */
    260278        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.
    263283         */
    264284        int timeout_count;
    265285};
    266286
    267 /** TCP global data.
    268  */
    269 struct  tcp_globals{
    270         /** Networking module phone.
    271          */
     287/** TCP global data. */
     288struct tcp_globals {
     289        /** Networking module phone. */
    272290        int net_phone;
    273         /** IP module phone.
    274          */
     291        /** IP module phone. */
    275292        int ip_phone;
    276         /** ICMP module phone.
    277          */
     293        /** ICMP module phone. */
    278294        int icmp_phone;
    279         /** Last used free port.
    280          */
     295        /** Last used free port. */
    281296        int last_used_port;
    282         /** Active sockets.
    283          */
     297        /** Active sockets. */
    284298        socket_ports_t sockets;
    285         /** Device packet dimensions.
    286          */
     299        /** Device packet dimensions. */
    287300        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.
    290305         */
    291306        fibril_rwlock_t lock;
     
    296311/** @}
    297312 */
    298 
Note: See TracChangeset for help on using the changeset viewer.