Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 0e94b979 in mainline for uspace/srv/inet/addrobj.c


Ignore:
Timestamp:
2012-03-08T21:12:44Z (10 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master
Children:
291c792
Parents:
a88a6eac
Message:

Listing configured addresses.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/inet/addrobj.c

    ra88a6eac r0e94b979  
    3636
    3737#include <bitops.h>
     38#include <errno.h>
    3839#include <fibril_synch.h>
    3940#include <io/log.h>
     
    4748static FIBRIL_MUTEX_INITIALIZE(addr_list_lock);
    4849static LIST_INITIALIZE(addr_list);
     50static sysarg_t addr_id = 0;
    4951
    5052static uint32_t inet_netmask(int bits)
     
    6769
    6870        link_initialize(&addr->addr_list);
     71        fibril_mutex_lock(&addr_list_lock);
     72        addr->id = ++addr_id;
     73        fibril_mutex_unlock(&addr_list_lock);
    6974
    7075        return addr;
     
    7378void inet_addrobj_delete(inet_addrobj_t *addr)
    7479{
     80        if (addr->name != NULL)
     81                free(addr->name);
    7582        free(addr);
    7683}
     
    123130}
    124131
     132/** Find address object matching address @a addr.
     133 *
     134 * @param id    Address object ID
     135 * @return      Address object
     136 */
     137inet_addrobj_t *inet_addrobj_get_by_id(sysarg_t id)
     138{
     139        log_msg(LVL_DEBUG, "inet_addrobj_get_by_id(%zu)", (size_t)id);
     140
     141        fibril_mutex_lock(&addr_list_lock);
     142
     143        list_foreach(addr_list, link) {
     144                inet_addrobj_t *naddr = list_get_instance(link,
     145                    inet_addrobj_t, addr_list);
     146
     147                if (naddr->id == id) {
     148                        fibril_mutex_unlock(&addr_list_lock);
     149                        return naddr;
     150                }
     151        }
     152
     153        fibril_mutex_unlock(&addr_list_lock);
     154
     155        return NULL;
     156}
     157
    125158/** Send datagram to directly reachable destination */
    126159int inet_addrobj_send_dgram(inet_addrobj_t *addr, inet_dgram_t *dgram,
     
    137170}
    138171
     172/** Get IDs of all address objects. */
     173int inet_addrobj_get_id_list(sysarg_t **rid_list, size_t *rcount)
     174{
     175        sysarg_t *id_list;
     176        size_t count, i;
     177
     178        fibril_mutex_lock(&addr_list_lock);
     179        count = list_count(&addr_list);
     180
     181        id_list = calloc(count, sizeof(sysarg_t));
     182        if (id_list == NULL) {
     183                fibril_mutex_unlock(&addr_list_lock);
     184                return ENOMEM;
     185        }
     186
     187        i = 0;
     188        list_foreach(addr_list, link) {
     189                inet_addrobj_t *addr = list_get_instance(link,
     190                    inet_addrobj_t, addr_list);
     191
     192                id_list[i++] = addr->id;
     193        }
     194
     195        fibril_mutex_unlock(&addr_list_lock);
     196
     197        *rid_list = id_list;
     198        *rcount = count;
     199
     200        return EOK;
     201}
     202
    139203/** @}
    140204 */
Note: See TracChangeset for help on using the changeset viewer.