Changes in / [d1538a1:a1e2df13] in mainline


Ignore:
Files:
10 added
10 edited

Legend:

Unmodified
Added
Removed
  • boot/Makefile.common

    rd1538a1 ra1e2df13  
    113113        $(USPACE_PATH)/srv/hid/remcons/remcons \
    114114        $(USPACE_PATH)/srv/hid/isdv4_tablet/isdv4_tablet \
     115        $(USPACE_PATH)/srv/net/dnsres/dnsres \
    115116        $(USPACE_PATH)/srv/net/ethip/ethip \
    116117        $(USPACE_PATH)/srv/net/inetsrv/inetsrv \
  • uspace/Makefile

    rd1538a1 ra1e2df13  
    8383        srv/devman \
    8484        srv/loader \
     85        srv/net/dnsres \
    8586        srv/net/ethip \
    8687        srv/net/inetsrv \
  • uspace/srv/net/inetsrv/addrobj.c

    rd1538a1 ra1e2df13  
    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/inet_link.c

    rd1538a1 ra1e2df13  
    202202                first = 0;
    203203        } else {
    204                 addr->naddr.ipv4 = (192 << 24) + (168 << 16) + (0 << 8) + 4;
     204                addr->naddr.ipv4 = (10 << 24) + (0 << 16) + (0 << 8) + 2;
    205205        }
    206206        addr->naddr.bits = 24;
  • uspace/srv/net/udp/assoc.c

    rd1538a1 ra1e2df13  
    264264
    265265        fibril_mutex_lock(&assoc->lock);
    266         while (list_empty(&assoc->rcv_queue)) {
     266        while (list_empty(&assoc->rcv_queue) && !assoc->reset) {
    267267                log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_recv() - waiting");
    268268                fibril_condvar_wait(&assoc->rcv_queue_cv, &assoc->lock);
     269        }
     270
     271        if (assoc->reset) {
     272                log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_recv() - association was reset");
     273                fibril_mutex_unlock(&assoc->lock);
     274                return ECONNABORTED;
    269275        }
    270276
     
    308314}
    309315
     316/** Reset association.
     317 *
     318 * This causes any pendingreceive operations to return immediately with
     319 * UDP_ERESET.
     320 */
     321void udp_assoc_reset(udp_assoc_t *assoc)
     322{
     323        fibril_mutex_lock(&assoc->lock);
     324        assoc->reset = true;
     325        fibril_condvar_broadcast(&assoc->rcv_queue_cv);
     326        fibril_mutex_unlock(&assoc->lock);
     327}
     328
    310329static int udp_assoc_queue_msg(udp_assoc_t *assoc, udp_sockpair_t *sp,
    311330    udp_msg_t *msg)
  • uspace/srv/net/udp/assoc.h

    rd1538a1 ra1e2df13  
    5050extern int udp_assoc_recv(udp_assoc_t *, udp_msg_t **, udp_sock_t *);
    5151extern void udp_assoc_received(udp_sockpair_t *, udp_msg_t *);
    52 
     52extern void udp_assoc_reset(udp_assoc_t *);
    5353
    5454#endif
  • uspace/srv/net/udp/sock.c

    rd1538a1 ra1e2df13  
    359359                        rc = EOK;
    360360                        break;
    361 /*              case TCP_ENOTEXIST:
     361                case UDP_ENORES:
    362362                        rc = ENOTCONN;
    363363                        break;
    364                 case TCP_ECLOSING:
    365                         rc = ENOTCONN;
    366                         break;
    367                 case TCP_ERESET:
    368                         rc = ECONNABORTED;
    369                         break;*/
     364                case UDP_EUNSPEC:
     365                        rc = EINVAL;
     366                        break;
     367                case UDP_ENOROUTE:
     368                        rc = EIO;
     369                        break;
    370370                default:
    371371                        assert(false);
     
    543543        fibril_mutex_lock(&socket->lock);
    544544
     545        fibril_mutex_lock(&socket->recv_buffer_lock);
     546        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_close - set socket->sock_core = NULL");
     547        socket->sock_core = NULL;
     548        fibril_mutex_unlock(&socket->recv_buffer_lock);
     549
     550        udp_uc_reset(socket->assoc);
     551
    545552        rc = socket_destroy(NULL, socket_id, &client->sockets, &gsock,
    546553            udp_free_sock_data);
    547554        if (rc != EOK) {
     555                log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_close - socket_destroy failed");
    548556                fibril_mutex_unlock(&socket->lock);
    549557                async_answer_0(callid, rc);
    550558                return;
    551559        }
     560
     561        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_close - broadcast recv_buffer_cv");
     562        fibril_condvar_broadcast(&socket->recv_buffer_cv);
    552563
    553564        fibril_mutex_unlock(&socket->lock);
     
    576587        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_recv_fibril()");
    577588
     589        fibril_mutex_lock(&sock->recv_buffer_lock);
     590
    578591        while (true) {
    579592                log_msg(LOG_DEFAULT, LVL_DEBUG, "[] wait for rcv buffer empty()");
    580                 fibril_mutex_lock(&sock->recv_buffer_lock);
    581                 while (sock->recv_buffer_used != 0) {
     593                while (sock->recv_buffer_used != 0 && sock->sock_core != NULL) {
    582594                        fibril_condvar_wait(&sock->recv_buffer_cv,
    583595                            &sock->recv_buffer_lock);
     
    589601                sock->recv_error = urc;
    590602
    591                 udp_sock_notify_data(sock->sock_core);
     603                log_msg(LOG_DEFAULT, LVL_DEBUG, "[] udp_uc_receive -> %d", urc);
     604
     605                if (sock->sock_core != NULL)
     606                        udp_sock_notify_data(sock->sock_core);
    592607
    593608                if (urc != UDP_EOK) {
     609                        log_msg(LOG_DEFAULT, LVL_DEBUG, "[] urc != UDP_EOK, break");
    594610                        fibril_condvar_broadcast(&sock->recv_buffer_cv);
    595                         fibril_mutex_unlock(&sock->recv_buffer_lock);
    596611                        break;
    597612                }
     
    600615
    601616                sock->recv_buffer_used = rcvd;
    602                 fibril_mutex_unlock(&sock->recv_buffer_lock);
    603617                fibril_condvar_broadcast(&sock->recv_buffer_cv);
    604618        }
    605619
     620        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_recv_fibril() exited loop");
     621        fibril_mutex_unlock(&sock->recv_buffer_lock);
    606622        udp_uc_destroy(sock->assoc);
     623
     624        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_recv_fibril() terminated");
    607625
    608626        return 0;
  • uspace/srv/net/udp/ucall.c

    rd1538a1 ra1e2df13  
    105105        log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: udp_uc_receive()", assoc->name);
    106106        rc = udp_assoc_recv(assoc, &msg, fsock);
     107        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_recv -> %d", rc);
    107108        switch (rc) {
     109        case EOK:
     110                break;
     111        case ECONNABORTED:
     112                return UDP_ERESET;
     113        default:
     114                assert(false);
    108115        }
    109116
     
    125132{
    126133        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_uc_destroy()");
     134        udp_assoc_reset(assoc);
    127135        udp_assoc_remove(assoc);
    128136        udp_assoc_delete(assoc);
     137}
     138
     139void udp_uc_reset(udp_assoc_t *assoc)
     140{
     141        udp_assoc_reset(assoc);
    129142}
    130143
  • uspace/srv/net/udp/ucall.h

    rd1538a1 ra1e2df13  
    4848extern void udp_uc_status(udp_assoc_t *, udp_assoc_status_t *);
    4949extern void udp_uc_destroy(udp_assoc_t *);
     50extern void udp_uc_reset(udp_assoc_t *);
    5051
    5152#endif
  • uspace/srv/net/udp/udp_type.h

    rd1538a1 ra1e2df13  
    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.