Ignore:
File:
1 edited

Legend:

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

    r695b6ff r451481c8  
    8282        if (lsock != NULL)
    8383                assoc->ident.local = *lsock;
    84        
    8584        if (fsock != NULL)
    8685                assoc->ident.foreign = *fsock;
     
    186185}
    187186
    188 /** Set IP link in association.
    189  *
    190  * @param assoc         Association
    191  * @param iplink        IP link
    192  */
    193 void udp_assoc_set_iplink(udp_assoc_t *assoc, service_id_t iplink)
    194 {
    195         log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_set_iplink(%p, %zu)",
    196             assoc, iplink);
    197         fibril_mutex_lock(&assoc->lock);
    198         assoc->ident.iplink = iplink;
    199         fibril_mutex_unlock(&assoc->lock);
    200 }
    201 
    202187/** Set foreign socket in association.
    203188 *
     
    266251                sp.foreign = *fsock;
    267252
    268         if ((inet_addr_is_any(&sp.foreign.addr)) ||
    269             (sp.foreign.port == UDP_PORT_ANY))
     253        if (sp.foreign.addr.ipv4 == 0 || sp.foreign.port == 0)
    270254                return EINVAL;
    271255
     
    295279
    296280        fibril_mutex_lock(&assoc->lock);
    297         while (list_empty(&assoc->rcv_queue) && !assoc->reset) {
     281        while (list_empty(&assoc->rcv_queue)) {
    298282                log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_recv() - waiting");
    299283                fibril_condvar_wait(&assoc->rcv_queue_cv, &assoc->lock);
    300         }
    301 
    302         if (assoc->reset) {
    303                 log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_recv() - association was reset");
    304                 fibril_mutex_unlock(&assoc->lock);
    305                 return ECONNABORTED;
    306284        }
    307285
     
    345323}
    346324
    347 /** Reset association.
    348  *
    349  * This causes any pendingreceive operations to return immediately with
    350  * UDP_ERESET.
    351  */
    352 void udp_assoc_reset(udp_assoc_t *assoc)
    353 {
    354         fibril_mutex_lock(&assoc->lock);
    355         assoc->reset = true;
    356         fibril_condvar_broadcast(&assoc->rcv_queue_cv);
    357         fibril_mutex_unlock(&assoc->lock);
    358 }
    359 
    360325static int udp_assoc_queue_msg(udp_assoc_t *assoc, udp_sockpair_t *sp,
    361326    udp_msg_t *msg)
     
    386351static bool udp_socket_match(udp_sock_t *sock, udp_sock_t *patt)
    387352{
    388         log_msg(LOG_DEFAULT, LVL_DEBUG,
    389             "udp_socket_match(sock=(%u), pat=(%u))", sock->port, patt->port);
    390        
    391         if ((!inet_addr_is_any(&patt->addr)) &&
    392             (!inet_addr_compare(&patt->addr, &sock->addr)))
     353        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_socket_match(sock=(%x,%u), pat=(%x,%u))",
     354            sock->addr.ipv4, sock->port, patt->addr.ipv4, patt->port);
     355
     356        if (patt->addr.ipv4 != UDP_IPV4_ANY &&
     357            patt->addr.ipv4 != sock->addr.ipv4)
    393358                return false;
    394        
    395         if ((patt->port != UDP_PORT_ANY) &&
    396             (patt->port != sock->port))
     359
     360        if (patt->port != UDP_PORT_ANY &&
     361            patt->port != sock->port)
    397362                return false;
    398        
     363
    399364        log_msg(LOG_DEFAULT, LVL_DEBUG, " -> match");
    400        
     365
    401366        return true;
    402367}
     
    430395{
    431396        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_find_ref(%p)", sp);
    432        
     397
    433398        fibril_mutex_lock(&assoc_list_lock);
    434        
    435         list_foreach(assoc_list, link, udp_assoc_t, assoc) {
     399
     400        list_foreach(assoc_list, link) {
     401                udp_assoc_t *assoc = list_get_instance(link, udp_assoc_t, link);
    436402                udp_sockpair_t *asp = &assoc->ident;
    437                
     403                log_msg(LOG_DEFAULT, LVL_DEBUG, "compare with assoc (f:(%x,%u), l:(%x,%u))",
     404                    asp->foreign.addr.ipv4, asp->foreign.port,
     405                    asp->local.addr.ipv4, asp->local.port);
     406
    438407                /* Skip unbound associations */
    439408                if (asp->local.port == UDP_PORT_ANY)
    440409                        continue;
    441                
     410
    442411                if (udp_sockpair_match(sp, asp)) {
    443412                        log_msg(LOG_DEFAULT, LVL_DEBUG, "Returning assoc %p", assoc);
     
    447416                }
    448417        }
    449        
     418
    450419        fibril_mutex_unlock(&assoc_list_lock);
    451420        return NULL;
Note: See TracChangeset for help on using the changeset viewer.