Changes in / [289cb7dd:25eec4e] in mainline


Ignore:
Files:
14 added
10 edited

Legend:

Unmodified
Added
Removed
  • boot/Makefile.common

    r289cb7dd r25eec4e  
    112112        $(USPACE_PATH)/srv/hid/remcons/remcons \
    113113        $(USPACE_PATH)/srv/hid/isdv4_tablet/isdv4_tablet \
     114        $(USPACE_PATH)/srv/net/dnsres/dnsres \
    114115        $(USPACE_PATH)/srv/net/ethip/ethip \
    115116        $(USPACE_PATH)/srv/net/inetsrv/inetsrv \
  • uspace/Makefile

    r289cb7dd r25eec4e  
    8282        srv/devman \
    8383        srv/loader \
     84        srv/net/dnsres \
    8485        srv/net/ethip \
    8586        srv/net/inetsrv \
  • uspace/srv/net/inetsrv/addrobj.c

    r289cb7dd r25eec4e  
    221221
    222222        lsrc_addr.ipv4 = addr->naddr.ipv4;
    223         ldest_addr = &dgram->dest;
     223        ldest_addr = ldest;
    224224
    225225        return inet_link_send_dgram(addr->ilink, &lsrc_addr, ldest_addr, dgram,
  • uspace/srv/net/inetsrv/inetsrv.c

    r289cb7dd r25eec4e  
    9898        }
    9999       
    100         rc = inet_link_discovery_start();
     100        inet_sroute_t *sroute = inet_sroute_new();
     101        if (sroute == NULL) {
     102                log_msg(LOG_DEFAULT, LVL_ERROR, "Failed creating default route (%d).", rc);
     103                return ENOMEM;
     104        }
     105
     106        sroute->dest.ipv4 = 0;
     107        sroute->dest.bits = 0;
     108        sroute->router.ipv4 = (192 << 24) | (168 << 16) | (0 << 8) | 1;
     109        sroute->name = str_dup("default");
     110        inet_sroute_add(sroute);
     111
     112        rc = inet_link_discovery_start();
    101113        if (rc != EOK)
    102114                return EEXIST;
  • uspace/srv/net/udp/assoc.c

    r289cb7dd r25eec4e  
    279279
    280280        fibril_mutex_lock(&assoc->lock);
    281         while (list_empty(&assoc->rcv_queue)) {
     281        while (list_empty(&assoc->rcv_queue) && !assoc->reset) {
    282282                log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_recv() - waiting");
    283283                fibril_condvar_wait(&assoc->rcv_queue_cv, &assoc->lock);
     284        }
     285
     286        if (assoc->reset) {
     287                log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_recv() - association was reset");
     288                fibril_mutex_unlock(&assoc->lock);
     289                return ECONNABORTED;
    284290        }
    285291
     
    323329}
    324330
     331/** Reset association.
     332 *
     333 * This causes any pendingreceive operations to return immediately with
     334 * UDP_ERESET.
     335 */
     336void udp_assoc_reset(udp_assoc_t *assoc)
     337{
     338        fibril_mutex_lock(&assoc->lock);
     339        assoc->reset = true;
     340        fibril_condvar_broadcast(&assoc->rcv_queue_cv);
     341        fibril_mutex_unlock(&assoc->lock);
     342}
     343
    325344static int udp_assoc_queue_msg(udp_assoc_t *assoc, udp_sockpair_t *sp,
    326345    udp_msg_t *msg)
  • uspace/srv/net/udp/assoc.h

    r289cb7dd r25eec4e  
    5151extern int udp_assoc_recv(udp_assoc_t *, udp_msg_t **, udp_sock_t *);
    5252extern void udp_assoc_received(udp_sockpair_t *, udp_msg_t *);
    53 
     53extern void udp_assoc_reset(udp_assoc_t *);
    5454
    5555#endif
  • uspace/srv/net/udp/sock.c

    r289cb7dd r25eec4e  
    537537        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close()");
    538538        int socket_id = SOCKET_GET_SOCKET_ID(call);
    539        
     539
    540540        socket_core_t *sock_core =
    541541            socket_cores_find(&client->sockets, socket_id);
     
    544544                return;
    545545        }
    546        
     546
    547547        udp_sockdata_t *socket =
    548548            (udp_sockdata_t *) sock_core->specific_data;
    549549        fibril_mutex_lock(&socket->lock);
    550        
     550
     551        fibril_mutex_lock(&socket->recv_buffer_lock);
     552        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_close - set socket->sock_core = NULL");
     553        socket->sock_core = NULL;
     554        fibril_mutex_unlock(&socket->recv_buffer_lock);
     555
     556        udp_uc_reset(socket->assoc);
     557
    551558        int rc = socket_destroy(NULL, socket_id, &client->sockets, &gsock,
    552559            udp_free_sock_data);
    553560        if (rc != EOK) {
     561                log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_close - socket_destroy failed");
    554562                fibril_mutex_unlock(&socket->lock);
    555563                async_answer_0(callid, rc);
    556564                return;
    557565        }
    558        
     566
     567        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_close - broadcast recv_buffer_cv");
     568        fibril_condvar_broadcast(&socket->recv_buffer_cv);
     569
    559570        fibril_mutex_unlock(&socket->lock);
    560571        async_answer_0(callid, EOK);
     
    582593        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_recv_fibril()");
    583594
     595        fibril_mutex_lock(&sock->recv_buffer_lock);
     596
    584597        while (true) {
    585598                log_msg(LOG_DEFAULT, LVL_DEBUG, "[] wait for rcv buffer empty()");
    586                 fibril_mutex_lock(&sock->recv_buffer_lock);
    587                 while (sock->recv_buffer_used != 0) {
     599                while (sock->recv_buffer_used != 0 && sock->sock_core != NULL) {
    588600                        fibril_condvar_wait(&sock->recv_buffer_cv,
    589601                            &sock->recv_buffer_lock);
     
    594606                    UDP_FRAGMENT_SIZE, &rcvd, &xflags, &sock->recv_fsock);
    595607                sock->recv_error = urc;
     608
     609                log_msg(LOG_DEFAULT, LVL_DEBUG, "[] udp_uc_receive -> %d", urc);
     610
     611                if (sock->sock_core != NULL)
     612                        udp_sock_notify_data(sock->sock_core);
     613
    596614               
    597615                udp_sock_notify_data(sock->sock_core);
    598616               
    599617                if (urc != UDP_EOK) {
     618                        log_msg(LOG_DEFAULT, LVL_DEBUG, "[] urc != UDP_EOK, break");
    600619                        fibril_condvar_broadcast(&sock->recv_buffer_cv);
    601                         fibril_mutex_unlock(&sock->recv_buffer_lock);
    602620                        break;
    603621                }
     
    606624               
    607625                sock->recv_buffer_used = rcvd;
    608                 fibril_mutex_unlock(&sock->recv_buffer_lock);
    609626                fibril_condvar_broadcast(&sock->recv_buffer_cv);
    610627        }
    611628
     629        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_recv_fibril() exited loop");
     630        fibril_mutex_unlock(&sock->recv_buffer_lock);
    612631        udp_uc_destroy(sock->assoc);
     632
     633        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_recv_fibril() terminated");
    613634
    614635        return 0;
  • uspace/srv/net/udp/ucall.c

    r289cb7dd r25eec4e  
    113113        log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: udp_uc_receive()", assoc->name);
    114114        rc = udp_assoc_recv(assoc, &msg, fsock);
     115        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_recv -> %d", rc);
    115116        switch (rc) {
     117        case EOK:
     118                break;
     119        case ECONNABORTED:
     120                return UDP_ERESET;
     121        default:
     122                assert(false);
    116123        }
    117124
     
    133140{
    134141        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_uc_destroy()");
     142        udp_assoc_reset(assoc);
    135143        udp_assoc_remove(assoc);
    136144        udp_assoc_delete(assoc);
     145}
     146
     147void udp_uc_reset(udp_assoc_t *assoc)
     148{
     149        udp_assoc_reset(assoc);
    137150}
    138151
  • uspace/srv/net/udp/ucall.h

    r289cb7dd r25eec4e  
    4949extern void udp_uc_status(udp_assoc_t *, udp_assoc_status_t *);
    5050extern void udp_uc_destroy(udp_assoc_t *);
     51extern void udp_uc_reset(udp_assoc_t *);
    5152
    5253#endif
  • uspace/srv/net/udp/udp_type.h

    r289cb7dd r25eec4e  
    5151        UDP_EUNSPEC,
    5252        /* No route to destination */
    53         UDP_ENOROUTE
     53        UDP_ENOROUTE,
     54        /** Association reset by user */
     55        UDP_ERESET
    5456} udp_error_t;
    5557
     
    119121        udp_sockpair_t ident;
    120122
     123        /** True if association was reset by user */
     124        bool reset;
     125
    121126        /** True if association was deleted by user */
    122127        bool deleted;
Note: See TracChangeset for help on using the changeset viewer.