Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/tl/udp/udp.c

    r014dd57b r348c589  
    4040#include <malloc.h>
    4141#include <stdio.h>
    42 #include <ipc/ipc.h>
    4342#include <ipc/services.h>
    4443#include <ipc/net.h>
     
    6160#include <ip_interface.h>
    6261#include <icmp_client.h>
    63 #include <icmp_interface.h>
     62#include <icmp_remote.h>
    6463#include <net_interface.h>
    6564#include <socket_core.h>
     
    354353                                    SERVICE_UDP, IPC_GET_ERROR(*icall));
    355354                       
    356                         ipc_answer_0(iid, (sysarg_t) rc);
     355                        async_answer_0(iid, (sysarg_t) rc);
    357356                        break;
    358357                default:
    359                         ipc_answer_0(iid, (sysarg_t) ENOTSUP);
     358                        async_answer_0(iid, (sysarg_t) ENOTSUP);
    360359                }
    361360               
     
    393392        udp_globals.net_phone = net_phone;
    394393       
    395         udp_globals.icmp_phone = icmp_connect_module(SERVICE_ICMP,
    396             ICMP_CONNECT_TIMEOUT);
     394        udp_globals.icmp_phone = icmp_connect_module(ICMP_CONNECT_TIMEOUT);
    397395       
    398396        udp_globals.ip_phone = ip_bind_service(SERVICE_IP, IPPROTO_UDP,
     
    419417        rc = packet_dimensions_initialize(&udp_globals.dimensions);
    420418        if (rc != EOK) {
    421                 socket_ports_destroy(&udp_globals.sockets);
     419                socket_ports_destroy(&udp_globals.sockets, free);
    422420                fibril_rwlock_write_unlock(&udp_globals.lock);
    423421                return rc;
     
    436434            &data);
    437435        if (rc != EOK) {
    438                 socket_ports_destroy(&udp_globals.sockets);
     436                socket_ports_destroy(&udp_globals.sockets, free);
    439437                fibril_rwlock_write_unlock(&udp_globals.lock);
    440438                return rc;
     
    501499        device_id_t device_id;
    502500        packet_dimension_t *packet_dimension;
     501        size_t size;
    503502        int rc;
     503
     504        /* In case of error, do not update the data fragment size. */
     505        *data_fragment_size = 0;
    504506       
    505507        rc = tl_get_address_port(addr, addrlen, &dest_port);
     
    541543                packet_dimension = &udp_globals.packet_dimension;
    542544//      }
     545
     546        /*
     547         * Update the data fragment size based on what the lower layers can
     548         * handle without fragmentation, but not more than the maximum allowed
     549         * for UDP.
     550         */
     551        size = MAX_UDP_FRAGMENT_SIZE;
     552        if (packet_dimension->content < size)
     553            size = packet_dimension->content;
     554        *data_fragment_size = size;
    543555
    544556        /* Read the first packet fragment */
     
    788800                                break;
    789801                       
     802                        size = MAX_UDP_FRAGMENT_SIZE;
    790803                        if (tl_get_ip_packet_dimension(udp_globals.ip_phone,
    791804                            &udp_globals.dimensions, DEVICE_INVALID_ID,
    792805                            &packet_dimension) == EOK) {
    793                                 SOCKET_SET_DATA_FRAGMENT_SIZE(answer,
    794                                     packet_dimension->content);
     806                                if (packet_dimension->content < size)
     807                                        size = packet_dimension->content;
    795808                        }
    796 
    797 //                      SOCKET_SET_DATA_FRAGMENT_SIZE(answer,
    798 //                          MAX_UDP_FRAGMENT_SIZE);
     809                        SOCKET_SET_DATA_FRAGMENT_SIZE(answer, size);
    799810                        SOCKET_SET_HEADER_SIZE(answer, UDP_HEADER_SIZE);
    800811                        answer_count = 3;
     
    869880
    870881        /* Release the application phone */
    871         ipc_hangup(app_phone);
     882        async_hangup(app_phone);
    872883
    873884        /* Release all local sockets */
     
    876887
    877888        return res;
     889}
     890
     891/** Per-connection initialization
     892 *
     893 */
     894void tl_connection(void)
     895{
    878896}
    879897
     
    891909 * @see IS_NET_UDP_MESSAGE()
    892910 */
    893 int tl_module_message(ipc_callid_t callid, ipc_call_t *call,
     911int tl_message(ipc_callid_t callid, ipc_call_t *call,
    894912    ipc_call_t *answer, size_t *answer_count)
    895913{
Note: See TracChangeset for help on using the changeset viewer.