Changeset 7af0cc5 in mainline for uspace/srv/net/inetsrv/inet_link.c


Ignore:
Timestamp:
2013-09-20T16:46:56Z (11 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
bd88bee
Parents:
947e2ef
Message:

Move IP link discovery to a separate network configuration server.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/inetsrv/inet_link.c

    r947e2ef r7af0cc5  
    5555static uint16_t ip_ident = 0;
    5656
    57 static int inet_link_open(service_id_t);
    5857static int inet_iplink_recv(iplink_t *, iplink_recv_sdu_t *, uint16_t);
    5958
     
    6261};
    6362
    64 static LIST_INITIALIZE(inet_link_list);
    65 static FIBRIL_MUTEX_INITIALIZE(inet_discovery_lock);
     63static LIST_INITIALIZE(inet_links);
     64static FIBRIL_MUTEX_INITIALIZE(inet_links_lock);
    6665
    6766static addr128_t link_local_node_ip =
     
    113112}
    114113
    115 static int inet_link_check_new(void)
    116 {
    117         bool already_known;
    118         category_id_t iplink_cat;
    119         service_id_t *svcs;
    120         size_t count, i;
    121         int rc;
    122 
    123         fibril_mutex_lock(&inet_discovery_lock);
    124 
    125         rc = loc_category_get_id("iplink", &iplink_cat, IPC_FLAG_BLOCKING);
    126         if (rc != EOK) {
    127                 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed resolving category 'iplink'.");
    128                 fibril_mutex_unlock(&inet_discovery_lock);
    129                 return ENOENT;
    130         }
    131 
    132         rc = loc_category_get_svcs(iplink_cat, &svcs, &count);
    133         if (rc != EOK) {
    134                 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed getting list of IP links.");
    135                 fibril_mutex_unlock(&inet_discovery_lock);
    136                 return EIO;
    137         }
    138 
    139         for (i = 0; i < count; i++) {
    140                 already_known = false;
    141 
    142                 list_foreach(inet_link_list, link_list, inet_link_t, ilink) {
    143                         if (ilink->svc_id == svcs[i]) {
    144                                 already_known = true;
    145                                 break;
    146                         }
    147                 }
    148 
    149                 if (!already_known) {
    150                         log_msg(LOG_DEFAULT, LVL_DEBUG, "Found IP link '%lu'",
    151                             (unsigned long) svcs[i]);
    152                         rc = inet_link_open(svcs[i]);
    153                         if (rc != EOK)
    154                                 log_msg(LOG_DEFAULT, LVL_ERROR, "Could not open IP link.");
    155                 }
    156         }
    157 
    158         fibril_mutex_unlock(&inet_discovery_lock);
    159         return EOK;
    160 }
    161 
    162114static inet_link_t *inet_link_new(void)
    163115{
     
    183135}
    184136
    185 static int inet_link_open(service_id_t sid)
     137int inet_link_open(service_id_t sid)
    186138{
    187139        inet_link_t *ilink;
     
    231183
    232184        log_msg(LOG_DEFAULT, LVL_DEBUG, "Opened IP link '%s'", ilink->svc_name);
    233         list_append(&ilink->link_list, &inet_link_list);
     185        list_append(&ilink->link_list, &inet_links);
    234186
    235187        inet_addrobj_t *addr = NULL;
     
    309261}
    310262
    311 static void inet_link_cat_change_cb(void)
    312 {
    313         (void) inet_link_check_new();
    314 }
    315 
    316 int inet_link_discovery_start(void)
    317 {
    318         int rc;
    319 
    320         rc = loc_register_cat_change_cb(inet_link_cat_change_cb);
    321         if (rc != EOK) {
    322                 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering callback for IP link "
    323                     "discovery (%d).", rc);
    324                 return rc;
    325         }
    326 
    327         return inet_link_check_new();
    328 }
    329 
    330263/** Send IPv4 datagram over Internet link
    331264 *
     
    480413inet_link_t *inet_link_get_by_id(sysarg_t link_id)
    481414{
    482         fibril_mutex_lock(&inet_discovery_lock);
    483 
    484         list_foreach(inet_link_list, link_list, inet_link_t, ilink) {
     415        fibril_mutex_lock(&inet_links_lock);
     416
     417        list_foreach(inet_links, link_list, inet_link_t, ilink) {
    485418                if (ilink->svc_id == link_id) {
    486                         fibril_mutex_unlock(&inet_discovery_lock);
     419                        fibril_mutex_unlock(&inet_links_lock);
    487420                        return ilink;
    488421                }
    489422        }
    490423
    491         fibril_mutex_unlock(&inet_discovery_lock);
     424        fibril_mutex_unlock(&inet_links_lock);
    492425        return NULL;
    493426}
     
    499432        size_t count, i;
    500433
    501         fibril_mutex_lock(&inet_discovery_lock);
    502         count = list_count(&inet_link_list);
     434        fibril_mutex_lock(&inet_links_lock);
     435        count = list_count(&inet_links);
    503436
    504437        id_list = calloc(count, sizeof(sysarg_t));
    505438        if (id_list == NULL) {
    506                 fibril_mutex_unlock(&inet_discovery_lock);
     439                fibril_mutex_unlock(&inet_links_lock);
    507440                return ENOMEM;
    508441        }
    509442
    510443        i = 0;
    511         list_foreach(inet_link_list, link_list, inet_link_t, ilink) {
     444        list_foreach(inet_links, link_list, inet_link_t, ilink) {
    512445                id_list[i++] = ilink->svc_id;
    513446                log_msg(LOG_DEFAULT, LVL_NOTE, "add link to list");
    514447        }
    515448
    516         fibril_mutex_unlock(&inet_discovery_lock);
     449        fibril_mutex_unlock(&inet_links_lock);
    517450
    518451        log_msg(LOG_DEFAULT, LVL_NOTE, "return %zu links", count);
Note: See TracChangeset for help on using the changeset viewer.