Changeset 973ef9fc in mainline for uspace/srv/net/tl/tcp/tcp.c


Ignore:
Timestamp:
2010-12-25T21:20:28Z (14 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
631ee0c
Parents:
1bfd3d3 (diff), 09178b7f (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.c

    r1bfd3d3 r973ef9fc  
    160160};
    161161
    162 static int tcp_release_and_return(packet_t, int);
     162static int tcp_release_and_return(packet_t *, int);
    163163static void tcp_prepare_operation_header(socket_core_t *, tcp_socket_data_t *,
    164164    tcp_header_t *, int synchronize, int);
     
    171171static int tcp_release_after_timeout(void *);
    172172
    173 static int tcp_process_packet(device_id_t, packet_t, services_t);
     173static int tcp_process_packet(device_id_t, packet_t *, services_t);
    174174static int tcp_connect_core(socket_core_t *, socket_cores_t *,
    175175    struct sockaddr *, socklen_t);
    176176static int tcp_queue_prepare_packet(socket_core_t *, tcp_socket_data_t *,
    177     packet_t, size_t);
    178 static int tcp_queue_packet(socket_core_t *, tcp_socket_data_t *, packet_t,
     177    packet_t *, size_t);
     178static int tcp_queue_packet(socket_core_t *, tcp_socket_data_t *, packet_t *,
    179179    size_t);
    180 static packet_t tcp_get_packets_to_send(socket_core_t *, tcp_socket_data_t *);
    181 static void tcp_send_packets(device_id_t, packet_t);
     180static packet_t *tcp_get_packets_to_send(socket_core_t *, tcp_socket_data_t *);
     181static void tcp_send_packets(device_id_t, packet_t *);
    182182
    183183static void tcp_process_acknowledgement(socket_core_t *, tcp_socket_data_t *,
    184184    tcp_header_t *);
    185 static packet_t tcp_send_prepare_packet(socket_core_t *, tcp_socket_data_t *,
    186     packet_t, size_t, size_t);
    187 static packet_t tcp_prepare_copy(socket_core_t *, tcp_socket_data_t *, packet_t,
    188     size_t, size_t);
     185static packet_t *tcp_send_prepare_packet(socket_core_t *, tcp_socket_data_t *,
     186    packet_t *, size_t, size_t);
     187static packet_t *tcp_prepare_copy(socket_core_t *, tcp_socket_data_t *,
     188    packet_t *, size_t, size_t);
    189189/* static */ void tcp_retransmit_packet(socket_core_t *, tcp_socket_data_t *,
    190190    size_t);
    191 static int tcp_create_notification_packet(packet_t *, socket_core_t *,
     191static int tcp_create_notification_packet(packet_t **, socket_core_t *,
    192192    tcp_socket_data_t *, int, int);
    193193static void tcp_refresh_socket_data(tcp_socket_data_t *);
     
    196196
    197197static int tcp_process_listen(socket_core_t *, tcp_socket_data_t *,
    198     tcp_header_t *, packet_t, struct sockaddr *, struct sockaddr *, size_t);
     198    tcp_header_t *, packet_t *, struct sockaddr *, struct sockaddr *, size_t);
    199199static int tcp_process_syn_sent(socket_core_t *, tcp_socket_data_t *,
    200     tcp_header_t *, packet_t);
     200    tcp_header_t *, packet_t *);
    201201static int tcp_process_syn_received(socket_core_t *, tcp_socket_data_t *,
    202     tcp_header_t *, packet_t);
     202    tcp_header_t *, packet_t *);
    203203static int tcp_process_established(socket_core_t *, tcp_socket_data_t *,
    204     tcp_header_t *, packet_t, int, size_t);
     204    tcp_header_t *, packet_t *, int, size_t);
    205205static int tcp_queue_received_packet(socket_core_t *, tcp_socket_data_t *,
    206     packet_t, int, size_t);
    207 
    208 static int tcp_received_msg(device_id_t, packet_t, services_t, services_t);
     206    packet_t *, int, size_t);
     207
     208static int tcp_received_msg(device_id_t, packet_t *, services_t, services_t);
    209209static int tcp_process_client_messages(ipc_callid_t, ipc_call_t);
    210210
     
    262262}
    263263
    264 int tcp_received_msg(device_id_t device_id, packet_t packet,
     264int tcp_received_msg(device_id_t device_id, packet_t *packet,
    265265    services_t receiver, services_t error)
    266266{
     
    280280}
    281281
    282 int tcp_process_packet(device_id_t device_id, packet_t packet, services_t error)
     282int tcp_process_packet(device_id_t device_id, packet_t *packet, services_t error)
    283283{
    284284        size_t length;
     
    288288        socket_core_t *socket;
    289289        tcp_socket_data_t *socket_data;
    290         packet_t next_packet;
     290        packet_t *next_packet;
    291291        size_t total_length;
    292292        uint32_t checksum;
     
    453453
    454454has_error_service:
    455         fibril_rwlock_read_unlock(&tcp_globals.lock);
     455        fibril_rwlock_write_unlock(&tcp_globals.lock);
    456456
    457457        /* TODO error reporting/handling */
     
    493493
    494494int tcp_process_established(socket_core_t *socket, tcp_socket_data_t *
    495     socket_data, tcp_header_t *header, packet_t packet, int fragments,
     495    socket_data, tcp_header_t *header, packet_t *packet, int fragments,
    496496    size_t total_length)
    497497{
    498         packet_t next_packet;
    499         packet_t tmp_packet;
     498        packet_t *next_packet;
     499        packet_t *tmp_packet;
    500500        uint32_t old_incoming;
    501501        size_t order;
     
    801801
    802802int tcp_queue_received_packet(socket_core_t *socket,
    803     tcp_socket_data_t *socket_data, packet_t packet, int fragments,
     803    tcp_socket_data_t *socket_data, packet_t *packet, int fragments,
    804804    size_t total_length)
    805805{
     
    829829        /* Notify the destination socket */
    830830        async_msg_5(socket->phone, NET_SOCKET_RECEIVED,
    831             (ipcarg_t) socket->socket_id,
     831            (sysarg_t) socket->socket_id,
    832832            ((packet_dimension->content < socket_data->data_fragment_size) ?
    833833            packet_dimension->content : socket_data->data_fragment_size), 0, 0,
    834             (ipcarg_t) fragments);
     834            (sysarg_t) fragments);
    835835
    836836        return EOK;
     
    838838
    839839int tcp_process_syn_sent(socket_core_t *socket, tcp_socket_data_t *
    840     socket_data, tcp_header_t *header, packet_t packet)
    841 {
    842         packet_t next_packet;
     840    socket_data, tcp_header_t *header, packet_t *packet)
     841{
     842        packet_t *next_packet;
    843843        int rc;
    844844
     
    897897int tcp_process_listen(socket_core_t *listening_socket,
    898898    tcp_socket_data_t *listening_socket_data, tcp_header_t *header,
    899     packet_t packet, struct sockaddr *src, struct sockaddr *dest,
     899    packet_t *packet, struct sockaddr *src, struct sockaddr *dest,
    900900    size_t addrlen)
    901901{
    902         packet_t next_packet;
     902        packet_t *next_packet;
    903903        socket_core_t *socket;
    904904        tcp_socket_data_t *socket_data;
     
    10561056
    10571057int tcp_process_syn_received(socket_core_t *socket,
    1058     tcp_socket_data_t *socket_data, tcp_header_t *header, packet_t packet)
     1058    tcp_socket_data_t *socket_data, tcp_header_t *header, packet_t *packet)
    10591059{
    10601060        socket_core_t *listening_socket;
     
    10901090                        /* Notify the destination socket */
    10911091                        async_msg_5(socket->phone, NET_SOCKET_ACCEPTED,
    1092                             (ipcarg_t) listening_socket->socket_id,
     1092                            (sysarg_t) listening_socket->socket_id,
    10931093                            socket_data->data_fragment_size, TCP_HEADER_SIZE,
    1094                             0, (ipcarg_t) socket->socket_id);
     1094                            0, (sysarg_t) socket->socket_id);
    10951095
    10961096                        fibril_rwlock_write_unlock(socket_data->local_lock);
     
    11271127        size_t number;
    11281128        size_t length;
    1129         packet_t packet;
    1130         packet_t next;
    1131         packet_t acknowledged = NULL;
     1129        packet_t *packet;
     1130        packet_t *next;
     1131        packet_t *acknowledged = NULL;
    11321132        uint32_t old;
    11331133
     
    12321232    ipc_call_t *answer, int *answer_count)
    12331233{
    1234         packet_t packet;
     1234        packet_t *packet;
    12351235        int rc;
    12361236
     
    12401240
    12411241        *answer_count = 0;
    1242         switch (IPC_GET_METHOD(*call)) {
     1242        switch (IPC_GET_IMETHOD(*call)) {
    12431243        case NET_TL_RECEIVED:
    12441244//              fibril_rwlock_read_lock(&tcp_globals.lock);
     
    13231323
    13241324                /* Process the call */
    1325                 switch (IPC_GET_METHOD(call)) {
     1325                switch (IPC_GET_IMETHOD(call)) {
    13261326                case IPC_M_PHONE_HUNGUP:
    13271327                        keep_on_going = false;
     
    13651365
    13661366                case NET_SOCKET_BIND:
    1367                         res = data_receive((void **) &addr, &addrlen);
     1367                        res = async_data_write_accept((void **) &addr, false,
     1368                            0, 0, 0, &addrlen);
    13681369                        if (res != EOK)
    13691370                                break;
     
    14021403
    14031404                case NET_SOCKET_CONNECT:
    1404                         res = data_receive((void **) &addr, &addrlen);
     1405                        res = async_data_write_accept((void **) &addr, false,
     1406                            0, 0, 0, &addrlen);
    14051407                        if (res != EOK)
    14061408                                break;
     
    14531455
    14541456                case NET_SOCKET_SENDTO:
    1455                         res = data_receive((void **) &addr, &addrlen);
     1457                        res = async_data_write_accept((void **) &addr, false,
     1458                            0, 0, 0, &addrlen);
    14561459                        if (res != EOK)
    14571460                                break;
     
    16541657    socket_data, size_t sequence_number)
    16551658{
    1656         packet_t packet;
    1657         packet_t copy;
     1659        packet_t *packet;
     1660        packet_t *copy;
    16581661        size_t data_length;
    16591662
     
    17361739{
    17371740        tcp_socket_data_t *socket_data;
    1738         packet_t packet;
     1741        packet_t *packet;
    17391742        int rc;
    17401743
     
    18001803                        fibril_rwlock_write_unlock(socket_data->local_lock);
    18011804
     1805                        socket_data->state = TCP_SOCKET_SYN_SENT;
     1806
    18021807                        /* Send the packet */
    18031808                        printf("connecting %d\n", packet_get_id(packet));
     
    18241829
    18251830int tcp_queue_prepare_packet(socket_core_t *socket,
    1826     tcp_socket_data_t *socket_data, packet_t packet, size_t data_length)
     1831    tcp_socket_data_t *socket_data, packet_t *packet, size_t data_length)
    18271832{
    18281833        tcp_header_t *header;
     
    18551860
    18561861int tcp_queue_packet(socket_core_t *socket, tcp_socket_data_t *socket_data,
    1857     packet_t packet, size_t data_length)
     1862    packet_t *packet, size_t data_length)
    18581863{
    18591864        int rc;
     
    18761881}
    18771882
    1878 packet_t tcp_get_packets_to_send(socket_core_t *socket, tcp_socket_data_t *
     1883packet_t *tcp_get_packets_to_send(socket_core_t *socket, tcp_socket_data_t *
    18791884    socket_data)
    18801885{
    1881         packet_t packet;
    1882         packet_t copy;
    1883         packet_t sending = NULL;
    1884         packet_t previous = NULL;
     1886        packet_t *packet;
     1887        packet_t *copy;
     1888        packet_t *sending = NULL;
     1889        packet_t *previous = NULL;
    18851890        size_t data_length;
    18861891        int rc;
     
    19361941}
    19371942
    1938 packet_t tcp_send_prepare_packet(socket_core_t *socket, tcp_socket_data_t *
    1939     socket_data, packet_t packet, size_t data_length, size_t sequence_number)
     1943packet_t *tcp_send_prepare_packet(socket_core_t *socket, tcp_socket_data_t *
     1944    socket_data, packet_t *packet, size_t data_length, size_t sequence_number)
    19401945{
    19411946        tcp_header_t *header;
     
    19972002}
    19982003
    1999 packet_t tcp_prepare_copy(socket_core_t *socket, tcp_socket_data_t *
    2000     socket_data, packet_t packet, size_t data_length, size_t sequence_number)
    2001 {
    2002         packet_t copy;
     2004packet_t *tcp_prepare_copy(socket_core_t *socket, tcp_socket_data_t *
     2005    socket_data, packet_t *packet, size_t data_length, size_t sequence_number)
     2006{
     2007        packet_t *copy;
    20032008
    20042009        assert(socket);
     
    20152020}
    20162021
    2017 void tcp_send_packets(device_id_t device_id, packet_t packet)
    2018 {
    2019         packet_t next;
     2022void tcp_send_packets(device_id_t device_id, packet_t *packet)
     2023{
     2024        packet_t *next;
    20202025
    20212026        while (packet) {
     
    20822087        if (!fibril) {
    20832088                free(operation_timeout);
    2084                 return EPARTY;  /* FIXME: use another EC */
    2085         }
     2089                return ENOMEM;
     2090        }
     2091
    20862092//      fibril_mutex_lock(&socket_data->operation.mutex);
    20872093        /* Start the timeout fibril */
     
    20972103        tcp_socket_data_t *socket_data;
    20982104        int packet_id;
    2099         packet_t packet;
     2105        packet_t *packet;
    21002106        size_t length;
    21012107        int rc;
     
    21552161        tcp_socket_data_t *socket_data;
    21562162        packet_dimension_t *packet_dimension;
    2157         packet_t packet;
     2163        packet_t *packet;
    21582164        size_t total_length;
    21592165        tcp_header_t *header;
     
    22292235        socket_core_t *socket;
    22302236        tcp_socket_data_t *socket_data;
    2231         packet_t packet;
     2237        packet_t *packet;
    22322238        int rc;
    22332239
     
    22932299}
    22942300
    2295 int tcp_create_notification_packet(packet_t *packet, socket_core_t *socket,
     2301int tcp_create_notification_packet(packet_t **packet, socket_core_t *socket,
    22962302    tcp_socket_data_t *socket_data, int synchronize, int finalize)
    22972303{
     
    24422448 * @return              The result parameter.
    24432449 */
    2444 int tcp_release_and_return(packet_t packet, int result)
     2450int tcp_release_and_return(packet_t *packet, int result)
    24452451{
    24462452        pq_release_remote(tcp_globals.net_phone, packet_get_id(packet));
     
    24812487                 * result.
    24822488                 */
    2483                 if ((IPC_GET_METHOD(call) == IPC_M_PHONE_HUNGUP) ||
     2489                if ((IPC_GET_IMETHOD(call) == IPC_M_PHONE_HUNGUP) ||
    24842490                    (res == EHANGUP))
    24852491                        return;
Note: See TracChangeset for help on using the changeset viewer.