Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 899f1a9 in mainline for uspace/srv/net/tl/tcp/tcp.h


Ignore:
Timestamp:
2011-12-11T20:27:56Z (10 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master
Children:
c24c157d
Parents:
4c67e52 (diff), 9c3bba0 (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 mainline changes.

File:
1 edited

Legend:

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

    r4c67e52 r899f1a9  
    11/*
    2  * Copyright (c) 2008 Lukas Mejdrech
     2 * Copyright (c) 2011 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3030 * @{
    3131 */
    32 
    33 /** @file
    34  * TCP module.
     32/** @file TCP (Transmission Control Protocol) network module
    3533 */
    3634
    37 #ifndef NET_TCP_H_
    38 #define NET_TCP_H_
     35#ifndef TCP_H
     36#define TCP_H
    3937
    4038#include <async.h>
    41 #include <fibril_synch.h>
    42 #include <net/packet.h>
    43 #include <net/device.h>
    44 #include <socket_core.h>
    45 #include <tl_common.h>
     39#include <packet_remote.h>
     40#include "tcp_type.h"
    4641
    47 /** Type definition of the TCP global data.
    48  * @see tcp_globals
    49  */
    50 typedef struct tcp_globals tcp_globals_t;
    51 
    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;
    56 
    57 /** Type definition of the TCP operation data.
    58  * @see tcp_operation
    59  */
    60 typedef struct tcp_operation tcp_operation_t;
    61 
    62 /** 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 {
    69         /** Initial.
    70          *
    71          * Not connected or bound.
    72          */
    73         TCP_SOCKET_INITIAL,
    74        
    75         /** 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.
    80          */
    81         TCP_SOCKET_LISTEN,
    82        
    83         /** 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.
    87          */
    88         TCP_SOCKET_SYN_SENT,
    89        
    90         /** 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.
    94          */
    95         TCP_SOCKET_SYN_RECEIVED,
    96        
    97         /** Connected.
    98          *
    99          * The three-way handshake has been completed.
    100          */
    101         TCP_SOCKET_ESTABLISHED,
    102        
    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.
    111          */
    112         TCP_SOCKET_FIN_WAIT_1,
    113        
    114         /** 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.
    119          */
    120         TCP_SOCKET_FIN_WAIT_2,
    121        
    122         /** 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.
    128          */
    129         TCP_SOCKET_CLOSING,
    130        
    131         /** 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.
    137          */
    138         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.
    144          */
    145         TCP_SOCKET_LAST_ACK,
    146        
    147         /** 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.
    151          */
    152         TCP_SOCKET_TIME_WAIT,
    153        
    154         /** Closed.
    155          *
    156          * Imaginary, this indicates that a connection has been removed from
    157          * the connection table.
    158          */
    159         TCP_SOCKET_CLOSED
    160 };
    161 
    162 /** TCP operation data. */
    163 struct tcp_operation {
    164         /** Operation result. */
    165         int result;
    166         /** Safety lock. */
    167         fibril_mutex_t mutex;
    168         /** Operation result signaling. */
    169         fibril_condvar_t condvar;
    170 };
    171 
    172 /** TCP socket specific data. */
    173 struct tcp_socket_data {
    174         /** TCP socket state. */
    175         tcp_socket_state_t state;
    176        
    177         /**
    178          * Data fragment size.
    179          * Sending optimalization.
    180          */
    181         size_t data_fragment_size;
    182        
    183         /** Device identifier. */
    184         nic_device_id_t device_id;
    185        
    186         /**
    187          * Listening backlog.
    188          * The maximal number of connected but not yet accepted sockets.
    189          */
    190         int backlog;
    191        
    192         /**
    193          * Parent listening socket identifier.
    194          * Set if this socket is an accepted one.
    195          */
    196         int listening_socket_id;
    197        
    198         /** Treshold size in bytes. */
    199         size_t treshold;
    200         /** Window size in bytes. */
    201         size_t window;
    202         /** Acknowledgement timeout. */
    203         suseconds_t timeout;
    204         /** Last acknowledged byte. */
    205         uint32_t acknowledged;
    206         /** Next incoming sequence number. */
    207         uint32_t next_incoming;
    208         /** Incoming FIN. */
    209         uint32_t fin_incoming;
    210         /** Next outgoing sequence number. */
    211         uint32_t next_outgoing;
    212         /** Last outgoing sequence number. */
    213         uint32_t last_outgoing;
    214         /** Outgoing FIN. */
    215         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.
    221          */
    222         uint32_t expected;
    223        
    224         /**
    225          * Expected sequence number counter.
    226          * Counts the number of received notifications for the same sequence
    227          * number.
    228          */
    229         int expected_count;
    230        
    231         /** 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        
    240         /** 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. */
    251         void *pseudo_header;
    252         /** IP pseudo header length. */
    253         size_t headerlen;
    254         /** Remote host address. */
    255         struct sockaddr *addr;
    256         /** Remote host address length. */
    257         socklen_t addrlen;
    258         /** Remote host port. */
    259         uint16_t dest_port;
    260         /** Parent local sockets. */
    261         socket_cores_t *local_sockets;
    262        
    263         /** 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. */
    275         tcp_operation_t operation;
    276        
    277         /**
    278          * Timeouts in a row counter.
    279          * If TCP_MAX_TIMEOUTS is reached, the connection is lost.
    280          */
    281         int timeout_count;
    282 };
    283 
    284 /** TCP global data. */
    285 struct tcp_globals {
    286         /** Networking module session. */
    287         async_sess_t *net_sess;
    288         /** IP module session. */
    289         async_sess_t *ip_sess;
    290         /** ICMP module session. */
    291         async_sess_t *icmp_sess;
    292         /** Last used free port. */
    293         int last_used_port;
    294         /** Active sockets. */
    295         socket_ports_t sockets;
    296         /** Device packet dimensions. */
    297         packet_dimensions_t dimensions;
    298        
    299         /**
    300          * Safety lock.
    301          * Write lock is used only for adding or removing socket ports.
    302          */
    303         fibril_rwlock_t lock;
    304 };
     42extern async_sess_t *net_sess;
     43extern async_sess_t *ip_sess;
     44extern void tcp_transmit_pdu(tcp_pdu_t *);
    30545
    30646#endif
Note: See TracChangeset for help on using the changeset viewer.